1 #ifndef __SWM341_JPEG_H__
2 #define __SWM341_JPEG_H__
3 
4 #include <stdint.h>
5 
6 
7 typedef struct {
8     uint8_t  DoneIEn;           // 解码完成中断使能
9     uint8_t  ErrorIEn;          // 解码出错中断使能
10 } JPEG_InitStructure;
11 
12 
13 typedef struct {
14     uint8_t  format;            // 解码输出格式,可取值JPEG_OUT_YUV、JPEG_OUT_YUVsp、JPEG_OUT_XRGB888、...
15 
16     /* for RGB output */
17     uint8_t  dither;            // RGB565 dithering enable
18     uint32_t RGBAddr;
19 
20     /* for YUV output */
21     uint32_t YAddr;
22     uint32_t CbAddr;
23     uint32_t CrAddr;
24 } jpeg_outset_t;                // output setting
25 
26 
27 #define JPEG_OUT_YUV        0
28 #define JPEG_OUT_YUVsp      1   // semi-planar
29 #define JPEG_OUT_XRGB888    2
30 #define JPEG_OUT_RGB888     3
31 #define JPEG_OUT_RGB565     4
32 #define JPEG_OUT_YVU        (0 | (1 << 4))
33 #define JPEG_OUT_YVUsp      (1 | (1 << 4))
34 #define JPEG_OUT_XBGR888    (2 | (1 << 5))
35 #define JPEG_OUT_BGR888     (3 | (1 << 5))
36 #define JPEG_OUT_BGR565     (4 | (1 << 5))
37 #define JPEG_OUT_BGRX888    (2 | (1 << 6))
38 #define JPEG_OUT_RGBX888    (2 | (1 << 5) | (1 << 6))
39 
40 
41 #define JPEG_FMT_H2V2       0   // YUV420
42 #define JPEG_FMT_H2V1       1   // YUV422
43 #define JPEG_FMT_H1V1       2   // YUV444
44 
45 
46 
47 #define JFIF_QTAB_MAX   3
48 #define JFIF_HTAB_MAX   2
49 
50 typedef struct {
51     uint16_t Width;
52     uint16_t Height;
53 
54     struct {
55         uint8_t id;             // 1:Y   2:Cb   3:Cr
56         uint8_t hfactor;        // 颜色分量水平采样因子
57         uint8_t vfactor;        // 颜色分量垂直采样因子
58         uint8_t qtab_id;        // 颜色分量使用的量化表ID
59         uint8_t htab_id_dc;     // 直流分量使用的霍夫曼表ID
60         uint8_t htab_id_ac;     // 交流分量使用的霍夫曼表ID
61     } CompInfo[3];              // Component Information
62     uint8_t CompCnt;
63 
64     uint8_t QTable[JFIF_QTAB_MAX][64];
65     uint8_t QTableCnt;
66 
67     struct {
68         struct {
69             uint16_t codeWord[16];
70             uint8_t  codeLen[16];
71             uint8_t  codeVal[16];
72         } DC;
73 
74         struct {
75             uint16_t codeWord[162];
76             uint8_t  codeLen[162];
77             uint8_t  codeVal[162];
78         } AC;
79     } HTable[JFIF_HTAB_MAX];
80     uint8_t HTableCnt;
81 
82     uint32_t CodeAddr;          // 待解码数据
83     uint32_t CodeLen;
84 } jfif_info_t;
85 
86 
87 
88 void JPEG_Init(JPEG_TypeDef * JPEGx, JPEG_InitStructure * initStruct);
89 void JPEG_Decode(JPEG_TypeDef * JPEGx, jfif_info_t * jfif_info, jpeg_outset_t * jpeg_outset);
90 uint32_t JPEG_DecodeBusy(JPEG_TypeDef * JPEGx);
91 
92 
93 #endif //__SWM341_JPEG_H__
94