AVFormatContext结构体初始化函数 avformat_alloc_context
ffmpeg-4.4
AVFormatContext结构体初始化函数
AVFormatContext *avformat_alloc_context(void)
{
AVFormatContext *ic;
AVFormatInternal *internal;
//分配内存
ic = av_malloc(sizeof(AVFormatContext));
if (!ic) return ic;
//为internal分配内存并置零
internal = av_mallocz(sizeof(*internal));
if (!internal) {
av_free(ic);
return NULL;
}
//调用avpacket_alloc函数对internal中的pkt和parse_pkt进行初始化
//parse_pkt是一个临时/短期的packet,使用后清空
/*
* /**
* The generic code uses this as a temporary packet
* to parse packets; it may also be used for other means
* for short periods that are guaranteed not to overlap
* with calls to av_read_frame() (or ff_read_packet())
* or with each other.
* It may be used by demuxers as a replacement for
* stack packets (unless they call one of the aforementioned
* functions with their own AVFormatContext).
* Every user has to ensure that this packet is blank
* after using it.
*/
internal->pkt = av_packet_alloc();
internal->parse_pkt = av_packet_alloc();
if (!internal->pkt || !internal->parse_pkt) {
av_packet_free(&internal->pkt);
av_packet_free(&internal->parse_pkt);
av_free(internal);
av_free(ic);
return NULL;
}
//设置默认值
avformat_get_context_defaults(ic);
ic->internal = internal;
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)