FFmpeg 基本API avcodec_alloc_context3函数内部调用流程分析

1、avcodec_alloc_context3函数定义

avcodec_alloc_context3() 是 FFmpeg 中用于分配并初始化解码器或编码器上下文 AVCodecContext 的 API,是绝大多数编解码初始化流程的第一步。

cpp 复制代码
AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
- 参数 codec:你打算使用的编解码器(如 ff_hevc_decoder)。可以为 NULL,但通常你会先通过 avcodec_find_decoder() 得到一个有效 AVCodec*。
- 返回值:成功返回指向 AVCodecContext 的指针,失败返回 NULL。

2、avcodec_alloc_context3函数内部调用说明

avcodec_alloc_context3内部分析:

  • 申请一个 AVCodecContext 内存结构体;
  • 填充 codec 类型(如 AVMEDIA_TYPE_VIDEO)和 ID(如 AV_CODEC_ID_HEVC)等基本字段;
  • 初始化内部的默认值(通过 AVOptions 系统);
  • 如 codec->priv_data_size > 0,则为 priv_data 分配内存(如 HEVCContext);
  • 如 codec->priv_class 存在,则为 priv_data 设置默认 AVOptions。
cpp 复制代码
avcodec_alloc_context3(codec)
└── av_mallocz(sizeof(AVCodecContext))                    // 分配 AVCodecContext 结构体
    └── init_context_defaults(s, codec)                  // 填充默认值
        ├── s->codec_type = codec->type
        ├── s->codec_id   = codec->id
        ├── av_opt_set_defaults(s)                        // 初始化 AVOptions
        ├── if (codec->priv_data_size > 0)
        │     └── s->priv_data = av_mallocz(codec->priv_data_size) // 分配私有数据
        └── if (codec->priv_class)
              └── av_opt_set_defaults(s->priv_data)      // 设置 priv_data 的 AVOptions

3、avcodec_alloc_context3函数调用流程图

相关推荐
无限进步_几秒前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
C++ 老炮儿的技术栈29 分钟前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
橘颂TA36 分钟前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法
EasyDSS44 分钟前
私有化视频会议系统/私有化音视频系统EasyDSS在社交娱乐领域实时互动场景中的应用
实时互动·音视频·娱乐
wsoz1 小时前
Leetcode普通数组-day5、6
c++·算法·leetcode·数组
favour_you___1 小时前
2026_4_8算法练习题
数据结构·c++·算法
SccTsAxR2 小时前
算法基石:手撕离散化、递归与分治
c++·经验分享·笔记·算法
Q741_1472 小时前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
夏乌_Wx2 小时前
剑指offer | 2.4数据结构相关题目
数据结构·c++·算法·剑指offer·c/c++
米啦啦.2 小时前
C+类的友元与静态成员函数,类模板
c++·友元·类模板