On Wed, 31 May 2017 18:26:01 +0200 wm4 <nfx...@googlemail.com> wrote:
> Fixes detection of some TV sample as 24.5 FPS. With the patch applied, > it's detected as 25 FPS. > > This is enabled for mpegts only. > --- > libavformat/internal.h | 5 +++++ > libavformat/mpegts.c | 2 ++ > libavformat/utils.c | 10 ++++++++++ > 3 files changed, 17 insertions(+) > > diff --git a/libavformat/internal.h b/libavformat/internal.h > index c856945ce9..d136c79bdd 100644 > --- a/libavformat/internal.h > +++ b/libavformat/internal.h > @@ -145,6 +145,11 @@ struct AVFormatInternal { > * ID3v2 tag useful for MP3 demuxing > */ > AVDictionary *id3v2_meta; > + > + /* > + * Prefer the codec framerate for avg_frame_rate computation. > + */ > + int prefer_codec_framerate; > }; > > struct AVStreamInternal { > diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c > index 3eff1522bd..4d2f5c6802 100644 > --- a/libavformat/mpegts.c > +++ b/libavformat/mpegts.c > @@ -2616,6 +2616,8 @@ static int mpegts_read_header(AVFormatContext *s) > int len; > int64_t pos, probesize = s->probesize; > > + s->internal->prefer_codec_framerate = 1; > + > if (ffio_ensure_seekback(pb, probesize) < 0) > av_log(s, AV_LOG_WARNING, "Failed to allocate buffers for > seekback\n"); > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index fbd8b58ac2..b50ca2f7ac 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -3903,6 +3903,7 @@ FF_ENABLE_DEPRECATION_WARNINGS > st->info->codec_info_duration) { > int best_fps = 0; > double best_error = 0.01; > + AVRational codec_frame_rate = avctx->framerate; > > if (st->info->codec_info_duration >= INT64_MAX / > st->time_base.num / 2|| > st->info->codec_info_duration_fields >= INT64_MAX / > st->time_base.den || > @@ -3923,6 +3924,15 @@ FF_ENABLE_DEPRECATION_WARNINGS > best_error = error; > best_fps = std_fps.num; > } > + > + if (ic->internal->prefer_codec_framerate && > codec_frame_rate.num > 0 && codec_frame_rate.den > 0) { > + error = fabs(av_q2d(codec_frame_rate) / > + av_q2d(std_fps) - 1); > + if (error < best_error) { > + best_error = error; > + best_fps = std_fps.num; > + } > + } > } > if (best_fps) > av_reduce(&st->avg_frame_rate.num, > &st->avg_frame_rate.den, Pushed. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel