[SCM] libav/experimental: add a delay variable to hold the timestamp buffer size set cur_dts correctly for delay>1

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:57:55 UTC 2013


The following commit has been merged in the experimental branch:
commit befe3b05d3d326073ea0a61da795e0c817904525
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Fri Mar 16 22:59:45 2007 +0000

    add a delay variable to hold the timestamp buffer size
    set cur_dts correctly for delay>1
    
    Originally committed as revision 8424 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/utils.c b/libavformat/utils.c
index dd3ca3e..f8548cd 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -578,7 +578,7 @@ static int64_t lsb2full(int64_t lsb, int64_t last_ts, int lsb_bits){
 static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
                                AVCodecParserContext *pc, AVPacket *pkt)
 {
-    int num, den, presentation_delayed;
+    int num, den, presentation_delayed, delay;
     /* handle wrapping */
     if(st->cur_dts != AV_NOPTS_VALUE){
         if(pkt->pts != AV_NOPTS_VALUE)
@@ -598,11 +598,12 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
         pkt->flags |= PKT_FLAG_KEY;
 
     /* do we have a video B frame ? */
+    delay= st->codec->has_b_frames;
     presentation_delayed = 0;
     if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
         /* XXX: need has_b_frame, but cannot get it if the codec is
            not initialized */
-        if (st->codec->has_b_frames &&
+        if (delay &&
             pc && pc->pict_type != FF_B_TYPE)
             presentation_delayed = 1;
         /* this may be redundant, but it shouldnt hurt */
@@ -611,8 +612,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
     }
 
     if(st->cur_dts == AV_NOPTS_VALUE){
-        if(presentation_delayed) st->cur_dts = -pkt->duration;
-        else                     st->cur_dts = 0;
+        st->cur_dts = -delay * pkt->duration;
     }
 
 //    av_log(NULL, AV_LOG_DEBUG, "IN delayed:%d pts:%"PRId64", dts:%"PRId64" cur_dts:%"PRId64" st:%d pc:%p\n", presentation_delayed, pkt->pts, pkt->dts, st->cur_dts, pkt->stream_index, pc);

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list