[SCM] libav/experimental: In mpegts muxer, search for h264 aud nal, it might not be the first nal. Improve ther error message when bitstream is malformated and tell user to use the bitstream filter.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:03:42 UTC 2013


The following commit has been merged in the experimental branch:
commit e17d77bb674879505f9f438e610441e1834fb908
Author: Baptiste Coudurier <baptiste.coudurier at gmail.com>
Date:   Mon Mar 8 23:59:05 2010 +0000

    In mpegts muxer, search for h264 aud nal, it might not be the first nal.
    Improve ther error message when bitstream is malformated and tell user to use
    the bitstream filter.
    
    Originally committed as revision 22354 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 6389ee5..64e6fdd 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -783,11 +783,22 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt)
     ts_st->first_pts_check = 0;
 
     if (st->codec->codec_id == CODEC_ID_H264) {
+        const uint8_t *p = buf, *buf_end = p+size;
+        uint32_t state = -1;
+
         if (pkt->size < 5 || AV_RB32(pkt->data) != 0x0000001) {
-            av_log(s, AV_LOG_ERROR, "h264 bitstream malformated\n");
+            av_log(s, AV_LOG_ERROR, "h264 bitstream malformated, "
+                   "no startcode found, use -vbsf h264_mp4toannexb\n");
             return -1;
         }
-        if (pkt->data[4] != 0x09) { // AUD NAL
+
+        do {
+            p = ff_find_start_code(p, buf_end, &state);
+            //av_log(s, AV_LOG_INFO, "nal %d\n", state & 0x1f);
+        } while (p < buf_end && (state & 0x1f) != 9 &&
+                 (state & 0x1f) != 5 && (state & 0x1f) != 1);
+
+        if ((state & 0x1f) != 9) { // AUD NAL
             data = av_malloc(pkt->size+6);
             if (!data)
                 return -1;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list