[FFmpeg-devel] [PATCH] lavf: let av_find_best_stream use bitrate info if available

Marton Balint cus at passwd.hu
Sat Nov 17 23:23:38 CET 2012



On Sat, 17 Nov 2012, Michael Niedermayer wrote:

> On Sat, Nov 17, 2012 at 02:15:00PM +0100, Marton Balint wrote:
>>
>>
>> On Sat, 17 Nov 2012, Michael Niedermayer wrote:
>>
>>> On Sat, Nov 17, 2012 at 12:39:26AM +0100, Marton Balint wrote:
>>>> I guess the user expects to see the stream with the highest bitrate, not with
>>>> the most frames, this is especially useful for multi bitrate streams.
>>>>
>>>> This patch changes av_find_best_stream to select the stream with the highest
>>>> bitrate which has at least one frame.
>>>
>>> this will fail with streams that have no frame (but a incorrect high
>>> bitrate possibly)
>>
>> That should not be a problem, because of this:
>>
>> +        count = st->codec_info_nb_frames;
>> +        bitrate = count ? avctx->bit_rate : 0;
>>
>> We reset the bitrate to 0, if frame count is 0.
>>
>
>>> or just one frame like an jpeg/png
>>
>> You mean files with e.g. cover art and a the real video? If I change
>> the bitrate check to reset the bitrate if frame count is less than
>> 2, that fixes this as well, right?
>
> it does seem ok but should be tested if possible with the files that
> needed the original code

I've posted a new patch, and also made some test with it.

For most of the samples where this change made a difference, it worked, 
well, it chose the best quality stream, it even fixed some files (where 
the bitrate based decision chose the proper stream, and not the silent 
one), but I have also found a sample where the frame number heuristics did 
not work, because the bad stream contained not zero, but 2 frames...

samples/ffmpeg-bugs/roundup/issue1499/hpim0054.mpg

http://roundup.libav.org/issue1499

Which seems the be the file which inspired the whole frame count based 
decision. :/

Should I change the FFMIN(frame_count, 2) to FFMIN(frame_count, 3) in the 
highest priority condition? It would fix that particular case, and 
probably work most of the time for the other cases...

Regards,
Marton


More information about the ffmpeg-devel mailing list