mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/utils: Redesign scoring in av_find_default_stream_index()
This avoids empty streams from being selected if a equivalent non empty one is available The new system is also clearer and more systematic This may need finetuning, which should be easy to do ... Fixes Ticket2687 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
52c5521877
commit
838c5f3df7
|
@ -1585,26 +1585,26 @@ int av_find_default_stream_index(AVFormatContext *s)
|
|||
int i;
|
||||
AVStream *st;
|
||||
int best_stream = 0;
|
||||
int best_score = -1;
|
||||
int best_score = INT_MIN;
|
||||
|
||||
if (s->nb_streams <= 0)
|
||||
return -1;
|
||||
for (i = 0; i < s->nb_streams; i++) {
|
||||
int score = 0;
|
||||
st = s->streams[i];
|
||||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||
!(st->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
|
||||
if (!st->codec->width && !st->codec->height && !st->codec_info_nb_frames)
|
||||
score += 25;
|
||||
else
|
||||
score += 100;
|
||||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
if (st->disposition & AV_DISPOSITION_ATTACHED_PIC)
|
||||
score -= 400;
|
||||
if (st->codec->width && st->codec->height)
|
||||
score += 50;
|
||||
score+= 25;
|
||||
}
|
||||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (!st->codec->sample_rate && !st->codec_info_nb_frames)
|
||||
score += 12;
|
||||
else
|
||||
if (st->codec->sample_rate)
|
||||
score += 50;
|
||||
}
|
||||
if (st->codec_info_nb_frames)
|
||||
score += 12;
|
||||
|
||||
if (st->discard != AVDISCARD_ALL)
|
||||
score += 200;
|
||||
|
|
Loading…
Reference in New Issue