blob: ed4fe80752f0f087c65d1bf9b138dbeab0bdada4 [file] [log] [blame]
codeworkxf1be2fe2012-03-24 17:38:29 +01001/*
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#include "videodev2_samsung.h"
33
34#ifdef __cplusplus
35}
36#endif
37
38//---------------------------------------------------------//
39// Common structure //
40//---------------------------------------------------------//
41struct ADDRS {
42 unsigned int addr_y;
43 unsigned int addr_cbcr;
44 unsigned int buf_idx;
45 unsigned int reserved;
46};
47
48//---------------------------------------------------------//
49// Common function //
50//---------------------------------------------------------//
51inline int HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT)
52{
53 int V4L2_PIX = -1;
54
55 switch (HAL_PIXEL_FORMAT) {
56 case HAL_PIXEL_FORMAT_RGBA_8888:
57 case HAL_PIXEL_FORMAT_RGBX_8888:
58 V4L2_PIX = V4L2_PIX_FMT_RGB32;
59 break;
60
61 case HAL_PIXEL_FORMAT_RGB_888:
62 V4L2_PIX = V4L2_PIX_FMT_RGB24;
63 break;
64
65 case HAL_PIXEL_FORMAT_RGB_565:
66 V4L2_PIX = V4L2_PIX_FMT_RGB565;
67 break;
68
69 case HAL_PIXEL_FORMAT_BGRA_8888:
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:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200133 ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100134 __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 break;
149
150 case V4L2_PIX_FMT_RGB24:
151 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_888;
152 break;
153
154 case V4L2_PIX_FMT_RGB565:
155 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGB_565;
156 break;
157
158 case V4L2_PIX_FMT_BGR32:
159 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_BGRA_8888;
160 break;
161
162 case V4L2_PIX_FMT_RGB555X:
163 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_5551;
164 break;
165
166 case V4L2_PIX_FMT_RGB444:
167 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_4444;
168 break;
169
170 case V4L2_PIX_FMT_YUV420:
171 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_420_P;
172 break;
173
174 case V4L2_PIX_FMT_NV16:
175 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP;
176 break;
177
178 case V4L2_PIX_FMT_NV12:
179 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP;
180 break;
181
182 case V4L2_PIX_FMT_YUYV:
183 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I;
184 break;
185
186 case V4L2_PIX_FMT_YUV422P:
187 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_P;
188 break;
189
190 case V4L2_PIX_FMT_UYVY:
191 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I;
192 break;
193
194 case V4L2_PIX_FMT_NV21:
195 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP;
196 break;
197
198 case V4L2_PIX_FMT_NV12T:
199 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED;
200 break;
201
202 case V4L2_PIX_FMT_NV61:
203 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP;
204 break;
205
206 case V4L2_PIX_FMT_YVYU:
207 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I;
208 break;
209
210 case V4L2_PIX_FMT_VYUY:
211 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I;
212 break;
213
214 default:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200215 ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100216 __func__, V4L2_PIX);
217 break;
218 }
219
220 return HAL_PIXEL_FORMAT;
221}
222
223#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
224#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
225#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
226
227#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2)
228#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3)
229#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1)
230
231inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h)
232{
233 unsigned int frame_size = 0;
234 unsigned int size = 0;
235
236 switch (HAL_PIXEL_FORMAT) {
237 // 16bpp
238 case HAL_PIXEL_FORMAT_RGB_565:
239 case HAL_PIXEL_FORMAT_RGBA_5551:
240 case HAL_PIXEL_FORMAT_RGBA_4444:
241 frame_size = GET_16BPP_FRAME_SIZE(w, h);
242 break;
243
244 // 24bpp
245 case HAL_PIXEL_FORMAT_RGB_888:
246 frame_size = GET_24BPP_FRAME_SIZE(w, h);
247 break;
248
249 // 32bpp
250 case HAL_PIXEL_FORMAT_RGBA_8888:
251 case HAL_PIXEL_FORMAT_BGRA_8888:
252 case HAL_PIXEL_FORMAT_RGBX_8888:
253 frame_size = GET_32BPP_FRAME_SIZE(w, h);
254 break;
255
256 // 12bpp
257 case HAL_PIXEL_FORMAT_YV12:
258 case HAL_PIXEL_FORMAT_YCrCb_420_SP:
259 case HAL_PIXEL_FORMAT_YCbCr_420_P:
260 case HAL_PIXEL_FORMAT_YCbCr_420_I:
261 case HAL_PIXEL_FORMAT_CbYCrY_420_I:
262 case HAL_PIXEL_FORMAT_YCbCr_420_SP:
263 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
264 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
265 size = w * h;
266 frame_size = size + ((size >> 2) << 1);
267 break;
268
269 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
270 frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h))
271 + ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1));
272 break;
273
274 // 16bpp
275 case HAL_PIXEL_FORMAT_YCbCr_422_SP:
276 case HAL_PIXEL_FORMAT_YCbCr_422_I:
277 case HAL_PIXEL_FORMAT_YCbCr_422_P:
278 case HAL_PIXEL_FORMAT_CbYCrY_422_I:
279 case HAL_PIXEL_FORMAT_YCrCb_422_SP:
280 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
281 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
282 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
283 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
284 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
285 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
286 frame_size = GET_16BPP_FRAME_SIZE(w, h);
287 break;
288
289 default:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200290 ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100291 __func__, HAL_PIXEL_FORMAT, w, h);
292 break;
293 }
294
295 return frame_size;
296}
297
298#endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__