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 {
89 
93 typedef struct {
94  uint8_t jpeg_format;
97  uint8_t in_byte_order;
98  uint8_t out_byte_order;
99  bool enable_ycbcr;
100  uint16_t width_in_pixel;
101  uint16_t height_in_pixel;
102  uint16_t stride;
103  uint32_t in_buffer;
104  uint32_t out_buffer;
106 
107 #ifdef __cplusplus
108 extern "C" {
109 #endif
110 
116 static inline void jpeg_clear_cfg(JPEG_Type *ptr)
117 {
118  ptr->CFG = 0;
119 }
120 
126 static inline void jpeg_disable(JPEG_Type *ptr)
127 {
128  ptr->CFG &= ~JPEG_CFG_JPEG_EN_MASK;
129 }
130 
136 static inline void jpeg_enable(JPEG_Type *ptr)
137 {
138  ptr->CFG |= JPEG_CFG_JPEG_EN_MASK;
139 }
140 
146 static inline void jpeg_stop(JPEG_Type *ptr)
147 {
148  ptr->CFG &= ~JPEG_CFG_START_MASK;
149 }
150 
156 static inline void jpeg_start(JPEG_Type *ptr)
157 {
158  ptr->CFG |= JPEG_CFG_START_MASK;
159 }
160 
167 static inline uint32_t jpeg_get_status(JPEG_Type *ptr)
168 {
169  return ptr->STAT;
170 }
171 
183 static inline void jpeg_clear_status(JPEG_Type *ptr, uint32_t mask)
184 {
185  ptr->STAT |= mask;
186 }
187 
194 static inline uint32_t jpeg_get_encoded_length(JPEG_Type *ptr)
195 {
196  return JPEG_OUTDMACNT_VAL_GET(ptr->OUTDMACNT);
197 }
198 
204 static inline void jpeg_software_reset(JPEG_Type *ptr)
205 {
208 }
209 
215 void jpeg_reset(JPEG_Type *ptr);
216 
227 void jpeg_enable_irq(JPEG_Type *ptr, uint32_t mask);
228 
239 void jpeg_disable_irq(JPEG_Type *ptr, uint32_t mask);
240 
246 void jpeg_init(JPEG_Type *ptr);
247 
269 hpm_stat_t jpeg_fill_table(JPEG_Type *ptr, jpeg_table_t table, uint8_t *data, uint32_t count);
270 
281 hpm_stat_t jpeg_start_decode(JPEG_Type *ptr, jpeg_job_config_t *config, uint32_t length);
282 
293 
299 #ifdef __cplusplus
300 }
301 #endif
302 #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:194
void jpeg_enable_irq(JPEG_Type *ptr, uint32_t mask)
jpeg enable interrupt
Definition: hpm_jpeg_drv.c:42
static void jpeg_software_reset(JPEG_Type *ptr)
jpeg Software Reset
Definition: hpm_jpeg_drv.h:204
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:57
static void jpeg_clear_status(JPEG_Type *ptr, uint32_t mask)
clear jpeg Status Register
Definition: hpm_jpeg_drv.h:183
static void jpeg_enable(JPEG_Type *ptr)
jpeg function enable
Definition: hpm_jpeg_drv.h:136
void jpeg_init(JPEG_Type *ptr)
stop a encoder/decoder conversion and Software Reset
Definition: hpm_jpeg_drv.c:65
static uint32_t jpeg_get_status(JPEG_Type *ptr)
obtain jpeg Status Register
Definition: hpm_jpeg_drv.h:167
void jpeg_disable_irq(JPEG_Type *ptr, uint32_t mask)
jpeg disable interrupt
Definition: hpm_jpeg_drv.c:27
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:139
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:240
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:156
enum jpeg_pixel_format jpeg_pixel_format_t
static void jpeg_disable(JPEG_Type *ptr)
jpeg function disable
Definition: hpm_jpeg_drv.h:126
static void jpeg_stop(JPEG_Type *ptr)
stop a encoder/decoder conversion
Definition: hpm_jpeg_drv.h:146
static void jpeg_clear_cfg(JPEG_Type *ptr)
clear jpeg cfg Register
Definition: hpm_jpeg_drv.h:116
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:317
@ 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:87
@ jpeg_pixel_format_rgb565
Definition: hpm_jpeg_drv.h:85
uint32_t hpm_stat_t
Definition: hpm_common.h:126
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:93
jpeg_pixel_format_t out_pixel_format
Definition: hpm_jpeg_drv.h:96
uint16_t width_in_pixel
Definition: hpm_jpeg_drv.h:100
uint16_t stride
Definition: hpm_jpeg_drv.h:102
uint32_t out_buffer
Definition: hpm_jpeg_drv.h:104
uint8_t in_byte_order
Definition: hpm_jpeg_drv.h:97
uint16_t height_in_pixel
Definition: hpm_jpeg_drv.h:101
jpeg_pixel_format_t in_pixel_format
Definition: hpm_jpeg_drv.h:95
uint8_t out_byte_order
Definition: hpm_jpeg_drv.h:98
uint32_t in_buffer
Definition: hpm_jpeg_drv.h:103
uint8_t jpeg_format
Definition: hpm_jpeg_drv.h:94
bool enable_ycbcr
Definition: hpm_jpeg_drv.h:99
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