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