Browse code

write a single pes for video frames, some proprietary player needs it

Originally committed as revision 18792 to svn://svn.ffmpeg.org/ffmpeg/trunk

Baptiste Coudurier authored on 2009/05/11 11:30:29
Showing 3 changed files
... ...
@@ -619,6 +619,8 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
619 619
             len = payload_size + header_len + 3;
620 620
             if (private_code != 0)
621 621
                 len++;
622
+            if (len > 0xffff)
623
+                len = 0;
622 624
             *q++ = len >> 8;
623 625
             *q++ = len;
624 626
             val = 0x80;
... ...
@@ -709,31 +711,7 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
709 709
     }
710 710
     ts_st->first_pts_check = 0;
711 711
 
712
-    if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) {
713
-        /* for subtitle, a single PES packet must be generated */
714
-        mpegts_write_pes(s, st, buf, size, pts, AV_NOPTS_VALUE);
715
-        return 0;
716
-    }
717
-
718
-    if (st->codec->codec_id == CODEC_ID_DIRAC) {
719
-        /* for Dirac, a single PES packet must be generated */
720
-        mpegts_write_pes(s, st, buf, size, pts, dts);
721
-        return 0;
722
-    }
723
-
724
-    if (st->codec->codec_id == CODEC_ID_MPEG2VIDEO ||
725
-        st->codec->codec_id == CODEC_ID_MPEG1VIDEO) {
726
-        const uint8_t *p = pkt->data;
727
-        const uint8_t *end = pkt->data+pkt->size;
728
-        uint32_t state = -1;
729
-        while (p < end) {
730
-            p = ff_find_start_code(p, end, &state);
731
-            if (state == PICTURE_START_CODE) {
732
-                access_unit_index = p - 4;
733
-                break;
734
-            }
735
-        }
736
-    } if (st->codec->codec_id == CODEC_ID_H264) {
712
+    if (st->codec->codec_id == CODEC_ID_H264) {
737 713
         if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) {
738 714
             av_log(s, AV_LOG_ERROR, "h264 bitstream malformated\n");
739 715
             return -1;
... ...
@@ -759,6 +737,14 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
759 759
         return -1;
760 760
     }
761 761
 
762
+    if (st->codec->codec_type == CODEC_TYPE_SUBTITLE ||
763
+        st->codec->codec_type == CODEC_TYPE_VIDEO) {
764
+        // for video and subtitle, write a single pes packet
765
+        mpegts_write_pes(s, st, buf, size, pts, dts);
766
+        return 0;
767
+    }
768
+
769
+    // audio
762 770
     while (size > 0) {
763 771
         len = DEFAULT_PES_PAYLOAD_SIZE - ts_st->payload_index;
764 772
         if (len > size)
... ...
@@ -15,8 +15,8 @@ bdb7484c68db722f66ba1630cf79844c *./tests/data/b-lavf.mpg
15 15
 0a7cc51de3da754ce36dffeeda290c45 *./tests/data/b-lavf.mxf_d10
16 16
 5330989 ./tests/data/b-lavf.mxf_d10
17 17
 ./tests/data/b-lavf.mxf_d10 CRC=0xd241c8b6
18
-368950c12c4ba186725b757ec5625085 *./tests/data/b-lavf.ts
19
-471316 ./tests/data/b-lavf.ts
18
+88ed42ab4e1974c902b22ca17dfb3474 *./tests/data/b-lavf.ts
19
+451764 ./tests/data/b-lavf.ts
20 20
 ./tests/data/b-lavf.ts CRC=0xcc4948e1
21 21
 1b28a16652bb8ac528b33f7478ca18b6 *./tests/data/b-lavf.swf
22 22
 335771 ./tests/data/b-lavf.swf
... ...
@@ -3605,57 +3605,57 @@ ret:-1 st:-1 ts:-0.645825 flags:1
3605 3605
 tests/data/b-lavf.ts
3606 3606
 ret: 0 st: 0 dts:0.660000 pts:0.700000 pos:564 size:24921 flags:1
3607 3607
 ret: 0 st:-1 ts:-1.000000 flags:0
3608
-ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3608
+ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29704 size:22036 flags:1
3609 3609
 ret: 0 st:-1 ts:1.894167 flags:1
3610
-ret: 0 st: 0 dts:1.881344 pts:-102481911520608.625000 pos:29328 size:3142 flags:1
3610
+ret: 0 st: 0 dts:1.881344 pts:-102481911520608.625000 pos:29704 size:852 flags:1
3611 3611
 ret: 0 st: 0 ts:0.788333 flags:0
3612
-ret: 0 st: 0 dts:0.803344 pts:-102481911520608.625000 pos:68996 size:1524 flags:1
3612
+ret: 0 st: 0 dts:0.803344 pts:-102481911520608.625000 pos:66176 size:16769 flags:0
3613 3613
 ret: 0 st: 0 ts:-0.317500 flags:1
3614
-ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3614
+ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:48880 size:22036 flags:1
3615 3615
 ret: 0 st: 1 ts:2.576667 flags:0
3616
-ret: 0 st: 0 dts:2.590844 pts:-102481911520608.625000 pos:29328 size:10829 flags:1
3616
+ret: 0 st: 0 dts:2.590844 pts:-102481911520608.625000 pos:29704 size:7612 flags:1
3617 3617
 ret: 0 st: 1 ts:1.470833 flags:1
3618
-ret: 0 st: 0 dts:1.468844 pts:-102481911520608.625000 pos:50948 size:14870 flags:0
3618
+ret: 0 st: 0 dts:1.468844 pts:-102481911520608.625000 pos:99264 size:13188 flags:1
3619 3619
 ret: 0 st:-1 ts:0.365002 flags:0
3620
-ret: 0 st: 0 dts:0.374344 pts:-102481911520608.625000 pos:68996 size:13236 flags:1
3620
+ret: 0 st: 0 dts:0.374344 pts:-102481911520608.625000 pos:66176 size:12788 flags:1
3621 3621
 ret: 0 st:-1 ts:-0.740831 flags:1
3622
-ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3622
+ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:29704 size:22036 flags:1
3623 3623
 ret: 0 st: 0 ts:2.153333 flags:0
3624
-ret: 0 st: 0 dts:2.167344 pts:-102481911520608.625000 pos:29328 size:8612 flags:1
3624
+ret: 0 st: 0 dts:2.167344 pts:-102481911520608.625000 pos:29704 size:5935 flags:1
3625 3625
 ret: 0 st: 0 ts:1.047500 flags:1
3626
-ret: 0 st: 0 dts:1.039844 pts:-102481911520608.625000 pos:83472 size:11965 flags:1
3626
+ret: 0 st: 0 dts:1.039844 pts:-102481911520608.625000 pos:82720 size:10704 flags:1
3627 3627
 ret: 0 st: 1 ts:-0.058333 flags:0
3628
-ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:50948 size:22036 flags:1
3628
+ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:48880 size:22036 flags:1
3629 3629
 ret: 0 st: 1 ts:2.835833 flags:1
3630
-ret: 0 st: 0 dts:2.832844 pts:-102481911520608.625000 pos:29328 size:4969 flags:1
3630
+ret: 0 st: 0 dts:2.832844 pts:-102481911520608.625000 pos:29704 size:1444 flags:1
3631 3631
 ret: 0 st:-1 ts:1.730004 flags:0
3632
-ret: 0 st: 0 dts:1.738344 pts:-102481911520608.625000 pos:101520 size:6080 flags:1
3632
+ret: 0 st: 0 dts:1.738344 pts:-102481911520608.625000 pos:99264 size:3940 flags:1
3633 3633
 ret: 0 st:-1 ts:0.624171 flags:1
3634
-ret: 0 st: 0 dts:0.616344 pts:-102481911520608.625000 pos:68996 size:7376 flags:1
3634
+ret: 0 st: 0 dts:0.616344 pts:-102481911520608.625000 pos:66176 size:6620 flags:1
3635 3635
 ret: 0 st: 0 ts:-0.481667 flags:0
3636
-ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3636
+ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29704 size:22036 flags:1
3637 3637
 ret: 0 st: 0 ts:2.412500 flags:1
3638
-ret: 0 st: 0 dts:2.403844 pts:-102481911520608.625000 pos:29328 size:2760 flags:1
3638
+ret: 0 st: 0 dts:2.403844 pts:-102481911520608.625000 pos:-1 size:13937 flags:0
3639 3639
 ret: 0 st: 1 ts:1.306667 flags:0
3640
-ret: 0 st: 0 dts:1.309344 pts:-102481911520608.625000 pos:83472 size:3175 flags:1
3640
+ret: 0 st: 0 dts:1.309344 pts:-102481911520608.625000 pos:99264 size:1456 flags:1
3641 3641
 ret: 0 st: 1 ts:0.200844 flags:1
3642
-ret: 0 st: 0 dts:0.187344 pts:-102481911520608.625000 pos:50948 size:19104 flags:1
3642
+ret: 0 st: 0 dts:0.187344 pts:-102481911520608.625000 pos:48880 size:18956 flags:1
3643 3643
 ret: 0 st:-1 ts:-0.904994 flags:0
3644
-ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3644
+ret: 0 st: 0 dts:0.044344 pts:-102481911520608.625000 pos:29704 size:22036 flags:1
3645 3645
 ret: 0 st:-1 ts:1.989173 flags:1
3646
-ret: 0 st: 0 dts:1.974844 pts:-102481911520608.625000 pos:68996 size:14472 flags:0
3646
+ret: 0 st: 0 dts:1.974844 pts:-102481911520608.625000 pos:29704 size:12103 flags:1
3647 3647
 ret: 0 st: 0 ts:0.883344 flags:0
3648
-ret: 0 st: 0 dts:0.896844 pts:-102481911520608.625000 pos:83472 size:14905 flags:1
3648
+ret: 0 st: 0 dts:0.896844 pts:-102481911520608.625000 pos:82720 size:13784 flags:1
3649 3649
 ret: 0 st: 0 ts:-0.222489 flags:1
3650
-ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:50948 size:22036 flags:1
3650
+ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:48880 size:22036 flags:1
3651 3651
 ret: 0 st: 1 ts:2.671678 flags:0
3652
-ret: 0 st: 0 dts:2.684344 pts:-102481911520608.625000 pos:29328 size:9171 flags:1
3652
+ret: 0 st: 0 dts:2.684344 pts:-102481911520608.625000 pos:29704 size:5796 flags:1
3653 3653
 ret: 0 st: 1 ts:1.565844 flags:1
3654
-ret: 0 st: 0 dts:1.562344 pts:-102481911520608.625000 pos:101520 size:11942 flags:1
3654
+ret: 0 st: 0 dts:1.562344 pts:-102481911520608.625000 pos:99264 size:10100 flags:1
3655 3655
 ret: 0 st:-1 ts:0.460008 flags:0
3656
-ret: 0 st: 0 dts:0.467844 pts:-102481911520608.625000 pos:68996 size:10314 flags:1
3656
+ret: 0 st: 0 dts:0.467844 pts:-102481911520608.625000 pos:66176 size:9708 flags:1
3657 3657
 ret: 0 st:-1 ts:-0.645825 flags:1
3658
-ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:29328 size:22036 flags:1
3658
+ret: 0 st: 0 dts:0.027844 pts:-102481911520608.625000 pos:29704 size:22036 flags:1
3659 3659
 ----------------
3660 3660
 tests/data/b-lavf.ul
3661 3661
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:0 size:1024 flags:1