mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
lavf: let av_find_best_stream use bitrate info if available
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 based on a number of conditions, the first condition has the highest priority, the last condition has the lowest: 1) Select the stream with the highest FFMIN(5, codec_info_nb_frames) value 2) Select the stream with the highest bitrate 3) Select the stream with the highest codec_info_nb_frames 4) Select the first stream Signed-off-by: Marton Balint <cus@passwd.hu> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
05001dd7ca
commit
4bee03034b
@ -2949,7 +2949,7 @@ int av_find_best_stream(AVFormatContext *ic,
|
||||
int flags)
|
||||
{
|
||||
int i, nb_streams = ic->nb_streams;
|
||||
int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1;
|
||||
int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1, best_bitrate = -1, best_multiframe = -1, count, bitrate, multiframe;
|
||||
unsigned *program = NULL;
|
||||
AVCodec *decoder = NULL, *best_decoder = NULL;
|
||||
|
||||
@ -2978,9 +2978,16 @@ int av_find_best_stream(AVFormatContext *ic,
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (best_count >= st->codec_info_nb_frames)
|
||||
count = st->codec_info_nb_frames;
|
||||
bitrate = avctx->bit_rate;
|
||||
multiframe = FFMIN(5, count);
|
||||
if ((best_multiframe > multiframe) ||
|
||||
(best_multiframe == multiframe && best_bitrate > bitrate) ||
|
||||
(best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
|
||||
continue;
|
||||
best_count = st->codec_info_nb_frames;
|
||||
best_count = count;
|
||||
best_bitrate = bitrate;
|
||||
best_multiframe = multiframe;
|
||||
ret = real_stream_index;
|
||||
best_decoder = decoder;
|
||||
if (program && i == nb_streams - 1 && ret < 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user