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