正在显示
1 个修改的文件
包含
29 行增加
和
15 行删除
@@ -117,7 +117,7 @@ struct TSPacket | @@ -117,7 +117,7 @@ struct TSPacket | ||
117 | 117 | ||
118 | return ret; | 118 | return ret; |
119 | } | 119 | } |
120 | - }header; | 120 | + } *header; |
121 | 121 | ||
122 | // variant ts packet adation field. | 122 | // variant ts packet adation field. |
123 | struct AdaptionField | 123 | struct AdaptionField |
@@ -334,7 +334,7 @@ struct TSPacket | @@ -334,7 +334,7 @@ struct TSPacket | ||
334 | 334 | ||
335 | return ret; | 335 | return ret; |
336 | } | 336 | } |
337 | - }adaption_field; | 337 | + } *adaption_field; |
338 | 338 | ||
339 | // variant ts packet payload. | 339 | // variant ts packet payload. |
340 | // PES packet or PSI table. | 340 | // PES packet or PSI table. |
@@ -384,7 +384,7 @@ struct TSPacket | @@ -384,7 +384,7 @@ struct TSPacket | ||
384 | { | 384 | { |
385 | int ret = 0; | 385 | int ret = 0; |
386 | 386 | ||
387 | - size = ppkt->payload.size - ppkt->payload.pointer_field_size; | 387 | + size = ppkt->payload->size - ppkt->payload->pointer_field_size; |
388 | 388 | ||
389 | // not parsed bytes. | 389 | // not parsed bytes. |
390 | if (size > 0) { | 390 | if (size > 0) { |
@@ -526,12 +526,12 @@ struct TSPacket | @@ -526,12 +526,12 @@ struct TSPacket | ||
526 | { | 526 | { |
527 | int ret = 0; | 527 | int ret = 0; |
528 | 528 | ||
529 | - if (ppkt->header.payload_unit_start_indicator) { | 529 | + if (ppkt->header->payload_unit_start_indicator) { |
530 | pointer_field = *p++; | 530 | pointer_field = *p++; |
531 | pointer_field_size = 1; | 531 | pointer_field_size = 1; |
532 | } | 532 | } |
533 | 533 | ||
534 | - if (ppkt->header.pid == PID_PAT) { | 534 | + if (ppkt->header->pid == PID_PAT) { |
535 | type = TypePAT; | 535 | type = TypePAT; |
536 | pat = new PAT(); | 536 | pat = new PAT(); |
537 | return pat->demux(ppkt, start, last, p); | 537 | return pat->demux(ppkt, start, last, p); |
@@ -546,29 +546,43 @@ struct TSPacket | @@ -546,29 +546,43 @@ struct TSPacket | ||
546 | 546 | ||
547 | return ret; | 547 | return ret; |
548 | } | 548 | } |
549 | - }payload; | 549 | + } *payload; |
550 | + | ||
551 | + TSPacket() | ||
552 | + { | ||
553 | + header = new Header(); | ||
554 | + adaption_field = new AdaptionField(); | ||
555 | + payload = new Payload(); | ||
556 | + } | ||
557 | + | ||
558 | + virtual ~TSPacket() | ||
559 | + { | ||
560 | + srs_freep(header); | ||
561 | + srs_freep(adaption_field); | ||
562 | + srs_freep(payload); | ||
563 | + } | ||
550 | 564 | ||
551 | int demux(u_int8_t* start, u_int8_t* last, u_int8_t*& p) | 565 | int demux(u_int8_t* start, u_int8_t* last, u_int8_t*& p) |
552 | { | 566 | { |
553 | int ret = 0; | 567 | int ret = 0; |
554 | 568 | ||
555 | - if ((ret = header.demux(this, start, last, p)) != 0) { | 569 | + if ((ret = header->demux(this, start, last, p)) != 0) { |
556 | return ret; | 570 | return ret; |
557 | } | 571 | } |
558 | 572 | ||
559 | - if (header.adaption_field_control == AFC_ADAPTION_ONLY || header.adaption_field_control == AFC_BOTH) { | ||
560 | - if ((ret = adaption_field.demux(this, start, last, p)) != 0) { | 573 | + if (header->adaption_field_control == AFC_ADAPTION_ONLY || header->adaption_field_control == AFC_BOTH) { |
574 | + if ((ret = adaption_field->demux(this, start, last, p)) != 0) { | ||
561 | trace("ts+header af(adaption field) decode error. ret=%d", ret); | 575 | trace("ts+header af(adaption field) decode error. ret=%d", ret); |
562 | return ret; | 576 | return ret; |
563 | } | 577 | } |
564 | - trace("ts+header af(adaption field decoded."); | 578 | + trace("ts+header af(adaption field) decoded."); |
565 | } | 579 | } |
566 | 580 | ||
567 | // calc the user defined data size for payload. | 581 | // calc the user defined data size for payload. |
568 | - payload.size = TS_PACKET_SIZE - header.get_size() - adaption_field.get_size(); | 582 | + payload->size = TS_PACKET_SIZE - header->get_size() - adaption_field->get_size(); |
569 | 583 | ||
570 | - if (header.adaption_field_control == AFC_PAYLOAD_ONLY || header.adaption_field_control == AFC_BOTH) { | ||
571 | - if ((ret = payload.demux(this, start, last, p)) != 0) { | 584 | + if (header->adaption_field_control == AFC_PAYLOAD_ONLY || header->adaption_field_control == AFC_BOTH) { |
585 | + if ((ret = payload->demux(this, start, last, p)) != 0) { | ||
572 | trace("ts+header payload decode error. ret=%d", ret); | 586 | trace("ts+header payload decode error. ret=%d", ret); |
573 | return ret; | 587 | return ret; |
574 | } | 588 | } |
@@ -576,8 +590,8 @@ struct TSPacket | @@ -576,8 +590,8 @@ struct TSPacket | ||
576 | } | 590 | } |
577 | 591 | ||
578 | trace("ts+header parsed finished. parsed: %d left: %d header: %d payload: %d(%d+%d)", | 592 | trace("ts+header parsed finished. parsed: %d left: %d header: %d payload: %d(%d+%d)", |
579 | - (int)(p - start), (int)(last - p), header.get_size(), payload.size, payload.pointer_field_size, | ||
580 | - payload.size - payload.pointer_field_size); | 593 | + (int)(p - start), (int)(last - p), header->get_size(), payload->size, payload->pointer_field_size, |
594 | + payload->size - payload->pointer_field_size); | ||
581 | 595 | ||
582 | return finish(); | 596 | return finish(); |
583 | } | 597 | } |
-
请 注册 或 登录 后发表评论