From 318e39576444da0efadabc2db8d3898453d2f5bc Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 20 May 2012 14:12:48 +0200 Subject: [PATCH] ffmpeg: drop get_sync_ipts() and drop related special case for video Idea found in a commit from Anton Khirnov Signed-off-by: Michael Niedermayer --- ffmpeg.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index 1c29f88c7b..7690e43cf7 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1680,13 +1680,6 @@ static void choose_sample_fmt(AVStream *st, AVCodec *codec) } } -static double -get_sync_ipts(const OutputStream *ost, int64_t pts) -{ - OutputFile *of = output_files[ost->file_index]; - return (double)(pts - of->start_time) / AV_TIME_BASE; -} - static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost) { AVBitStreamFilterContext *bsfc = ost->bitstream_filters; @@ -1934,7 +1927,7 @@ static void do_video_out(AVFormatContext *s, if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num) duration = 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)); - sync_ipts = get_sync_ipts(ost, in_picture->pts) / av_q2d(enc->time_base); + sync_ipts = in_picture->pts; delta = sync_ipts - ost->sync_opts + duration; /* by default, we output a single frame */ @@ -2162,22 +2155,22 @@ static int poll_filters(void) break; } frame_pts = AV_NOPTS_VALUE; - if (ost->enc->type == AVMEDIA_TYPE_VIDEO) - filtered_frame->pts = frame_pts = av_rescale_q(picref->pts, ist_pts_tb, AV_TIME_BASE_Q); - else if (picref->pts != AV_NOPTS_VALUE) + if (picref->pts != AV_NOPTS_VALUE) { filtered_frame->pts = frame_pts = av_rescale_q(picref->pts, ost->filter->filter->inputs[0]->time_base, ost->st->codec->time_base) - av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->codec->time_base); + + if (of->start_time && filtered_frame->pts < 0) { + avfilter_unref_buffer(picref); + continue; + } + } //if (ost->source_index >= 0) // *filtered_frame= *input_streams[ost->source_index]->decoded_frame; //for me_threshold - if (of->start_time && filtered_frame->pts < of->start_time) { - avfilter_unref_buffer(picref); - continue; - } switch (ost->filter->filter->inputs[0]->type) { case AVMEDIA_TYPE_VIDEO: