blob: 3e41afe2e70d88411c1b2c206eed2cb4d6fd0bc9 [file] [log] [blame]
Chirayu Desai0a336cc2012-07-12 14:37:05 +05301/*
2 * Copyright@ Samsung Electronics Co. LTD
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15*/
16
17#ifndef __SAMSUNG_SYSLSI_SEC_COMMON_H__
18#define __SAMSUNG_SYSLSI_SEC_COMMON_H__
19
20//---------------------------------------------------------//
21// Include
22//---------------------------------------------------------//
23
24#include <hardware/hardware.h>
25#include "sec_format.h"
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31#include <linux/videodev2.h>
32
33#ifdef __cplusplus
34}
35#endif
36
37//---------------------------------------------------------//
38// Common structure //
39//---------------------------------------------------------//
40struct ADDRS {
41 unsigned int addr_y;
42 unsigned int addr_cbcr;
43 unsigned int buf_idx;
44 unsigned int reserved;
45};
46
47//---------------------------------------------------------//
48// Common function //
49//---------------------------------------------------------//
50inline int HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT)
51{
52 int V4L2_PIX = -1;
53
54 switch (HAL_PIXEL_FORMAT) {
55 case HAL_PIXEL_FORMAT_RGBA_8888:
56 case HAL_PIXEL_FORMAT_RGBX_8888:
57 V4L2_PIX = V4L2_PIX_FMT_RGB32;
58 break;
59
60 case HAL_PIXEL_FORMAT_RGB_888:
61 V4L2_PIX = V4L2_PIX_FMT_RGB24;
62 break;
63
64 case HAL_PIXEL_FORMAT_RGB_565:
65 V4L2_PIX = V4L2_PIX_FMT_RGB565;
66 break;
67
68 case HAL_PIXEL_FORMAT_BGRA_8888:
69 //V4L2_PIX = V4L2_PIX_FMT_BGR32; // this is not proper on fimc.
70 V4L2_PIX = V4L2_PIX_FMT_RGB32;
71 break;
72
73 case HAL_PIXEL_FORMAT_RGBA_5551:
74 V4L2_PIX = V4L2_PIX_FMT_RGB555X;
75 break;
76
77 case HAL_PIXEL_FORMAT_RGBA_4444:
78 V4L2_PIX = V4L2_PIX_FMT_RGB444;
79 break;
80
81 case HAL_PIXEL_FORMAT_YV12:
82 case HAL_PIXEL_FORMAT_YCbCr_420_P:
83 V4L2_PIX = V4L2_PIX_FMT_YUV420;
84 break;
85
86 case HAL_PIXEL_FORMAT_YCbCr_422_SP:
87 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
88 V4L2_PIX = V4L2_PIX_FMT_NV61;
89 break;
90
91 case HAL_PIXEL_FORMAT_YCbCr_420_SP:
92 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
93 V4L2_PIX = V4L2_PIX_FMT_NV12;
94 break;
95
96 case HAL_PIXEL_FORMAT_YCbCr_422_I:
97 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
98 V4L2_PIX = V4L2_PIX_FMT_YUYV;
99 break;
100
101 case HAL_PIXEL_FORMAT_YCbCr_422_P:
102 V4L2_PIX = V4L2_PIX_FMT_YUV422P;
103 break;
104
105 case HAL_PIXEL_FORMAT_CbYCrY_422_I:
106 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
107 V4L2_PIX = V4L2_PIX_FMT_UYVY;
108 break;
109
110 case HAL_PIXEL_FORMAT_YCrCb_422_SP:
111 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
112 V4L2_PIX = V4L2_PIX_FMT_NV16;
113 break;
114
115 case HAL_PIXEL_FORMAT_YCrCb_420_SP:
116 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
117 V4L2_PIX = V4L2_PIX_FMT_NV21;
118 break;
119
120 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
121 V4L2_PIX = V4L2_PIX_FMT_NV12T;
122 break;
123
124 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
125 V4L2_PIX = V4L2_PIX_FMT_YVYU;
126 break;
127
128 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
129 V4L2_PIX = V4L2_PIX_FMT_VYUY;
130 break;
131
132 default:
133 ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n",
134 __func__, HAL_PIXEL_FORMAT);
135 break;
136 }
137
138 return V4L2_PIX;
139}
140
141inline int V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX)
142{
143 int HAL_PIXEL_FORMAT = -1;
144
145 switch (V4L2_PIX) {
146 case V4L2_PIX_FMT_RGB32:
147 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_8888;
148 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBX_8888;
149 break;
150
151 case V4L2_PIX_FMT_RGB24:
152 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_888;
153 break;
154
155 case V4L2_PIX_FMT_RGB565:
156 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_565;
157 break;
158
159 case V4L2_PIX_FMT_BGR32:
160 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_BGRA_8888;
161 break;
162
163 case V4L2_PIX_FMT_RGB555X:
164 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_5551;
165 break;
166
167 case V4L2_PIX_FMT_RGB444:
168 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_4444;
169 break;
170
171 case V4L2_PIX_FMT_YUV420:
172 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YV12;
173 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_P;
174 break;
175
176 case V4L2_PIX_FMT_NV16:
177 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_422_SP;
178 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP;
179 break;
180
181 case V4L2_PIX_FMT_NV12:
182 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCrCb_420_SP;
183 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP;
184 break;
185
186 case V4L2_PIX_FMT_YUYV:
187 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_I;
188 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I;
189 break;
190
191 case V4L2_PIX_FMT_YUV422P:
192 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_P;
193 break;
194
195 case V4L2_PIX_FMT_UYVY:
196 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CbYCrY_422_I;
197 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I;
198 break;
199
200 case V4L2_PIX_FMT_NV21:
201 //HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_SP;
202 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP;
203 break;
204
205 case V4L2_PIX_FMT_NV12T:
206 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED;
207 break;
208
209 case V4L2_PIX_FMT_NV61:
210 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP;
211 break;
212
213 case V4L2_PIX_FMT_YVYU:
214 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I;
215 break;
216
217 case V4L2_PIX_FMT_VYUY:
218 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I;
219 break;
220
221 default:
222 ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n",
223 __func__, V4L2_PIX);
224 break;
225 }
226
227 return HAL_PIXEL_FORMAT;
228}
229
230#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
231#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
232#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
233
234#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2)
235#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3)
236#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1)
237
238inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h)
239{
240 unsigned int frame_size = 0;
241 unsigned int size = 0;
242
243 switch (HAL_PIXEL_FORMAT) {
244 // 16bpp
245 case HAL_PIXEL_FORMAT_RGB_565:
246 case HAL_PIXEL_FORMAT_RGBA_5551:
247 //case HAL_PIXEL_FORMAT_ARGB_1555:
248 //case HAL_PIXEL_FORMAT_BGRA_5551:
249 //case HAL_PIXEL_FORMAT_ABGR_1555:
250
251 //case HAL_PIXEL_FORMAT_RGBX_5551:
252 //case HAL_PIXEL_FORMAT_XRGB_1555:
253 //case HAL_PIXEL_FORMAT_BGRX_5551:
254 //case HAL_PIXEL_FORMAT_XBGR_1555:
255
256 case HAL_PIXEL_FORMAT_RGBA_4444:
257 //case HAL_PIXEL_FORMAT_ARGB_4444:
258 //case HAL_PIXEL_FORMAT_BGRA_4444:
259 //case HAL_PIXEL_FORMAT_ABGR_4444:
260
261 //case HAL_PIXEL_FORMAT_RGBX_4444:
262 //case HAL_PIXEL_FORMAT_XRGB_4444:
263 //case HAL_PIXEL_FORMAT_BGRX_4444:
264 //case HAL_PIXEL_FORMAT_XBGR_4444:
265 frame_size = GET_16BPP_FRAME_SIZE(w, h);
266 break;
267
268 // 24bpp
269 case HAL_PIXEL_FORMAT_RGB_888:
270 frame_size = GET_24BPP_FRAME_SIZE(w, h);
271 break;
272
273 // 32bpp
274 case HAL_PIXEL_FORMAT_RGBA_8888:
275 //case HAL_PIXEL_FORMAT_ARGB_8888:
276 case HAL_PIXEL_FORMAT_BGRA_8888:
277 //case HAL_PIXEL_FORMAT_ABGR_8888:
278
279 case HAL_PIXEL_FORMAT_RGBX_8888:
280 //case HAL_PIXEL_FORMAT_XRGB_8888:
281 //case HAL_PIXEL_FORMAT_BGRX_8888:
282 //case HAL_PIXEL_FORMAT_XBGR_8888:
283 frame_size = GET_32BPP_FRAME_SIZE(w, h);
284 break;
285
286 // 12bpp
287 case HAL_PIXEL_FORMAT_YV12:
288 case HAL_PIXEL_FORMAT_YCrCb_420_SP:
289 case HAL_PIXEL_FORMAT_YCbCr_420_P:
290 case HAL_PIXEL_FORMAT_YCbCr_420_I:
291 case HAL_PIXEL_FORMAT_CbYCrY_420_I:
292 case HAL_PIXEL_FORMAT_YCbCr_420_SP:
293 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
294 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
295 size = w * h;
296 // frame_size = width * height * 3 / 2;
297 // sw5771.park : very curious...
298 // frame_size = size + ((size / 4) * 2);
299 frame_size = size + ((size >> 2) << 1);
300 break;
301
302 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
303 frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h))
304 + ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1));
305 break;
306
307 // 16bpp
308 case HAL_PIXEL_FORMAT_YCbCr_422_SP:
309 case HAL_PIXEL_FORMAT_YCbCr_422_I:
310 case HAL_PIXEL_FORMAT_YCbCr_422_P:
311 case HAL_PIXEL_FORMAT_CbYCrY_422_I:
312 case HAL_PIXEL_FORMAT_YCrCb_422_SP:
313 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
314 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
315 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
316 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
317 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
318 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
319 frame_size = GET_16BPP_FRAME_SIZE(w, h);
320 break;
321
322 default:
323 ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n",
324 __func__, HAL_PIXEL_FORMAT, w, h);
325 break;
326 }
327
328 return frame_size;
329}
330
331#endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__