原始码流配置功能
关于 H.264 文件格式的解码,VE 引擎的工作流程如下所示:
-
主 CPU 将 VE 解码所需要的原始码流写入原始码流缓冲区 (Bitstream Buffer) ,以便 VE 解码引擎负责读取。
-
VE 引擎启动解码之前,主 CPU 需要通知 VE 引擎该缓冲区的开始地址、结束地址、有效码流的偏移位置、有效码流长度等信息
原始码流缓冲区是一个环形 Buffer,当 VE 引擎读取到结束地址后自动返回到开始地址继续读取,因此 VE 引擎启动解码之前需要知道上述信息。
当主 CPU 向原始码流缓冲区写入数据时,如果中间通过 Cache,必须确保数据真正写入 SDRAM 后才能启动 VE 解码。
- VE 引擎从外部 SDRAM 中的原始码流缓冲器中读取有效数据,并放入内部的小缓冲区。
熵解码基于该小缓冲区进行解码。尽管熵解码没有直接基于 SDRAM 中的码流缓冲区进行解码,VE引擎会将有效消耗的数据位偏移量正确映射到码流缓冲区上。
-
VE 引擎在读取过程中通过寄存器实时给出当前的读取偏移量,主 CPU 会根据 VE 读取的偏移量继续有效填写数据,避免数据溢出 (overflow)。
-
VE 引擎完成当前解码。如果 VE 引擎将配置的有效数据解码消耗完成后,还无法完成当前解码,则表示当前解码数据不够,此时有两种情况:
-
如果主 CPU 已经配置 last位,表示当前解码所需的数据都已经写入,则表示当前解码出错,VE 引擎将结束当前解码任务
-
如果主 CPU 没有配置 last 位,则表示当前解码所需的数据还只是部分写入,则 VE 引擎仅产生解码中断,保持当前所有状态,等待主 CPU 将下笔数据写入并启动 VE 引擎,然后继续当前的解码任务。
为了保证数据读取的高效率以及降低数据读取延迟(latency)的敏感度,VE 引擎内部还有一个小的缓冲区:
-
