9.3.3. JPEG模块功能说明
9.3.3.1. 原理框图
下图是JPEG编解码引擎的框架示意图
- JPEG解码流程如下:
VLD解码模块从外部DRAM读取原始码流,解码出MCU块系数信息,并将块系数信息传递给变换/量化模块;
变换/量化模块根据接收到的块系数进行反量化和反变换;
后处理模块读取反变换后的块数据,镜像旋转、镜像或下采样;
最终解码得到的MCU数据通过DMA写入外部SDRAM;
时序控制对各个子模块进行调度,确保解码过程的正确性与高效率,为了提高解码效率,各子模块之前采取并行的方式进行。
- JPEG编码流程与解码完全相反。
首先通过DMA由SDRAM读取MCU亮度和色度数据,并保存到内部缓存用于前处理;
前处理模块对MCU块数据进行镜像旋转、缩放处理;
变换/量化模块对接收到的块系数进行变换和量化;
量化后的块系数经过VLC模块进行huffman编码,得到最终的码流;
最后通过DMA把比特流数据写入SDRAM。
9.3.3.2. 解码流程
JPEG图片解码启动一次硬件就可以完成一张图片的解码。具体流程如下:
9.3.3.3. 前/后处理
JPEG解码后处理和编码前处理复用同一个模块。其中, 解码后处理支持缩放以及旋转镜像,但两个功能不能同时开启; 编码前处理只支持旋转镜像,不支持缩放。
缩放
缩放功能支持对解码后数据进行下采样,水平、垂直像素宽度可以分别缩小为原始的1、1/2、1/4、1/8。
旋转和镜像
旋转4种模式,分别对应逆时针旋转90度*n (n=0, 1, 2, 3),镜像支持两种模式(水平镜像和垂直镜像),旋转与镜像可组合使用,如下表所示。
当旋转和镜像组合使用时,先做镜像再做旋转。当该模块被使能后,共有四位寄存器用于工作模式的选择:两位代表选择的角度,另外两位分别代表水平与垂直镜像功能的使能,实际有效只有8种表现。
垂直镜像使能 |
水平镜像使能 |
旋转模式 |
寄存器值 |
模式 |
---|---|---|---|---|
否 |
否 |
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 |