FFmpeg之AVFrame

来源:互联网 发布:计算机就业前景 知乎 编辑:程序博客网 时间:2024/05/22 03:10

花满楼原创

AVFrame,是原始数据的结构体(解码后或编码前的数据)。

本文介绍FFmepg中常见结构AVFrame,尽量用具体值来理解。

使用调试AVPacket的代码即可,部分代码:
调用AVFrame的代码片段

在avcodec_decode_video2的调用处下个断点。

在解码前,avframe是这样的:
解码前avframe的内容

解码后,并且保证有解码到一帧数据时,avframe是这样的:
解码后avframe的内容

AVFrame的一些变量解释:

data,指针数组(最多8个指针),每个指针指向不同维度的byte数据,比如对于视频来说,如果是planar的,则data[0]可能指向Y维度的数据,data[1]可能指向U维度的数据。对于音频来说,如果声道是平面组织的(planar),则data[0]指向一个声道,data[1]指向另一个声道...;如果声音是打包形式的(packed,即左右不分开),则只有data[0]。linesize,长度的数组。对于视频,如果是planar数据,则linesize[i]是某个维度的一行的长度;如果是packet数据,则只有linesize[0],而且表示所有数据的长度。对于音频,只有linesize[0]可用;如果是planar数据,则linesize[0]对应data[i]的长度(每个data[i]是一样的长度);如果是packed数据,则linesize[0]表示data[0]的长度。对于音频,没有“一行”的概念,linesize[0]表示的是整个长度。对于视频,注意linesize[i]表示一行的长度时,可能比实际的数据的长度(宽)要大。extern_data,对于视频,赞同于data。对于音频,经常用于packed数据。width/height,视频宽高。nb_samples,一个声道的样本数。format,视频的颜色空间,或音频的样本格式。key_frame,是否为关键帧。pict_type,视频帧的类型(ipb帧等)。sample_aspect_ratio,宽高比例。pts,表现时间戵。pkt_pts,对应的AVPacket的pts。quality,质量系数。sample_rate,音频采样率。channels,声道数。

AVFrame结构,在libavutil/frame.h中定义。


原创粉丝点击