Browse Source

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>
tags/n2.8
Michael Niedermayer 10 years ago
parent
commit
838c5f3df7
1 changed files with 10 additions and 10 deletions
  1. +10
    -10
      libavformat/utils.c

+ 10
- 10
libavformat/utils.c View File

@@ -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…
Cancel
Save