Commit | Line | Data |
---|---|---|
20c51683 JC |
1 | /* |
2 | * | |
3 | * Copyright 2012 Samsung Electronics S.LSI Co. LTD | |
4 | * | |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | * you may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | ||
18 | /*! | |
19 | * \file exynos_gscaler.h | |
20 | * \brief header file for Gscaler HAL | |
21 | * \author ShinWon Lee (shinwon.lee@samsung.com) | |
22 | * \date 2012/01/09 | |
23 | * | |
24 | * <b>Revision History: </b> | |
25 | * - 2012/01/09 : ShinWon Lee(shinwon.lee@samsung.com) \n | |
26 | * Create | |
27 | * | |
28 | * - 2012/02/07 : ShinWon Lee(shinwon.lee@samsung.com) \n | |
29 | * Change file name to exynos_gscaler.h | |
30 | * | |
31 | * - 2012/02/09 : Sangwoo, Parkk(sw5771.park@samsung.com) \n | |
32 | * Use Multiple Gscaler by Multiple Process | |
33 | * | |
34 | * - 2012/02/20 : Sangwoo, Park(sw5771.park@samsung.com) \n | |
35 | * Add exynos_gsc_set_rotation() API | |
36 | * | |
37 | * - 2012/02/20 : ShinWon Lee(shinwon.lee@samsung.com) \n | |
38 | * Add size constrain | |
39 | * | |
40 | */ | |
41 | ||
42 | /*! | |
43 | * \defgroup exynos_gscaler | |
44 | * \brief API for gscaler | |
45 | * \addtogroup Exynos | |
46 | */ | |
234f72f7 | 47 | #include "Exynos_log.h" |
20c51683 JC |
48 | |
49 | #ifndef EXYNOS_GSCALER_H_ | |
50 | #define EXYNOS_GSCALER_H_ | |
51 | ||
52 | #ifdef __cplusplus | |
53 | extern "C" { | |
54 | #endif | |
55 | ||
234f72f7 JC |
56 | //#define EXYNOS_GSC_TRACE 0 |
57 | #ifdef EXYNOS_GSC_TRACE | |
58 | #define EXYNOS_GSC_LOG_TAG "Exynos_gscaler" | |
59 | #define Exynos_gsc_In() Exynos_Log(EXYNOS_DEV_LOG_DEBUG, EXYNOS_GSC_LOG_TAG, "%s In , Line: %d", __FUNCTION__, __LINE__) | |
60 | #define Exynos_gsc_Out() Exynos_Log(EXYNOS_DEV_LOG_DEBUG, EXYNOS_GSC_LOG_TAG, "%s Out , Line: %d", __FUNCTION__, __LINE__) | |
61 | #else | |
62 | #define Exynos_gsc_In() ((void *)0) | |
63 | #define Exynos_gsc_Out() ((void *)0) | |
64 | #endif | |
65 | ||
20c51683 JC |
66 | typedef struct { |
67 | uint32_t x; | |
68 | uint32_t y; | |
69 | uint32_t w; | |
70 | uint32_t h; | |
71 | uint32_t fw; | |
72 | uint32_t fh; | |
73 | uint32_t format; | |
74 | uint32_t yaddr; | |
75 | uint32_t uaddr; | |
76 | uint32_t vaddr; | |
77 | uint32_t rot; | |
234f72f7 JC |
78 | uint32_t cacheable; |
79 | uint32_t drmMode; | |
bcd3f11d | 80 | uint32_t narrowRgb; |
5f54c51b BG |
81 | int acquireFenceFd; |
82 | int releaseFenceFd; | |
234f72f7 | 83 | } exynos_gsc_img; |
20c51683 JC |
84 | |
85 | /* | |
86 | * Create libgscaler handle. | |
87 | * Gscaler dev_num is dynamically changed. | |
88 | * | |
89 | * \ingroup exynos_gscaler | |
90 | * | |
91 | * \return | |
92 | * libgscaler handle | |
93 | */ | |
94 | void *exynos_gsc_create( | |
95 | void); | |
96 | ||
97 | /*! | |
98 | * Create exclusive libgscaler handle. | |
99 | * Other module can't use dev_num of Gscaler. | |
100 | * | |
101 | * \ingroup exynos_gscaler | |
102 | * | |
103 | * \param dev_num | |
104 | * gscaler dev_num[in] | |
105 | * \param gsc_mode | |
106 | *It should be set to GSC_M2M_MODE or GSC_OUTPUT_MODE. | |
107 | * | |
108 | *\param out_mode | |
109 | *It should be set to GSC_OUT_FIMD or GSC_OUT_TV. | |
110 | * | |
111 | * \return | |
112 | * libgscaler handle | |
113 | */ | |
114 | void *exynos_gsc_create_exclusive( | |
115 | int dev_num, | |
116 | int gsc_mode, | |
33aa35f1 DZ |
117 | int out_mode, |
118 | int allow_drm); | |
20c51683 JC |
119 | |
120 | /*! | |
121 | * Destroy libgscaler handle | |
122 | * | |
123 | * \ingroup exynos_gscaler | |
124 | * | |
125 | * \param handle | |
126 | * libgscaler handle[in] | |
127 | */ | |
128 | void exynos_gsc_destroy( | |
129 | void *handle); | |
130 | ||
131 | /*! | |
132 | * Set source format. | |
133 | * | |
134 | * \ingroup exynos_gscaler | |
135 | * | |
136 | * \param handle | |
137 | * libgscaler handle[in] | |
138 | * | |
139 | * \param width | |
140 | * image width[in] | |
141 | * | |
142 | * \param height | |
143 | * image height[in] | |
144 | * | |
145 | * \param crop_left | |
146 | * image left crop size[in] | |
147 | * | |
148 | * \param crop_top | |
149 | * image top crop size[in] | |
150 | * | |
151 | * \param crop_width | |
152 | * cropped image width[in] | |
153 | * | |
154 | * \param crop_height | |
155 | * cropped image height[in] | |
156 | * | |
157 | * \param v4l2_colorformat | |
158 | * color format[in] | |
159 | * | |
160 | * \param cacheable | |
161 | * ccacheable[in] | |
162 | * | |
234f72f7 JC |
163 | * \param mode_drm |
164 | * mode_drm[in] | |
165 | * | |
20c51683 JC |
166 | * \return |
167 | * error code | |
168 | */ | |
169 | int exynos_gsc_set_src_format( | |
170 | void *handle, | |
171 | unsigned int width, | |
172 | unsigned int height, | |
173 | unsigned int crop_left, | |
174 | unsigned int crop_top, | |
175 | unsigned int crop_width, | |
176 | unsigned int crop_height, | |
177 | unsigned int v4l2_colorformat, | |
234f72f7 JC |
178 | unsigned int cacheable, |
179 | unsigned int mode_drm); | |
20c51683 JC |
180 | |
181 | /*! | |
182 | * Set destination format. | |
183 | * | |
184 | * \ingroup exynos_gscaler | |
185 | * | |
186 | * \param handle | |
187 | * libgscaler handle[in] | |
188 | * | |
189 | * \param width | |
190 | * image width[in] | |
191 | * | |
192 | * \param height | |
193 | * image height[in] | |
194 | * | |
195 | * \param crop_left | |
196 | * image left crop size[in] | |
197 | * | |
198 | * \param crop_top | |
199 | * image top crop size[in] | |
200 | * | |
201 | * \param crop_width | |
202 | * cropped image width[in] | |
203 | * | |
204 | * \param crop_height | |
205 | * cropped image height[in] | |
206 | * | |
207 | * \param v4l2_colorformat | |
208 | * color format[in] | |
209 | * | |
210 | * \param cacheable | |
211 | * ccacheable[in] | |
212 | * | |
234f72f7 JC |
213 | * \param mode_drm |
214 | * mode_drm[in] | |
215 | * | |
bcd3f11d GH |
216 | * \param narrowRgb |
217 | * narrow RGB range[in] | |
218 | * | |
20c51683 JC |
219 | * \return |
220 | * error code | |
221 | */ | |
222 | int exynos_gsc_set_dst_format( | |
223 | void *handle, | |
224 | unsigned int width, | |
225 | unsigned int height, | |
226 | unsigned int crop_left, | |
227 | unsigned int crop_top, | |
228 | unsigned int crop_width, | |
229 | unsigned int crop_height, | |
230 | unsigned int v4l2_colorformat, | |
234f72f7 | 231 | unsigned int cacheable, |
bcd3f11d GH |
232 | unsigned int mode_drm, |
233 | unsigned int narrowRgb); | |
20c51683 JC |
234 | |
235 | /*! | |
236 | * Set rotation. | |
237 | * | |
238 | * \ingroup exynos_gscaler | |
239 | * | |
240 | * \param handle | |
241 | * libgscaler handle[in] | |
242 | * | |
243 | * \param rotation | |
244 | * image rotation. It should be multiple of 90[in] | |
245 | * | |
246 | * \param flip_horizontal | |
247 | * image flip_horizontal[in] | |
248 | * | |
249 | * \param flip_vertical | |
250 | * image flip_vertical[in] | |
251 | * | |
252 | * \return | |
253 | * error code | |
254 | */ | |
255 | int exynos_gsc_set_rotation( | |
256 | void *handle, | |
257 | int rotation, | |
258 | int flip_horizontal, | |
259 | int flip_vertical); | |
260 | ||
261 | /*! | |
262 | * Set source buffer | |
263 | * | |
264 | * \ingroup exynos_gscaler | |
265 | * | |
266 | * \param handle | |
267 | * libgscaler handle[in] | |
268 | * | |
269 | * \param addr | |
270 | * buffer pointer array[in] | |
271 | * | |
9f6d8287 BG |
272 | * \param acquireFenceFd |
273 | * acquire fence fd for the buffer or -1[in] | |
274 | * | |
20c51683 JC |
275 | * \return |
276 | * error code | |
277 | */ | |
278 | int exynos_gsc_set_src_addr( | |
279 | void *handle, | |
9f6d8287 BG |
280 | void *addr[3], |
281 | int acquireFenceFd); | |
20c51683 JC |
282 | |
283 | /*! | |
284 | * Set destination buffer | |
285 | * | |
286 | * \param handle | |
287 | * libgscaler handle[in] | |
288 | * | |
289 | * \param addr | |
290 | * buffer pointer array[in] | |
291 | * | |
9f6d8287 BG |
292 | * \param acquireFenceFd |
293 | * acquire fence fd for the buffer or -1[in] | |
294 | * | |
20c51683 JC |
295 | * \return |
296 | * error code | |
297 | */ | |
298 | int exynos_gsc_set_dst_addr( | |
299 | void *handle, | |
9f6d8287 BG |
300 | void *addr[3], |
301 | int acquireFenceFd); | |
20c51683 JC |
302 | |
303 | /*! | |
304 | * Convert color space with presetup color format | |
305 | * | |
306 | * \ingroup exynos_gscaler | |
307 | * | |
308 | * \param handle | |
309 | * libgscaler handle[in] | |
310 | * | |
311 | * \return | |
312 | * error code | |
313 | */ | |
314 | int exynos_gsc_convert( | |
315 | void *handle); | |
316 | ||
317 | /*! | |
318 | * api for local path gscaler. Not yet support. | |
319 | * | |
320 | * \ingroup exynos_gscaler | |
321 | */ | |
322 | int exynos_gsc_connect( | |
323 | void *handle, | |
324 | void *hw); | |
325 | ||
326 | /*! | |
327 | * api for local path gscaler. Not yet support. | |
328 | * | |
329 | * \ingroup exynos_gscaler | |
330 | */ | |
331 | int exynos_gsc_disconnect( | |
332 | void *handle, | |
333 | void *hw); | |
334 | ||
335 | /*! | |
336 | * api for reserving a specific gscaler. | |
337 | * This API could be used from any module that | |
338 | *wants to control the gscalar privately. By calling this function any | |
339 | *module can let the libgscaler know that GSC is used privately. | |
340 | * | |
341 | * \ingroup exynos_gsc_reserve | |
342 | */ | |
343 | void *exynos_gsc_reserve | |
344 | (int dev_num); | |
345 | ||
346 | ||
347 | /*! | |
348 | * api for releasing the gscaler that was reserved with | |
349 | *exynos_gsc_reserve. | |
350 | * \ingroup exynos_gsc_reserve | |
351 | */ | |
352 | void exynos_gsc_release | |
353 | (void *handle); | |
354 | ||
355 | ||
356 | /* | |
357 | *api for setting the GSC config. | |
358 | It configures the GSC for given config | |
359 | */ | |
360 | int exynos_gsc_config_exclusive( | |
361 | void *handle, | |
234f72f7 JC |
362 | exynos_gsc_img *src_img, |
363 | exynos_gsc_img *dst_img); | |
20c51683 JC |
364 | |
365 | /* | |
366 | *api for GSC-OUT run. | |
367 | It queues the srcBuf to GSC and deques a buf from driver. | |
368 | It should be called after configuring the GSC. | |
369 | */ | |
370 | int exynos_gsc_run_exclusive( | |
371 | void *handle, | |
234f72f7 JC |
372 | exynos_gsc_img *src_img, |
373 | exynos_gsc_img *dst_img); | |
20c51683 | 374 | |
43b5926c GH |
375 | /* |
376 | * Blocks until the current frame is done processing. | |
377 | */ | |
378 | int exynos_gsc_wait_frame_done_exclusive | |
379 | (void *handle); | |
380 | ||
20c51683 JC |
381 | /* |
382 | *api for GSC stop. | |
383 | It stops the GSC OUT streaming. | |
384 | */ | |
385 | int exynos_gsc_stop_exclusive | |
386 | (void *handle); | |
387 | ||
388 | enum { | |
389 | GSC_M2M_MODE = 0, | |
390 | GSC_OUTPUT_MODE, | |
391 | GSC_CAPTURE_MODE, | |
392 | GSC_RESERVED_MODE, | |
393 | }; | |
394 | ||
395 | /*flag info */ | |
396 | enum { | |
397 | GSC_DUMMY = 0, | |
398 | GSC_OUT_FIMD, | |
399 | GSC_OUT_TV, | |
400 | GSC_RESERVED, | |
401 | }; | |
234f72f7 JC |
402 | |
403 | enum { | |
404 | GSC_DONE_CNG_CFG = 0, | |
405 | GSC_NEED_CNG_CFG, | |
406 | }; | |
407 | ||
20c51683 JC |
408 | #ifdef __cplusplus |
409 | } | |
410 | #endif | |
411 | ||
412 | #endif /*EXYNOS_GSCALER_H_*/ |