• 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 _EXYNOS_FORMAT_H_
18 #define _EXYNOS_FORMAT_H_
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 enum {
25     HAL_PIXEL_FORMAT_YCbCr_422_P                = 0x100,
26     HAL_PIXEL_FORMAT_YCbCr_420_P                = 0x101,
27     HAL_PIXEL_FORMAT_YCbCr_420_I                = 0x102,
28     HAL_PIXEL_FORMAT_CbYCrY_422_I               = 0x103,
29     HAL_PIXEL_FORMAT_CbYCrY_420_I               = 0x104,
30     HAL_PIXEL_FORMAT_YCbCr_420_SP               = 0x105,
31     HAL_PIXEL_FORMAT_YCrCb_422_SP               = 0x106,
32     HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED         = 0x107,
33     HAL_PIXEL_FORMAT_CUSTOM_ARGB_8888           = 0x108,
34     // support custom format for zero copy
35     HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP        = 0x110,
36     HAL_PIXEL_FORMAT_CUSTOM_YCrCb_420_SP        = 0x111,
37     HAL_PIXEL_FORMAT_CUSTOM_YCbCr_420_SP_TILED  = 0x112,
38     HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_SP        = 0x113,
39     HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_SP        = 0x114,
40     HAL_PIXEL_FORMAT_CUSTOM_YCbCr_422_I         = 0x115,
41     HAL_PIXEL_FORMAT_CUSTOM_YCrCb_422_I         = 0x116,
42     HAL_PIXEL_FORMAT_CUSTOM_CbYCrY_422_I        = 0x117,
43     HAL_PIXEL_FORMAT_CUSTOM_CrYCbY_422_I        = 0x118,
44     HAL_PIXEL_FORMAT_CUSTOM_CbYCr_422_I         = 0x11B,
45 
46     HAL_PIXEL_FORMAT_EXYNOS_YV12                = 0x11C,
47     HAL_PIXEL_FORMAT_EXYNOS_YCrCb_420_SP        = 0x11D,
48     HAL_PIXEL_FORMAT_CUSTOM_MAX
49 };
50 
51 // Gamut (colorspace range)
52 enum {
53     HAL_PIXEL_GAMUT_DEFAULT = 0,
54     // Values range 0-255
55     HAL_PIXEL_GAMUT_WIDE_8,
56     // Values range 16-235
57     HAL_PIXEL_GAMUT_NARROW_8
58 };
59 
60 // Chromaticities (colorspace parameters)
61 enum {
62     HAL_PIXEL_CHROMA_DEFAULT = 0,
63     // BT.601 "Standard Definition" color space
64     HAL_PIXEL_CHROMA_BT601_8,
65     // BT.709 "High Definition" color space
66     HAL_PIXEL_CHROMA_BT709_8
67 };
68 
69 struct ADDRS {
70     unsigned int addr_y;
71     unsigned int addr_cbcr;
72     unsigned int buf_idx;
73     unsigned int reserved;
74 };
75 
76 /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
77 #define V4L2_PIX_FMT_NV12T    v4l2_fourcc('T', 'V', '1', '2')
78 
79 #define ALIGN(x, a)       (((x) + (a) - 1) & ~((a) - 1))
80 #define ALIGN_TO_32B(x)   ((((x) + (1 <<  5) - 1) >>  5) <<  5)
81 #define ALIGN_TO_128B(x)  ((((x) + (1 <<  7) - 1) >>  7) <<  7)
82 #define ALIGN_TO_8KB(x)   ((((x) + (1 << 13) - 1) >> 13) << 13)
83 
84 #define GET_32BPP_FRAME_SIZE(w, h)  (((w) * (h)) << 2)
85 #define GET_24BPP_FRAME_SIZE(w, h)  (((w) * (h)) * 3)
86 #define GET_16BPP_FRAME_SIZE(w, h)  (((w) * (h)) << 1)
87 
88 /*
89  * Convert hal_pixel_format to v4l2_pixel_format.
90  *
91  * @param hal_pixel_format
92  *   hal_pixel_format[in]
93  *
94  * @return
95  *   v4l2_pixel_format
96  */
97 int HAL_PIXEL_FORMAT_2_V4L2_PIX(
98     int hal_pixel_format);
99 
100 /*
101  * Convert v4l2_pixel_format to hal_pixel_format.
102  *
103  * @param v4l2_pixel_format
104  *   v4l2_pixel_format[in]
105  *
106  * @return
107  *   hal_pixel_format
108  */
109 int V4L2_PIX_2_HAL_PIXEL_FORMAT(
110     int v4l2_pixel_format);
111 
112 /*
113  * Get frame_size of hal_pixel_format.
114  *
115  * @param hal_pixel_format
116  *   hal_pixel_format[in]
117  *
118  * @param width
119  *   width[in]
120  *
121  * @param height
122  *   height[in]
123  *
124  * @return
125  *   frame_size
126  */
127 unsigned int FRAME_SIZE(
128     int hal_pixel_format,
129     int width,
130     int height);
131 
132 int PLANAR_FRAME_SIZE(
133     int hal_pixel_format,
134     int width,
135     int height,
136     unsigned int *luma_size,
137     unsigned int *chroma_size);
138 
139 int NUM_PLANES(int hal_pixel_format);
140 
141 
142 /*
143  * Get bpp and plane of v4l2_pixel_format.
144  *
145  * @param v4l2_pixel_format
146  *   v4l2_pixel_format[in]
147  *
148  * @param bpp
149  *   address of bpp[out]
150  *
151  * @param planes
152  *   address of planes[out]
153  *
154  * @return
155  *   error code
156  */
157 int V4L2_PIX_2_YUV_INFO(
158     unsigned int  v4l2_pixel_format,
159     unsigned int *bpp,
160     unsigned int *planes);
161 
162 /*
163  * Get bpp of v4l2_pixel_format.
164  *
165  * @param v4l2_pixel_format
166  *   v4l2_pixel_format[in]
167  *
168  * @return
169  *   bpp
170  */
171 unsigned int get_yuv_bpp(
172     unsigned int v4l2_pixel_format);
173 
174 /*
175  * Get plane of v4l2_pixel_format.
176  *
177  * @param v4l2_pixel_format
178  *   v4l2_pixel_format[in]
179  *
180  * @return
181  *   num of plane
182  */
183 unsigned int get_yuv_planes(
184     unsigned int v4l2_pixel_format);
185 
186 #ifdef __cplusplus
187 }
188 #endif
189 
190 #endif
191