int x264_macroblock_cache_init ( x264_t *h ) 这个函数主要对cache中与宏块相关的变量进行初始化,包括为它们分配对应的内存空间。在函数里,会有一些变量的赋值一开始让人摸不着头脑,经过查找资料和跟踪代码确认,现对如下变量进行解释:
int i_mb_count = h->mb.i_mb_count; //!< 一帧图像的宏块数
h->mb.i_mb_stride = h->sps->i_mb_width; //!< 以宏块为单位的每一行的跨度
h->mb.i_b8_stride = h->sps->i_mb_width * 2; //!< 以8x8块为单位的每一行的跨度
h->mb.i_b4_stride = h->sps->i_mb_width * 4; //!< 以4x4块为单位的每一行的跨度
接下来一组赋值需要画图说明:
上图代表的是fdec的内存存储方式,每个符号代表内存中的一个字节,符号“.”表示无用数据,大写字母代表当前宏块的数据,Y,U,V分别代表三个色彩分量,小写字母代表当前宏块的相邻像素点的数据。