mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-18 04:47:12 +00:00
avformat/util: change av_find_default_stream_index() to use a score based system
Disfavor video streams with unknown resolution and no packets Fixes seeking in audio-only-speex.flv Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
e8c003edd2
commit
4e855c11b5
@ -1531,23 +1531,36 @@ static void flush_packet_queue(AVFormatContext *s)
|
|||||||
|
|
||||||
int av_find_default_stream_index(AVFormatContext *s)
|
int av_find_default_stream_index(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
int first_audio_index = -1;
|
|
||||||
int i;
|
int i;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
int best_stream = 0;
|
||||||
|
int best_score = -1;
|
||||||
|
|
||||||
if (s->nb_streams <= 0)
|
if (s->nb_streams <= 0)
|
||||||
return -1;
|
return -1;
|
||||||
for (i = 0; i < s->nb_streams; i++) {
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
|
int score = 0;
|
||||||
st = s->streams[i];
|
st = s->streams[i];
|
||||||
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
|
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||||
!(st->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
|
!(st->disposition & AV_DISPOSITION_ATTACHED_PIC)) {
|
||||||
return i;
|
if (!st->codec->width && !st->codec->height && !st->codec_info_nb_frames)
|
||||||
|
score += 25;
|
||||||
|
else
|
||||||
|
score += 100;
|
||||||
|
}
|
||||||
|
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||||
|
if (!st->codec->sample_rate && !st->codec_info_nb_frames)
|
||||||
|
score += 12;
|
||||||
|
else
|
||||||
|
score += 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (score > best_score) {
|
||||||
|
best_score = score;
|
||||||
|
best_stream = i;
|
||||||
}
|
}
|
||||||
if (first_audio_index < 0 &&
|
|
||||||
st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
|
|
||||||
first_audio_index = i;
|
|
||||||
}
|
}
|
||||||
return first_audio_index >= 0 ? first_audio_index : 0;
|
return best_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Flush the frame reader. */
|
/** Flush the frame reader. */
|
||||||
|
Loading…
Reference in New Issue
Block a user