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 : ih264d.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 H264 ASP */ 27/* Decoder on Cortex A8 - Neon platform */ 28/* */ 29/* List of Functions : ih264d_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 _IH264D_H_ 41#define _IH264D_H_ 42#ifdef __cplusplus 43extern "C" { 44#endif 45 46#include "iv.h" 47#include "ivd.h" 48 49 50/*****************************************************************************/ 51/* Constant Macros */ 52/*****************************************************************************/ 53 54/*****************************************************************************/ 55/* Function Macros */ 56/*****************************************************************************/ 57#define IS_IVD_CONCEALMENT_APPLIED(x) (x & (1 << IVD_APPLIEDCONCEALMENT)) 58#define IS_IVD_INSUFFICIENTDATA_ERROR(x) (x & (1 << IVD_INSUFFICIENTDATA)) 59#define IS_IVD_CORRUPTEDDATA_ERROR(x) (x & (1 << IVD_CORRUPTEDDATA)) 60#define IS_IVD_CORRUPTEDHEADER_ERROR(x) (x & (1 << IVD_CORRUPTEDHEADER)) 61#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x) (x & (1 << IVD_UNSUPPORTEDINPUT)) 62#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x) (x & (1 << IVD_UNSUPPORTEDPARAM)) 63#define IS_IVD_FATAL_ERROR(x) (x & (1 << IVD_FATALERROR)) 64#define IS_IVD_INVALID_BITSTREAM_ERROR(x) (x & (1 << IVD_INVALID_BITSTREAM)) 65#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM)) 66 67 68/*****************************************************************************/ 69/* API Function Prototype */ 70/*****************************************************************************/ 71IV_API_CALL_STATUS_T ih264d_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op); 72 73/*****************************************************************************/ 74/* Enums */ 75/*****************************************************************************/ 76/* Codec Error codes for H264 ASP Decoder */ 77 78typedef enum { 79 80 IH264D_VID_HDR_DEC_NUM_FRM_BUF_NOT_SUFFICIENT = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1, 81 82}IH264D_ERROR_CODES_T; 83 84/*****************************************************************************/ 85/* Extended Structures */ 86/*****************************************************************************/ 87 88 89/*****************************************************************************/ 90/* Delete Codec */ 91/*****************************************************************************/ 92 93 94typedef struct { 95 ivd_delete_ip_t s_ivd_delete_ip_t; 96}ih264d_delete_ip_t; 97 98 99typedef struct{ 100 ivd_delete_op_t s_ivd_delete_op_t; 101}ih264d_delete_op_t; 102 103 104/*****************************************************************************/ 105/* Initialize decoder */ 106/*****************************************************************************/ 107 108 109typedef struct { 110 ivd_create_ip_t s_ivd_create_ip_t; 111}ih264d_create_ip_t; 112 113 114typedef struct{ 115 ivd_create_op_t s_ivd_create_op_t; 116}ih264d_create_op_t; 117 118 119/*****************************************************************************/ 120/* Video Decode */ 121/*****************************************************************************/ 122 123 124typedef struct { 125 ivd_video_decode_ip_t s_ivd_video_decode_ip_t; 126}ih264d_video_decode_ip_t; 127 128 129typedef struct{ 130 ivd_video_decode_op_t s_ivd_video_decode_op_t; 131}ih264d_video_decode_op_t; 132 133 134/*****************************************************************************/ 135/* Get Display Frame */ 136/*****************************************************************************/ 137 138 139typedef struct 140{ 141 ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t; 142}ih264d_get_display_frame_ip_t; 143 144 145typedef struct 146{ 147 ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t; 148}ih264d_get_display_frame_op_t; 149 150/*****************************************************************************/ 151/* Set Display Frame */ 152/*****************************************************************************/ 153 154 155typedef struct 156{ 157 ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t; 158}ih264d_set_display_frame_ip_t; 159 160 161typedef struct 162{ 163 ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t; 164}ih264d_set_display_frame_op_t; 165 166/*****************************************************************************/ 167/* Release Display Buffers */ 168/*****************************************************************************/ 169 170 171typedef struct 172{ 173 ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t; 174}ih264d_rel_display_frame_ip_t; 175 176 177typedef struct 178{ 179 ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t; 180}ih264d_rel_display_frame_op_t; 181 182 183typedef enum { 184 /** Set number of cores/threads to be used */ 185 IH264D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START, 186 187 /** Set processor details */ 188 IH264D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001, 189 190 /** Get display buffer dimensions */ 191 IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x100, 192 193 /** Get VUI parameters */ 194 IH264D_CMD_CTL_GET_VUI_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101, 195 196 /** Enable/disable GPU, supported on select platforms */ 197 IH264D_CMD_CTL_GPU_ENABLE_DISABLE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x200, 198 199 /** Set degrade level */ 200 IH264D_CMD_CTL_DEGRADE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x300 201}IH264D_CMD_CTL_SUB_CMDS; 202/*****************************************************************************/ 203/* Video control Flush */ 204/*****************************************************************************/ 205 206 207typedef struct{ 208 ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t; 209}ih264d_ctl_flush_ip_t; 210 211 212typedef struct{ 213 ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t; 214}ih264d_ctl_flush_op_t; 215 216/*****************************************************************************/ 217/* Video control reset */ 218/*****************************************************************************/ 219 220 221typedef struct{ 222 ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t; 223}ih264d_ctl_reset_ip_t; 224 225 226typedef struct{ 227 ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t; 228}ih264d_ctl_reset_op_t; 229 230 231/*****************************************************************************/ 232/* Video control Set Params */ 233/*****************************************************************************/ 234 235 236typedef struct { 237 ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t; 238}ih264d_ctl_set_config_ip_t; 239 240 241typedef struct{ 242 ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t; 243}ih264d_ctl_set_config_op_t; 244 245/*****************************************************************************/ 246/* Video control:Get Buf Info */ 247/*****************************************************************************/ 248 249 250typedef struct{ 251 ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t; 252}ih264d_ctl_getbufinfo_ip_t; 253 254 255 256typedef struct{ 257 ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t; 258}ih264d_ctl_getbufinfo_op_t; 259 260 261/*****************************************************************************/ 262/* Video control:Getstatus Call */ 263/*****************************************************************************/ 264 265 266typedef struct{ 267 ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t; 268}ih264d_ctl_getstatus_ip_t; 269 270 271 272typedef struct{ 273 ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t; 274}ih264d_ctl_getstatus_op_t; 275 276 277/*****************************************************************************/ 278/* Video control:Get Version Info */ 279/*****************************************************************************/ 280 281 282typedef struct{ 283 ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t; 284}ih264d_ctl_getversioninfo_ip_t; 285 286 287 288typedef struct{ 289 ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t; 290}ih264d_ctl_getversioninfo_op_t; 291 292typedef struct{ 293 294 /** 295 * u4_size 296 */ 297 UWORD32 u4_size; 298 299 /** 300 * cmd 301 */ 302 IVD_API_COMMAND_TYPE_T e_cmd; 303 304 /** 305 * sub_cmd 306 */ 307 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 308 309 /** 310 * Pictures that are are degraded 311 * 0 : No degrade 312 * 1 : Only on non-reference frames 313 * 2 : Use interval specified by u4_nondegrade_interval 314 * 3 : All non-key frames 315 * 4 : All frames 316 */ 317 WORD32 i4_degrade_pics; 318 319 /** 320 * Interval for pictures which are completely decoded without any degradation 321 */ 322 WORD32 i4_nondegrade_interval; 323 324 /** 325 * bit position (lsb is zero): Type of degradation 326 * 1 : Disable deblocking 327 * 2 : Faster inter prediction filters 328 * 3 : Fastest inter prediction filters 329 */ 330 WORD32 i4_degrade_type; 331 332}ih264d_ctl_degrade_ip_t; 333 334typedef struct 335{ 336 /** 337 * u4_size 338 */ 339 UWORD32 u4_size; 340 341 /** 342 * error_code 343 */ 344 UWORD32 u4_error_code; 345}ih264d_ctl_degrade_op_t; 346 347typedef struct{ 348 UWORD32 u4_size; 349 IVD_API_COMMAND_TYPE_T e_cmd; 350 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 351 UWORD32 u4_disable_deblk_level; 352}ih264d_ctl_disable_deblock_ip_t; 353 354typedef struct{ 355 UWORD32 u4_size; 356 UWORD32 u4_error_code; 357}ih264d_ctl_disable_deblock_op_t; 358 359 360typedef struct{ 361 UWORD32 u4_size; 362 IVD_API_COMMAND_TYPE_T e_cmd; 363 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 364 UWORD32 u4_num_cores; 365}ih264d_ctl_set_num_cores_ip_t; 366 367typedef struct{ 368 UWORD32 u4_size; 369 UWORD32 u4_error_code; 370}ih264d_ctl_set_num_cores_op_t; 371 372typedef struct 373{ 374 /** 375 * i4_size 376 */ 377 UWORD32 u4_size; 378 /** 379 * cmd 380 */ 381 IVD_API_COMMAND_TYPE_T e_cmd; 382 /** 383 * sub cmd 384 */ 385 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 386 /** 387 * Processor type 388 */ 389 UWORD32 u4_arch; 390 /** 391 * SOC type 392 */ 393 UWORD32 u4_soc; 394 395 /** 396 * num_cores 397 */ 398 UWORD32 u4_num_cores; 399 400}ih264d_ctl_set_processor_ip_t; 401 402typedef struct 403{ 404 /** 405 * i4_size 406 */ 407 UWORD32 u4_size; 408 /** 409 * error_code 410 */ 411 UWORD32 u4_error_code; 412}ih264d_ctl_set_processor_op_t; 413 414typedef struct{ 415 UWORD32 u4_size; 416 IVD_API_COMMAND_TYPE_T e_cmd; 417 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 418}ih264d_ctl_get_frame_dimensions_ip_t; 419 420 421typedef struct{ 422 UWORD32 u4_size; 423 UWORD32 u4_error_code; 424 UWORD32 u4_x_offset[3]; 425 UWORD32 u4_y_offset[3]; 426 UWORD32 u4_disp_wd[3]; 427 UWORD32 u4_disp_ht[3]; 428 UWORD32 u4_buffer_wd[3]; 429 UWORD32 u4_buffer_ht[3]; 430}ih264d_ctl_get_frame_dimensions_op_t; 431 432typedef struct 433{ 434 UWORD32 u4_size; 435 IVD_API_COMMAND_TYPE_T e_cmd; 436 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd; 437}ih264d_ctl_get_vui_params_ip_t; 438 439typedef struct 440{ 441 UWORD32 u4_size; 442 UWORD32 u4_error_code; 443 UWORD8 u1_aspect_ratio_idc; 444 UWORD16 u2_sar_width; 445 UWORD16 u2_sar_height; 446 UWORD8 u1_overscan_appropriate_flag; 447 UWORD8 u1_video_format; 448 UWORD8 u1_video_full_range_flag; 449 UWORD8 u1_colour_primaries; 450 UWORD8 u1_tfr_chars; 451 UWORD8 u1_matrix_coeffs; 452 UWORD8 u1_cr_top_field; 453 UWORD8 u1_cr_bottom_field; 454 UWORD32 u4_num_units_in_tick; 455 UWORD32 u4_time_scale; 456 UWORD8 u1_fixed_frame_rate_flag; 457 UWORD8 u1_nal_hrd_params_present; 458 UWORD8 u1_vcl_hrd_params_present; 459 UWORD8 u1_low_delay_hrd_flag; 460 UWORD8 u1_pic_struct_present_flag; 461 UWORD8 u1_bitstream_restriction_flag; 462 UWORD8 u1_mv_over_pic_boundaries_flag; 463 UWORD32 u4_max_bytes_per_pic_denom; 464 UWORD32 u4_max_bits_per_mb_denom; 465 UWORD32 u4_log2_max_mv_length_horz; 466 UWORD32 u4_log2_max_mv_length_vert; 467 UWORD32 u4_num_reorder_frames; 468 UWORD32 u4_max_dec_frame_buffering; 469}ih264d_ctl_get_vui_params_op_t; 470 471#ifdef __cplusplus 472} /* closing brace for extern "C" */ 473#endif 474#endif /* _IH264D_H_ */ 475