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函数调用流程图

相关推荐
朝朝辞暮i20 分钟前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法
做萤石二次开发的哈哈22 分钟前
带摄像头的号角怎么对接?从音视频对讲链路到音频参数配置的实施要点
物联网·音视频·语音对讲·萤石开放平台·蓝海aiot一站式工作台·语音喊话·园区广播
殷色玫瑰32 分钟前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio
进化中的刀盾兽1 小时前
从零实现 C++ AI 大模型接入 SDK(九):LLMManager 统一模型管理与请求路由
c++
会周易的程序员1 小时前
STVM OSAL 层架构设计文档
c++·物联网·嵌入式·虚拟机·iot·软plc·iec61131
.YM.Z1 小时前
C++——【红黑树】原理详解:定义、性质、插入变色与旋转实现
开发语言·c++
Anhty2 小时前
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
功能测试·ffmpeg·音视频
lingyubb2 小时前
支持多语种配音的短视频配音工具横向评测|出海内容技术拆解
自然语言处理·音视频·语音识别·ai配音·多语种
无名猿2 小时前
constexpr 能力扩张:从 C++11 到 C++20 的编译期计算
c++·性能优化·现代c++·编译期
007张三丰2 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理