Edit online

原始码流配置功能

关于 H.264 文件格式的解码,VE 引擎的工作流程如下所示:
  1. 主 CPU 将 VE 解码所需要的原始码流写入原始码流缓冲区 (Bitstream Buffer) ,以便 VE 解码引擎负责读取。

  2. VE 引擎启动解码之前,主 CPU 需要通知 VE 引擎该缓冲区的开始地址、结束地址、有效码流的偏移位置、有效码流长度等信息

    原始码流缓冲区是一个环形 Buffer,当 VE 引擎读取到结束地址后自动返回到开始地址继续读取,因此 VE 引擎启动解码之前需要知道上述信息。

    当主 CPU 向原始码流缓冲区写入数据时,如果中间通过 Cache,必须确保数据真正写入 SDRAM 后才能启动 VE 解码。

  3. VE 引擎从外部 SDRAM 中的原始码流缓冲器中读取有效数据,并放入内部的小缓冲区。

    熵解码基于该小缓冲区进行解码。尽管熵解码没有直接基于 SDRAM 中的码流缓冲区进行解码,VE引擎会将有效消耗的数据位偏移量正确映射到码流缓冲区上。

  4. VE 引擎在读取过程中通过寄存器实时给出当前的读取偏移量,主 CPU 会根据 VE 读取的偏移量继续有效填写数据,避免数据溢出 (overflow)。

  5. VE 引擎完成当前解码。如果 VE 引擎将配置的有效数据解码消耗完成后,还无法完成当前解码,则表示当前解码数据不够,此时有两种情况:
    1. 如果主 CPU 已经配置 last位,表示当前解码所需的数据都已经写入,则表示当前解码出错,VE 引擎将结束当前解码任务

    2. 如果主 CPU 没有配置 last 位,则表示当前解码所需的数据还只是部分写入,则 VE 引擎仅产生解码中断,保持当前所有状态,等待主 CPU 将下笔数据写入并启动 VE 引擎,然后继续当前的解码任务。

    为了保证数据读取的高效率以及降低数据读取延迟(latency)的敏感度,VE 引擎内部还有一个小的缓冲区:

../images/vbv_buffer.png