static av_always_inline void write_back_intra_pred_mode(const H264Context *h,
H264SliceContext *sl)
int8_t *i4x4 = sl->intra4x4_pred_mode + h->mb2br_xy[sl->mb_xy];
int8_t *i4x4_cache = sl->intra4x4_pred_mode_cache;
AV_COPY32(i4x4, i4x4_cache + 4 + 8 * 4);
i4x4[4] = i4x4_cache[7 + 8 * 3];
i4x4[5] = i4x4_cache[7 + 8 * 2];
i4x4[6] = i4x4_cache[7 + 8 * 1];
该函数更新帧内预测模式的帧范围缓存(以4x4块分辨率),位于sl->intra4x4_pred_mode每个切片或者h->intra4x4_pred_mode整个帧的变量中,该缓存稍后用于h264_mvpred.h,特别是第510-528fill_decode_caches()行周围的函数,以设置上下文(左/上邻居)块信息,用于解码位于当前4x4块以及下方或者右侧的后续4x4 intra块。
这里还有一些关于变量设计的内容,sl->mb_xy是sl->mb_x + sl->mb_y * mb_strid。将mb_stride视为图像宽度,的填充。 所以mb_xy是当前宏块的排序索引,一些变量在块4x4而不是宏块16x16分辨率中索引,因此要在单位之间转换,可以使用mb2br_xy ,这应该可以解释帧范围缓存的布局 intra4x4_pred_mode/i4x4。