


open_input_file
static int open_input_file(OptionsContext *o, const char *filename)
{
InputFile *f;
AVFormatContext *ic;
AVInputFormat *file_iformat = NULL;
...
if (o->format) {
if (!(file_iformat = av_find_input_format(o->format))) {
av_log(NULL, AV_LOG_FATAL, "Unknown input format: '%s'\n", o->format);
exit_program(1);
}
}
...
err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
...
而在avformat_open_input中:
int avformat_open_input(AVFormatContext **ps, const char *filename,
AVInputFormat *fmt, AVDictionary **options)
{
AVFormatContext *s = *ps;
int i, ret = 0;
...
if (!s && !(s = avformat_alloc_context()))
return AVERROR(ENOMEM);
...
if (fmt)
s->iformat = fmt;
...
}
InputFile **input_files = NULL;
int nb_input_files = 0;
...
static int open_input_file(OptionsContext *o, const char *filename)
{
InputFile *f;
AVFormatContext *ic;
AVInputFormat *file_iformat = NULL;
...
input_files[nb_input_files - 1] = f;
f->ctx = ic;
f->ist_index = nb_input_streams - ic->nb_streams;
f->start_time = o->start_time;
...
}
open_output_file
OutputFile **output_files = NULL;
int nb_output_files = 0;
...
static int open_output_file(OptionsContext *o, const char *filename)
{
AVFormatContext *oc;
int i, j, err;
OutputFile *of;
...
GROW_ARRAY(output_files, nb_output_files);
of = av_mallocz(sizeof(*of));
if (!of)
exit_program(1);
output_files[nb_output_files - 1] = of;
...
err = avformat_alloc_output_context2(&oc, NULL, o->format, filename);
if (!oc) {
print_error(filename, err);
exit_program(1);
}
of->ctx = oc;
...
}
...
References:
https://blog.csdn.net/leixiaohua1020/article/details/14214705
网友评论