JPEG 模块
19 Nov 2024
Read time: 2 minute(s)
JPEG 解码流程如下:
- VLD 解码模块从外部存储器读取原始码流,解码出 MCU 块系数信息,并将块系数信息传递给变换/量化模块,即 IT&IQ。
- IT&IQ 根据接收到的块系数进行反量化和反变换。
- 后处理模块读取反变换后的块数据,镜像旋转、镜像或下采样。
- 最终解码得到的 MCU 数据通过 DMA 写入外部存储器。
- 时序控制对各个子模块进行调度,确保解码过程的正确性与高效率,为了提高解码效率,各子模块之前采取并行的方式进行。
JPEG 编码流程如下:
注: JPEG 编码流程与解码完全相反。
- 通过 DMA 由 SDRAM 读取 MCU 亮度和色度数据,并保存到内部缓存用于前处理。
- 前处理模块对 MCU 块数据进行镜像旋转、缩放处理。
- 变换/量化模块对接收到的块系数进行变换和量化。
- 量化后的块系数经过 VLC 模块进行 huffman 编码,得到最终的码流。
- 通过 DMA 把比特流数据写入 SDRAM。
JPEG 文件解码流程
JPEG 图片解码启动一次硬件就可以完成一张图片的解码。具体流程如下:
JPEG 编码前/ 解码后处理流程
JPEG 解码后处理和编码前处理复用同一个模块,但其支持的功能不完全一致,详见下表。功能 | 编码前处理 | 解码后处理 |
---|---|---|
缩放 | 不支持 | 支持 缩放以及旋转镜像不能同时开启 |
镜像旋转 | 支持 | 支持 缩放以及旋转镜像不能同时开启 |
RGB 颜色格式转换 | 支持 | 支持 RGB565 或 BGR565 支持误差扩散 |
Crop 格式输出 | 支持 | 支持 |
各个功能详细描述如下:
- 缩放:支持对解码后数据进行下采样,水平、垂直像素宽度可以分别缩小为原始的 1、1/2、1/4、1/8。
- 旋转和镜像:
- 支持四种旋转模式,分别对应逆时针旋转 90 度 * n (n=0, 1, 2, 3)
- 支持两种镜像模式:水平镜像和垂直镜像。
旋转与镜像可组合使用,关于具体说明,请查看旋转和镜像组合使用说明。
- 颜色格式转换模块:支持 YUV 格式转 RGB/ ARGB
- 误差扩散 Dither:把相邻像素的量化误差扩散到当前像素,从而使图像更平滑。
当像素格式从高位宽转为低位宽时,输出颜色格式为 RGB565 或 BGR565,如果直接对数值做截断处理,图像的渐变区域会有明显的阶梯效应。 使用 Dither 算法可以使图像渐变区域更平滑。
- crop 功能
解码后图像的矩形区域数据搬移到目标图像的指定矩形区域中。 只有 RGB/ARGB 颜色格式输出才支持 crop 功能。
旋转和镜像组合使用说明
旋转与镜像是解码后处理流程支持的两个功能。
旋转与镜像可组合使用,如下表所示。当旋转和镜像组合使用时,先做镜像再做旋转。当旋转镜像模块被使能后,寄存器 JPEG_ROTMIR 有四个比特位用于工作模式的选择:两位代表选择的角度,另外两位分别代表水平与垂直镜像功能的使能,实际有效只有八种表现。垂直镜像使能 | 水平镜像使能 | 旋转模式 | 寄存器值 | 模式 |
---|---|---|---|---|
否 | 否 | 0 | 4'b0000 | 0 |
否 | 否 | 90 | 4'b0001 | 1 |
否 | 否 | 180 | 4'b0010 | 2 |
否 | 否 | 270 | 4'b0011 | 3 |
是 | 否 | 0 | 4'b0100 | 4 |
是 | 否 | 90 | 4'b0101 | 5 |
是 | 否 | 180 | 4'b0110 | 6 |
是 | 否 | 270 | 4'b0111 | 7 |
否 | 是 | 0 | 4'b1000 | 8 |
否 | 是 | 90 | 4'b1001 | 9 |
否 | 是 | 180 | 4'b1010 | 10 |
否 | 是 | 270 | 4'b1011 | 11 |
是 | 是 | 0 | 4'b1100 | 12 |
是 | 是 | 90 | 4'b1101 | 13 |
是 | 是 | 180 | 4'b1110 | 14 |
是 | 是 | 270 | 4'b1111 | 15 |