blob: 046e141c200ef6a7e8768fff22d5a0aea617b146 [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>
sbrissen99008c22014-11-19 08:26:32 -050032//#include "videodev2_exynos_camera.h"
33//#include "videodev2_exynos_media.h"
codeworkxf1be2fe2012-03-24 17:38:29 +010034
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_RGB32;
72 break;
73
74 case HAL_PIXEL_FORMAT_RGBA_5551:
75 V4L2_PIX = V4L2_PIX_FMT_RGB555X;
76 break;
77
78 case HAL_PIXEL_FORMAT_RGBA_4444:
79 V4L2_PIX = V4L2_PIX_FMT_RGB444;
80 break;
81
82 case HAL_PIXEL_FORMAT_YV12:
83 case HAL_PIXEL_FORMAT_YCbCr_420_P:
84 V4L2_PIX = V4L2_PIX_FMT_YUV420;
85 break;
86
87 case HAL_PIXEL_FORMAT_YCbCr_422_SP:
88 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
89 V4L2_PIX = V4L2_PIX_FMT_NV61;
90 break;
91
92 case HAL_PIXEL_FORMAT_YCbCr_420_SP:
93 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
94 V4L2_PIX = V4L2_PIX_FMT_NV12;
95 break;
96
97 case HAL_PIXEL_FORMAT_YCbCr_422_I:
98 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
99 V4L2_PIX = V4L2_PIX_FMT_YUYV;
100 break;
101
102 case HAL_PIXEL_FORMAT_YCbCr_422_P:
103 V4L2_PIX = V4L2_PIX_FMT_YUV422P;
104 break;
105
106 case HAL_PIXEL_FORMAT_CbYCrY_422_I:
107 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
108 V4L2_PIX = V4L2_PIX_FMT_UYVY;
109 break;
110
111 case HAL_PIXEL_FORMAT_YCrCb_422_SP:
112 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
113 V4L2_PIX = V4L2_PIX_FMT_NV16;
114 break;
115
116 case HAL_PIXEL_FORMAT_YCrCb_420_SP:
117 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
118 V4L2_PIX = V4L2_PIX_FMT_NV21;
119 break;
120
121 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
122 V4L2_PIX = V4L2_PIX_FMT_NV12T;
123 break;
124
125 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
126 V4L2_PIX = V4L2_PIX_FMT_YVYU;
127 break;
128
129 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
130 V4L2_PIX = V4L2_PIX_FMT_VYUY;
131 break;
132
133 default:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200134 ALOGE("%s::unmatched HAL_PIXEL_FORMAT color_space(0x%x)\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100135 __func__, HAL_PIXEL_FORMAT);
136 break;
137 }
138
139 return V4L2_PIX;
140}
141
142inline int V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX)
143{
144 int HAL_PIXEL_FORMAT = -1;
145
146 switch (V4L2_PIX) {
147 case V4L2_PIX_FMT_RGB32:
148 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_RGBA_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_YCbCr_420_P;
173 break;
174
175 case V4L2_PIX_FMT_NV16:
176 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP;
177 break;
178
179 case V4L2_PIX_FMT_NV12:
180 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP;
181 break;
182
183 case V4L2_PIX_FMT_YUYV:
184 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I;
185 break;
186
187 case V4L2_PIX_FMT_YUV422P:
188 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_YCbCr_422_P;
189 break;
190
191 case V4L2_PIX_FMT_UYVY:
192 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I;
193 break;
194
195 case V4L2_PIX_FMT_NV21:
196 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP;
197 break;
198
199 case V4L2_PIX_FMT_NV12T:
200 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED;
201 break;
202
203 case V4L2_PIX_FMT_NV61:
204 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP;
205 break;
206
207 case V4L2_PIX_FMT_YVYU:
208 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I;
209 break;
210
211 case V4L2_PIX_FMT_VYUY:
212 HAL_PIXEL_FORMAT = HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I;
213 break;
214
215 default:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200216 ALOGE("%s::unmatched V4L2_PIX color_space(%d)\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100217 __func__, V4L2_PIX);
218 break;
219 }
220
221 return HAL_PIXEL_FORMAT;
222}
223
224#define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
225#define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
226#define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
227
228#define GET_32BPP_FRAME_SIZE(w, h) (((w) * (h)) << 2)
229#define GET_24BPP_FRAME_SIZE(w, h) (((w) * (h)) * 3)
230#define GET_16BPP_FRAME_SIZE(w, h) (((w) * (h)) << 1)
231
232inline unsigned int FRAME_SIZE(int HAL_PIXEL_FORMAT, int w, int h)
233{
234 unsigned int frame_size = 0;
235 unsigned int size = 0;
236
237 switch (HAL_PIXEL_FORMAT) {
238 // 16bpp
239 case HAL_PIXEL_FORMAT_RGB_565:
240 case HAL_PIXEL_FORMAT_RGBA_5551:
241 case HAL_PIXEL_FORMAT_RGBA_4444:
242 frame_size = GET_16BPP_FRAME_SIZE(w, h);
243 break;
244
245 // 24bpp
246 case HAL_PIXEL_FORMAT_RGB_888:
247 frame_size = GET_24BPP_FRAME_SIZE(w, h);
248 break;
249
250 // 32bpp
251 case HAL_PIXEL_FORMAT_RGBA_8888:
252 case HAL_PIXEL_FORMAT_BGRA_8888:
253 case HAL_PIXEL_FORMAT_RGBX_8888:
254 frame_size = GET_32BPP_FRAME_SIZE(w, h);
255 break;
256
257 // 12bpp
258 case HAL_PIXEL_FORMAT_YV12:
259 case HAL_PIXEL_FORMAT_YCrCb_420_SP:
260 case HAL_PIXEL_FORMAT_YCbCr_420_P:
261 case HAL_PIXEL_FORMAT_YCbCr_420_I:
262 case HAL_PIXEL_FORMAT_CbYCrY_420_I:
263 case HAL_PIXEL_FORMAT_YCbCr_420_SP:
264 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP:
265 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP:
266 size = w * h;
267 frame_size = size + ((size >> 2) << 1);
268 break;
269
270 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED:
271 frame_size = ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h))
272 + ALIGN_TO_8KB(ALIGN_TO_128B(w) * ALIGN_TO_32B(h >> 1));
273 break;
274
275 // 16bpp
276 case HAL_PIXEL_FORMAT_YCbCr_422_SP:
277 case HAL_PIXEL_FORMAT_YCbCr_422_I:
278 case HAL_PIXEL_FORMAT_YCbCr_422_P:
279 case HAL_PIXEL_FORMAT_CbYCrY_422_I:
280 case HAL_PIXEL_FORMAT_YCrCb_422_SP:
281 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP:
282 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP:
283 case HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I:
284 case HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I:
285 case HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I:
286 case HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I:
287 frame_size = GET_16BPP_FRAME_SIZE(w, h);
288 break;
289
290 default:
Daniel Hillenbrand0fdadca2012-07-22 15:45:33 +0200291 ALOGD("%s::no matching source colorformat(0x%x), w(%d), h(%d) fail\n",
codeworkxf1be2fe2012-03-24 17:38:29 +0100292 __func__, HAL_PIXEL_FORMAT, w, h);
293 break;
294 }
295
296 return frame_size;
297}
298
codeworkx79b89172013-02-17 15:05:49 +0000299#endif //__SAMSUNG_SYSLSI_SEC_COMMON_H__