[FFmpeg-devel] [PATCH] lavf: let av_find_best_stream use bitrate info if available
Marton Balint
cus at passwd.hu
Sat Nov 17 00:39:26 CET 2012
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.
Signed-off-by: Marton Balint <cus at passwd.hu>
---
libavformat/utils.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 4072ac8..93cbac5 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -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, count, bitrate;
unsigned *program = NULL;
AVCodec *decoder = NULL, *best_decoder = NULL;
@@ -2978,9 +2978,12 @@ int av_find_best_stream(AVFormatContext *ic,
continue;
}
}
- if (best_count >= st->codec_info_nb_frames)
+ count = st->codec_info_nb_frames;
+ bitrate = count ? avctx->bit_rate : 0;
+ if (best_bitrate > bitrate || (best_bitrate == bitrate && best_count >= count))
continue;
- best_count = st->codec_info_nb_frames;
+ best_count = count;
+ best_bitrate = bitrate;
ret = real_stream_index;
best_decoder = decoder;
if (program && i == nb_streams - 1 && ret < 0) {
--
1.7.10.4
More information about the ffmpeg-devel
mailing list