成员变量
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 → notenum AVPictureType pict_type;:类型。I,P,B,S,SI,SP,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 等等,
- 视频部分:

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

被折叠的 条评论
为什么被折叠?



