Table 配置方式 寄存器方式
JPEG DEC 的量化表和 huffman 表支持以寄存器读写的方式进行配置,两组表可各自独立控制。
量化表
⚫ 在启动解码前进行配置
⚫ 数据以 32-bit 宽度写入量化表寄存器地址段:
◼ 0x100–0x13C(qtable0)
◼ 0x140–0x17C(qtable1)
◼ 0x180–0x1BC(qtable2)
Huffman 表
⚫ 在启动解码前进行配置
⚫ 数据以 32-bit 宽度写入 Huffman 表寄存器地址段:
◼ 0x200–0x2F8(htable0)
◼ 0x300–0x3F8(htable1)
DMA 方式
JPEG DEC 的量化表和 huffman 表支持内部 DMA 自动读取配置数据,两组表可各自独立控制。当
使能该模式后,内部 DMA 根据更新使能位在每帧的开头判断是否需要进行 table 配置数据读取。
量化表
⚫ 配置量化表内存地址:JPEG_QTABLE_BASE(要求首地址 32-bit 对齐)
⚫ 每张量化表大小:16x32-bit(64 Bytes),多张更新需要地址连续
⚫ 配置量化表数量:JPEG_SYS_CTRL[10:9]
⚫ 配置量化表更新使能位:JPEG_SYS_CTRL[8]
⚫ 内部 DMA 在帧解码时自动读取量化表Huffman 表
⚫ 配置 huffman 表内存地址:JPEG_HTABLE_BASE(要求首地址 32-bit 对齐)
⚫ 每张 huffman 表大小:64x32-bit(256 Bytes),多张更新需要地址连续
⚫ 配置 huffman 表数量:JPEG_SYS_CTRL[11]
⚫ 配置 huffman 表更新使能位:JPEG_SYS_CTRL[7]
⚫ 内部 DMA 在帧解码时自动读取 huffman 表
错误码流处理
JPEG DEC 针对错误的 JPEG 码流,有两种检测方式,解码器在识别到下列两种错误后会置位错误标记并触发错误中断:
⚫ 错误码流引起的 8x8 解码模块内部的 run length 溢出
◼ 中断状态位:JPEG_INT_CTRL[9]
◼ 错误信息状态位:JPEG_STATUS[1]
⚫ 带有 restart interval 模式的错误码流,解码出 RST marker 错误
◼ 中断状态位:JPEG_ INT_CTRL [9]
◼ 错误信息状态位:JPEG_STATUS[2]
对于错误码流,解码流程不会自动停止,驱动可以通过错误中断和错误状态来识别解码错误,可以有下列选择:
⚫ 让解码继续直到帧结束(输出错误图像数据)
⚫ 先置位 JPEG_SYS_CTRL[28]让解码暂停( dec_halt ),然后查询总线空闲标志位JPEG_STATUS[6:5],在总线空闲情况下,最后置位 JPEG_SYS_CTRL[3]取消当前帧解码(dec_cancel),注意在解码取消之前需要一直保持 dec_halt.
|