1 /* Copyright (c) 2012, 2014, 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_JPEG_INTERFACE_H_ 31 #define MM_JPEG_INTERFACE_H_ 32 #include "QOMX_JpegExtensions.h" 33 #include "cam_intf.h" 34 35 #define MM_JPEG_MAX_PLANES 3 36 #define MM_JPEG_MAX_BUF CAM_MAX_NUM_BUFS_PER_STREAM 37 #define QUANT_SIZE 64 38 #define QTABLE_MAX 2 39 40 typedef enum { 41 MM_JPEG_FMT_YUV, 42 MM_JPEG_FMT_BITSTREAM 43 } mm_jpeg_format_t; 44 45 typedef struct { 46 cam_3a_params_t cam_3a_params; 47 cam_sensor_params_t sensor_params; 48 } mm_jpeg_exif_params_t; 49 50 typedef struct { 51 uint32_t sequence; /* for jpeg bit streams, assembling is based on sequence. sequence starts from 0 */ 52 uint8_t *buf_vaddr; /* ptr to buf */ 53 int fd; /* fd of buf */ 54 uint32_t buf_size; /* total size of buf (header + image) */ 55 mm_jpeg_format_t format; /* buffer format*/ 56 cam_frame_len_offset_t offset; /* offset of all the planes */ 57 int index; /* index used to identify the buffers */ 58 } mm_jpeg_buf_t; 59 60 typedef struct { 61 uint8_t *buf_vaddr; /* ptr to buf */ 62 int fd; /* fd of buf */ 63 uint32_t buf_filled_len; /* used for output image. filled by the client */ 64 } mm_jpeg_output_t; 65 66 typedef enum { 67 MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2, 68 MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V2, 69 MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V1, 70 MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V1, 71 MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V2, 72 MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V2, 73 MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V1, 74 MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V1, 75 MM_JPEG_COLOR_FORMAT_MONOCHROME, 76 MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V2, 77 MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V1, 78 MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V2, 79 MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V1, 80 MM_JPEG_COLOR_FORMAT_MAX 81 } mm_jpeg_color_format; 82 83 typedef enum { 84 JPEG_JOB_STATUS_DONE = 0, 85 JPEG_JOB_STATUS_ERROR 86 } jpeg_job_status_t; 87 88 typedef void (*jpeg_encode_callback_t)(jpeg_job_status_t status, 89 uint32_t client_hdl, 90 uint32_t jobId, 91 mm_jpeg_output_t *p_output, 92 void *userData); 93 94 typedef struct { 95 /* src img dimension */ 96 cam_dimension_t src_dim; 97 98 /* jpeg output dimension */ 99 cam_dimension_t dst_dim; 100 101 /* crop information */ 102 cam_rect_t crop; 103 } mm_jpeg_dim_t; 104 105 typedef struct { 106 /* num of buf in src img */ 107 uint32_t num_src_bufs; 108 109 /* num of src tmb bufs */ 110 uint32_t num_tmb_bufs; 111 112 /* num of buf in src img */ 113 uint32_t num_dst_bufs; 114 115 int8_t encode_thumbnail; 116 117 /* src img bufs */ 118 mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF]; 119 120 /* this will be used only for bitstream */ 121 mm_jpeg_buf_t src_thumb_buf[MM_JPEG_MAX_BUF]; 122 123 /* this will be used only for bitstream */ 124 mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF]; 125 126 /* mainimage color format */ 127 mm_jpeg_color_format color_format; 128 129 /* thumbnail color format */ 130 mm_jpeg_color_format thumb_color_format; 131 132 /* jpeg quality: range 0~100 */ 133 uint32_t quality; 134 135 /* jpeg thumbnail quality: range 0~100 */ 136 uint32_t thumb_quality; 137 138 /* buf to exif entries, caller needs to 139 * take care of the memory manage with insider ptr */ 140 QOMX_EXIF_INFO exif_info; 141 142 /*Callback registered to be called after encode*/ 143 jpeg_encode_callback_t jpeg_cb; 144 145 /*Appdata passed by the user*/ 146 void* userdata; 147 148 /* thumbnail dimension */ 149 mm_jpeg_dim_t thumb_dim; 150 151 /* rotation informaiton */ 152 int rotation; 153 154 /* thumb rotation informaiton */ 155 int thumb_rotation; 156 157 /* main image dimension */ 158 mm_jpeg_dim_t main_dim; 159 160 /* enable encoder burst mode */ 161 int8_t burst_mode; 162 163 /*jpeg orientation information*/ 164 int jpeg_orientation; 165 166 /* get memory function ptr */ 167 int (*get_memory)( omx_jpeg_ouput_buf_t *p_out_buf); 168 } mm_jpeg_encode_params_t; 169 170 typedef struct { 171 /* num of buf in src img */ 172 uint32_t num_src_bufs; 173 174 /* num of buf in src img */ 175 uint32_t num_dst_bufs; 176 177 /* src img bufs */ 178 mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF]; 179 180 /* this will be used only for bitstream */ 181 mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF]; 182 183 /* color format */ 184 mm_jpeg_color_format color_format; 185 186 jpeg_encode_callback_t jpeg_cb; 187 void* userdata; 188 189 } mm_jpeg_decode_params_t; 190 191 typedef struct { 192 /* active indices of the buffers for encoding */ 193 int32_t src_index; 194 int32_t dst_index; 195 uint32_t thumb_index; 196 mm_jpeg_dim_t thumb_dim; 197 198 /* rotation informaiton */ 199 int rotation; 200 201 /* main image dimension */ 202 mm_jpeg_dim_t main_dim; 203 204 /*session id*/ 205 uint32_t session_id; 206 207 /*Metadata stream*/ 208 metadata_buffer_t *p_metadata; 209 210 /*HAL version*/ 211 cam_hal_version_t hal_version; 212 213 /* buf to exif entries, caller needs to 214 * take care of the memory manage with insider ptr */ 215 QOMX_EXIF_INFO exif_info; 216 217 /* 3a parameters */ 218 mm_jpeg_exif_params_t cam_exif_params; 219 220 /* jpeg encoder QTable */ 221 uint8_t qtable_set[QTABLE_MAX]; 222 OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE qtable[QTABLE_MAX]; 223 } mm_jpeg_encode_job_t; 224 225 typedef struct { 226 /* active indices of the buffers for encoding */ 227 uint32_t src_index; 228 uint32_t dst_index; 229 uint32_t tmb_dst_index; 230 231 /* rotation informaiton */ 232 int rotation; 233 234 /* main image */ 235 mm_jpeg_dim_t main_dim; 236 237 /*session id*/ 238 uint32_t session_id; 239 } mm_jpeg_decode_job_t; 240 241 typedef enum { 242 JPEG_JOB_TYPE_ENCODE, 243 JPEG_JOB_TYPE_DECODE, 244 JPEG_JOB_TYPE_MAX 245 } mm_jpeg_job_type_t; 246 247 typedef struct { 248 mm_jpeg_job_type_t job_type; 249 union { 250 mm_jpeg_encode_job_t encode_job; 251 mm_jpeg_decode_job_t decode_job; 252 }; 253 } mm_jpeg_job_t; 254 255 typedef struct { 256 uint32_t w; 257 uint32_t h; 258 } mm_dimension; 259 260 typedef struct { 261 /* config a job -- async call */ 262 int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id); 263 264 /* abort a job -- sync call */ 265 int (*abort_job)(uint32_t job_id); 266 267 /* create a session */ 268 int (*create_session)(uint32_t client_hdl, 269 mm_jpeg_encode_params_t *p_params, uint32_t *p_session_id); 270 271 /* destroy session */ 272 int (*destroy_session)(uint32_t session_id); 273 274 /* close a jpeg client -- sync call */ 275 int (*close) (uint32_t clientHdl); 276 } mm_jpeg_ops_t; 277 278 typedef struct { 279 /* config a job -- async call */ 280 int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id); 281 282 /* abort a job -- sync call */ 283 int (*abort_job)(uint32_t job_id); 284 285 /* create a session */ 286 int (*create_session)(uint32_t client_hdl, 287 mm_jpeg_decode_params_t *p_params, uint32_t *p_session_id); 288 289 /* destroy session */ 290 int (*destroy_session)(uint32_t session_id); 291 292 /* close a jpeg client -- sync call */ 293 int (*close) (uint32_t clientHdl); 294 } mm_jpegdec_ops_t; 295 296 /* open a jpeg client -- sync call 297 * returns client_handle. 298 * failed if client_handle=0 299 * jpeg ops tbl will be filled in if open succeeds */ 300 uint32_t jpeg_open(mm_jpeg_ops_t *ops, mm_dimension picture_size); 301 302 /* open a jpeg client -- sync call 303 * returns client_handle. 304 * failed if client_handle=0 305 * jpeg ops tbl will be filled in if open succeeds */ 306 uint32_t jpegdec_open(mm_jpegdec_ops_t *ops); 307 308 #endif /* MM_JPEG_INTERFACE_H_ */ 309