1 /*
2  * =====================================================================================
3  *
4  *       Filename:  fb.h
5  *
6  *    Description:  misc definition for display pixel format.
7  *
8  *        Version:  Melis3.0
9  *         Create:  2017-11-03 11:38:28
10  *       Revision:  none
11  *       Compiler:  gcc version 6.3.0 (crosstool-NG crosstool-ng-1.23.0)
12  *
13  *         Author:  caozilong@allwinnertech.com
14  *   Organization:  BU1-PSW
15  *  Last Modified:  2019-03-29 17:49:54
16  *
17  * =====================================================================================
18  */
19 
20 #ifndef FRAMEBUFFER_H
21 #define FRAMEBUFFER_H
22 #include <typedef.h>
23 #include <kconfig.h>
24 
25 typedef enum __PIXEL_YUVFMT
26 {
27     PIXEL_YUV444                = 0x71,
28     PIXEL_YUV422,
29     PIXEL_YUV420,
30     PIXEL_YUV411,
31     PIXEL_CSIRGB,
32     PIXEL_OTHERFMT,
33 } __pixel_yuvfmt_t;
34 
35 typedef enum __YUV_MODE
36 {
37     YUV_MOD_INTERLEAVED         = 0,
38     YUV_MOD_NON_MB_PLANAR,
39     YUV_MOD_MB_PLANAR,
40     YUV_MOD_UV_NON_MB_COMBINED,
41     YUV_MOD_UV_MB_COMBINED
42 } __yuv_mod_t;
43 
44 typedef enum
45 {
46     YUV_SEQ_UYVY                = 0,
47     YUV_SEQ_YUYV,
48     YUV_SEQ_VYUY,
49     YUV_SEQ_YVYU,
50     YUV_SEQ_AYUV                = 0x10,
51     YUV_SEQ_VUYA,
52     YUV_SEQ_UVUV                = 0x20,
53     YUV_SEQ_VUVU,
54     YUV_SEQ_OTHRS               = 0xff,
55 } __yuv_seq_t;
56 
57 
58 typedef struct
59 {
60     __u32 width;
61     __u32 height;
62 } SIZE;
63 
64 typedef enum
65 {
66     BT601                       = 0,
67     BT709,
68     YCC,
69     VXYCC,
70     MONO
71 } __cs_mode_t;
72 
73 typedef struct
74 {
75     __s32 x;
76     __s32 y;
77     __u32 width;
78     __u32 height;
79 } RECT;
80 
81 typedef enum
82 {
83     FB_TYPE_RGB                 = 0,
84     FB_TYPE_YUV                 = 1
85 } __fb_type_t;
86 
87 typedef enum __PIXEL_RGBFMT
88 {
89     PIXEL_MONO_1BPP             = 0x51,
90     PIXEL_MONO_2BPP,
91     PIXEL_MONO_4BPP,
92     PIXEL_MONO_8BPP,
93     PIXEL_COLOR_RGB655,
94     PIXEL_COLOR_RGB565,
95     PIXEL_COLOR_RGB556,
96     PIXEL_COLOR_ARGB1555,
97     PIXEL_COLOR_RGBA5551,
98     PIXEL_COLOR_RGB0888,
99     PIXEL_COLOR_ARGB8888,
100 } __pixel_rgbfmt_t;
101 
102 typedef enum
103 {
104     RGB_SEQ_ARGB                = 0x00,//for 32bpp
105     RGB_SEQ_BRGA                = 0x02,
106     RGB_SEQ_P10                 = 0x10,//for 16bpp
107     RGB_SEQ_P01                 = 0x11,
108     RGB_SEQ_P3210               = 0x20,//for 8bpp
109     RGB_SEQ_P0123               = 0x21,
110     RGB_SEQ_P76543210           = 0x30,//for 4bpp
111     RGB_SEQ_P67452301           = 0x31,
112     RGB_SEQ_P10325476           = 0x32,
113     RGB_SEQ_P01234567           = 0x33,
114     RGB_SEQ_2BPP_BIG_BIG        = 0x40,//for 2bpp
115     RGB_SEQ_2BPP_BIG_LITTER     = 0x41,
116     RGB_SEQ_2BPP_LITTER_BIG     = 0x42,
117     RGB_SEQ_2BPP_LITTER_LITTER  = 0x43,
118     RGB_SEQ_1BPP_BIG_BIG        = 0x50,//for 1bpp
119     RGB_SEQ_1BPP_BIG_LITTER     = 0x51,
120     RGB_SEQ_1BPP_LITTER_BIG     = 0x52,
121     RGB_SEQ_1BPP_LITTER_LITTER  = 0x53,
122 } __rgb_seq_t;
123 
124 typedef struct
125 {
126     __fb_type_t                 type;
127     union
128     {
129         struct
130         {
131             __pixel_rgbfmt_t    pixelfmt;
132             __bool              br_swap;
133             __rgb_seq_t         pixseq;
134             struct
135             {
136                 void            *addr;
137                 __u32           size;
138             } palette;
139         } rgb;
140         struct
141         {
142             __pixel_yuvfmt_t    pixelfmt;
143             __yuv_mod_t         mod;
144             __yuv_seq_t         yuvseq;
145         } yuv;
146     } fmt;
147     __cs_mode_t                 cs_mode;
148 } __fb_format_t;
149 
150 
151 typedef struct __FB
152 {
153     SIZE                        size;
154     void                        *addr[3];
155     __fb_format_t               fmt;
156 } FB;
157 
158 typedef struct
159 {
160     __u8    alpha;
161     __u8    red;
162     __u8    green;
163     __u8    blue;
164 } COLOR;        /* 32-bit (ARGB) color                  */
165 
166 typedef struct
167 {
168     __s32 x;
169     __s32 y;
170 } OFFSET;       /* coordinate (x, y)                    */
171 
172 typedef COLOR  __color_t;
173 typedef RECT   __rect_t;
174 typedef OFFSET __pos_t;
175 typedef SIZE   __rectsz_t;
176 
177 #endif  /*FRAMEBUFFER_H*/
178