ffmpeg版本:4.1
1、概述
AVFormatContext *avformat_alloc_context(void)函数用来申请AVFormatContext类型变量并初始化默认参数。申请的空间
通过void avformat_free_context(AVFormatContext *s)函数释放。
2、源码分析
AVFormatContext *avformat_alloc_context(void)
{
AVFormatContext *ic;
ic = av_malloc(sizeof(AVFormatContext));
if (!ic) return ic;
avformat_get_context_defaults(ic);
ic->internal = av_mallocz(sizeof(*ic->internal));
if (!ic->internal) {
avformat_free_context(ic);
return NULL;
}
ic->internal->offset = AV_NOPTS_VALUE;
ic->internal->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
ic->internal->shortest_end = AV_NOPTS_VALUE;
return ic;
}
该函数调用av_malloc申请AVFormatContext内存,调用avformat_get_context_defaults初始化默认参数,并申请和初始化ic->internal 内存。
static void avformat_get_context_defaults(AVFormatContext *s)
{
memset(s, 0, sizeof(AVFormatContext));
s->av_class = &av_format_context_class;//设置av_class参数,通过av_class调用av_opt_set*可设置AVFormatContext结构体
//成员变量
s->io_open = io_open_default;
s->io_close = io_close_default;
av_opt_set_defaults(s);//根据av_class->option的值设置AVFormatContext结构体成员默认值
}