lavf: inject sample skip side data when requested by the demuxer
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 4 Jul 2012 20:00:50 +0000 (22:00 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 12 Jul 2012 18:32:03 +0000 (20:32 +0200)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/avformat.h
libavformat/utils.c

index a435d51..7dad8e2 100644 (file)
@@ -805,6 +805,11 @@ typedef struct AVStream {
      * should be discarded.
      */
     int skip_to_keyframe;
+
+    /**
+     * Number of samples to skip at the start of the frame decoded from the next packet.
+     */
+    int skip_samples;
 } AVStream;
 
 #define AV_PROGRAM_RUNNING 1
index b1b48fe..39527a6 100644 (file)
@@ -1450,6 +1450,14 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt)
     }
 
 return_packet:
+
+    if(s->streams[pkt->stream_index]->skip_samples) {
+        uint8_t *p = av_packet_new_side_data(pkt, AV_PKT_DATA_SKIP_SAMPLES, 10);
+        AV_WL32(p, s->streams[pkt->stream_index]->skip_samples);
+        av_log(s, AV_LOG_DEBUG, "demuxer injecting skip %d\n", s->streams[pkt->stream_index]->skip_samples);
+        s->streams[pkt->stream_index]->skip_samples = 0;
+    }
+
     if (is_relative(pkt->dts))
         pkt->dts -= RELATIVE_TS_BASE;
     if (is_relative(pkt->pts))