HPM SDK
HPMicro Software Development Kit
hpm_jpeg_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_JPEG_DRV_H
9 #define HPM_JPEG_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_jpeg_regs.h"
13 
24 #define JPEG_EVENT_BUSY JPEG_STAT_BUSY_MASK
25 #define JPEG_EVENT_OUT_DMA_FINISH JPEG_STAT_OUT_DMA_TRANSFER_DONE_MASK
26 #define JPEG_EVENT_IN_DMA_FINISH JPEG_STAT_IN_DMA_TRANSFER_DONE_MASK
27 #define JPEG_EVENT_ERROR (JPEG_STAT_RESTART_MARKER_ERROR_MASK | (0xF << 7))
28 
32 #define JPEG_BYTE_ORDER_3210 (0U)
33 #define JPEG_BYTE_ORDER_2301 (1U)
34 #define JPEG_BYTE_ORDER_1032 (2U)
35 #define JPEG_BYTE_ORDER_0123 (3U)
45 #define JPEG_SUPPORTED_FORMAT_420 (0U)
46 #define JPEG_SUPPORTED_FORMAT_422H (1U)
47 #define JPEG_SUPPORTED_FORMAT_422V (2U)
48 #define JPEG_SUPPORTED_FORMAT_444 (3U)
49 #define JPEG_SUPPORTED_FORMAT_400 (4U)
54 typedef struct {
55  uint8_t hy:2;
56  uint8_t vy:2;
57  uint8_t hc:2;
58  uint8_t vc:2;
60 
61 typedef struct {
62  uint8_t pixel_width;
63  uint8_t ipath;
64  uint8_t opath;
65  bool is_rgb;
66 } jpeg_pixel_t;
67 
75 typedef enum jpeg_table {
76  jpeg_table_qmem = 0x201002,
77  jpeg_table_huffenc = 0x201803,
78  jpeg_table_huffmin = 0x400104,
79  jpeg_table_huffbase = 0x200405,
80  jpeg_table_huffsymb = 0x101506,
82 
83 typedef enum jpeg_pixel_format {
91 
95 typedef struct {
96  uint8_t jpeg_format;
99  uint8_t in_byte_order;
100  uint8_t out_byte_order;
102  uint16_t width_in_pixel;
103  uint16_t height_in_pixel;
104  uint32_t in_buffer;
105  uint32_t out_buffer;
107 
108 #ifdef __cplusplus
109 extern "C" {
110 #endif
111 
117 static inline void jpeg_clear_cfg(JPEG_Type *ptr)
118 {
119  ptr->CFG = 0;
120 }
121 
127 static inline void jpeg_disable(JPEG_Type *ptr)
128 {
129  ptr->CFG &= ~JPEG_CFG_JPEG_EN_MASK;
130 }
131 
137 static inline void jpeg_enable(JPEG_Type *ptr)
138 {
139  ptr->CFG |= JPEG_CFG_JPEG_EN_MASK;
140 }
141 
147 static inline void jpeg_stop(JPEG_Type *ptr)
148 {
149  ptr->CFG &= ~JPEG_CFG_START_MASK;
150 }
151 
157 static inline void jpeg_start(JPEG_Type *ptr)
158 {
159  ptr->CFG |= JPEG_CFG_START_MASK;
160 }
161 
168 static inline uint32_t jpeg_get_status(JPEG_Type *ptr)
169 {
170  return ptr->STAT;
171 }
172 
184 static inline void jpeg_clear_status(JPEG_Type *ptr, uint32_t mask)
185 {
186  ptr->STAT |= mask;
187 }
188 
195 static inline uint32_t jpeg_get_encoded_length(JPEG_Type *ptr)
196 {
197  return JPEG_OUTDMACNT_VAL_GET(ptr->OUTDMACNT);
198 }
199 
205 static inline void jpeg_software_reset(JPEG_Type *ptr)
206 {
209 }
210 
216 void jpeg_reset(JPEG_Type *ptr);
217 
228 void jpeg_enable_irq(JPEG_Type *ptr, uint32_t mask);
229 
240 void jpeg_disable_irq(JPEG_Type *ptr, uint32_t mask);
241 
247 void jpeg_init(JPEG_Type *ptr);
248 
270 hpm_stat_t jpeg_fill_table(JPEG_Type *ptr, jpeg_table_t table, uint8_t *data, uint32_t count);
271 
282 hpm_stat_t jpeg_start_decode(JPEG_Type *ptr, jpeg_job_config_t *config, uint32_t length);
283 
294 
300 #ifdef __cplusplus
301 }
302 #endif
303 #endif /* HPM_JPEG_DRV_H */
#define JPEG_CFG_JPEG_EN_MASK
Definition: hpm_jpeg_regs.h:587
#define JPEG_CFG_JPEG_SFTRST_MASK
Definition: hpm_jpeg_regs.h:553
#define JPEG_OUTDMACNT_VAL_GET(x)
Definition: hpm_jpeg_regs.h:759
#define JPEG_CFG_START_MASK
Definition: hpm_jpeg_regs.h:567
static uint32_t jpeg_get_encoded_length(JPEG_Type *ptr)
Out DMA Bytes Counter.
Definition: hpm_jpeg_drv.h:195
void jpeg_enable_irq(JPEG_Type *ptr, uint32_t mask)
jpeg enable interrupt
Definition: hpm_jpeg_drv.c:44
static void jpeg_software_reset(JPEG_Type *ptr)
jpeg Software Reset
Definition: hpm_jpeg_drv.h:205
enum jpeg_table jpeg_table_t
jpeg encoding and decoding configuration parameters
void jpeg_reset(JPEG_Type *ptr)
stop a encoder/decoder conversion and Software Reset
Definition: hpm_jpeg_drv.c:59
static void jpeg_clear_status(JPEG_Type *ptr, uint32_t mask)
clear jpeg Status Register
Definition: hpm_jpeg_drv.h:184
static void jpeg_enable(JPEG_Type *ptr)
jpeg function enable
Definition: hpm_jpeg_drv.h:137
void jpeg_init(JPEG_Type *ptr)
stop a encoder/decoder conversion and Software Reset
Definition: hpm_jpeg_drv.c:67
static uint32_t jpeg_get_status(JPEG_Type *ptr)
obtain jpeg Status Register
Definition: hpm_jpeg_drv.h:168
void jpeg_disable_irq(JPEG_Type *ptr, uint32_t mask)
jpeg disable interrupt
Definition: hpm_jpeg_drv.c:29
hpm_stat_t jpeg_start_encode(JPEG_Type *ptr, jpeg_job_config_t *config)
it will start encoding, and the process status needs to be checked by querying JPEG_EVENT
Definition: hpm_jpeg_drv.c:141
hpm_stat_t jpeg_start_decode(JPEG_Type *ptr, jpeg_job_config_t *config, uint32_t length)
it will start decoding, and the process status needs to be checked by querying JPEG_EVENT
Definition: hpm_jpeg_drv.c:236
jpeg_table
jpeg encoding and decoding configuration parameters
Definition: hpm_jpeg_drv.h:75
jpeg_pixel_format
Definition: hpm_jpeg_drv.h:83
static void jpeg_start(JPEG_Type *ptr)
start a new encoder/decoder conversion
Definition: hpm_jpeg_drv.h:157
enum jpeg_pixel_format jpeg_pixel_format_t
static void jpeg_disable(JPEG_Type *ptr)
jpeg function disable
Definition: hpm_jpeg_drv.h:127
static void jpeg_stop(JPEG_Type *ptr)
stop a encoder/decoder conversion
Definition: hpm_jpeg_drv.h:147
static void jpeg_clear_cfg(JPEG_Type *ptr)
clear jpeg cfg Register
Definition: hpm_jpeg_drv.h:117
hpm_stat_t jpeg_fill_table(JPEG_Type *ptr, jpeg_table_t table, uint8_t *data, uint32_t count)
fill tables for jpeg controller
Definition: hpm_jpeg_drv.c:307
@ jpeg_table_huffmin
Definition: hpm_jpeg_drv.h:78
@ jpeg_table_huffenc
Definition: hpm_jpeg_drv.h:77
@ jpeg_table_huffsymb
Definition: hpm_jpeg_drv.h:80
@ jpeg_table_huffbase
Definition: hpm_jpeg_drv.h:79
@ jpeg_table_qmem
Definition: hpm_jpeg_drv.h:76
@ jpeg_pixel_format_yuv422h1p
Definition: hpm_jpeg_drv.h:86
@ jpeg_pixel_format_argb8888
Definition: hpm_jpeg_drv.h:84
@ jpeg_pixel_format_y8
Definition: hpm_jpeg_drv.h:89
@ jpeg_pixel_format_yuv422h2p
Definition: hpm_jpeg_drv.h:87
@ jpeg_pixel_format_rgb565
Definition: hpm_jpeg_drv.h:85
@ jpeg_pixel_format_yuv420
Definition: hpm_jpeg_drv.h:88
uint32_t hpm_stat_t
Definition: hpm_common.h:123
Definition: hpm_jpeg_regs.h:12
__RW uint32_t CFG
Definition: hpm_jpeg_regs.h:27
__RW uint32_t STAT
Definition: hpm_jpeg_regs.h:28
__R uint32_t OUTDMACNT
Definition: hpm_jpeg_regs.h:33
jpeg encoding and decoding configuration parameters
Definition: hpm_jpeg_drv.h:95
jpeg_pixel_format_t out_pixel_format
Definition: hpm_jpeg_drv.h:98
uint16_t width_in_pixel
Definition: hpm_jpeg_drv.h:102
uint32_t out_buffer
Definition: hpm_jpeg_drv.h:105
uint8_t in_byte_order
Definition: hpm_jpeg_drv.h:99
uint16_t height_in_pixel
Definition: hpm_jpeg_drv.h:103
jpeg_pixel_format_t in_pixel_format
Definition: hpm_jpeg_drv.h:97
uint8_t out_byte_order
Definition: hpm_jpeg_drv.h:100
uint32_t in_buffer
Definition: hpm_jpeg_drv.h:104
uint8_t jpeg_format
Definition: hpm_jpeg_drv.h:96
bool enable_ycbcr
Definition: hpm_jpeg_drv.h:101
Definition: hpm_jpeg_drv.h:61
bool is_rgb
Definition: hpm_jpeg_drv.h:65
uint8_t opath
Definition: hpm_jpeg_drv.h:64
uint8_t pixel_width
Definition: hpm_jpeg_drv.h:62
uint8_t ipath
Definition: hpm_jpeg_drv.h:63
data format definition
Definition: hpm_jpeg_drv.h:54
uint8_t hc
Definition: hpm_jpeg_drv.h:57
uint8_t vc
Definition: hpm_jpeg_drv.h:58
uint8_t vy
Definition: hpm_jpeg_drv.h:56
uint8_t hy
Definition: hpm_jpeg_drv.h:55