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 #define CAM_MODULE CAM_NO_MODULE
36 
37 // Camera dependencies
38 extern "C" {
39 #include "mm_camera_dbg.h"
40 }
41 #endif
42 
43 /** lib2d_error
44  * @MM_LIB2D_SUCCESS: Success
45  * @MM_LIB2D_ERR_GENERAL: General Error
46  * @MM_LIB2D_ERR_MEMORY: Insufficient memory error
47  * @MM_LIB2D_ERR_BAD_PARAM: Bad params error
48 **/
49 typedef enum lib2d_error_t {
50   MM_LIB2D_SUCCESS,
51   MM_LIB2D_ERR_GENERAL,
52   MM_LIB2D_ERR_MEMORY,
53   MM_LIB2D_ERR_BAD_PARAM,
54 } lib2d_error;
55 
56 /** lib2d_mode
57  * @MM_LIB2D_SYNC_MODE: Synchronous mode
58  * @MM_LIB2D_ASYNC_MODE: Asynchronous mode
59 **/
60 typedef enum mm_lib2d_mode_t {
61   MM_LIB2D_SYNC_MODE,
62   MM_LIB2D_ASYNC_MODE,
63 } lib2d_mode;
64 
65 /** mm_lib2d_buffer_type
66  * @MM_LIB2D_BUFFER_TYPE_RGB: RGB Buffer type
67  * @MM_LIB2D_BUFFER_TYPE_YUV: YUV buffer type
68 **/
69 typedef enum mm_lib2d_buffer_type_t {
70   MM_LIB2D_BUFFER_TYPE_RGB,
71   MM_LIB2D_BUFFER_TYPE_YUV,
72 } mm_lib2d_buffer_type;
73 
74 /** mm_lib2d_rgb_buffer
75  * @fd: handle to the buffer memory
76  * @format: RGB color format
77  * @width: defines width in pixels
78  * @height: defines height in pixels
79  * @buffer: pointer to the RGB buffer
80  * @phys: gpu mapped physical address
81  * @stride: defines stride in bytes
82 **/
83 typedef struct mm_lib2d_rgb_buffer_t {
84   int32_t      fd;
85   cam_format_t format;
86   uint32_t     width;
87   uint32_t     height;
88   void        *buffer;
89   void        *phys;
90   int32_t      stride;
91 } mm_lib2d_rgb_buffer;
92 
93 /** mm_lib2d_yuv_buffer
94  * @fd: handle to the buffer memory
95  * @format: YUV color format
96  * @width: defines width in pixels
97  * @height: defines height in pixels
98  * @plane0: holds the whole buffer if YUV format is not planar
99  * @phys0: gpu mapped physical address
100  * @stride0: stride in bytes
101  * @plane1: holds UV or VU plane for planar interleaved
102  * @phys2: gpu mapped physical address
103  * @stride1: stride in bytes
104  * @plane2: holds the 3. plane, ignored if YUV format is not planar
105  * @phys2: gpu mapped physical address
106  * @stride2: stride in bytes
107 **/
108 typedef struct mm_lib2d_yuv_buffer_t {
109   int32_t      fd;
110   cam_format_t format;
111   uint32_t     width;
112   uint32_t     height;
113   void        *plane0;
114   void        *phys0;
115   int32_t      stride0;
116   void        *plane1;
117   void        *phys1;
118   int32_t      stride1;
119   void        *plane2;
120   void        *phys2;
121   int32_t      stride2;
122 } mm_lib2d_yuv_buffer;
123 
124 /** mm_lib2d_buffer
125  * @buffer_type: Buffer type. whether RGB or YUV
126  * @rgb_buffer: RGB buffer handle
127  * @yuv_buffer: YUV buffer handle
128 **/
129 typedef struct mm_lib2d_buffer_t {
130   mm_lib2d_buffer_type buffer_type;
131   union {
132     mm_lib2d_rgb_buffer rgb_buffer;
133     mm_lib2d_yuv_buffer yuv_buffer;
134   };
135 } mm_lib2d_buffer;
136 
137 /** lib2d_client_cb
138  * @userdata: App userdata
139  * @jobid: job id
140 **/
141 typedef lib2d_error (*lib2d_client_cb) (void *userdata, int jobid);
142 
143 /**
144  * Function: mm_lib2d_init
145  *
146  * Description: Initialization function for Lib2D. src_format, dst_format
147  *     are hints to the underlying component to initialize.
148  *
149  * Input parameters:
150  *   mode - Mode (sync/async) in which App wants lib2d to run.
151  *   src_format - source surface format
152  *   dst_format - Destination surface format
153  *   my_obj - handle that will be returned on succesful Init. App has to
154  *       call other lib2d functions by passing this handle.
155  *
156  * Return values:
157  *   MM_LIB2D_SUCCESS
158  *   MM_LIB2D_ERR_MEMORY
159  *   MM_LIB2D_ERR_BAD_PARAM
160  *   MM_LIB2D_ERR_GENERAL
161  *
162  * Notes: none
163  **/
164 lib2d_error mm_lib2d_init(lib2d_mode mode, cam_format_t src_format,
165   cam_format_t dst_format, void **lib2d_obj_handle);
166 
167 /**
168  * Function: mm_lib2d_deinit
169  *
170  * Description: De-Initialization function for Lib2D
171  *
172  * Input parameters:
173  *   lib2d_obj_handle - handle tto the lib2d object
174  *
175  * Return values:
176  *   MM_LIB2D_SUCCESS
177  *   MM_LIB2D_ERR_GENERAL
178  *
179  * Notes: none
180  **/
181 lib2d_error mm_lib2d_deinit(void *lib2d_obj_handle);
182 
183 /**
184  * Function: mm_lib2d_start_job
185  *
186  * Description: Start executing the job
187  *
188  * Input parameters:
189  *   lib2d_obj_handle - handle tto the lib2d object
190  *   src_buffer - pointer to the source buffer
191  *   dst_buffer - pointer to the destination buffer
192  *   jobid - job id of this request
193  *   userdata - userdata that will be pass through callback function
194  *   cb - callback function that will be called on completion of this job
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);
206 
207 #endif /* MM_LIB2D_H_ */
208 
209 
210