1 /****************************************************************************** 2 * 3 * Copyright (C) 2018 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 ihevce_api.h 23 * 24 * \brief 25 * This file contains definitions and structures which are shared between 26 * application and HEVC Encoder Processing interface layer 27 * 28 * \date 29 * 18/09/2012 30 * 31 * \author 32 * Ittiam 33 * 34 ****************************************************************************** 35 */ 36 37 #ifndef _IHEVCE_API_H_ 38 #define _IHEVCE_API_H_ 39 40 /*****************************************************************************/ 41 /* Constant Macros */ 42 /*****************************************************************************/ 43 #define IHEVCE_MAX_IO_BUFFERS 3 44 45 #define IHEVCE_EXTENDED_SAR 255 46 47 #define IHEVCE_MBR_CORE_WEIGHTAGE 0.25f 48 49 /** Maximum number of resolutions encoder can run */ 50 #define IHEVCE_MAX_NUM_RESOLUTIONS 1 //10 51 52 /** Maximum number of bit-rate instances encoder can run */ 53 #define IHEVCE_MAX_NUM_BITRATES 1 //5 54 55 #define MAX_NUM_CORES 8 // Supports upto 160 logical cores. 56 57 /* Max length of filenames */ 58 #define MAX_LEN_FILENAME 200 59 60 /* max number of tiles per row/cols */ 61 //Main/Main10 profile (=4096/256) //Don't change this 62 #define MAX_TILE_COLUMNS 16 63 //Main/Main10 profile (=2160/64) //Don't change this 64 #define MAX_TILE_ROWS 34 65 66 #define IHEVCE_ASYNCH_ERROR_START 0x0000E600 67 #define IHEVCE_SYNCH_ERROR_START 0x0000E700 68 69 #define MAX_NUM_DYN_BITRATE_CMDS (IHEVCE_MAX_NUM_RESOLUTIONS * IHEVCE_MAX_NUM_BITRATES) 70 71 /* NAL units related definations */ 72 #define MAX_NUM_PREFIX_NALS_PER_AU 20 73 #define MAX_NUM_SUFFIX_NALS_PER_AU 20 74 #define MAX_NUM_VCL_NALS_PER_AU 200 /* as per level 5.1 from spec */ 75 76 /* Maximum number of processor groups supported */ 77 #define MAX_NUMBER_PROC_GRPS 4 78 79 /** @brief maximum length of CC User Data in a single frame */ 80 #define MAX_SEI_PAYLOAD_PER_TLV (0x200) 81 82 #define MAX_NUMBER_OF_SEI_PAYLOAD (10) 83 84 #define IHEVCE_COMMANDS_TAG_MASK (0x0000FFFF) 85 86 // Upper 16 bits are used to communicate payload type 87 #define IHEVCE_PAYLOAD_TYPE_MASK (0xFFFF0000) 88 89 #define IHEVCE_PAYLOAD_TYPE_SHIFT (16) 90 91 #define MAX_FRAME_RATE 120.0 92 #define MIN_FRAME_RATE 1.0 93 94 /*****************************************************************************/ 95 /* Enums */ 96 /*****************************************************************************/ 97 /** 98 * @brief Enumerations for Quality config. 99 */ 100 typedef enum 101 { 102 IHEVCE_QUALITY_DUMMY = 0xFFFFFFFF, 103 IHEVCE_QUALITY_P0 = 0, 104 IHEVCE_QUALITY_P2 = 2, 105 IHEVCE_QUALITY_P3, 106 IHEVCE_QUALITY_P4, 107 IHEVCE_QUALITY_P5, 108 IHEVCE_QUALITY_P6, 109 IHEVCE_QUALITY_P7, 110 IHEVCE_NUM_QUALITY_PRESET 111 } IHEVCE_QUALITY_CONFIG_T; 112 113 /*****************************************************************************/ 114 /* Enums */ 115 /*****************************************************************************/ 116 /** 117 * @brief Enumerations for Quality config for auxilary bitrate in case of MBR. 118 */ 119 typedef enum 120 { 121 IHEVCE_MBR_DUMMY = -1, 122 IHEVCE_MBR_HIGH_QUALITY = 0, 123 IHEVCE_MBR_MEDIUM_SPEED, 124 IHEVCE_MBR_HIGH_SPEED, 125 IHEVCE_MBR_EXTREME_SPEED 126 } IHEVCE_QUALITY_CONFIG_MBR_T; 127 128 /** 129 * @brief Enumerations for Rate Control config. 130 */ 131 typedef enum 132 { 133 IHEVCE_RC_DUMMY = 0xFFFFFFFF, 134 IHEVCE_RC_LOW_DELAY = 1, 135 IHEVCE_RC_STORAGE = 2, 136 IHEVCE_RC_TWOPASS = 3, 137 IHEVCE_RC_NONE = 4, 138 IHEVCE_RC_USER_DEFINED = 5, 139 IHEVCE_RC_RATECONTROLPRESET_DEFAULT = IHEVCE_RC_LOW_DELAY 140 } IHEVCE_RATE_CONTROL_CONFIG_T; 141 142 /** 143 * @brief Enumerations for Intra Refresh config. 144 */ 145 typedef enum 146 { 147 IHEVCE_REFRESH_DUMMY = 0, 148 IHEVCE_I_SILICE = 1, 149 IHEVCE_COLUMN_BASED = 2, 150 IHEVCE_DBR = 3, 151 IHEVCE_GDR = 4 152 } IHEVCE_REFRESH_CONFIG_T; 153 154 /** 155 * @brief Enumerations for ASYNCH Control Commands Tags. 156 */ 157 typedef enum 158 { 159 IHEVCE_ASYNCH_API_END_TAG = 0xFFFF, 160 IHEVCE_ASYNCH_API_SETBITRATE_TAG = 0x01, 161 IHEVCE_ASYNCH_API_SET_RF_TAG = 0x02, 162 IHEVCE_ASYNCH_API_FORCE_CLOSE_TAG = 0x03 163 } IHEVCE_ASYNCH_API_COMMAND_TAG_T; 164 165 typedef enum 166 { 167 IHEVCE_ASYNCH_ERR_NO_END_TAG = IHEVCE_ASYNCH_ERROR_START + 0x01, 168 IHEVCE_ASYNCH_ERR_TLV_ERROR = IHEVCE_ASYNCH_ERROR_START + 0x02, 169 IHEVCE_ASYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_ASYNCH_ERROR_START + 0x03, 170 IHEVCE_ASYNCH_ERR_BR_NOT_BYTE = IHEVCE_ASYNCH_ERROR_START + 0x04, 171 IHEVCE_ASYNCH_FORCE_CLOSE_NOT_SUPPORTED = IHEVCE_ASYNCH_ERROR_START + 0x05 172 } IHEVCE_ASYNCH_ERROR_TAG_T; 173 174 /** 175 * @brief Enumerations for SYNCH Control Commands Tags. 176 */ 177 typedef enum 178 { 179 IHEVCE_SYNCH_API_END_TAG = 0xFFFF, 180 IHEVCE_SYNCH_API_FLUSH_TAG = 0x21, 181 IHEVCE_SYNCH_API_FORCE_IDR_TAG = 0x22, 182 IHEVCE_SYNCH_API_REG_KEYFRAME_SEI_TAG = 0x23, 183 IHEVCE_SYNCH_API_REG_ALLFRAME_SEI_TAG = 0x24, 184 IHEVCE_SYNCH_API_SET_RES_TAG = 0x25 185 } IHEVCE_SYNCH_API_COMMAND_TAG_T; 186 187 typedef enum 188 { 189 IHEVCE_SYNCH_ERR_NO_END_TAG = IHEVCE_SYNCH_ERROR_START + 0x11, 190 IHEVCE_SYNCH_ERR_TLV_ERROR = IHEVCE_SYNCH_ERROR_START + 0x12, 191 IHEVCE_SYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_SYNCH_ERROR_START + 0x13, 192 IHEVCE_SYNCH_ERR_NO_PADDING = IHEVCE_SYNCH_ERROR_START + 0x14, 193 IHEVCE_SYNCH_ERR_WRONG_LENGTH = IHEVCE_SYNCH_ERROR_START + 0x15, 194 IHEVCE_SYNCH_ERR_FREQ_FORCE_IDR_RECEIVED = IHEVCE_SYNCH_ERROR_START + 0x16, 195 IHEVCE_SYNCH_ERR_TOO_MANY_SEI_MSG = IHEVCE_SYNCH_ERROR_START + 0x17, 196 IHEVCE_SYNCH_ERR_SET_RES_NOT_SUPPORTED = IHEVCE_SYNCH_ERROR_START + 0x18 197 } IHEVCE_SYNCH_ERROR_TAG_T; 198 199 /** 200 * @brief Enumerations for output status identifier 201 */ 202 typedef enum 203 { 204 IHEVCE_PROCESS = 0, 205 IHEVCE_CONTROL_STS, 206 IHEVCE_CREATE_STS, 207 } IHEVCE_OUT_STS_ID_T; 208 209 /** 210 * Scenetype enums 211 */ 212 typedef enum 213 { 214 IHEVCE_SCENE_TYPE_NORMAL = 0, 215 IHEVCE_SCENE_TYPE_SCENE_CUT, 216 IHEVCE_SCENE_TYPE_FLASH, 217 IHEVCE_SCENE_TYPE_FADE_IN, 218 IHEVCE_SCENE_TYPE_FADE_OUT, 219 IHEVCE_SCENE_TYPE_DISSOLVE, 220 IHEVCE_MAX_NUM_SCENE_TYPES 221 } IHEVCE_SCENE_TYPE; 222 223 /** 224 * Type of data. Used for scanning the config file 225 */ 226 typedef enum 227 { 228 IHEVCE_STRING = 0, 229 IHEVCE_INT, 230 IHEVCE_FLOAT 231 } IHEVCE_DATA_TYPE; 232 233 /*****************************************************************************/ 234 /* Structure */ 235 /*****************************************************************************/ 236 237 /** 238 * @brief Structure to describe the properties of Source of encoder. 239 */ 240 typedef struct 241 { 242 /** Used for checking version compatibility */ 243 WORD32 i4_size; 244 245 /** Input chroma format 246 * @sa : IV_COLOR_FORMAT_T 247 */ 248 WORD32 inp_chr_format; 249 250 /** Internal chroma format 251 * @sa : IV_COLOR_FORMAT_T 252 */ 253 WORD32 i4_chr_format; 254 255 /** Width of input luma */ 256 WORD32 i4_width; 257 258 /** Height of input luma */ 259 WORD32 i4_height; 260 261 /** Configured Width of input luma */ 262 WORD32 i4_orig_width; 263 264 /** Configured Height of input luma */ 265 WORD32 i4_orig_height; 266 267 /** Width of each pixel in bits */ 268 WORD32 i4_input_bit_depth; 269 270 /** Input Content Type 271 * @sa : IV_CONTENT_TYPE_T 272 */ 273 WORD32 i4_field_pic; 274 275 /** Frame/Field rate numerator 276 * (final fps = frame_rate_num/frame_rate_denom) 277 */ 278 WORD32 i4_frm_rate_num; 279 280 /** Can be 1000 or 1001 to allow proper representation 281 * of fractional frame-rates 282 */ 283 WORD32 i4_frm_rate_denom; 284 285 /** 286 * Whether Top field is encoded first or bottom 287 */ 288 WORD32 i4_topfield_first; 289 290 } ihevce_src_params_t; 291 292 /*****************************************************************************/ 293 /* Structure */ 294 /*****************************************************************************/ 295 /** 296 * @brief Structure to describe attributes of a layer. 297 */ 298 typedef struct 299 { 300 /** Used for checking version compatibility */ 301 WORD32 i4_size; 302 303 /** Width of input luma */ 304 WORD32 i4_width; 305 306 /** Height of input luma */ 307 WORD32 i4_height; 308 309 /** Frame/Field rate 310 * (final fps = src frame_rate_num/src frame_rate_denom/i4_frm_rate_scale_factor) 311 */ 312 WORD32 i4_frm_rate_scale_factor; 313 314 /** Quality vs. complexity 315 * @sa : IHEVCE_QUALITY_CONFIG_T 316 */ 317 IHEVCE_QUALITY_CONFIG_T i4_quality_preset; 318 319 /** 0 : Level 4, any level above this not supported */ 320 WORD32 i4_codec_level; 321 322 /** Number of bit-rate instances for the current layer 323 */ 324 WORD32 i4_num_bitrate_instances; 325 326 /** Target Bit-rate in bits for Constant bitrate cases */ 327 WORD32 ai4_tgt_bitrate[IHEVCE_MAX_NUM_BITRATES]; 328 329 /** Peak Bit-rate in bits for each bitrate */ 330 WORD32 ai4_peak_bitrate[IHEVCE_MAX_NUM_BITRATES]; 331 332 /** Maximum VBV buffer size in bits for each and each bitrate */ 333 WORD32 ai4_max_vbv_buffer_size[IHEVCE_MAX_NUM_BITRATES]; 334 335 /** Frame level Qp for Constant Qp mode */ 336 WORD32 ai4_frame_qp[IHEVCE_MAX_NUM_BITRATES]; 337 338 } ihevce_tgt_params_t; 339 340 /*****************************************************************************/ 341 /* Structure */ 342 /*****************************************************************************/ 343 /** 344 * @brief Structure to describe the properties of target 345 resolution of encoder. 346 */ 347 typedef struct 348 { 349 /** Used for checking version compatibility */ 350 WORD32 i4_size; 351 352 /** Number of resolution layers 353 */ 354 WORD32 i4_num_res_layers; 355 356 /* Applicable only for multi res cases. 357 Output of only one resolution to be dumped */ 358 359 WORD32 i4_mres_single_out; 360 361 /* Specify starting resolution id for mres single out case. 362 This is only valid in mres_single out mode */ 363 364 WORD32 i4_start_res_id; 365 366 /** To enable reuse across layers 367 */ 368 WORD32 i4_multi_res_layer_reuse; 369 370 /** Quality vs. complexity for auxilary bitrates 371 * @sa : IHEVCE_QUALITY_CONFIG_MBR_T 372 */ 373 IHEVCE_QUALITY_CONFIG_MBR_T i4_mbr_quality_setting; 374 375 /** 376 *Bit depth used by encoder 377 */ 378 WORD32 i4_internal_bit_depth; 379 380 /** 381 *Temporal scalability enable Flag 382 */ 383 WORD32 i4_enable_temporal_scalability; 384 385 /** Resolution and frame rate scaling factors for 386 * each layer 387 */ 388 ihevce_tgt_params_t as_tgt_params[IHEVCE_MAX_NUM_RESOLUTIONS]; 389 390 /*Scaler handle */ 391 void *pv_scaler_handle; 392 393 /*Function pointer for scaling luma data*/ 394 void (*pf_scale_luma)( 395 void *pv_scaler_handle, 396 UWORD8 *pu1_in_buf, 397 WORD32 i4_inp_width, 398 WORD32 i4_inp_height, 399 WORD32 i4_inp_stride, 400 UWORD8 *pu1_out_buf, 401 WORD32 i4_out_width, 402 WORD32 i4_out_height, 403 WORD32 i4_out_stride); 404 405 /*Function pointer for scaling chroma data*/ 406 void (*pf_scale_chroma)( 407 void *pv_scaler_handle, 408 UWORD8 *pu1_in_buf, 409 WORD32 i4_inp_width, 410 WORD32 i4_inp_height, 411 WORD32 i4_inp_stride, 412 UWORD8 *pu1_out_buf, 413 WORD32 i4_out_width, 414 WORD32 i4_out_height, 415 WORD32 i4_out_stride); 416 417 } ihevce_tgt_layer_params_t; 418 419 /** 420 * @brief Structure to describe the stream level 421 * properties encoder should adhere to 422 */ 423 typedef struct 424 { 425 /** Used for checking version compatibility */ 426 WORD32 i4_size; 427 428 /** 0 - HEVC , no other value supported */ 429 WORD32 i4_codec_type; 430 431 /**1 : Main Profile ,2: Main 10 Profile. no other value supported */ 432 WORD32 i4_codec_profile; 433 434 /** 0: Main Tier ,1: High Tier. no other value supported */ 435 WORD32 i4_codec_tier; 436 437 /** Enable VUI output 1: enable 0 : disable */ 438 WORD32 i4_vui_enable; 439 440 /** Enable specific SEI messages in the stream 441 * 1: enable 0 : disable 442 */ 443 WORD32 i4_sei_enable_flag; 444 445 /** Enable specific SEI payload (other than pic timing and buffering period) messages in the stream 446 * 1: enable 0 : disable 447 */ 448 WORD32 i4_sei_payload_enable_flag; 449 450 /** Enable specific SEI buffering period messages in the stream 451 * 1: enable 0 : disable 452 */ 453 WORD32 i4_sei_buffer_period_flags; 454 455 /** Enable specific SEI Picture timing messages in the stream 456 * 1: enable 0 : disable 457 */ 458 WORD32 i4_sei_pic_timing_flags; 459 460 /** Enable specific SEI recovery point messages in the stream 461 * 1: enable 0 : disable 462 */ 463 WORD32 i4_sei_recovery_point_flags; 464 465 /** Enable specific SEI mastering display colour volume in the stream 466 * 1: enable 0 : disable 467 */ 468 WORD32 i4_sei_mastering_disp_colour_vol_flags; 469 470 /** 471 * Array to store the display_primaries_x values 472 */ 473 UWORD16 au2_display_primaries_x[3]; 474 475 /** 476 * Array to store the display_primaries_y values 477 */ 478 UWORD16 au2_display_primaries_y[3]; 479 480 /** 481 * Variable to store the white point x value 482 */ 483 UWORD16 u2_white_point_x; 484 485 /** 486 * Variable to store the white point y value 487 */ 488 UWORD16 u2_white_point_y; 489 490 /** 491 * Variable to store the max display mastering luminance value 492 */ 493 UWORD32 u4_max_display_mastering_luminance; 494 495 /** 496 * Variable to store the min display mastering luminance value 497 */ 498 UWORD32 u4_min_display_mastering_luminance; 499 500 /** 501 * Enable Content Level Light Info 502 */ 503 WORD32 i4_sei_cll_enable; 504 505 /** 506 * 16bit unsigned number which indicates the maximum pixel intensity of all samples in bit-stream in units of 1 candela per square metre 507 */ 508 UWORD16 u2_sei_max_cll; 509 510 /** 511 * 16bit unsigned number which indicates the average pixel intensity of all samples in bit-stream in units of 1 candela per square metre 512 */ 513 UWORD16 u2_sei_avg_cll; 514 515 /** Enable/Disable SEI Hash on the Decoded picture & Hash type 516 * 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable 517 */ 518 WORD32 i4_decoded_pic_hash_sei_flag; 519 520 /** Enable specific AUD messages in the stream 521 * 1: enable 0 : disable 522 */ 523 WORD32 i4_aud_enable_flags; 524 525 /** Enable EOS messages in the stream 526 * 1: enable 0 : disable 527 */ 528 WORD32 i4_eos_enable_flags; 529 530 /** Enable automatic insertion of SPS at each CDR 531 * 1: enable 0 : disable 532 */ 533 WORD32 i4_sps_at_cdr_enable; 534 535 WORD32 i4_interop_flags; 536 537 } ihevce_out_strm_params_t; 538 539 /** 540 * @brief Structure to describe the Encoding Coding tools 541 * to be used by the Encoder 542 */ 543 typedef struct 544 { 545 /** Used for checking version compatibility*/ 546 WORD32 i4_size; 547 548 /** Max spacing between IDR frames - 549 * 0 indicates only at the beginning 550 */ 551 WORD32 i4_max_closed_gop_period; 552 553 /** Min spacing between IDR frames - 554 * Max = Min provides fixed segment length 555 */ 556 WORD32 i4_min_closed_gop_period; 557 558 /** Max spacing between CRA frames - 559 * 560 */ 561 WORD32 i4_max_cra_open_gop_period; 562 563 /** Max spacing between I frames - 564 * 565 */ 566 WORD32 i4_max_i_open_gop_period; 567 568 /** Maximum number of dyadic temporal layers */ 569 WORD32 i4_max_temporal_layers; 570 571 /** Maximum number of reference frames */ 572 WORD32 i4_max_reference_frames; 573 574 /** Enable weighted prediction 575 * 0 - disabled (default); 1 -enabled 576 */ 577 WORD32 i4_weighted_pred_enable; 578 579 /** Deblocking type 0 - no deblocking; 580 * 1 - default; 2 - disable across slices 581 */ 582 WORD32 i4_deblocking_type; 583 584 /** Use default scaling matrices 585 * 0 - disabled; 1 - enabled (default) 586 */ 587 WORD32 i4_use_default_sc_mtx; 588 589 /** Cropping mode for cases where frame dimensions 590 * are not multiple of MIN CU size 591 * 1 - enable padding to min_cu multiple and generate cropping flags; 592 * 0 - report error 593 */ 594 WORD32 i4_cropping_mode; 595 596 /** 0 - no slices; 1 - packet based; 2 - CU based */ 597 WORD32 i4_slice_type; 598 599 /** Use default scaling matrices 600 * 0 - disabled; 1 - enabled (default) 601 */ 602 WORD32 i4_enable_entropy_sync; 603 604 /** VQET control parameter */ 605 WORD32 i4_vqet; 606 607 } ihevce_coding_params_t; 608 609 /** 610 * @brief Structure to describe the Configurable parameters of Encoder 611 */ 612 typedef struct 613 { 614 /** Used for checking version compatibility */ 615 WORD32 i4_size; 616 617 /* ---------- Tiles related parameters ------------ */ 618 619 /* ----------- CU related parameters -------------- */ 620 621 /** 4 - 16x16; 5 - 32x32 (default); 6 - 64x64 */ 622 WORD32 i4_max_log2_cu_size; 623 624 /** 3 - 8x8; 4 - 16x16 (default); 5 - 32x32 ; 6 - 64x64 */ 625 WORD32 i4_min_log2_cu_size; 626 627 /** 2 - 4x4 (default) ; 3 - 8x8; 4 - 16x16; 5 - 32x32 */ 628 WORD32 i4_min_log2_tu_size; 629 630 /** 2 - 4x4; 3 - 8x8 (default); 4 - 16x16; 5 - 32x32 */ 631 WORD32 i4_max_log2_tu_size; 632 633 /** Max transform tree depth for intra */ 634 WORD32 i4_max_tr_tree_depth_I; 635 636 /** Max transform tree depth for inter */ 637 WORD32 i4_max_tr_tree_depth_nI; 638 639 /* ---------- Rate Control related parameters ------ */ 640 641 /** Rate control mode 0 - constant qp (default); 1- CBR */ 642 WORD32 i4_rate_control_mode; 643 644 /** CU level Qp modulation 645 0 - No Qp modulation at CU level; 646 1 - QP modulation level 1 647 2 - QP modulation level 2 648 3 - QP modulation level 3*/ 649 WORD32 i4_cu_level_rc; 650 651 /* Factor used in capped VBR mode to fine tune for quality */ 652 WORD32 i4_rate_factor; 653 654 /** Enable stuffing 0 - disabled (default); 1 -enabled */ 655 WORD32 i4_stuffing_enable; 656 657 /*The max deivaiton allowed from file size (used only in VBR, in CBR vbv buffer size dictates the deviaiton allowed)*/ 658 WORD32 i4_vbr_max_peak_rate_dur; 659 660 /*Number of frames to encode. required to control allowed bit deviation at any point of time*/ 661 WORD32 i4_num_frms_to_encode; 662 663 /** Initial buffer fullness when decoding starts */ 664 WORD32 i4_init_vbv_fullness; 665 666 /** Frame level I frame max qp in rate control mode */ 667 WORD32 i4_max_frame_qp; 668 669 /** Frame level I frame min qp in rate control mode */ 670 WORD32 i4_min_frame_qp; 671 /* --------- ME related parameters ---------------- */ 672 673 /** Maximum search range in full pel units. horizontal direction */ 674 WORD32 i4_max_search_range_horz; 675 676 /** Maximum search range in full pel units. vertical direction */ 677 WORD32 i4_max_search_range_vert; 678 679 /* Variable used to save old rate factor */ 680 /* Used only for plugin */ 681 WORD32 i4_old_rate_factor; 682 683 } ihevce_config_prms_t; 684 685 /** 686 * @brief Structure to describe Dynamic configuralbe 687 * parameters of encoder 688 * 689 * these new params can be passed as async commands 690 * to the enocder by sending a IHEVCE_CMD_CTL_SETPARAMS command 691 */ 692 typedef struct 693 { 694 /** Used for checking version compatibility */ 695 WORD32 i4_size; 696 697 /** Resolution ID of the stream for which bitrate change needs to be applied */ 698 WORD32 i4_tgt_res_id; 699 700 /** Bitrate ID in the Resolution ID of the stream for which bitrate change needs to be applied */ 701 WORD32 i4_tgt_br_id; 702 703 /** New Target Bit-rate for on the fly change */ 704 WORD32 i4_new_tgt_bitrate; 705 706 /** New Peak Bit-rate for on the fly change */ 707 WORD32 i4_new_peak_bitrate; 708 709 /** New Rate Factor for on the fly change */ 710 WORD32 i4_new_rate_factor; 711 } ihevce_dyn_config_prms_t; 712 713 /** 714 * @brief Structure to describe Dynamic configuralbe 715 * parameters of encoder for dynamic resolution change 716 * 717 * these new params can be passed as synchromous commands 718 * to the enocder by sending a IHEVCE_SYNCH_API_SET_RES_TAG command 719 */ 720 typedef struct 721 { 722 /** Resolution ID of the stream for which bitrate change needs to be applied */ 723 WORD32 i4_new_res_id; 724 725 /** New Target Bit-rate for on the fly change */ 726 WORD32 i4_new_tgt_bitrate; 727 728 } ihevce_dyn_res_prms_t; 729 730 /** 731 * @brief Structure to describe the Look Ahead 732 * Processing Parameters of Encoder 733 */ 734 typedef struct 735 { 736 /** Used for checking version compatibility */ 737 WORD32 i4_size; 738 739 /** Number of frames to look-ahead for RC and adaptive quant - 740 * counts each fields as one frame for interlaced 741 */ 742 WORD32 i4_rc_look_ahead_pics; 743 744 /** Enable computation of weights & offsets for weighted prediction */ 745 WORD32 i4_enable_wts_ofsts; 746 747 /* Enables denoiser as a part of video preprocessing. */ 748 WORD32 i4_denoise_enable; 749 750 /* Enable this flag if input is interlaced and output is progressive */ 751 WORD32 i4_deinterlacer_enable; 752 753 } ihevce_lap_params_t; 754 755 /** 756 * @brief Structure to describe the parameters 757 * related to multi-bitrate encoding 758 */ 759 typedef struct 760 { 761 /** Number of bit-rate instances */ 762 WORD32 i4_num_bitrate_instances; 763 764 /* Number of intra modes to be evaluated for derived instance */ 765 WORD32 i4_num_modes_intra; 766 767 /* Number of inter modes to be evaluated for derived instance */ 768 WORD32 i4_num_modes_inter; 769 770 } ihevce_mbr_params_t; 771 772 /** 773 * @brief Vui/Sei parameters of Encoder 774 */ 775 typedef struct 776 { 777 /** 778 * indicates the presence of aspect_ratio 779 */ 780 UWORD8 u1_aspect_ratio_info_present_flag; 781 782 /** 783 * specifies the aspect ratio of the luma samples 784 */ 785 UWORD8 au1_aspect_ratio_idc[IHEVCE_MAX_NUM_RESOLUTIONS]; 786 787 /** 788 * width of the luma samples. user dependent 789 */ 790 UWORD16 au2_sar_width[IHEVCE_MAX_NUM_RESOLUTIONS]; 791 792 /** 793 * height of the luma samples. user dependent 794 */ 795 UWORD16 au2_sar_height[IHEVCE_MAX_NUM_RESOLUTIONS]; 796 797 /** 798 * if 1, specifies that the overscan_appropriate_flag is present 799 * if 0, the preferred display method for the video signal is unspecified 800 */ 801 UWORD8 u1_overscan_info_present_flag; 802 803 /** 804 * if 1,indicates that the cropped decoded pictures output 805 * are suitable for display using overscan 806 */ 807 UWORD8 u1_overscan_appropriate_flag; 808 809 /** 810 * if 1 specifies that video_format, video_full_range_flag and 811 * colour_description_present_flag are present 812 */ 813 UWORD8 u1_video_signal_type_present_flag; 814 815 /** 816 * 817 */ 818 UWORD8 u1_video_format; 819 820 /** 821 * indicates the black level and range of the luma and chroma signals 822 */ 823 UWORD8 u1_video_full_range_flag; 824 825 /** 826 * if 1,to 1 specifies that colour_primaries, transfer_characteristics 827 * and matrix_coefficients are present 828 */ 829 UWORD8 u1_colour_description_present_flag; 830 831 /** 832 * indicates the chromaticity coordinates of the source primaries 833 */ 834 UWORD8 u1_colour_primaries; 835 836 /** 837 * indicates the opto-electronic transfer characteristic of the source picture 838 */ 839 UWORD8 u1_transfer_characteristics; 840 841 /** 842 * the matrix coefficients used in deriving luma and chroma signals 843 * from the green, blue, and red primaries 844 */ 845 UWORD8 u1_matrix_coefficients; 846 847 /** 848 * if 1, specifies that chroma_sample_loc_type_top_field and 849 * chroma_sample_loc_type_bottom_field are present 850 */ 851 UWORD8 u1_chroma_loc_info_present_flag; 852 853 /** 854 * location of chroma samples 855 */ 856 UWORD8 u1_chroma_sample_loc_type_top_field; 857 858 UWORD8 u1_chroma_sample_loc_type_bottom_field; 859 860 /** 861 * to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue 862 */ 863 UWORD8 u1_vui_hrd_parameters_present_flag; 864 865 /** 866 * VUI level HRD parameters 867 */ 868 //hrd_params_t s_vui_hrd_parameters; 869 870 /** 871 * HRD parameter Indicates the presence of the 872 * num_units_in_ticks, time_scale flag 873 */ 874 UWORD8 u1_timing_info_present_flag; 875 876 /** 877 * Nal- hrd parameters flag 878 */ 879 UWORD8 u1_nal_hrd_parameters_present_flag; 880 881 } ihevce_vui_sei_params_t; 882 883 /** 884 * @brief Multi thread related parameters passed to the encoder during create 885 */ 886 887 typedef struct 888 { 889 /** Kept for maintaining backwards compatibility in future */ 890 WORD32 i4_size; 891 892 /** Total number of logical cores, which are assigned to be used by the encoder 893 */ 894 WORD32 i4_max_num_cores; 895 896 /** Total number of groups in the machine on which encoder is run. 897 */ 898 WORD32 i4_num_proc_groups; 899 900 /** Total number of logical cores present per processor group of the machine. 901 */ 902 WORD32 ai4_num_cores_per_grp[MAX_NUMBER_PROC_GRPS]; 903 904 /** Flag to enableUse thread affintiy feature 905 * 0: Thread affinity disabled 906 * 1: Thread affinity enabled 907 */ 908 WORD32 i4_use_thrd_affinity; 909 910 /** 911 * Memory allocation control flag: Reserved (to be used later) 912 */ 913 WORD32 i4_memory_alloc_ctrl_flag; 914 915 /** 916 * Array of thread affinity masks for frame processing threads 917 * PRE Enc Group 918 */ 919 ULWORD64 au8_core_aff_mask[MAX_NUM_CORES]; 920 921 } ihevce_static_multi_thread_params_t; 922 923 /** 924 * @brief File IO APIs 925 */ 926 typedef struct 927 { 928 FILE *(*ihevce_fopen)(void *pv_cb_handle, const char *pi1_filename, const char *pi1_mode); 929 930 int (*ihevce_fclose)(void *pv_cb_handle, FILE *pf_stream); 931 932 int (*ihevce_fflush)(void *pv_cb_handle, FILE *pf_stream); 933 934 int (*ihevce_fseek)(void *pv_cb_handle, FILE *pf_stream, long i4_offset, int i4_origin); 935 936 size_t (*ihevce_fread)( 937 void *pv_cb_handle, void *pv_ptr, size_t u4_size, size_t u4_count, FILE *pf_stream); 938 939 int (*ihevce_fscanf)( 940 void *pv_cb_handle, 941 IHEVCE_DATA_TYPE e_data_type, 942 FILE *file_ptr, 943 const char *format, 944 void *pv_dst); 945 946 int (*ihevce_fprintf)(void *pv_cb_handle, FILE *pf_stream, const char *pi1_format, ...); 947 948 size_t (*ihevce_fwrite)( 949 void *pv_cb_handle, const void *pv_ptr, size_t i4_size, size_t i4_count, FILE *pf_stream); 950 951 char *(*ihevce_fgets)(void *pv_cb_handle, char *pi1_str, int i4_size, FILE *pf_stream); 952 953 } ihevce_file_io_api_t; 954 955 /** 956 * @brief System APIs to implement call back functions in encoder 957 */ 958 typedef struct 959 { 960 /*Call back handle for all system api*/ 961 void *pv_cb_handle; 962 963 /* Console APIs */ 964 int (*ihevce_printf)(void *pv_cb_handle, const char *i1_str, ...); 965 966 //int (*ihevce_scanf) (void *pv_handle, const char *i1_str, ...); 967 968 int (*ihevce_sscanf)(void *pv_cb_handle, const char *pv_src, const char *format, int *p_dst_int); 969 970 int (*ihevce_sprintf)(void *pv_cb_handle, char *pi1_str, const char *format, ...); 971 972 int (*ihevce_sprintf_s)( 973 void *pv_cb_handle, char *pi1_str, size_t i4_size, const char *format, ...); 974 975 /* File I/O APIs */ 976 ihevce_file_io_api_t s_file_io_api; 977 978 } ihevce_sys_api_t; 979 980 /** 981 * @brief Structure to describe multipass related params 982 */ 983 typedef struct 984 { 985 /** Kept for maintaining backwards compatibility in future */ 986 WORD32 i4_size; 987 988 /* 0:Normal mode 1: only dumps stat 2: 2nd pass reads from stat file and rewrites the same file*/ 989 WORD32 i4_pass; 990 991 /* Flag to specify the algorithm used for bit-distribution 992 in second pass */ 993 WORD32 i4_multi_pass_algo_mode; 994 995 /* Stat file to read or write data of frame statistics */ 996 WORD8 *pi1_frame_stats_filename; 997 998 /* stat file to read or write data of gop level statstics*/ 999 WORD8 *pi1_gop_stats_filename; 1000 1001 /* Stat file to read or write CTB level data*/ 1002 WORD8 *pi1_sub_frames_stats_filename; 1003 1004 } ihevce_pass_prms_t; 1005 1006 /** 1007 * @brief Structure to describe tile params 1008 */ 1009 typedef struct 1010 { 1011 /** Kept for maintaining backwards compatibility in future */ 1012 WORD32 i4_size; 1013 1014 /* flag to indicate tile encoding enabled/disabled */ 1015 WORD32 i4_tiles_enabled_flag; 1016 1017 /* flag to indicate unifrom spacing of tiles */ 1018 WORD32 i4_uniform_spacing_flag; 1019 1020 /* num syntactical tiles in a frame */ 1021 WORD32 i4_num_tile_cols; 1022 WORD32 i4_num_tile_rows; 1023 1024 /* Column width array to store width of each tile column */ 1025 WORD32 ai4_column_width[MAX_TILE_COLUMNS]; 1026 1027 /* Row height array to store height of each tile row */ 1028 WORD32 ai4_row_height[MAX_TILE_ROWS]; 1029 1030 } ihevce_app_tile_params_t; 1031 1032 /** 1033 * @brief Structure to describe slice params 1034 */ 1035 typedef struct 1036 { 1037 /** Kept for maintaining backwards compatibility in future */ 1038 WORD32 i4_size; 1039 1040 /** Flag to control dependent slices. 1041 0: Disable all slice segment limits 1042 1: Enforce max number of CTBs 1043 2: Enforce max number of bytes **/ 1044 WORD32 i4_slice_segment_mode; 1045 1046 /** Depending on i4_slice_segment_mode being: 1047 1: max number of CTBs per slice segment 1048 2: max number of bytes per slice segment **/ 1049 WORD32 i4_slice_segment_argument; 1050 1051 } ihevce_slice_params_t; 1052 1053 /** 1054 * @brief Static configuration parameters of Encoder 1055 */ 1056 typedef struct 1057 { 1058 /** Kept for maintaining backwards compatibility in future */ 1059 WORD32 i4_size; 1060 1061 /** Structure describing the input parameters - Applciatiopn should populate 1062 * maximum values in this structure . Run time values 1063 * should always be lessthan create time values 1064 */ 1065 ihevce_src_params_t s_src_prms; 1066 1067 /** Parmeters for target use-case */ 1068 ihevce_tgt_layer_params_t s_tgt_lyr_prms; 1069 1070 /** Output stream parameters */ 1071 ihevce_out_strm_params_t s_out_strm_prms; 1072 1073 /** Coding parameters for the encoder */ 1074 ihevce_coding_params_t s_coding_tools_prms; 1075 1076 /** Configurable parameters for Encoder */ 1077 ihevce_config_prms_t s_config_prms; 1078 1079 /** VUI SEI app parameters*/ 1080 ihevce_vui_sei_params_t s_vui_sei_prms; 1081 1082 /** Multi threads specific pamrameters */ 1083 ihevce_static_multi_thread_params_t s_multi_thrd_prms; 1084 1085 /** Look-ahead processor related parameters */ 1086 ihevce_lap_params_t s_lap_prms; 1087 1088 /** Save Recon flag */ 1089 WORD32 i4_save_recon; 1090 1091 /** Compute PSNR Flag */ 1092 /* 0: No logs 1093 1: (Frame level:Bits generation + POC) + (summary level: BitRate) 1094 2: (Frame level:Bits generation + POC + Qp + Pic-type) + (summary level: BitRate + PSNR) 1095 */ 1096 WORD32 i4_log_dump_level; 1097 1098 WORD32 i4_enable_csv_dump; 1099 1100 FILE *apF_csv_file[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; 1101 1102 /** Enable Logo for Eval versions */ 1103 WORD32 i4_enable_logo; 1104 1105 /* API structure for exporting console and file I/O operation */ 1106 ihevce_sys_api_t s_sys_api; 1107 1108 /* Structure to describe multipass related params */ 1109 ihevce_pass_prms_t s_pass_prms; 1110 1111 /* Structure to describe tile params */ 1112 ihevce_app_tile_params_t s_app_tile_params; 1113 1114 /** Structure to describe slice segment params */ 1115 ihevce_slice_params_t s_slice_params; 1116 1117 /** Resolution ID of the current encoder context **/ 1118 WORD32 i4_res_id; 1119 1120 /** Bitrate ID of the current encoder context **/ 1121 WORD32 i4_br_id; 1122 1123 /* Architecture type */ 1124 IV_ARCH_T e_arch_type; 1125 1126 /* Control to free the entropy output buffers */ 1127 /* 1 for non_blocking mode */ 1128 /* and 0 for blocking mode */ 1129 WORD32 i4_outbuf_buf_free_control; 1130 1131 } ihevce_static_cfg_params_t; 1132 1133 /** 1134 * @brief Input structure in which input data and 1135 * other parameters are sent to Encoder 1136 */ 1137 typedef struct 1138 { 1139 /** Kept for maintaining backwards compatibility in future */ 1140 WORD32 i4_size; 1141 1142 /** Buffer id for the current buffer */ 1143 WORD32 i4_buf_id; 1144 1145 /** is bottom field 0 = top field, 1 = bottom field */ 1146 WORD32 i4_bottom_field; 1147 1148 /** top field first input in case of interlaced case */ 1149 WORD32 i4_topfield_first; 1150 1151 /** input time stamp in terms of ticks: lower 32 */ 1152 WORD32 i4_inp_timestamp_low; 1153 1154 /** input time stamp in terms of ticks: higher 32 */ 1155 WORD32 i4_inp_timestamp_high; 1156 1157 /** colour format of input, 1158 * should be same as create time value 1159 */ 1160 WORD32 u1_colour_format; 1161 1162 /** 1163 * Input frame buffer valid flag 1164 * 1 : valid data is present in the s_input_buf 1165 * 0 : Only command buffer is valid input buffer is a non valid input (dumy input) 1166 */ 1167 WORD32 i4_inp_frm_data_valid_flag; 1168 1169 /** Synchronous control commands buffer 1170 * this will an Tag Length Value (TLV) buffer. 1171 * All commands must be terminated with a tag 1172 * Tag should be set to IHEVCE_SYNCH_API_END_TAG 1173 */ 1174 void *pv_synch_ctrl_bufs; 1175 1176 /** 1177 * Synchronous control commands buffer 1178 * size in number of bytes 1179 */ 1180 WORD32 i4_cmd_buf_size; 1181 1182 /** for system use if run time buffer allocation is used*/ 1183 void *pv_metadata; 1184 1185 /** for system to pass frame context from Input to Output 1186 Same pointer will be returned on the output buffer of this frame */ 1187 void *pv_app_frm_ctxt; 1188 1189 /** Input YUV buffers pointers and related parameters 1190 * are set in this structure 1191 */ 1192 iv_yuv_buf_t s_input_buf; 1193 1194 } iv_input_data_ctrl_buffs_t; 1195 1196 /** 1197 * @brief Input structure in which input async control 1198 * commands are sent to Encoder 1199 */ 1200 typedef struct 1201 { 1202 /** Kept for maintaining backwards compatibility in future */ 1203 WORD32 i4_size; 1204 1205 /** Buffer id for the current buffer */ 1206 WORD32 i4_buf_id; 1207 1208 /** Asynchronous control commands buffer 1209 * this will an Tag Length Value (TLV) buffer. 1210 * The buffer must be ended with a IHEVCE_ASYNCH_API_END_TAG 1211 */ 1212 void *pv_asynch_ctrl_bufs; 1213 1214 /** 1215 * Asynchronous control commands buffer 1216 * size in number of bytes 1217 */ 1218 WORD32 i4_cmd_buf_size; 1219 1220 } iv_input_ctrl_buffs_t; 1221 1222 /** 1223 * @brief Ouput structure in which ouput data 1224 * and related parameters are sent from Encoder 1225 */ 1226 typedef struct 1227 { 1228 /** Kept for maintaining backwards compatibility in future */ 1229 WORD32 i4_size; 1230 1231 /** Buffer id for the current buffer */ 1232 WORD32 i4_buf_id; 1233 1234 /** processing status of the current output returned */ 1235 WORD32 i4_process_ret_sts; 1236 1237 /** if error encountered the error code */ 1238 WORD32 i4_process_error_code; 1239 1240 /** picture type of the current encoded output */ 1241 IV_PICTURE_CODING_TYPE_T i4_encoded_frame_type; 1242 1243 /** output time stamp of curr encoded buffer : lower 32 */ 1244 WORD32 i4_out_timestamp_low; 1245 1246 /** output time stamp of curr encoded buffer : higher 32 */ 1247 WORD32 i4_out_timestamp_high; 1248 1249 /** skip status of the current encoded output */ 1250 WORD32 i4_frame_skipped; 1251 1252 /** bytes generated in the output buffer */ 1253 WORD32 i4_bytes_generated; 1254 1255 /** End flag to communicate this is last frame output from encoder */ 1256 WORD32 i4_end_flag; 1257 1258 /** End flag to communicate encoder that this is the last buffer from application 1259 1 - Last buf, 0 - Not last buffer. No other values are supported. 1260 Application has to set the appropriate value before queing in encoder queue */ 1261 WORD32 i4_is_last_buf; 1262 1263 /** DBF level after the dynamic bitrate change 1264 -1 - Value not set by codec 1265 Encoder sets to positive value when bitrate change control call is done*/ 1266 LWORD64 i8_cur_vbv_level; 1267 1268 /** Output buffer pointer */ 1269 void *pv_bitstream_bufs; 1270 1271 /** Output buffer size */ 1272 WORD32 i4_bitstream_buf_size; 1273 1274 /** Can be used for tracking purpose if run time buffer allocation is used*/ 1275 void *pv_metadata; 1276 1277 /** for system to retrive frame context from Input to Output */ 1278 void *pv_app_frm_ctxt; 1279 1280 /** Can be used for tracking the buffer that is sent back during callback */ 1281 WORD32 i4_cb_buf_id; 1282 1283 /** Number of Prefix Non-VCL NAL units in the output buffer */ 1284 WORD32 i4_num_non_vcl_prefix_nals; 1285 1286 /** Number of Suffix Non-VCL NAL units in the output buffer */ 1287 WORD32 i4_num_non_vcl_suffix_nals; 1288 1289 /** Number of VCL NAL units in the output buffer */ 1290 WORD32 i4_num_vcl_nals; 1291 1292 /************************************************************************/ 1293 /* Size of each NAL based on type: Non-VCL Prefix/ VCL / Non-VCL Suffix */ 1294 /* */ 1295 /* Ordering of NALS in output buffer is as follows: */ 1296 /* Non-VCL Prefix NALs -> VCL NALs -> Non-VCL Suffix NALs */ 1297 /* */ 1298 /* As there are no holes between adjacent NALs, these sizes can be used */ 1299 /* to compute the offsets w.r.t start of the output buffer */ 1300 /************************************************************************/ 1301 1302 /** Array to the store the size in bytes of Prefix Non-VCL NAL units */ 1303 WORD32 ai4_size_non_vcl_prefix_nals[MAX_NUM_PREFIX_NALS_PER_AU]; 1304 1305 /* Array to the store the size in bytes of Suffix Non-VCL NAL units */ 1306 WORD32 ai4_size_non_vcl_suffix_nals[MAX_NUM_SUFFIX_NALS_PER_AU]; 1307 1308 /** Array to the store the size in bytes of VCL NAL units */ 1309 WORD32 ai4_size_vcl_nals[MAX_NUM_VCL_NALS_PER_AU]; 1310 1311 } iv_output_data_buffs_t; 1312 1313 /** 1314 * @brief Output structure in which output async control 1315 * acknowledgement are sent from Encoder 1316 */ 1317 typedef struct 1318 { 1319 /** Kept for maintaining backwards compatibility in future */ 1320 WORD32 i4_size; 1321 1322 /** Buffer id for the current buffer */ 1323 WORD32 i4_buf_id; 1324 1325 /** Asynchronous control commands ack buffer 1326 * this will an Tag Length Value (TLV) buffer. 1327 */ 1328 void *pv_status_bufs; 1329 1330 } iv_output_status_buffs_t; 1331 1332 /** 1333 * @brief structure in which recon data 1334 * and related parameters are sent from Encoder 1335 */ 1336 typedef struct 1337 { 1338 /** Kept for maintaining backwards compatibility in future */ 1339 WORD32 i4_size; 1340 1341 /** Buffer id for the current buffer */ 1342 WORD32 i4_buf_id; 1343 1344 /** POC of the current buffer */ 1345 WORD32 i4_poc; 1346 1347 /** End flag to communicate this is last frame output from encoder */ 1348 WORD32 i4_end_flag; 1349 1350 /** End flag to communicate encoder that this is the last buffer from application 1351 1 - Last buf, 0 - Not last buffer. No other values are supported. 1352 Application has to set the appropriate value before queing in encoder queue */ 1353 WORD32 i4_is_last_buf; 1354 1355 /** Recon luma buffer pointer */ 1356 void *pv_y_buf; 1357 1358 /** Recon cb buffer pointer */ 1359 void *pv_cb_buf; 1360 1361 /** Recon cr buffer pointer */ 1362 void *pv_cr_buf; 1363 1364 /** Luma size **/ 1365 WORD32 i4_y_pixels; 1366 1367 /** Chroma size **/ 1368 WORD32 i4_uv_pixels; 1369 1370 } iv_recon_data_buffs_t; 1371 1372 /* @brief iv_res_layer_output_bufs_req_t: This structure contains the parameters 1373 * related to output (data and control) buffer requirements of the codec for all 1374 * target resolution layers 1375 * Application can call the memory query API to get these requirements 1376 */ 1377 1378 typedef struct 1379 { 1380 /** i4_size of the structure : used for verison tracking */ 1381 WORD32 i4_size; 1382 1383 /*Memory requirements for each of target resolutions*/ 1384 iv_output_bufs_req_t s_output_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; 1385 1386 } iv_res_layer_output_bufs_req_t; 1387 1388 /* @brief iv_res_layer_recon_bufs_req_t: This structure contains the parameters 1389 * related to recon buffer requirements of the codec for all target resolution layers 1390 * Application can call the memory query API to get these requirements 1391 */ 1392 1393 typedef struct 1394 { 1395 /** i4_size of the structure : used for verison tracking */ 1396 WORD32 i4_size; 1397 1398 /*Memory requirements for each of target resolutions*/ 1399 iv_recon_bufs_req_t s_recon_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; 1400 } iv_res_layer_recon_bufs_req_t; 1401 1402 /* @brief iv_res_layer_output_data_buffs_desc_t: This structure contains 1403 * the parameters related to output data buffers for all target resolution layers 1404 */ 1405 1406 typedef struct 1407 { 1408 /** i4_size of the structure : used for verison tracking */ 1409 WORD32 i4_size; 1410 1411 /*Output buffer requirements of each taregt resolution layer*/ 1412 iv_output_data_buffs_desc_t s_output_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS] 1413 [IHEVCE_MAX_NUM_BITRATES]; 1414 1415 } iv_res_layer_output_data_buffs_desc_t; 1416 1417 /* @brief iv_res_layer_output_status_buffs_desc_t: This structure contains 1418 * the parameters related to recon data buffers for all target resolution layers 1419 */ 1420 1421 typedef struct 1422 { 1423 /** i4_size of the structure : used for verison tracking */ 1424 WORD32 i4_size; 1425 1426 /*Output buffer requirements of each taregt resolution layer*/ 1427 iv_recon_data_buffs_desc_t s_recon_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS] 1428 [IHEVCE_MAX_NUM_BITRATES]; 1429 1430 } iv_res_layer_recon_data_buffs_desc_t; 1431 1432 #endif // _IHEVCE_API_H_ 1433