• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_DISPLAY_COMMON_H
9 #define HPM_DISPLAY_COMMON_H
10 
11 #include "hpm_common.h"
12 
13 /**
14  * @brief Display_common driver APIs
15  * @defgroup Display_common_interface Display_common driver APIs
16  * @ingroup io_interfaces
17  * @{
18  */
19 
20 /**
21  * @brief display alphablend mode
22  */
23 typedef enum display_alphablend_mode {
24     display_alphablend_mode_clear = 0,
25     display_alphablend_mode_src = 1,
26     display_alphablend_mode_dst = 2,
27     display_alphablend_mode_src_over = 3,
28     display_alphablend_mode_dst_over = 4,
29     display_alphablend_mode_src_in = 5,
30     display_alphablend_mode_dst_in = 6,
31     display_alphablend_mode_src_out = 7,
32     display_alphablend_mode_dst_out = 8,
33     display_alphablend_mode_src_at_top = 9,
34     display_alphablend_mode_dst_at_top = 10,
35     display_alphablend_mode_xor = 11,
36     display_alphablend_mode_plus = 12,
37     display_alphablend_mode_modulate = 13,
38     display_alphablend_mode_src_org = 14,
39     display_alphablend_mode_dst_org = 15,
40 } display_alphablend_mode_t;
41 
42 /**
43  * @brief display pixel format
44  */
45 typedef enum display_pixel_format {
46     display_pixel_format_argb8888,
47     display_pixel_format_rgb565,
48     display_pixel_format_rgb555,
49     display_pixel_format_rgb444,
50     display_pixel_format_gbr422,
51     display_pixel_format_yuv422,
52     display_pixel_format_ycbcr422,
53     display_pixel_format_y8,
54     display_pixel_format_raw8,
55 } display_pixel_format_t;
56 
57 /**
58  * @brief display data byte order
59  */
60 typedef enum display_byteorder {
61     display_byteorder_a3a2a1a0 = 0,
62     display_byteorder_a2a3a0a1 = 1,
63     display_byteorder_a1a0a3a2 = 2,
64     display_byteorder_a0a1a2a3 = 3,
65 } display_byteorder_t;
66 
67 /**
68  * @brief display yuv format
69  */
70 typedef enum display_yuv_format {
71     display_yuv_mode_422_u1y1v1y2 = 0,
72     display_yuv_mode_422_v1y1u1y2,
73     display_yuv_mode_422_y1u1y2v1,
74     display_yuv_mode_422_y1v1y2u1,
75 } display_yuv_format_t;
76 
77 /**
78  * @brief display data 32 bits argb
79  */
80 typedef union display_color_32b {
81     uint32_t u;
82     struct {
83         uint8_t b;
84         uint8_t g;
85         uint8_t r;
86         uint8_t alpha;
87     };
88 } display_color_32b_t;
89 
90 /**
91  * @brief display data alpha value usage option
92  */
93 typedef enum display_alpha_op {
94     display_alpha_op_invalid = 0,
95     display_alpha_op_override = 1,
96     display_alpha_op_scale = 2,
97 } display_alpha_op_t;
98 
99 /**
100  * @brief display data alphablend option
101  */
102 typedef struct dispaly_alphablend_option {
103     uint8_t dst_alpha;
104     uint8_t src_alpha;
105     display_alpha_op_t dst_alpha_op;
106     display_alpha_op_t src_alpha_op;
107     display_alphablend_mode_t mode;
108 } display_alphablend_option_t;
109 
110 /**
111  * @brief display yuv to rgb format conversion coefficient
112  */
113 typedef struct dispaly_yuv2rgb_coef {
114     uint16_t c0;
115     uint16_t c1;
116     uint16_t c2;
117     uint16_t c3;
118     uint16_t c4;
119     uint16_t uv_offset;
120     uint16_t y_offset;
121 } display_yuv2rgb_coef_t;
122 
123 /**
124  * @brief display yuv to rgb format conversion config
125  */
126 typedef struct display_yuv2rgb_config {
127     bool enable;
128     bool ycbcr_mode;
129     display_yuv2rgb_coef_t yuv2rgb_coef;
130 } display_yuv2rgb_config_t;
131 
132 /**
133  * @brief display rgb to yuv format conversion config
134  */
135 typedef struct display_rgb2yuv_config {
136     bool enable;
137     bool ycbcr_mode;
138     uint16_t c0;
139     uint16_t c1;
140     uint16_t c2;
141     uint16_t c3;
142     uint16_t c4;
143     uint16_t c5;
144     uint16_t c6;
145     uint16_t c7;
146     uint16_t c8;
147     uint16_t uv_offset;
148     uint16_t y_offset;
149 } display_rgb2yuv_config_t;
150 
151 #ifdef __cplusplus
152 extern "C" {
153 #endif
154 
155 /**
156  * @brief Display get pixel size in bit
157  *
158  * @param [in] format display_pixel_format_t
159  *
160  * @retval pixel size in bit
161  */
162 static inline
display_get_pixel_size_in_bit(display_pixel_format_t format)163     uint8_t display_get_pixel_size_in_bit(display_pixel_format_t format)
164 {
165     switch (format) {
166     case display_pixel_format_argb8888:
167         return 32;
168     case display_pixel_format_rgb565:
169         return 16;
170     case display_pixel_format_yuv422:
171         return 16;
172     case display_pixel_format_ycbcr422:
173         return 16;
174     case display_pixel_format_y8:
175         return 8;
176     case display_pixel_format_raw8:
177         return 8;
178     default:
179         return 0;
180     }
181 }
182 
183 /**
184  * @brief Check whether the pixel data is yuv format
185  *
186  * @param [in] format display_pixel_format_t
187  *
188  * @retval bool: true or false
189  */
display_pixel_format_is_yuv_format(display_pixel_format_t format)190 static inline bool display_pixel_format_is_yuv_format(display_pixel_format_t format)
191 {
192     switch (format) {
193     case display_pixel_format_yuv422:
194         return true;
195     case display_pixel_format_ycbcr422:
196         return true;
197     default:
198         return false;
199     }
200 }
201 
202 /**
203  * @brief Display get pixel size in byte
204  *
205  * @param [in] format display_pixel_format_t
206  *
207  * @retval pixel size in byte
208  */
209 static inline
display_get_pixel_size_in_byte(display_pixel_format_t format)210     uint8_t display_get_pixel_size_in_byte(display_pixel_format_t format)
211 {
212     return display_get_pixel_size_in_bit(format) >> 3;
213 }
214 
215 /**
216  * @brief Display get pitch length in byte
217  *
218  * @param [in] format display_pixel_format_t
219  * @param [in] width_in_pixel pixel width
220  *
221  * @retval pitch length in byte
222  */
223 static inline
display_get_pitch_length_in_byte(display_pixel_format_t format,uint32_t width_in_pixel)224     uint32_t display_get_pitch_length_in_byte(display_pixel_format_t format,
225                                             uint32_t width_in_pixel)
226 {
227     return width_in_pixel * (display_get_pixel_size_in_bit(format) >> 3);
228 }
229 
230 /**
231  * @}
232  *
233  */
234 
235 #ifdef __cplusplus
236 }
237 #endif
238 #endif /* HPM_DISPLAY_COMMON_H */
239