mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-29 10:52:20 +00:00
avformat/utils: Move av_find_default_stream_index to avformat.c
While it is clearly written with demuxers in mind, it is not forbidden to call it with muxers, hence avformat.c and not demux_utils.c. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
1c0912c26e
commit
e00d0ef46d
@ -276,6 +276,42 @@ AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int av_find_default_stream_index(AVFormatContext *s)
|
||||
{
|
||||
int best_stream = 0;
|
||||
int best_score = INT_MIN;
|
||||
|
||||
if (s->nb_streams <= 0)
|
||||
return -1;
|
||||
for (unsigned i = 0; i < s->nb_streams; i++) {
|
||||
const AVStream *const st = s->streams[i];
|
||||
const FFStream *const sti = cffstream(st);
|
||||
int score = 0;
|
||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
if (st->disposition & AV_DISPOSITION_ATTACHED_PIC)
|
||||
score -= 400;
|
||||
if (st->codecpar->width && st->codecpar->height)
|
||||
score += 50;
|
||||
score+= 25;
|
||||
}
|
||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (st->codecpar->sample_rate)
|
||||
score += 50;
|
||||
}
|
||||
if (sti->codec_info_nb_frames)
|
||||
score += 12;
|
||||
|
||||
if (st->discard != AVDISCARD_ALL)
|
||||
score += 200;
|
||||
|
||||
if (score > best_score) {
|
||||
best_score = score;
|
||||
best_stream = i;
|
||||
}
|
||||
}
|
||||
return best_stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches a stream specifier (but ignores requested index).
|
||||
*
|
||||
|
@ -181,42 +181,6 @@ int ff_is_intra_only(enum AVCodecID id)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int av_find_default_stream_index(AVFormatContext *s)
|
||||
{
|
||||
int best_stream = 0;
|
||||
int best_score = INT_MIN;
|
||||
|
||||
if (s->nb_streams <= 0)
|
||||
return -1;
|
||||
for (unsigned i = 0; i < s->nb_streams; i++) {
|
||||
const AVStream *const st = s->streams[i];
|
||||
const FFStream *const sti = cffstream(st);
|
||||
int score = 0;
|
||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||
if (st->disposition & AV_DISPOSITION_ATTACHED_PIC)
|
||||
score -= 400;
|
||||
if (st->codecpar->width && st->codecpar->height)
|
||||
score += 50;
|
||||
score+= 25;
|
||||
}
|
||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if (st->codecpar->sample_rate)
|
||||
score += 50;
|
||||
}
|
||||
if (sti->codec_info_nb_frames)
|
||||
score += 12;
|
||||
|
||||
if (st->discard != AVDISCARD_ALL)
|
||||
score += 200;
|
||||
|
||||
if (score > best_score) {
|
||||
best_score = score;
|
||||
best_stream = i;
|
||||
}
|
||||
}
|
||||
return best_stream;
|
||||
}
|
||||
|
||||
/*******************************************************/
|
||||
|
||||
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
|
||||
|
Loading…
Reference in New Issue
Block a user