1 /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
2  *
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are
5  * met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above
9  *       copyright notice, this list of conditions and the following
10  *       disclaimer in the documentation and/or other materials provided
11  *       with the distribution.
12  *     * Neither the name of The Linux Foundation nor the names of its
13  *       contributors may be used to endorse or promote products derived
14  *       from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  */
29 
30 #ifndef MM_LIB2D_H_
31 #define MM_LIB2D_H_
32 
33 #include "cam_types.h"
34 #ifdef QCAMERA_REDEFINE_LOG
35 #ifndef CAM_MODULE
36 #define CAM_MODULE CAM_NO_MODULE
37 #endif
38 // Camera dependencies
39 #include "mm_camera_dbg.h"
40 #endif
41 
42 /** lib2d_error
43  * @MM_LIB2D_SUCCESS: Success
44  * @MM_LIB2D_ERR_GENERAL: General Error
45  * @MM_LIB2D_ERR_MEMORY: Insufficient memory error
46  * @MM_LIB2D_ERR_BAD_PARAM: Bad params error
47 **/
48 typedef enum lib2d_error_t {
49   MM_LIB2D_SUCCESS,
50   MM_LIB2D_ERR_GENERAL,
51   MM_LIB2D_ERR_MEMORY,
52   MM_LIB2D_ERR_BAD_PARAM,
53 } lib2d_error;
54 
55 /** lib2d_mode
56  * @MM_LIB2D_SYNC_MODE: Synchronous mode
57  * @MM_LIB2D_ASYNC_MODE: Asynchronous mode
58 **/
59 typedef enum mm_lib2d_mode_t {
60   MM_LIB2D_SYNC_MODE,
61   MM_LIB2D_ASYNC_MODE,
62 } lib2d_mode;
63 
64 /** mm_lib2d_buffer_type
65  * @MM_LIB2D_BUFFER_TYPE_RGB: RGB Buffer type
66  * @MM_LIB2D_BUFFER_TYPE_YUV: YUV buffer type
67 **/
68 typedef enum mm_lib2d_buffer_type_t {
69   MM_LIB2D_BUFFER_TYPE_RGB,
70   MM_LIB2D_BUFFER_TYPE_YUV,
71 } mm_lib2d_buffer_type;
72 
73 /** mm_lib2d_rgb_buffer
74  * @fd: handle to the buffer memory
75  * @format: RGB color format
76  * @width: defines width in pixels
77  * @height: defines height in pixels
78  * @buffer: pointer to the RGB buffer
79  * @phys: gpu mapped physical address
80  * @stride: defines stride in bytes
81 **/
82 typedef struct mm_lib2d_rgb_buffer_t {
83   int32_t      fd;
84   cam_format_t format;
85   uint32_t     width;
86   uint32_t     height;
87   void        *buffer;
88   void        *phys;
89   int32_t      stride;
90 } mm_lib2d_rgb_buffer;
91 
92 /** mm_lib2d_yuv_buffer
93  * @fd: handle to the buffer memory
94  * @format: YUV color format
95  * @width: defines width in pixels
96  * @height: defines height in pixels
97  * @plane0: holds the whole buffer if YUV format is not planar
98  * @phys0: gpu mapped physical address
99  * @stride0: stride in bytes
100  * @plane1: holds UV or VU plane for planar interleaved
101  * @phys2: gpu mapped physical address
102  * @stride1: stride in bytes
103  * @plane2: holds the 3. plane, ignored if YUV format is not planar
104  * @phys2: gpu mapped physical address
105  * @stride2: stride in bytes
106 **/
107 typedef struct mm_lib2d_yuv_buffer_t {
108   int32_t      fd;
109   cam_format_t format;
110   uint32_t     width;
111   uint32_t     height;
112   void        *plane0;
113   void        *phys0;
114   int32_t      stride0;
115   void        *plane1;
116   void        *phys1;
117   int32_t      stride1;
118   void        *plane2;
119   void        *phys2;
120   int32_t      stride2;
121 } mm_lib2d_yuv_buffer;
122 
123 /** mm_lib2d_buffer
124  * @buffer_type: Buffer type. whether RGB or YUV
125  * @rgb_buffer: RGB buffer handle
126  * @yuv_buffer: YUV buffer handle
127 **/
128 typedef struct mm_lib2d_buffer_t {
129   mm_lib2d_buffer_type buffer_type;
130   union {
131     mm_lib2d_rgb_buffer rgb_buffer;
132     mm_lib2d_yuv_buffer yuv_buffer;
133   };
134 } mm_lib2d_buffer;
135 
136 /** lib2d_client_cb
137  * @userdata: App userdata
138  * @jobid: job id
139 **/
140 typedef lib2d_error (*lib2d_client_cb) (void *userdata, int jobid);
141 
142 /**
143  * Function: mm_lib2d_init
144  *
145  * Description: Initialization function for Lib2D. src_format, dst_format
146  *     are hints to the underlying component to initialize.
147  *
148  * Input parameters:
149  *   mode - Mode (sync/async) in which App wants lib2d to run.
150  *   src_format - source surface format
151  *   dst_format - Destination surface format
152  *   my_obj - handle that will be returned on succesful Init. App has to
153  *       call other lib2d functions by passing this handle.
154  *
155  * Return values:
156  *   MM_LIB2D_SUCCESS
157  *   MM_LIB2D_ERR_MEMORY
158  *   MM_LIB2D_ERR_BAD_PARAM
159  *   MM_LIB2D_ERR_GENERAL
160  *
161  * Notes: none
162  **/
163 lib2d_error mm_lib2d_init(lib2d_mode mode, cam_format_t src_format,
164   cam_format_t dst_format, void **lib2d_obj_handle);
165 
166 /**
167  * Function: mm_lib2d_deinit
168  *
169  * Description: De-Initialization function for Lib2D
170  *
171  * Input parameters:
172  *   lib2d_obj_handle - handle tto the lib2d object
173  *
174  * Return values:
175  *   MM_LIB2D_SUCCESS
176  *   MM_LIB2D_ERR_GENERAL
177  *
178  * Notes: none
179  **/
180 lib2d_error mm_lib2d_deinit(void *lib2d_obj_handle);
181 
182 /**
183  * Function: mm_lib2d_start_job
184  *
185  * Description: Start executing the job
186  *
187  * Input parameters:
188  *   lib2d_obj_handle - handle tto the lib2d object
189  *   src_buffer - pointer to the source buffer
190  *   dst_buffer - pointer to the destination buffer
191  *   jobid - job id of this request
192  *   userdata - userdata that will be pass through callback function
193  *   cb - callback function that will be called on completion of this job
194  *   rotation - rotation to be applied
195  *
196  * Return values:
197  *   MM_LIB2D_SUCCESS
198  *   MM_LIB2D_ERR_MEMORY
199  *   MM_LIB2D_ERR_GENERAL
200  *
201  * Notes: none
202  **/
203 lib2d_error mm_lib2d_start_job(void *lib2d_obj_handle,
204     mm_lib2d_buffer* src_buffer, mm_lib2d_buffer* dst_buffer,
205     int jobid, void *userdata, lib2d_client_cb cb, uint32_t rotation);
206 
207 #endif /* MM_LIB2D_H_ */
208 
209 
210