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