Commit 47c699f7 authored by Marton Balint's avatar Marton Balint

avformat/utils: return impaired streams in av_find_best_stream if only those exist

Fixes ticket #6397.
Reviewed-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
parent faa5a218
...@@ -4097,7 +4097,9 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, ...@@ -4097,7 +4097,9 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type,
AVCodec **decoder_ret, int flags) AVCodec **decoder_ret, int flags)
{ {
int i, nb_streams = ic->nb_streams; int i, nb_streams = ic->nb_streams;
int ret = AVERROR_STREAM_NOT_FOUND, best_count = -1, best_bitrate = -1, best_multiframe = -1, count, bitrate, multiframe; int ret = AVERROR_STREAM_NOT_FOUND;
int best_count = -1, best_bitrate = -1, best_multiframe = -1, best_disposition = -1;
int count, bitrate, multiframe, disposition;
unsigned *program = NULL; unsigned *program = NULL;
const AVCodec *decoder = NULL, *best_decoder = NULL; const AVCodec *decoder = NULL, *best_decoder = NULL;
...@@ -4116,10 +4118,6 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, ...@@ -4116,10 +4118,6 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type,
continue; continue;
if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb) if (wanted_stream_nb >= 0 && real_stream_index != wanted_stream_nb)
continue; continue;
if (wanted_stream_nb != real_stream_index &&
st->disposition & (AV_DISPOSITION_HEARING_IMPAIRED |
AV_DISPOSITION_VISUAL_IMPAIRED))
continue;
if (type == AVMEDIA_TYPE_AUDIO && !(par->channels && par->sample_rate)) if (type == AVMEDIA_TYPE_AUDIO && !(par->channels && par->sample_rate))
continue; continue;
if (decoder_ret) { if (decoder_ret) {
...@@ -4130,13 +4128,16 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, ...@@ -4130,13 +4128,16 @@ int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type,
continue; continue;
} }
} }
disposition = !(st->disposition & (AV_DISPOSITION_HEARING_IMPAIRED | AV_DISPOSITION_VISUAL_IMPAIRED));
count = st->codec_info_nb_frames; count = st->codec_info_nb_frames;
bitrate = par->bit_rate; bitrate = par->bit_rate;
multiframe = FFMIN(5, count); multiframe = FFMIN(5, count);
if ((best_multiframe > multiframe) || if ((best_disposition > disposition) ||
(best_multiframe == multiframe && best_bitrate > bitrate) || (best_disposition == disposition && best_multiframe > multiframe) ||
(best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count)) (best_disposition == disposition && best_multiframe == multiframe && best_bitrate > bitrate) ||
(best_disposition == disposition && best_multiframe == multiframe && best_bitrate == bitrate && best_count >= count))
continue; continue;
best_disposition = disposition;
best_count = count; best_count = count;
best_bitrate = bitrate; best_bitrate = bitrate;
best_multiframe = multiframe; best_multiframe = multiframe;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment