[FFmpeg-devel] [PATCH] lavf: inspect more frames for fps when container time base is coarse
Anssi Hannula
anssi.hannula at iki.fi
Sat Apr 2 21:14:22 CEST 2011
On 27.03.2011 18:04, Reimar Döffinger wrote:
> Ping?
Ping.
> On Mon, Feb 28, 2011 at 02:20:56AM +0200, Anssi Hannula wrote:
>> As per issue2629, most 23.976fps matroska H.264 files are incorrectly
>> detected as 24fps, as the matroska timestamps usually have only
>> millisecond precision.
>>
>> Fix that by doubling the amount of timestamps inspected for frame rate
>> for streams that have coarse time base. This also fixes 29.970 detection
>> in matroska.
>>
>> ---
>>
>> A preferable solution to issue2629 would be to somehow use header values
>> either from the H.264 stream or from the Matroska stream.
>>
>> However, AFAICS the framerate inspecting has to be fixed as well anyway
>> (with e.g. this patch), for cases when we have no reliable header values.
>>
>> Comments welcome.
>> ---
>> libavformat/utils.c | 10 +++++++++-
>> 1 files changed, 9 insertions(+), 1 deletions(-)
>>
>> diff --git a/libavformat/utils.c b/libavformat/utils.c
>> index 1f0164f..0e73e52 100644
>> --- a/libavformat/utils.c
>> +++ b/libavformat/utils.c
>> @@ -2273,12 +2273,20 @@ int av_find_stream_info(AVFormatContext *ic)
>>
>> /* check if one codec still needs to be handled */
>> for(i=0;i<ic->nb_streams;i++) {
>> + int fps_analyze_framecount = 20;
>> +
>> st = ic->streams[i];
>> if (!has_codec_parameters(st->codec))
>> break;
>> + /* if the timebase is coarse (like the usual millisecond precision
>> + of mkv), we need to analyze more frames to reliably arrive at
>> + the correct fps */
>> + if (av_q2d(st->time_base) > 0.0005)
>> + fps_analyze_framecount *= 2;
>> /* variable fps and no guess at the real fps */
>> if( tb_unreliable(st->codec) && !(st->r_frame_rate.num && st->avg_frame_rate.num)
>> - && st->info->duration_count<20 && st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
>> + && st->info->duration_count < fps_analyze_framecount
>> + && st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
>> break;
>> if(st->parser && st->parser->parser->split && !st->codec->extradata)
>> break;
>> --
>> 1.7.3
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at mplayerhq.hu
>> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
--
Anssi Hannula
More information about the ffmpeg-devel
mailing list