1 /****************************************************************************** 2 * 3 * Copyright (C) 2015 The Android Open Source Project 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 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19 */ 20 /** 21 ******************************************************************************* 22 * @file 23 * iv.h 24 * 25 * @brief 26 * This file contains all the necessary structure and enumeration 27 * definitions needed for the Application Program Interface(API) of the 28 * Ittiam Video and Image codecs 29 * 30 * @author 31 * 100239(RCY) 32 * 33 * @par List of Functions: 34 * 35 * @remarks 36 * None 37 * 38 ******************************************************************************* 39 */ 40 41 42 #ifndef _IV_H 43 #define _IV_H 44 45 /*****************************************************************************/ 46 /* Constant Macros */ 47 /*****************************************************************************/ 48 49 50 /*****************************************************************************/ 51 /* Typedefs */ 52 /*****************************************************************************/ 53 54 /*****************************************************************************/ 55 /* Enums */ 56 /*****************************************************************************/ 57 58 59 /* IV_API_CALL_STATUS_T:This is only to return the FAIL/PASS status to the */ 60 /* application for the current API call */ 61 62 typedef enum{ 63 IV_STATUS_NA = 0x7FFFFFFF, 64 IV_SUCCESS = 0x0, 65 IV_FAIL = 0x1, 66 }IV_API_CALL_STATUS_T; 67 68 /* IV_MEM_TYPE_T: This Enumeration defines the type of memory (Internal/Ext */ 69 /* -ernal) along with the cacheable/non-cacheable attributes */ 70 71 typedef enum { 72 IV_NA_MEM_TYPE = 0x7FFFFFFF, 73 IV_INTERNAL_CACHEABLE_PERSISTENT_MEM = 0x1, 74 IV_INTERNAL_CACHEABLE_SCRATCH_MEM = 0x2, 75 IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM = 0x3, 76 IV_EXTERNAL_CACHEABLE_SCRATCH_MEM = 0x4, 77 IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x5, 78 IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x6, 79 IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM = 0x7, 80 IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM = 0x8 81 }IV_MEM_TYPE_T; 82 83 /* IV_COLOR_FORMAT_T: This enumeration lists all the color formats which */ 84 /* finds usage in video/image codecs */ 85 86 typedef enum { 87 IV_CHROMA_NA = 0x7FFFFFFF, 88 IV_YUV_420P = 0x1, 89 IV_YUV_422P = 0x2, 90 IV_420_UV_INTL = 0x3, 91 IV_YUV_422IBE = 0x4, 92 IV_YUV_422ILE = 0x5, 93 IV_YUV_444P = 0x6, 94 IV_YUV_411P = 0x7, 95 IV_GRAY = 0x8, 96 IV_RGB_565 = 0x9, 97 IV_RGB_24 = 0xa, 98 IV_YUV_420SP_UV = 0xb, 99 IV_YUV_420SP_VU = 0xc, 100 IV_RGBA_8888 = 0xd 101 }IV_COLOR_FORMAT_T; 102 103 /* IV_PICTURE_CODING_TYPE_T: VOP/Frame coding type Enumeration */ 104 105 typedef enum { 106 IV_NA_FRAME = 0x7FFFFFFF, 107 IV_I_FRAME = 0x0, 108 IV_P_FRAME = 0x1, 109 IV_B_FRAME = 0x2, 110 IV_IDR_FRAME = 0x3, 111 IV_II_FRAME = 0x4, 112 IV_IP_FRAME = 0x5, 113 IV_IB_FRAME = 0x6, 114 IV_PI_FRAME = 0x7, 115 IV_PP_FRAME = 0x8, 116 IV_PB_FRAME = 0x9, 117 IV_BI_FRAME = 0xa, 118 IV_BP_FRAME = 0xb, 119 IV_BB_FRAME = 0xc, 120 IV_MBAFF_I_FRAME = 0xd, 121 IV_MBAFF_P_FRAME = 0xe, 122 IV_MBAFF_B_FRAME = 0xf, 123 IV_MBAFF_IDR_FRAME = 0x10, 124 IV_NOT_CODED_FRAME = 0x11, 125 IV_FRAMETYPE_DEFAULT = IV_I_FRAME 126 }IV_PICTURE_CODING_TYPE_T; 127 128 /* IV_FLD_TYPE_T: field type Enumeration */ 129 130 typedef enum { 131 IV_NA_FLD = 0x7FFFFFFF, 132 IV_TOP_FLD = 0x0, 133 IV_BOT_FLD = 0x1, 134 IV_FLD_TYPE_DEFAULT = IV_TOP_FLD 135 }IV_FLD_TYPE_T; 136 137 /* IV_CONTENT_TYPE_T: Video content type */ 138 139 typedef enum { 140 IV_CONTENTTYPE_NA = 0x7FFFFFFF, 141 IV_PROGRESSIVE = 0x0, 142 IV_INTERLACED = 0x1, 143 IV_PROGRESSIVE_FRAME = 0x2, 144 IV_INTERLACED_FRAME = 0x3, 145 IV_INTERLACED_TOPFIELD = 0x4, 146 IV_INTERLACED_BOTTOMFIELD = 0x5, 147 IV_CONTENTTYPE_DEFAULT = IV_PROGRESSIVE, 148 }IV_CONTENT_TYPE_T; 149 150 /* IV_API_COMMAND_TYPE_T:API command type */ 151 typedef enum { 152 IV_CMD_NA = 0x7FFFFFFF, 153 IV_CMD_GET_NUM_MEM_REC = 0x0, 154 IV_CMD_FILL_NUM_MEM_REC = 0x1, 155 IV_CMD_RETRIEVE_MEMREC = 0x2, 156 IV_CMD_INIT = 0x3, 157 IV_CMD_DUMMY_ELEMENT = 0x4, 158 }IV_API_COMMAND_TYPE_T; 159 160 /*****************************************************************************/ 161 /* Structure */ 162 /*****************************************************************************/ 163 164 /* IV_OBJ_T: This structure defines the handle for the codec instance */ 165 166 typedef struct{ 167 /** 168 * u4_size of the structure 169 */ 170 UWORD32 u4_size; 171 172 /** 173 * Pointer to the API function pointer table of the codec 174 */ 175 void *pv_fxns; 176 177 /** 178 * Pointer to the handle of the codec 179 */ 180 void *pv_codec_handle; 181 }iv_obj_t; 182 183 /* iv_mem_rec_t: This structure defines the memory record holder which will */ 184 /* be used by the codec to communicate its memory requirements to the */ 185 /* application through appropriate API functions */ 186 187 typedef struct { 188 /** 189 * u4_size of the structure 190 */ 191 UWORD32 u4_size; 192 193 /** 194 * Pointer to the memory allocated by the application 195 */ 196 void *pv_base; 197 198 /** 199 * u4_size of the memory to be allocated 200 */ 201 UWORD32 u4_mem_size; 202 203 /** 204 * Alignment of the memory pointer 205 */ 206 UWORD32 u4_mem_alignment; 207 /** 208 * Nature of the memory to be allocated 209 */ 210 IV_MEM_TYPE_T e_mem_type; 211 }iv_mem_rec_t; 212 213 /* IV_YUV_BUF_T: This structure defines attributes for the yuv buffer */ 214 215 typedef struct { 216 /** 217 * u4_size of the structure 218 */ 219 UWORD32 u4_size; 220 221 /** 222 * Pointer to Luma (Y) Buffer 223 */ 224 225 void *pv_y_buf; 226 /** 227 * Pointer to Chroma (Cb) Buffer 228 */ 229 void *pv_u_buf; 230 231 /** 232 * Pointer to Chroma (Cr) Buffer 233 */ 234 void *pv_v_buf; 235 236 /** 237 * Width of the Luma (Y) Buffer 238 */ 239 UWORD32 u4_y_wd; 240 241 /** 242 * Height of the Luma (Y) Buffer 243 */ 244 UWORD32 u4_y_ht; 245 246 /** 247 * Stride/Pitch of the Luma (Y) Buffer 248 */ 249 UWORD32 u4_y_strd; 250 251 /** 252 * Width of the Chroma (Cb) Buffer 253 */ 254 UWORD32 u4_u_wd; 255 256 /** 257 * Height of the Chroma (Cb) Buffer 258 */ 259 UWORD32 u4_u_ht; 260 261 /** 262 * Stride/Pitch of the Chroma (Cb) Buffer 263 */ 264 UWORD32 u4_u_strd; 265 266 /** 267 * Width of the Chroma (Cr) Buffer 268 */ 269 UWORD32 u4_v_wd; 270 271 /** 272 * Height of the Chroma (Cr) Buffer 273 */ 274 UWORD32 u4_v_ht; 275 276 /** 277 * Stride/Pitch of the Chroma (Cr) Buffer 278 */ 279 UWORD32 u4_v_strd; 280 }iv_yuv_buf_t; 281 282 /*****************************************************************************/ 283 /* Get Number of Memory Records */ 284 /*****************************************************************************/ 285 286 /* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_GET_NUM_MEM_REC */ 287 288 289 typedef struct { 290 /** 291 * u4_size of the structure 292 */ 293 UWORD32 u4_size; 294 295 /** 296 * cmd 297 */ 298 IV_API_COMMAND_TYPE_T e_cmd; 299 }iv_num_mem_rec_ip_t; 300 301 302 typedef struct{ 303 /** 304 * u4_size of the structure 305 */ 306 UWORD32 u4_size; 307 308 /** 309 * error code 310 */ 311 UWORD32 u4_error_code; 312 313 /** 314 * num_mem_rec 315 */ 316 UWORD32 u4_num_mem_rec; 317 }iv_num_mem_rec_op_t; 318 319 320 /*****************************************************************************/ 321 /* Fill Memory Records */ 322 /*****************************************************************************/ 323 324 /* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_FILL_NUM_MEM_REC */ 325 326 327 typedef struct { 328 /** 329 * u4_size of the structure 330 */ 331 UWORD32 u4_size; 332 333 /** 334 * cmd 335 */ 336 IV_API_COMMAND_TYPE_T e_cmd; 337 338 /** 339 * pointer to array of memrecords structures should be filled by codec 340 with details of memory resource requirements 341 */ 342 iv_mem_rec_t *pv_mem_rec_location; 343 344 /** 345 * maximum width for which codec should request memory requirements 346 */ 347 UWORD32 u4_max_frm_wd; 348 349 /** 350 * maximum height for which codec should request memory requirements 351 */ 352 UWORD32 u4_max_frm_ht; 353 }iv_fill_mem_rec_ip_t; 354 355 356 typedef struct{ 357 /** 358 * u4_size of the structure 359 */ 360 UWORD32 u4_size; 361 362 /** 363 * error_code 364 */ 365 UWORD32 u4_error_code; 366 367 /** 368 * no of memory record structures which are filled by codec 369 */ 370 UWORD32 u4_num_mem_rec_filled; 371 }iv_fill_mem_rec_op_t; 372 373 374 /*****************************************************************************/ 375 /* Retrieve Memory Records */ 376 /*****************************************************************************/ 377 378 /* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_RETRIEVE_MEMREC */ 379 380 381 382 typedef struct { 383 /** 384 * u4_size of the structure 385 */ 386 UWORD32 u4_size; 387 388 /** 389 * cmd 390 */ 391 IV_API_COMMAND_TYPE_T e_cmd; 392 393 /** 394 * array of structures where codec should fill with all resources(memory) with it 395 */ 396 iv_mem_rec_t *pv_mem_rec_location; 397 }iv_retrieve_mem_rec_ip_t; 398 399 400 typedef struct{ 401 /** 402 * u4_size of the structure 403 */ 404 UWORD32 u4_size; 405 406 /** 407 * error_code 408 */ 409 UWORD32 u4_error_code; 410 411 /** 412 * no of memory records filled by codec 413 */ 414 UWORD32 u4_num_mem_rec_filled; 415 }iv_retrieve_mem_rec_op_t; 416 417 418 419 #endif /* _IV_H */ 420 421