[FFmpeg-cvslog] ffmpeg: Use filter graph output frame rate also for frame duration estimation
Michael Niedermayer
git at videolan.org
Fri Jan 16 20:41:52 CET 2015
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Jan 16 20:15:15 2015 +0100| [d3d9a00bcdfd5fc81d4640489555a3a41c82b303] | committer: Michael Niedermayer
ffmpeg: Use filter graph output frame rate also for frame duration estimation
Previously the duration was sometimes wrong, this addition
limits the value and improves which frames are choosen when
reducing the frame rate
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d3d9a00bcdfd5fc81d4640489555a3a41c82b303
---
ffmpeg.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/ffmpeg.c b/ffmpeg.c
index 909dd68..0a39274 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -895,6 +895,7 @@ static void do_video_out(AVFormatContext *s,
double duration = 0;
int frame_size = 0;
InputStream *ist = NULL;
+ AVFilterContext *filter = ost->filter->filter;
if (ost->source_index >= 0)
ist = input_streams[ost->source_index];
@@ -902,6 +903,13 @@ 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));
+ // We take the conservative approuch here and take the minimum even though
+ // this should be correct on its own but a value too small is harmless, one
+ // too big can lead to errors
+ if (filter->inputs[0]->frame_rate.num > 0 &&
+ filter->inputs[0]->frame_rate.den > 0)
+ duration = FFMIN(duration, 1/(av_q2d(filter->inputs[0]->frame_rate) * av_q2d(enc->time_base)));
+
if (!ost->filters_script &&
!ost->filters &&
next_picture &&
More information about the ffmpeg-cvslog
mailing list