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 /** Get Seq header/seq header extension info */ 171 IMPEG2D_CMD_CTL_GET_SEQ_INFO = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101, 172 173} IMPEG2D_CMD_CTL_SUB_CMDS; 174 175/*****************************************************************************/ 176/* Get Number of Memory Records */ 177/*****************************************************************************/ 178 179typedef struct 180{ 181 iv_num_mem_rec_ip_t s_ivd_num_mem_rec_ip_t; 182} impeg2d_num_mem_rec_ip_t; 183 184typedef struct 185{ 186 iv_num_mem_rec_op_t s_ivd_num_mem_rec_op_t; 187} impeg2d_num_mem_rec_op_t; 188 189/*****************************************************************************/ 190/* Fill Memory Records */ 191/*****************************************************************************/ 192 193typedef struct 194{ 195 iv_fill_mem_rec_ip_t s_ivd_fill_mem_rec_ip_t; 196 /* Flag to enable sharing of reference buffers between decoder 197 and application */ 198 199 UWORD32 u4_share_disp_buf; 200 201 /* format in which codec has to give out frame data for display */ 202 IV_COLOR_FORMAT_T e_output_format; 203 204 /** 205 * Flag to enable/disable deinterlacing 206 */ 207 UWORD32 u4_deinterlace; 208 209} impeg2d_fill_mem_rec_ip_t; 210 211typedef struct 212{ 213 iv_fill_mem_rec_op_t s_ivd_fill_mem_rec_op_t; 214} impeg2d_fill_mem_rec_op_t; 215 216/*****************************************************************************/ 217/* Retrieve Memory Records */ 218/*****************************************************************************/ 219 220typedef struct 221{ 222 iv_retrieve_mem_rec_ip_t s_ivd_retrieve_mem_rec_ip_t; 223} impeg2d_retrieve_mem_rec_ip_t; 224 225typedef struct 226{ 227 iv_retrieve_mem_rec_op_t s_ivd_retrieve_mem_rec_op_t; 228} impeg2d_retrieve_mem_rec_op_t; 229 230/*****************************************************************************/ 231/* Initialize decoder */ 232/*****************************************************************************/ 233 234typedef struct 235{ 236 ivd_init_ip_t s_ivd_init_ip_t; 237 /* Flag to enable sharing of reference buffers between decoder 238 and application */ 239 UWORD32 u4_share_disp_buf; 240 241 /** 242 * Flag to enable/disable deinterlacing 243 */ 244 UWORD32 u4_deinterlace; 245 246} impeg2d_init_ip_t; 247 248typedef struct 249{ 250 ivd_init_op_t s_ivd_init_op_t; 251} impeg2d_init_op_t; 252 253/*****************************************************************************/ 254/* Video Decode */ 255/*****************************************************************************/ 256 257typedef struct 258{ 259 ivd_video_decode_ip_t s_ivd_video_decode_ip_t; 260} impeg2d_video_decode_ip_t; 261 262typedef struct 263{ 264 ivd_video_decode_op_t s_ivd_video_decode_op_t; 265} impeg2d_video_decode_op_t; 266 267/*****************************************************************************/ 268/* Get Display Frame */ 269/*****************************************************************************/ 270 271typedef struct 272{ 273 ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t; 274} impeg2d_get_display_frame_ip_t; 275 276typedef struct 277{ 278 ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t; 279} impeg2d_get_display_frame_op_t; 280 281/*****************************************************************************/ 282/* Set Display Frame */ 283/*****************************************************************************/ 284typedef struct 285{ 286 ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t; 287} impeg2d_set_display_frame_ip_t; 288 289typedef struct 290{ 291 ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t; 292} impeg2d_set_display_frame_op_t; 293 294/*****************************************************************************/ 295/* Release Display Buffers */ 296/*****************************************************************************/ 297 298typedef struct 299{ 300 ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t; 301} impeg2d_rel_display_frame_ip_t; 302 303typedef struct 304{ 305 ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t; 306} impeg2d_rel_display_frame_op_t; 307 308/*****************************************************************************/ 309/* Video control Flush */ 310/*****************************************************************************/ 311 312typedef struct 313{ 314 ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t; 315} impeg2d_ctl_flush_ip_t; 316 317typedef struct 318{ 319 ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t; 320} impeg2d_ctl_flush_op_t; 321 322/*****************************************************************************/ 323/* Video control reset */ 324/*****************************************************************************/ 325 326typedef struct 327{ 328 ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t; 329} impeg2d_ctl_reset_ip_t; 330 331typedef struct 332{ 333 ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t; 334} impeg2d_ctl_reset_op_t; 335 336/*****************************************************************************/ 337/* Video control Set Params */ 338/*****************************************************************************/ 339 340typedef struct 341{ 342 ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t; 343} impeg2d_ctl_set_config_ip_t; 344 345typedef struct 346{ 347 ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t; 348} impeg2d_ctl_set_config_op_t; 349 350/*****************************************************************************/ 351/* Video control:Get Buf Info */ 352/*****************************************************************************/ 353 354typedef struct 355{ 356 ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t; 357} impeg2d_ctl_getbufinfo_ip_t; 358 359typedef struct 360{ 361 ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t; 362} impeg2d_ctl_getbufinfo_op_t; 363 364/*****************************************************************************/ 365/* Video control:Getstatus Call */ 366/*****************************************************************************/ 367 368typedef struct 369{ 370 ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t; 371} impeg2d_ctl_getstatus_ip_t; 372 373typedef struct 374{ 375 ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t; 376} impeg2d_ctl_getstatus_op_t; 377 378/*****************************************************************************/ 379/* Video control:Get Version Info */ 380/*****************************************************************************/ 381 382typedef struct 383{ 384 ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t; 385} impeg2d_ctl_getversioninfo_ip_t; 386 387typedef struct 388{ 389 ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t; 390} impeg2d_ctl_getversioninfo_op_t; 391 392/*****************************************************************************/ 393/* Video control:Disable Qpel */ 394/*****************************************************************************/ 395 396typedef struct 397{ 398 UWORD32 u4_size; 399 IVD_API_COMMAND_TYPE_T e_cmd; 400 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 401 UWORD32 u4_num_cores; 402} impeg2d_ctl_set_num_cores_ip_t; 403 404typedef struct 405{ 406 UWORD32 u4_size; 407 UWORD32 u4_error_code; 408} impeg2d_ctl_set_num_cores_op_t; 409 410typedef struct 411{ 412 /** 413 * size 414 */ 415 UWORD32 u4_size; 416 /** 417 * cmd 418 */ 419 IVD_API_COMMAND_TYPE_T e_cmd; 420 /** 421 * sub cmd 422 */ 423 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 424 /** 425 * Processor type 426 */ 427 UWORD32 u4_arch; 428 /** 429 * SOC type 430 */ 431 UWORD32 u4_soc; 432 433 /** 434 * num_cores 435 */ 436 UWORD32 u4_num_cores; 437 438} impeg2d_ctl_set_processor_ip_t; 439 440typedef struct 441{ 442 /** 443 * size 444 */ 445 UWORD32 u4_size; 446 /** 447 * error_code 448 */ 449 UWORD32 u4_error_code; 450} impeg2d_ctl_set_processor_op_t; 451 452typedef struct 453{ 454 455 /** 456 * size 457 */ 458 UWORD32 u4_size; 459 460 /** 461 * cmd 462 */ 463 IVD_API_COMMAND_TYPE_T e_cmd; 464 465 /** 466 * sub cmd 467 */ 468 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 469} impeg2d_ctl_get_frame_dimensions_ip_t; 470 471typedef struct 472{ 473 474 /** 475 * size 476 */ 477 UWORD32 u4_size; 478 479 /** 480 * error_code 481 */ 482 UWORD32 u4_error_code; 483 484 /** 485 * x_offset[3] 486 */ 487 UWORD32 u4_x_offset[3]; 488 489 /** 490 * y_offset[3] 491 */ 492 UWORD32 u4_y_offset[3]; 493 494 /** 495 * disp_wd[3] 496 */ 497 UWORD32 u4_disp_wd[3]; 498 499 /** 500 * disp_ht[3] 501 */ 502 UWORD32 u4_disp_ht[3]; 503 504 /** 505 * buffer_wd[3] 506 */ 507 UWORD32 u4_buffer_wd[3]; 508 509 /** 510 * buffer_ht[3] 511 */ 512 UWORD32 u4_buffer_ht[3]; 513} impeg2d_ctl_get_frame_dimensions_op_t; 514 515typedef struct 516{ 517 /** 518 * size 519 */ 520 UWORD32 u4_size; 521 522 /** 523 * cmd 524 */ 525 IVD_API_COMMAND_TYPE_T e_cmd; 526 527 /** 528 * sub cmd 529 */ 530 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 531} impeg2d_ctl_get_seq_info_ip_t; 532 533typedef struct 534{ 535 /** 536 * size 537 */ 538 UWORD32 u4_size; 539 540 /** 541 * error_code 542 */ 543 UWORD32 u4_error_code; 544 545 /** 546 * aspect_ratio_information 547 */ 548 UWORD8 u1_aspect_ratio_information; 549 550 /** 551 * frame_rate_code 552 */ 553 UWORD8 u1_frame_rate_code; 554 555 /** 556 * frame_rate_extension_n 557 */ 558 UWORD8 u1_frame_rate_extension_n; 559 560 /** 561 * frame_rate_extension_d 562 */ 563 UWORD8 u1_frame_rate_extension_d; 564 565 /** 566 * video_format 567 */ 568 UWORD8 u1_video_format; 569 570 /** 571 * colour_primaries 572 */ 573 UWORD8 u1_colour_primaries; 574 575 /** 576 * transfer_characteristics 577 */ 578 UWORD8 u1_transfer_characteristics; 579 580 /** 581 * matrix_coefficients 582 */ 583 UWORD8 u1_matrix_coefficients; 584 585 /** 586 * display_horizontal_size 587 */ 588 UWORD16 u2_display_horizontal_size; 589 590 /** 591 * display_vertical_size 592 */ 593 UWORD16 u2_display_vertical_size; 594 595} impeg2d_ctl_get_seq_info_op_t; 596#ifdef __cplusplus 597} /* closing brace for extern "C" */ 598#endif 599 600#endif /* __IMPEG2D_H__ */ 601