1 | /* |
2 | Copyright (c) 2012, Broadcom Europe Ltd |
3 | All rights reserved. |
4 | |
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the following conditions are met: |
7 | * Redistributions of source code must retain the above copyright |
8 | notice, this list of conditions and the following disclaimer. |
9 | * Redistributions in binary form must reproduce the above copyright |
10 | notice, this list of conditions and the following disclaimer in the |
11 | documentation and/or other materials provided with the distribution. |
12 | * Neither the name of the copyright holder nor the |
13 | names of its contributors may be used to endorse or promote products |
14 | derived from this software without specific prior written permission. |
15 | |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY |
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ |
27 | |
28 | // Common image types used by the vc_image library |
29 | |
30 | #ifndef INTERFACE_VC_IMAGE_TYPES_H |
31 | #define INTERFACE_VC_IMAGE_TYPES_H |
32 | |
33 | /* This file gets included by the VCE compiler, which gets confused |
34 | * easily by the VCOS headers. So cannot include vcos.h here. |
35 | */ |
36 | #include "interface/vcos/vcos_stdint.h" |
37 | |
38 | /* We have so many rectangle types; let's try to introduce a common one. */ |
39 | typedef struct tag_VC_RECT_T { |
40 | int32_t x; |
41 | int32_t y; |
42 | int32_t width; |
43 | int32_t height; |
44 | } VC_RECT_T; |
45 | |
46 | struct VC_IMAGE_T; |
47 | typedef struct VC_IMAGE_T VC_IMAGE_T; |
48 | |
49 | /* Types of image supported. */ |
50 | /* Please add any new types to the *end* of this list. Also update |
51 | * case_VC_IMAGE_ANY_xxx macros (below), and the vc_image_type_info table in |
52 | * vc_image/vc_image_helper.c. |
53 | */ |
54 | typedef enum |
55 | { |
56 | VC_IMAGE_MIN = 0, //bounds for error checking |
57 | |
58 | VC_IMAGE_RGB565 = 1, |
59 | VC_IMAGE_1BPP, |
60 | VC_IMAGE_YUV420, |
61 | VC_IMAGE_48BPP, |
62 | VC_IMAGE_RGB888, |
63 | VC_IMAGE_8BPP, |
64 | VC_IMAGE_4BPP, // 4bpp palettised image |
65 | VC_IMAGE_3D32, /* A separated format of 16 colour/light shorts followed by 16 z values */ |
66 | VC_IMAGE_3D32B, /* 16 colours followed by 16 z values */ |
67 | VC_IMAGE_3D32MAT, /* A separated format of 16 material/colour/light shorts followed by 16 z values */ |
68 | VC_IMAGE_RGB2X9, /* 32 bit format containing 18 bits of 6.6.6 RGB, 9 bits per short */ |
69 | VC_IMAGE_RGB666, /* 32-bit format holding 18 bits of 6.6.6 RGB */ |
70 | VC_IMAGE_PAL4_OBSOLETE, // 4bpp palettised image with embedded palette |
71 | VC_IMAGE_PAL8_OBSOLETE, // 8bpp palettised image with embedded palette |
72 | VC_IMAGE_RGBA32, /* RGB888 with an alpha byte after each pixel */ /* xxx: isn't it BEFORE each pixel? */ |
73 | VC_IMAGE_YUV422, /* a line of Y (32-byte padded), a line of U (16-byte padded), and a line of V (16-byte padded) */ |
74 | VC_IMAGE_RGBA565, /* RGB565 with a transparent patch */ |
75 | VC_IMAGE_RGBA16, /* Compressed (4444) version of RGBA32 */ |
76 | VC_IMAGE_YUV_UV, /* VCIII codec format */ |
77 | VC_IMAGE_TF_RGBA32, /* VCIII T-format RGBA8888 */ |
78 | VC_IMAGE_TF_RGBX32, /* VCIII T-format RGBx8888 */ |
79 | VC_IMAGE_TF_FLOAT, /* VCIII T-format float */ |
80 | VC_IMAGE_TF_RGBA16, /* VCIII T-format RGBA4444 */ |
81 | VC_IMAGE_TF_RGBA5551, /* VCIII T-format RGB5551 */ |
82 | VC_IMAGE_TF_RGB565, /* VCIII T-format RGB565 */ |
83 | VC_IMAGE_TF_YA88, /* VCIII T-format 8-bit luma and 8-bit alpha */ |
84 | VC_IMAGE_TF_BYTE, /* VCIII T-format 8 bit generic sample */ |
85 | VC_IMAGE_TF_PAL8, /* VCIII T-format 8-bit palette */ |
86 | VC_IMAGE_TF_PAL4, /* VCIII T-format 4-bit palette */ |
87 | VC_IMAGE_TF_ETC1, /* VCIII T-format Ericsson Texture Compressed */ |
88 | VC_IMAGE_BGR888, /* RGB888 with R & B swapped */ |
89 | VC_IMAGE_BGR888_NP, /* RGB888 with R & B swapped, but with no pitch, i.e. no padding after each row of pixels */ |
90 | VC_IMAGE_BAYER, /* Bayer image, extra defines which variant is being used */ |
91 | VC_IMAGE_CODEC, /* General wrapper for codec images e.g. JPEG from camera */ |
92 | VC_IMAGE_YUV_UV32, /* VCIII codec format */ |
93 | VC_IMAGE_TF_Y8, /* VCIII T-format 8-bit luma */ |
94 | VC_IMAGE_TF_A8, /* VCIII T-format 8-bit alpha */ |
95 | VC_IMAGE_TF_SHORT,/* VCIII T-format 16-bit generic sample */ |
96 | VC_IMAGE_TF_1BPP, /* VCIII T-format 1bpp black/white */ |
97 | VC_IMAGE_OPENGL, |
98 | VC_IMAGE_YUV444I, /* VCIII-B0 HVS YUV 4:4:4 interleaved samples */ |
99 | VC_IMAGE_YUV422PLANAR, /* Y, U, & V planes separately (VC_IMAGE_YUV422 has them interleaved on a per line basis) */ |
100 | VC_IMAGE_ARGB8888, /* 32bpp with 8bit alpha at MS byte, with R, G, B (LS byte) */ |
101 | VC_IMAGE_XRGB8888, /* 32bpp with 8bit unused at MS byte, with R, G, B (LS byte) */ |
102 | |
103 | VC_IMAGE_YUV422YUYV, /* interleaved 8 bit samples of Y, U, Y, V */ |
104 | VC_IMAGE_YUV422YVYU, /* interleaved 8 bit samples of Y, V, Y, U */ |
105 | VC_IMAGE_YUV422UYVY, /* interleaved 8 bit samples of U, Y, V, Y */ |
106 | VC_IMAGE_YUV422VYUY, /* interleaved 8 bit samples of V, Y, U, Y */ |
107 | |
108 | VC_IMAGE_RGBX32, /* 32bpp like RGBA32 but with unused alpha */ |
109 | VC_IMAGE_RGBX8888, /* 32bpp, corresponding to RGBA with unused alpha */ |
110 | VC_IMAGE_BGRX8888, /* 32bpp, corresponding to BGRA with unused alpha */ |
111 | |
112 | VC_IMAGE_YUV420SP, /* Y as a plane, then UV byte interleaved in plane with with same pitch, half height */ |
113 | |
114 | VC_IMAGE_YUV444PLANAR, /* Y, U, & V planes separately 4:4:4 */ |
115 | |
116 | VC_IMAGE_TF_U8, /* T-format 8-bit U - same as TF_Y8 buf from U plane */ |
117 | VC_IMAGE_TF_V8, /* T-format 8-bit U - same as TF_Y8 buf from V plane */ |
118 | |
119 | VC_IMAGE_YUV420_16, /* YUV4:2:0 planar, 16bit values */ |
120 | VC_IMAGE_YUV_UV_16, /* YUV4:2:0 codec format, 16bit values */ |
121 | VC_IMAGE_YUV420_S, /* YUV4:2:0 with U,V in side-by-side format */ |
122 | VC_IMAGE_YUV10COL, /* 10-bit YUV 420 column image format */ |
123 | |
124 | VC_IMAGE_RGBA1010102, /* 32-bpp, 10-bit R/G/B, 2-bit Alpha */ |
125 | |
126 | VC_IMAGE_MAX, //bounds for error checking |
127 | VC_IMAGE_FORCE_ENUM_16BIT = 0xffff, |
128 | } VC_IMAGE_TYPE_T; |
129 | |
130 | /* Image transformations (flips and 90 degree rotations). |
131 | These are made out of 3 primitives (transpose is done first). |
132 | These must match the DISPMAN and Media Player definitions. */ |
133 | |
134 | #define TRANSFORM_HFLIP (1<<0) |
135 | #define TRANSFORM_VFLIP (1<<1) |
136 | #define TRANSFORM_TRANSPOSE (1<<2) |
137 | |
138 | typedef enum { |
139 | VC_IMAGE_ROT0 = 0, |
140 | VC_IMAGE_MIRROR_ROT0 = TRANSFORM_HFLIP, |
141 | VC_IMAGE_MIRROR_ROT180 = TRANSFORM_VFLIP, |
142 | VC_IMAGE_ROT180 = TRANSFORM_HFLIP|TRANSFORM_VFLIP, |
143 | VC_IMAGE_MIRROR_ROT90 = TRANSFORM_TRANSPOSE, |
144 | VC_IMAGE_ROT270 = TRANSFORM_TRANSPOSE|TRANSFORM_HFLIP, |
145 | VC_IMAGE_ROT90 = TRANSFORM_TRANSPOSE|TRANSFORM_VFLIP, |
146 | VC_IMAGE_MIRROR_ROT270 = TRANSFORM_TRANSPOSE|TRANSFORM_HFLIP|TRANSFORM_VFLIP, |
147 | } VC_IMAGE_TRANSFORM_T; |
148 | |
149 | typedef enum |
150 | { //defined to be identical to register bits |
151 | VC_IMAGE_BAYER_RGGB = 0, |
152 | VC_IMAGE_BAYER_GBRG = 1, |
153 | VC_IMAGE_BAYER_BGGR = 2, |
154 | VC_IMAGE_BAYER_GRBG = 3 |
155 | } VC_IMAGE_BAYER_ORDER_T; |
156 | |
157 | typedef enum |
158 | { //defined to be identical to register bits |
159 | VC_IMAGE_BAYER_RAW6 = 0, |
160 | VC_IMAGE_BAYER_RAW7 = 1, |
161 | VC_IMAGE_BAYER_RAW8 = 2, |
162 | VC_IMAGE_BAYER_RAW10 = 3, |
163 | VC_IMAGE_BAYER_RAW12 = 4, |
164 | VC_IMAGE_BAYER_RAW14 = 5, |
165 | VC_IMAGE_BAYER_RAW16 = 6, |
166 | VC_IMAGE_BAYER_RAW10_8 = 7, |
167 | VC_IMAGE_BAYER_RAW12_8 = 8, |
168 | VC_IMAGE_BAYER_RAW14_8 = 9, |
169 | VC_IMAGE_BAYER_RAW10L = 11, |
170 | VC_IMAGE_BAYER_RAW12L = 12, |
171 | VC_IMAGE_BAYER_RAW14L = 13, |
172 | VC_IMAGE_BAYER_RAW16_BIG_ENDIAN = 14, |
173 | VC_IMAGE_BAYER_RAW4 = 15, |
174 | } VC_IMAGE_BAYER_FORMAT_T; |
175 | |
176 | #endif /* __VC_INCLUDE_IMAGE_TYPES_H__ */ |
177 | |
178 | |