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