• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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
28 extern "C" {
29 #endif
30 
31 #include <linux/videodev2.h>
32 
33 #ifdef __cplusplus
34 }
35 #endif
36 
37 //---------------------------------------------------------//
38 // Common structure                                        //
39 //---------------------------------------------------------//
40 struct 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 //---------------------------------------------------------//
HAL_PIXEL_FORMAT_2_V4L2_PIX(int HAL_PIXEL_FORMAT)50 inline 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 
V4L2_PIX_2_HAL_PIXEL_FORMAT(int V4L2_PIX)141 inline 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 
FRAME_SIZE(int HAL_PIXEL_FORMAT,int w,int h)238 inline 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__
332