FFmpeg:浅谈 AVFrame 结构体

本文深入探讨了FFmpeg中的AVFrame结构,包括数据部分、辅助部分、用户相关部分和codec相关部分的成员变量。重点解析了data、extended_data、buf和extended_buf之间的关系,以及它们在packed和planar格式下的使用情况。同时介绍了av_frame_get_buffer函数在初始化这些变量时的逻辑。

成员变量

struct AVFrame 是一个很基础的类型,顾名思义,主要用来管理解码后的音视频数据:

  • 视频:一个 AVFrame 对象可存储一帧图像。
  • 音频:一个 AVFrame 对象可存储若干个采样点。

个人理解,AVFrame 主要的成员变量按照功能可划分为四部分:

  • 数据部分,这是最核心的部分啦,存储了解码后的音视频数据
    • uint8_t *data[AV_NUM_DATA_POINTERS]:存储音视频数据
    • int linesize[AV_NUM_DATA_POINTERS];:描述数据长度。具体含义取决于数据格式。
    • uint8_t **extended_data;data 的补充字段。当 data 不够用时,可用该字段存储。
    • AVBufferRef *buf[AV_NUM_DATA_POINTERS];:和 data 对应的引用计数器。buf[i]data[i] 一一对应。当 buf 全为 nullptr 时,说明该对应未启用引用计数功能。
    • AVBufferRef **extended_buf;:和 extended_data 对应的引用计数器。
    • int nb_extended_buf;extended_buf 的长度。
  • 辅助部分,用于解析数据部分,这里仅列出了一部分
    • 视频部分:
      • int width, height;:宽高
      • int key_frame;:1 → keyframe, 0 → not
      • enum AVPictureType pict_type;:类型。IPB, SSISP, BI
      • AVRational sample_aspect_ratio;:注释没看懂,度娘说是单个像素的宽高比。
      • int coded_picture_number;:比特流中的编码序列号。
      • int display_picture_number;:播放序列号。
      • int repeat_pict;:延迟参数,extra_delay = repeat_pict / (2*fps),未使用过。
    • 音频部分:
      • int nb_samples;:采样点的数量。
      • int sample_rate;:采样率。
      • uint64_t channel_layout;:声道布局。单声道,立体声,5.1 等等,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值