H.264 模块
H.264 解码引擎包含了时序控制、熵解码、反量化、反变换、重构、帧内预测、帧间预测、deblock、后处理等模块,每个模块的处理的基本单元是 Macroblock (MB)。
下图呈现了 H.264 解码引擎的功能模块以及外部接口示意。

-
熵解码从外部 DRAM 读取原始码流,并分别解码出 MB 信息与块系数信息,其中MB信息会传递给帧内/帧间预测模块、Deblock模块,块系数信息会传递给反量化模块。
-
反量化模块根据接收到的块系数以及反量化参数进行反量化,并将反量化后的结果传递给反变换模块。
-
反变换模块根据当前宏块信息选择正确的反变换方式进行反变换,将反变换后的残差系数传递给重构模块。
-
帧内/帧间模块根据收到的 MB 信息从参考帧中计算出当前块的预测值。
-
重构模块将收到的残差系数与预测值进行相加,得到当前的块的像素值。
-
Deblock 模块根据当前的 MB 信息将当前块边沿像素值进行平滑滤波,输出最终的解码图像。
-
时序控制根据图像标准与 MB 类型对各个子模块进行调度,确保解码过程的正确性与高效率,为了提高解码效率,各子模块之前采取并行的方式进行。
解码辅助功能
-
startcode 检测
VE 引擎还具有startcode 检索、错误检测等功能。当VE引擎检测到下一个非 slice startcode,VE引擎会将检测到的 startcode之前的所有数据送给解码器,并将码流读取指针停留在startcode之前。
-
错误处理
当所有数据解码完成后,无论当前帧解码是否完整,都视为解码完成,主CPU需要根据已经解码出的MB个数判断当前解码是否正确。当解码遇到错误时(超越规定的范围值),VE引擎会停止解码,并将码流读取指针停留在当前位置,在发出解码完成中断通知的同时产生解码错误的中断,主CPU需要根据当前的错误情况进行容错处理。
-
写保护
VE 引擎还具有外部 SDRAM 写保护功能。主 CPU 可设置一个允许VE引擎可改写的 SDRAM 地址范围,当 VE 引擎尝试改写该地址范围之外的地址空间时该功能将阻止对 SDRAM 的真正改写,并触发错误中断。