diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-03-27 22:08:53 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-03-29 17:40:28 +0100 |
commit | ef7b6b489ab38a8f0abe6b8f55c0e130cbd125c9 (patch) | |
tree | b3a0892c9a4d1bf7406a22379144861b8fc5d34e /libavformat/utils.c | |
parent | c81d2fa96ddc9f6dab38d61a8803caca7e63bea0 (diff) | |
download | ffmpeg-ef7b6b489ab38a8f0abe6b8f55c0e130cbd125c9.tar.gz |
ffmpeg/avformat: factor av_guess_frame_rate() out
This will be used in ffplay
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index df688f1817..d0393f9db2 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -4278,6 +4278,22 @@ AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *strea return frame_sample_aspect_ratio; } +AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame) +{ + AVRational fr = st->r_frame_rate; + + if (st->codec->ticks_per_frame > 1) { + AVRational codec_fr = av_inv_q(st->codec->time_base); + AVRational avg_fr = st->avg_frame_rate; + codec_fr.den *= st->codec->ticks_per_frame; + if ( codec_fr.num > 0 && codec_fr.den > 0 && av_q2d(codec_fr) < av_q2d(fr)*0.7 + && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1) + fr = codec_fr; + } + + return fr; +} + int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec) { |