You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02: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:
@@ -276,6 +276,42 @@ AVProgram *av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int
|
|||||||
return NULL;
|
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).
|
* Matches a stream specifier (but ignores requested index).
|
||||||
*
|
*
|
||||||
|
@@ -181,42 +181,6 @@ int ff_is_intra_only(enum AVCodecID id)
|
|||||||
return 1;
|
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)
|
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
|
||||||
|
Reference in New Issue
Block a user