摘要:
本文作为 “x264视频编码器应用与实现” 系列博文的第六篇,主要讨论x264中图像与码流结构体的定义和使用。
1. 基本概念
我们知道,包括H.264在内的所有的视频编码方法其本质都是将像素格式的图像数据编码为数据量远小于前的压缩码流格式。而在x264中,专门为像素格式和码流格式定义了相应的结构来表示,即:
- x264_picture_t:x264的图像结构;
- x264_nal_t:x264的码流结构;
其中,输入编码器的图像结构 x264_picture_t 的实例应当由调用者负责创建。
2. 图像结构 x264_picture_t
x264_picture_t 的定义如下所示:
1 | typedef struct x264_picture_t |
下面分别对这三个函数进行研究。
3. 图像结构 x264_picture_t 的初始化和释放方法
3.1 x264_picture_init
从命名可知,x264_picture_init 方法的主要作用在于对图像结构进行初始化,其实现为:
1 | /**************************************************************************** |
该函数在这三个之中最简单,只是分配了 x264_picture_t 对象的内存空间,并将其中三个数据成员设为 AUTO 类型。
3.2 x264_picture_alloc
该函数相比 x264_picture_init,多了若干个输入参数,其实现如下:
1 | /**************************************************************************** |
从该函数的实现中可以看出,其内部也是调用了 picture_init 来初始化一个对象。另外,还进行了一个图像结构中像素存储空间的分配。
3.3 x264_picture_clean
该函数执行的是释放相应的图像结构,其实现为:
1 | /**************************************************************************** |
需注意的是,只有使用 x264_picture_alloc 创建的图像结构才使用该函数进行清理。
4. x264的码流结构 x264_nal_t
对于编码器输出的码流,x264 同样定义了专门的数据结构来保存,即 x264_nal_t。其定义如下:
1 | typedef struct x264_nal_t |
从其定义中可以看出,该结构实际上保存的就是一个 Nalu 的对应数据,主要有其类型、ref_idx和有效数据等结构。解码器输出码流后,可以通过返回出的 x264_nal_t 指针获取相应的输出结果。