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 Name : impeg2d.h */ 23/* */ 24/* Description : This file contains all the necessary structure and */ 25/* enumeration definitions needed for the Application */ 26/* Program Interface(API) of the Ittiam MPEG2 ASP */ 27/* Decoder on Cortex A8 - Neon platform */ 28/* */ 29/* List of Functions : impeg2d_api_function */ 30/* */ 31/* Issues / Problems : None */ 32/* */ 33/* Revision History : */ 34/* */ 35/* DD MM YYYY Author(s) Changes (Describe the changes made) */ 36/* 26 08 2010 100239(RCY) Draft */ 37/* */ 38/*****************************************************************************/ 39 40#ifndef __IMPEG2D_H__ 41#define __IMPEG2D_H__ 42 43#include "iv.h" 44#include "ivd.h" 45#ifdef __cplusplus 46extern "C" 47{ 48#endif 49 50/*****************************************************************************/ 51/* Constant Macros */ 52/*****************************************************************************/ 53#define EXPORT_MPEG2DEC_FULLCODEC_MEM_RECORDS 22 54 55/*****************************************************************************/ 56/* Function Macros */ 57/*****************************************************************************/ 58#define IS_IVD_CONCEALMENT_APPLIED(x) (x & (1 << IVD_APPLIEDCONCEALMENT)) 59#define IS_IVD_INSUFFICIENTDATA_ERROR(x) (x & (1 << IVD_INSUFFICIENTDATA)) 60#define IS_IVD_CORRUPTEDDATA_ERROR(x) (x & (1 << IVD_CORRUPTEDDATA)) 61#define IS_IVD_CORRUPTEDHEADER_ERROR(x) (x & (1 << IVD_CORRUPTEDHEADER)) 62#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x) (x & (1 << IVD_UNSUPPORTEDINPUT)) 63#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x) (x & (1 << IVD_UNSUPPORTEDPARAM)) 64#define IS_IVD_FATAL_ERROR(x) (x & (1 << IVD_FATALERROR)) 65#define IS_IVD_INVALID_BITSTREAM_ERROR(x) (x & (1 << IVD_INVALID_BITSTREAM)) 66#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM)) 67 68#define SET_IVD_CONCEALMENT_APPLIED(x) ((x) |= (x) | (1 << IVD_APPLIEDCONCEALMENT)) 69#define SET_IVD_INSUFFICIENTDATA_ERROR(x) ((x) |= (x) | (1 << IVD_INSUFFICIENTDATA)) 70#define SET_IVD_CORRUPTEDDATA_ERROR(x) ((x) |= (x) | (1 << IVD_CORRUPTEDDATA)) 71#define SET_IVD_CORRUPTEDHEADER_ERROR(x) ((x) |= (x) | (1 << IVD_CORRUPTEDHEADER)) 72#define SET_IVD_UNSUPPORTEDINPUT_ERROR(x) ((x) |= (x) | (1 << IVD_UNSUPPORTEDINPUT)) 73#define SET_IVD_UNSUPPORTEDPARAM_ERROR(x) ((x) |= (x) | (1 << IVD_UNSUPPORTEDPARAM)) 74#define SET_IVD_FATAL_ERROR(x) ((x) |= (x) | (1 << IVD_FATALERROR)) 75#define SET_IVD_INVALID_BITSTREAM_ERROR(x) ((x) |= (x) | (1 << IVD_INVALID_BITSTREAM)) 76#define SET_IVD_INCOMPLETE_BITSTREAM_ERROR(x) ((x) |= (x) | (1 << IVD_INCOMPLETE_BITSTREAM)) 77 78/*****************************************************************************/ 79/* API Function Prototype */ 80/*****************************************************************************/ 81IV_API_CALL_STATUS_T impeg2d_api_function(iv_obj_t *ps_handle, 82 void *pv_api_ip, 83 void *pv_api_op); 84 85/*****************************************************************************/ 86/* Enums */ 87/*****************************************************************************/ 88/* Codec Error codes for MPEG2 ASP Decoder */ 89 90typedef enum 91{ 92 93 IMPEG2D_UNKNOWN_ERROR = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1, 94 /* API calls without init call */ 95 IMPEG2D_INIT_NOT_DONE, 96 /* Query number of Memory Records API */ 97 IMPEG2D_QUERY_NUM_MEM_REC_FAIL, 98 99 /* Fill Memory Records API */ 100 IMPEG2D_FILL_NUM_MEM_REC_NOT_SUFFICIENT, 101 102 /* Initialize Decoder API */ 103 IMPEG2D_INIT_DEC_SCR_MEM_INSUFFICIENT, 104 IMPEG2D_INIT_DEC_PER_MEM_INSUFFICIENT, 105 IMPEG2D_INIT_NUM_MEM_REC_NOT_SUFFICIENT, 106 IMPEG2D_INIT_CHROMA_FORMAT_HEIGHT_ERROR, 107 108 /* Decode Sequence Header API */ 109 IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND, 110 IMPEG2D_FRM_HDR_MARKER_BIT_NOT_FOUND, 111 IMPEG2D_PROF_LEVEL_NOT_SUPPORTED, 112 IMPEG2D_FMT_NOT_SUPPORTED, 113 IMPEG2D_SCALABILITIY_NOT_SUPPORTED, 114 IMPEG2D_PIC_SIZE_NOT_SUPPORTED, 115 116 /* Search for start code API */ 117 //IMPEG2D_SEARCH_START_CODE_FAIL , 118 /* Decode Video Frame API */ 119 IMPEG2D_START_CODE_NOT_FOUND, 120 IMPEG2D_MARKER_BIT_NOT_FOUND, 121 IMPEG2D_INVALID_STUFFING, 122 IMPEG2D_PROFILE_LEVEL_NOT_SUP, 123 IMPEG2D_CHROMA_FMT_NOT_SUP, 124 IMPEG2D_SCALABLITY_NOT_SUP, 125 IMPEG2D_FRM_HDR_DECODE_ERR, 126 IMPEG2D_MB_HDR_DECODE_ERR, 127 IMPEG2D_MB_TEX_DECODE_ERR, 128 IMPEG2D_INCORRECT_QUANT_MATRIX, 129 IMPEG2D_INVALID_SKIP_MB, 130 IMPEG2D_NOT_SUPPORTED_ERR, 131 IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR, 132 IMPEG2D_INVALID_PIC_TYPE, 133 IMPEG2D_INVALID_HUFFMAN_CODE, 134 IMPEG2D_NO_FREE_BUF_ERR, 135 136 /* slice header errors */ 137 IMPEG2D_INVALID_VERT_SIZE, 138 IMPEG2D_MB_DATA_DECODE_ERR, 139 140 /* Get Display Frame API */ 141 IMPEG2D_GET_DISP_FRM_FAIL, 142 143 /* Sample Version limitation */ 144 IMPEG2D_SAMPLE_VERSION_LIMIT_ERR, 145 /** 146 * Width/height greater than max width and max height 147 */ 148 IMPEG2D_UNSUPPORTED_DIMENSIONS, 149 150 /* Unknown API Command */ 151 IMPEG2D_UNKNOWN_API_COMMAND 152 153} IMPEG2D_ERROR_CODES_T; 154 155/*****************************************************************************/ 156/* Extended Structures */ 157/*****************************************************************************/ 158typedef enum 159{ 160 /** Set number of cores/threads to be used */ 161 IMPEG2D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START, 162 163 /** Set processor details */ 164 IMPEG2D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001, 165 166 /** Get display buffer dimensions */ 167 IMPEG2D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START 168 + 0x100, 169 170} IMPEG2D_CMD_CTL_SUB_CMDS; 171 172/*****************************************************************************/ 173/* Get Number of Memory Records */ 174/*****************************************************************************/ 175 176typedef struct 177{ 178 iv_num_mem_rec_ip_t s_ivd_num_mem_rec_ip_t; 179} impeg2d_num_mem_rec_ip_t; 180 181typedef struct 182{ 183 iv_num_mem_rec_op_t s_ivd_num_mem_rec_op_t; 184} impeg2d_num_mem_rec_op_t; 185 186/*****************************************************************************/ 187/* Fill Memory Records */ 188/*****************************************************************************/ 189 190typedef struct 191{ 192 iv_fill_mem_rec_ip_t s_ivd_fill_mem_rec_ip_t; 193 /* Flag to enable sharing of reference buffers between decoder 194 and application */ 195 196 UWORD32 u4_share_disp_buf; 197 198 /* format in which codec has to give out frame data for display */ 199 IV_COLOR_FORMAT_T e_output_format; 200 201 /** 202 * Flag to enable/disable deinterlacing 203 */ 204 UWORD32 u4_deinterlace; 205 206} impeg2d_fill_mem_rec_ip_t; 207 208typedef struct 209{ 210 iv_fill_mem_rec_op_t s_ivd_fill_mem_rec_op_t; 211} impeg2d_fill_mem_rec_op_t; 212 213/*****************************************************************************/ 214/* Retrieve Memory Records */ 215/*****************************************************************************/ 216 217typedef struct 218{ 219 iv_retrieve_mem_rec_ip_t s_ivd_retrieve_mem_rec_ip_t; 220} impeg2d_retrieve_mem_rec_ip_t; 221 222typedef struct 223{ 224 iv_retrieve_mem_rec_op_t s_ivd_retrieve_mem_rec_op_t; 225} impeg2d_retrieve_mem_rec_op_t; 226 227/*****************************************************************************/ 228/* Initialize decoder */ 229/*****************************************************************************/ 230 231typedef struct 232{ 233 ivd_init_ip_t s_ivd_init_ip_t; 234 /* Flag to enable sharing of reference buffers between decoder 235 and application */ 236 UWORD32 u4_share_disp_buf; 237 238 /** 239 * Flag to enable/disable deinterlacing 240 */ 241 UWORD32 u4_deinterlace; 242 243} impeg2d_init_ip_t; 244 245typedef struct 246{ 247 ivd_init_op_t s_ivd_init_op_t; 248} impeg2d_init_op_t; 249 250/*****************************************************************************/ 251/* Video Decode */ 252/*****************************************************************************/ 253 254typedef struct 255{ 256 ivd_video_decode_ip_t s_ivd_video_decode_ip_t; 257} impeg2d_video_decode_ip_t; 258 259typedef struct 260{ 261 ivd_video_decode_op_t s_ivd_video_decode_op_t; 262} impeg2d_video_decode_op_t; 263 264/*****************************************************************************/ 265/* Get Display Frame */ 266/*****************************************************************************/ 267 268typedef struct 269{ 270 ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t; 271} impeg2d_get_display_frame_ip_t; 272 273typedef struct 274{ 275 ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t; 276} impeg2d_get_display_frame_op_t; 277 278/*****************************************************************************/ 279/* Set Display Frame */ 280/*****************************************************************************/ 281typedef struct 282{ 283 ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t; 284} impeg2d_set_display_frame_ip_t; 285 286typedef struct 287{ 288 ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t; 289} impeg2d_set_display_frame_op_t; 290 291/*****************************************************************************/ 292/* Release Display Buffers */ 293/*****************************************************************************/ 294 295typedef struct 296{ 297 ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t; 298} impeg2d_rel_display_frame_ip_t; 299 300typedef struct 301{ 302 ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t; 303} impeg2d_rel_display_frame_op_t; 304 305/*****************************************************************************/ 306/* Video control Flush */ 307/*****************************************************************************/ 308 309typedef struct 310{ 311 ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t; 312} impeg2d_ctl_flush_ip_t; 313 314typedef struct 315{ 316 ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t; 317} impeg2d_ctl_flush_op_t; 318 319/*****************************************************************************/ 320/* Video control reset */ 321/*****************************************************************************/ 322 323typedef struct 324{ 325 ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t; 326} impeg2d_ctl_reset_ip_t; 327 328typedef struct 329{ 330 ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t; 331} impeg2d_ctl_reset_op_t; 332 333/*****************************************************************************/ 334/* Video control Set Params */ 335/*****************************************************************************/ 336 337typedef struct 338{ 339 ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t; 340} impeg2d_ctl_set_config_ip_t; 341 342typedef struct 343{ 344 ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t; 345} impeg2d_ctl_set_config_op_t; 346 347/*****************************************************************************/ 348/* Video control:Get Buf Info */ 349/*****************************************************************************/ 350 351typedef struct 352{ 353 ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t; 354} impeg2d_ctl_getbufinfo_ip_t; 355 356typedef struct 357{ 358 ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t; 359} impeg2d_ctl_getbufinfo_op_t; 360 361/*****************************************************************************/ 362/* Video control:Getstatus Call */ 363/*****************************************************************************/ 364 365typedef struct 366{ 367 ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t; 368} impeg2d_ctl_getstatus_ip_t; 369 370typedef struct 371{ 372 ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t; 373} impeg2d_ctl_getstatus_op_t; 374 375/*****************************************************************************/ 376/* Video control:Get Version Info */ 377/*****************************************************************************/ 378 379typedef struct 380{ 381 ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t; 382} impeg2d_ctl_getversioninfo_ip_t; 383 384typedef struct 385{ 386 ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t; 387} impeg2d_ctl_getversioninfo_op_t; 388 389/*****************************************************************************/ 390/* Video control:Disable Qpel */ 391/*****************************************************************************/ 392 393typedef struct 394{ 395 UWORD32 u4_size; 396 IVD_API_COMMAND_TYPE_T e_cmd; 397 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 398 UWORD32 u4_num_cores; 399} impeg2d_ctl_set_num_cores_ip_t; 400 401typedef struct 402{ 403 UWORD32 u4_size; 404 UWORD32 u4_error_code; 405} impeg2d_ctl_set_num_cores_op_t; 406 407typedef struct 408{ 409 /** 410 * size 411 */ 412 UWORD32 u4_size; 413 /** 414 * cmd 415 */ 416 IVD_API_COMMAND_TYPE_T e_cmd; 417 /** 418 * sub cmd 419 */ 420 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 421 /** 422 * Processor type 423 */ 424 UWORD32 u4_arch; 425 /** 426 * SOC type 427 */ 428 UWORD32 u4_soc; 429 430 /** 431 * num_cores 432 */ 433 UWORD32 u4_num_cores; 434 435} impeg2d_ctl_set_processor_ip_t; 436 437typedef struct 438{ 439 /** 440 * size 441 */ 442 UWORD32 u4_size; 443 /** 444 * error_code 445 */ 446 UWORD32 u4_error_code; 447} impeg2d_ctl_set_processor_op_t; 448 449typedef struct 450{ 451 452 /** 453 * size 454 */ 455 UWORD32 u4_size; 456 457 /** 458 * cmd 459 */ 460 IVD_API_COMMAND_TYPE_T e_cmd; 461 462 /** 463 * sub cmd 464 */ 465 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 466} impeg2d_ctl_get_frame_dimensions_ip_t; 467 468typedef struct 469{ 470 471 /** 472 * size 473 */ 474 UWORD32 u4_size; 475 476 /** 477 * error_code 478 */ 479 UWORD32 u4_error_code; 480 481 /** 482 * x_offset[3] 483 */ 484 UWORD32 u4_x_offset[3]; 485 486 /** 487 * y_offset[3] 488 */ 489 UWORD32 u4_y_offset[3]; 490 491 /** 492 * disp_wd[3] 493 */ 494 UWORD32 u4_disp_wd[3]; 495 496 /** 497 * disp_ht[3] 498 */ 499 UWORD32 u4_disp_ht[3]; 500 501 /** 502 * buffer_wd[3] 503 */ 504 UWORD32 u4_buffer_wd[3]; 505 506 /** 507 * buffer_ht[3] 508 */ 509 UWORD32 u4_buffer_ht[3]; 510} impeg2d_ctl_get_frame_dimensions_op_t; 511 512#ifdef __cplusplus 513} /* closing brace for extern "C" */ 514#endif 515 516#endif /* __IMPEG2D_H__ */ 517