[PATCH] Fix timebase for filtered frames.

Stefano Sabatini stefano.sabatini-lala
Sat Oct 30 21:46:42 CEST 2010


The timebase for all the buffered frames are scaled against
AV_TIME_BASE_Q, and need to be scaled back to AV_TIME_BASE_Q when they
are extracted from the filterchain.

Fix timestamp computation when the timebase changes during filtering.
---
 ffmpeg.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 83f4bb7..963028d 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -348,8 +348,7 @@ static int configure_filters(AVInputStream *ist, AVOutputStream *ost)
         return ret;
 
     snprintf(args, 255, "%d:%d:%d:%d:%d", ist->st->codec->width,
-             ist->st->codec->height, ist->st->codec->pix_fmt,
-             ist->st->time_base.num, ist->st->time_base.den);
+             ist->st->codec->height, ist->st->codec->pix_fmt, 1, AV_TIME_BASE);
     if ((ret = avfilter_init_filter(ist->input_video_filter, args, NULL)) < 0)
         return ret;
     if ((ret = avfilter_init_filter(ist->output_video_filter, NULL, &ffsink_ctx)) < 0)
@@ -1614,7 +1613,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
             if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && ist->output_video_filter)
                 get_filtered_video_frame(ist->output_video_filter, &picture, &ist->picref, &ist_pts_tb);
             if (ist->picref)
-                ist->pts = ist->picref->pts;
+                ist->pts = av_rescale_q(ist->picref->pts, ist_pts_tb, AV_TIME_BASE_Q);
 #endif
             for(i=0;i<nb_ostreams;i++) {
                 int frame_size;
-- 
1.7.1


--Dxnq1zWXvFF0Q93v--



More information about the ffmpeg-devel mailing list