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