| /****************************************************************************** |
| * |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ***************************************************************************** |
| * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
| */ |
| /*! |
| ****************************************************************************** |
| * \file ihevce_api.h |
| * |
| * \brief |
| * This file contains definitions and structures which are shared between |
| * application and HEVC Encoder Processing interface layer |
| * |
| * \date |
| * 18/09/2012 |
| * |
| * \author |
| * Ittiam |
| * |
| ****************************************************************************** |
| */ |
| |
| #ifndef _IHEVCE_API_H_ |
| #define _IHEVCE_API_H_ |
| |
| /*****************************************************************************/ |
| /* Constant Macros */ |
| /*****************************************************************************/ |
| #define IHEVCE_MAX_IO_BUFFERS 3 |
| |
| #define IHEVCE_EXTENDED_SAR 255 |
| |
| #define IHEVCE_MBR_CORE_WEIGHTAGE 0.25f |
| |
| /** Maximum number of resolutions encoder can run */ |
| #define IHEVCE_MAX_NUM_RESOLUTIONS 1 //10 |
| |
| /** Maximum number of bit-rate instances encoder can run */ |
| #define IHEVCE_MAX_NUM_BITRATES 1 //5 |
| |
| #define MAX_NUM_CORES 8 // Supports upto 160 logical cores. |
| |
| /* Max length of filenames */ |
| #define MAX_LEN_FILENAME 200 |
| |
| /* max number of tiles per row/cols */ |
| //Main/Main10 profile (=4096/256) //Don't change this |
| #define MAX_TILE_COLUMNS 16 |
| //Main/Main10 profile (=2160/64) //Don't change this |
| #define MAX_TILE_ROWS 34 |
| |
| #define IHEVCE_ASYNCH_ERROR_START 0x0000E600 |
| #define IHEVCE_SYNCH_ERROR_START 0x0000E700 |
| |
| #define MAX_NUM_DYN_BITRATE_CMDS (IHEVCE_MAX_NUM_RESOLUTIONS * IHEVCE_MAX_NUM_BITRATES) |
| |
| /* NAL units related definations */ |
| #define MAX_NUM_PREFIX_NALS_PER_AU 20 |
| #define MAX_NUM_SUFFIX_NALS_PER_AU 20 |
| #define MAX_NUM_VCL_NALS_PER_AU 200 /* as per level 5.1 from spec */ |
| |
| /* Maximum number of processor groups supported */ |
| #define MAX_NUMBER_PROC_GRPS 4 |
| |
| /** @brief maximum length of CC User Data in a single frame */ |
| #define MAX_SEI_PAYLOAD_PER_TLV (0x200) |
| |
| #define MAX_NUMBER_OF_SEI_PAYLOAD (10) |
| |
| #define IHEVCE_COMMANDS_TAG_MASK (0x0000FFFF) |
| |
| // Upper 16 bits are used to communicate payload type |
| #define IHEVCE_PAYLOAD_TYPE_MASK (0xFFFF0000) |
| |
| #define IHEVCE_PAYLOAD_TYPE_SHIFT (16) |
| |
| #define MAX_FRAME_RATE 120.0 |
| #define MIN_FRAME_RATE 1.0 |
| |
| /*****************************************************************************/ |
| /* Enums */ |
| /*****************************************************************************/ |
| /** |
| * @brief Enumerations for Quality config. |
| */ |
| typedef enum |
| { |
| IHEVCE_QUALITY_DUMMY = 0xFFFFFFFF, |
| IHEVCE_QUALITY_P0 = 0, |
| IHEVCE_QUALITY_P2 = 2, |
| IHEVCE_QUALITY_P3, |
| IHEVCE_QUALITY_P4, |
| IHEVCE_QUALITY_P5, |
| IHEVCE_QUALITY_P6, |
| IHEVCE_QUALITY_P7, |
| IHEVCE_NUM_QUALITY_PRESET |
| } IHEVCE_QUALITY_CONFIG_T; |
| |
| /*****************************************************************************/ |
| /* Enums */ |
| /*****************************************************************************/ |
| /** |
| * @brief Enumerations for Quality config for auxilary bitrate in case of MBR. |
| */ |
| typedef enum |
| { |
| IHEVCE_MBR_DUMMY = -1, |
| IHEVCE_MBR_HIGH_QUALITY = 0, |
| IHEVCE_MBR_MEDIUM_SPEED, |
| IHEVCE_MBR_HIGH_SPEED, |
| IHEVCE_MBR_EXTREME_SPEED |
| } IHEVCE_QUALITY_CONFIG_MBR_T; |
| |
| /** |
| * @brief Enumerations for Rate Control config. |
| */ |
| typedef enum |
| { |
| IHEVCE_RC_DUMMY = 0xFFFFFFFF, |
| IHEVCE_RC_LOW_DELAY = 1, |
| IHEVCE_RC_STORAGE = 2, |
| IHEVCE_RC_TWOPASS = 3, |
| IHEVCE_RC_NONE = 4, |
| IHEVCE_RC_USER_DEFINED = 5, |
| IHEVCE_RC_RATECONTROLPRESET_DEFAULT = IHEVCE_RC_LOW_DELAY |
| } IHEVCE_RATE_CONTROL_CONFIG_T; |
| |
| /** |
| * @brief Enumerations for Intra Refresh config. |
| */ |
| typedef enum |
| { |
| IHEVCE_REFRESH_DUMMY = 0, |
| IHEVCE_I_SILICE = 1, |
| IHEVCE_COLUMN_BASED = 2, |
| IHEVCE_DBR = 3, |
| IHEVCE_GDR = 4 |
| } IHEVCE_REFRESH_CONFIG_T; |
| |
| /** |
| * @brief Enumerations for ASYNCH Control Commands Tags. |
| */ |
| typedef enum |
| { |
| IHEVCE_ASYNCH_API_END_TAG = 0xFFFF, |
| IHEVCE_ASYNCH_API_SETBITRATE_TAG = 0x01, |
| IHEVCE_ASYNCH_API_SET_RF_TAG = 0x02, |
| IHEVCE_ASYNCH_API_FORCE_CLOSE_TAG = 0x03 |
| } IHEVCE_ASYNCH_API_COMMAND_TAG_T; |
| |
| typedef enum |
| { |
| IHEVCE_ASYNCH_ERR_NO_END_TAG = IHEVCE_ASYNCH_ERROR_START + 0x01, |
| IHEVCE_ASYNCH_ERR_TLV_ERROR = IHEVCE_ASYNCH_ERROR_START + 0x02, |
| IHEVCE_ASYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_ASYNCH_ERROR_START + 0x03, |
| IHEVCE_ASYNCH_ERR_BR_NOT_BYTE = IHEVCE_ASYNCH_ERROR_START + 0x04, |
| IHEVCE_ASYNCH_FORCE_CLOSE_NOT_SUPPORTED = IHEVCE_ASYNCH_ERROR_START + 0x05 |
| } IHEVCE_ASYNCH_ERROR_TAG_T; |
| |
| /** |
| * @brief Enumerations for SYNCH Control Commands Tags. |
| */ |
| typedef enum |
| { |
| IHEVCE_SYNCH_API_END_TAG = 0xFFFF, |
| IHEVCE_SYNCH_API_FLUSH_TAG = 0x21, |
| IHEVCE_SYNCH_API_FORCE_IDR_TAG = 0x22, |
| IHEVCE_SYNCH_API_REG_KEYFRAME_SEI_TAG = 0x23, |
| IHEVCE_SYNCH_API_REG_ALLFRAME_SEI_TAG = 0x24, |
| IHEVCE_SYNCH_API_SET_RES_TAG = 0x25 |
| } IHEVCE_SYNCH_API_COMMAND_TAG_T; |
| |
| typedef enum |
| { |
| IHEVCE_SYNCH_ERR_NO_END_TAG = IHEVCE_SYNCH_ERROR_START + 0x11, |
| IHEVCE_SYNCH_ERR_TLV_ERROR = IHEVCE_SYNCH_ERROR_START + 0x12, |
| IHEVCE_SYNCH_ERR_LENGTH_NOT_ZERO = IHEVCE_SYNCH_ERROR_START + 0x13, |
| IHEVCE_SYNCH_ERR_NO_PADDING = IHEVCE_SYNCH_ERROR_START + 0x14, |
| IHEVCE_SYNCH_ERR_WRONG_LENGTH = IHEVCE_SYNCH_ERROR_START + 0x15, |
| IHEVCE_SYNCH_ERR_FREQ_FORCE_IDR_RECEIVED = IHEVCE_SYNCH_ERROR_START + 0x16, |
| IHEVCE_SYNCH_ERR_TOO_MANY_SEI_MSG = IHEVCE_SYNCH_ERROR_START + 0x17, |
| IHEVCE_SYNCH_ERR_SET_RES_NOT_SUPPORTED = IHEVCE_SYNCH_ERROR_START + 0x18 |
| } IHEVCE_SYNCH_ERROR_TAG_T; |
| |
| /** |
| * @brief Enumerations for output status identifier |
| */ |
| typedef enum |
| { |
| IHEVCE_PROCESS = 0, |
| IHEVCE_CONTROL_STS, |
| IHEVCE_CREATE_STS, |
| } IHEVCE_OUT_STS_ID_T; |
| |
| /** |
| * Scenetype enums |
| */ |
| typedef enum |
| { |
| IHEVCE_SCENE_TYPE_NORMAL = 0, |
| IHEVCE_SCENE_TYPE_SCENE_CUT, |
| IHEVCE_SCENE_TYPE_FLASH, |
| IHEVCE_SCENE_TYPE_FADE_IN, |
| IHEVCE_SCENE_TYPE_FADE_OUT, |
| IHEVCE_SCENE_TYPE_DISSOLVE, |
| IHEVCE_MAX_NUM_SCENE_TYPES |
| } IHEVCE_SCENE_TYPE; |
| |
| /** |
| * Type of data. Used for scanning the config file |
| */ |
| typedef enum |
| { |
| IHEVCE_STRING = 0, |
| IHEVCE_INT, |
| IHEVCE_FLOAT |
| } IHEVCE_DATA_TYPE; |
| |
| /*****************************************************************************/ |
| /* Structure */ |
| /*****************************************************************************/ |
| |
| /** |
| * @brief Structure to describe the properties of Source of encoder. |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** Input chroma format |
| * @sa : IV_COLOR_FORMAT_T |
| */ |
| WORD32 inp_chr_format; |
| |
| /** Internal chroma format |
| * @sa : IV_COLOR_FORMAT_T |
| */ |
| WORD32 i4_chr_format; |
| |
| /** Width of input luma */ |
| WORD32 i4_width; |
| |
| /** Height of input luma */ |
| WORD32 i4_height; |
| |
| /** Configured Width of input luma */ |
| WORD32 i4_orig_width; |
| |
| /** Configured Height of input luma */ |
| WORD32 i4_orig_height; |
| |
| /** Width of each pixel in bits */ |
| WORD32 i4_input_bit_depth; |
| |
| /** Input Content Type |
| * @sa : IV_CONTENT_TYPE_T |
| */ |
| WORD32 i4_field_pic; |
| |
| /** Frame/Field rate numerator |
| * (final fps = frame_rate_num/frame_rate_denom) |
| */ |
| WORD32 i4_frm_rate_num; |
| |
| /** Can be 1000 or 1001 to allow proper representation |
| * of fractional frame-rates |
| */ |
| WORD32 i4_frm_rate_denom; |
| |
| /** |
| * Whether Top field is encoded first or bottom |
| */ |
| WORD32 i4_topfield_first; |
| |
| } ihevce_src_params_t; |
| |
| /*****************************************************************************/ |
| /* Structure */ |
| /*****************************************************************************/ |
| /** |
| * @brief Structure to describe attributes of a layer. |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** Width of input luma */ |
| WORD32 i4_width; |
| |
| /** Height of input luma */ |
| WORD32 i4_height; |
| |
| /** Frame/Field rate |
| * (final fps = src frame_rate_num/src frame_rate_denom/i4_frm_rate_scale_factor) |
| */ |
| WORD32 i4_frm_rate_scale_factor; |
| |
| /** Quality vs. complexity |
| * @sa : IHEVCE_QUALITY_CONFIG_T |
| */ |
| IHEVCE_QUALITY_CONFIG_T i4_quality_preset; |
| |
| /** 0 : Level 4, any level above this not supported */ |
| WORD32 i4_codec_level; |
| |
| /** Number of bit-rate instances for the current layer |
| */ |
| WORD32 i4_num_bitrate_instances; |
| |
| /** Target Bit-rate in bits for Constant bitrate cases */ |
| WORD32 ai4_tgt_bitrate[IHEVCE_MAX_NUM_BITRATES]; |
| |
| /** Peak Bit-rate in bits for each bitrate */ |
| WORD32 ai4_peak_bitrate[IHEVCE_MAX_NUM_BITRATES]; |
| |
| /** Maximum VBV buffer size in bits for each and each bitrate */ |
| WORD32 ai4_max_vbv_buffer_size[IHEVCE_MAX_NUM_BITRATES]; |
| |
| /** Frame level Qp for Constant Qp mode */ |
| WORD32 ai4_frame_qp[IHEVCE_MAX_NUM_BITRATES]; |
| |
| } ihevce_tgt_params_t; |
| |
| /*****************************************************************************/ |
| /* Structure */ |
| /*****************************************************************************/ |
| /** |
| * @brief Structure to describe the properties of target |
| resolution of encoder. |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** Number of resolution layers |
| */ |
| WORD32 i4_num_res_layers; |
| |
| /* Applicable only for multi res cases. |
| Output of only one resolution to be dumped */ |
| |
| WORD32 i4_mres_single_out; |
| |
| /* Specify starting resolution id for mres single out case. |
| This is only valid in mres_single out mode */ |
| |
| WORD32 i4_start_res_id; |
| |
| /** To enable reuse across layers |
| */ |
| WORD32 i4_multi_res_layer_reuse; |
| |
| /** Quality vs. complexity for auxilary bitrates |
| * @sa : IHEVCE_QUALITY_CONFIG_MBR_T |
| */ |
| IHEVCE_QUALITY_CONFIG_MBR_T i4_mbr_quality_setting; |
| |
| /** |
| *Bit depth used by encoder |
| */ |
| WORD32 i4_internal_bit_depth; |
| |
| /** |
| *Temporal scalability enable Flag |
| */ |
| WORD32 i4_enable_temporal_scalability; |
| |
| /** Resolution and frame rate scaling factors for |
| * each layer |
| */ |
| ihevce_tgt_params_t as_tgt_params[IHEVCE_MAX_NUM_RESOLUTIONS]; |
| |
| /*Scaler handle */ |
| void *pv_scaler_handle; |
| |
| /*Function pointer for scaling luma data*/ |
| void (*pf_scale_luma)( |
| void *pv_scaler_handle, |
| UWORD8 *pu1_in_buf, |
| WORD32 i4_inp_width, |
| WORD32 i4_inp_height, |
| WORD32 i4_inp_stride, |
| UWORD8 *pu1_out_buf, |
| WORD32 i4_out_width, |
| WORD32 i4_out_height, |
| WORD32 i4_out_stride); |
| |
| /*Function pointer for scaling chroma data*/ |
| void (*pf_scale_chroma)( |
| void *pv_scaler_handle, |
| UWORD8 *pu1_in_buf, |
| WORD32 i4_inp_width, |
| WORD32 i4_inp_height, |
| WORD32 i4_inp_stride, |
| UWORD8 *pu1_out_buf, |
| WORD32 i4_out_width, |
| WORD32 i4_out_height, |
| WORD32 i4_out_stride); |
| |
| } ihevce_tgt_layer_params_t; |
| |
| /** |
| * @brief Structure to describe the stream level |
| * properties encoder should adhere to |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** 0 - HEVC , no other value supported */ |
| WORD32 i4_codec_type; |
| |
| /**1 : Main Profile ,2: Main 10 Profile. no other value supported */ |
| WORD32 i4_codec_profile; |
| |
| /** 0: Main Tier ,1: High Tier. no other value supported */ |
| WORD32 i4_codec_tier; |
| |
| /** Enable VUI output 1: enable 0 : disable */ |
| WORD32 i4_vui_enable; |
| |
| /** Enable specific SEI messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_enable_flag; |
| |
| /** Enable specific SEI payload (other than pic timing and buffering period) messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_payload_enable_flag; |
| |
| /** Enable specific SEI buffering period messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_buffer_period_flags; |
| |
| /** Enable specific SEI Picture timing messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_pic_timing_flags; |
| |
| /** Enable specific SEI recovery point messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_recovery_point_flags; |
| |
| /** Enable specific SEI mastering display colour volume in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sei_mastering_disp_colour_vol_flags; |
| |
| /** |
| * Array to store the display_primaries_x values |
| */ |
| UWORD16 au2_display_primaries_x[3]; |
| |
| /** |
| * Array to store the display_primaries_y values |
| */ |
| UWORD16 au2_display_primaries_y[3]; |
| |
| /** |
| * Variable to store the white point x value |
| */ |
| UWORD16 u2_white_point_x; |
| |
| /** |
| * Variable to store the white point y value |
| */ |
| UWORD16 u2_white_point_y; |
| |
| /** |
| * Variable to store the max display mastering luminance value |
| */ |
| UWORD32 u4_max_display_mastering_luminance; |
| |
| /** |
| * Variable to store the min display mastering luminance value |
| */ |
| UWORD32 u4_min_display_mastering_luminance; |
| |
| /** |
| * Enable Content Level Light Info |
| */ |
| WORD32 i4_sei_cll_enable; |
| |
| /** |
| * 16bit unsigned number which indicates the maximum pixel intensity of all samples in bit-stream in units of 1 candela per square metre |
| */ |
| UWORD16 u2_sei_max_cll; |
| |
| /** |
| * 16bit unsigned number which indicates the average pixel intensity of all samples in bit-stream in units of 1 candela per square metre |
| */ |
| UWORD16 u2_sei_avg_cll; |
| |
| /** Enable/Disable SEI Hash on the Decoded picture & Hash type |
| * 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable |
| */ |
| WORD32 i4_decoded_pic_hash_sei_flag; |
| |
| /** Enable specific AUD messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_aud_enable_flags; |
| |
| /** Enable EOS messages in the stream |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_eos_enable_flags; |
| |
| /** Enable automatic insertion of SPS at each CDR |
| * 1: enable 0 : disable |
| */ |
| WORD32 i4_sps_at_cdr_enable; |
| |
| WORD32 i4_interop_flags; |
| |
| } ihevce_out_strm_params_t; |
| |
| /** |
| * @brief Structure to describe the Encoding Coding tools |
| * to be used by the Encoder |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility*/ |
| WORD32 i4_size; |
| |
| /** Max spacing between IDR frames - |
| * 0 indicates only at the beginning |
| */ |
| WORD32 i4_max_closed_gop_period; |
| |
| /** Min spacing between IDR frames - |
| * Max = Min provides fixed segment length |
| */ |
| WORD32 i4_min_closed_gop_period; |
| |
| /** Max spacing between CRA frames - |
| * |
| */ |
| WORD32 i4_max_cra_open_gop_period; |
| |
| /** Max spacing between I frames - |
| * |
| */ |
| WORD32 i4_max_i_open_gop_period; |
| |
| /** Maximum number of dyadic temporal layers */ |
| WORD32 i4_max_temporal_layers; |
| |
| /** Maximum number of reference frames */ |
| WORD32 i4_max_reference_frames; |
| |
| /** Enable weighted prediction |
| * 0 - disabled (default); 1 -enabled |
| */ |
| WORD32 i4_weighted_pred_enable; |
| |
| /** Deblocking type 0 - no deblocking; |
| * 1 - default; 2 - disable across slices |
| */ |
| WORD32 i4_deblocking_type; |
| |
| /** Use default scaling matrices |
| * 0 - disabled; 1 - enabled (default) |
| */ |
| WORD32 i4_use_default_sc_mtx; |
| |
| /** Cropping mode for cases where frame dimensions |
| * are not multiple of MIN CU size |
| * 1 - enable padding to min_cu multiple and generate cropping flags; |
| * 0 - report error |
| */ |
| WORD32 i4_cropping_mode; |
| |
| /** 0 - no slices; 1 - packet based; 2 - CU based */ |
| WORD32 i4_slice_type; |
| |
| /** Use default scaling matrices |
| * 0 - disabled; 1 - enabled (default) |
| */ |
| WORD32 i4_enable_entropy_sync; |
| |
| /** VQET control parameter */ |
| WORD32 i4_vqet; |
| |
| } ihevce_coding_params_t; |
| |
| /** |
| * @brief Structure to describe the Configurable parameters of Encoder |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /* ---------- Tiles related parameters ------------ */ |
| |
| /* ----------- CU related parameters -------------- */ |
| |
| /** 4 - 16x16; 5 - 32x32 (default); 6 - 64x64 */ |
| WORD32 i4_max_log2_cu_size; |
| |
| /** 3 - 8x8; 4 - 16x16 (default); 5 - 32x32 ; 6 - 64x64 */ |
| WORD32 i4_min_log2_cu_size; |
| |
| /** 2 - 4x4 (default) ; 3 - 8x8; 4 - 16x16; 5 - 32x32 */ |
| WORD32 i4_min_log2_tu_size; |
| |
| /** 2 - 4x4; 3 - 8x8 (default); 4 - 16x16; 5 - 32x32 */ |
| WORD32 i4_max_log2_tu_size; |
| |
| /** Max transform tree depth for intra */ |
| WORD32 i4_max_tr_tree_depth_I; |
| |
| /** Max transform tree depth for inter */ |
| WORD32 i4_max_tr_tree_depth_nI; |
| |
| /* ---------- Rate Control related parameters ------ */ |
| |
| /** Rate control mode 0 - constant qp (default); 1- CBR */ |
| WORD32 i4_rate_control_mode; |
| |
| /** CU level Qp modulation |
| 0 - No Qp modulation at CU level; |
| 1 - QP modulation level 1 |
| 2 - QP modulation level 2 |
| 3 - QP modulation level 3*/ |
| WORD32 i4_cu_level_rc; |
| |
| /* Factor used in capped VBR mode to fine tune for quality */ |
| WORD32 i4_rate_factor; |
| |
| /** Enable stuffing 0 - disabled (default); 1 -enabled */ |
| WORD32 i4_stuffing_enable; |
| |
| /*The max deivaiton allowed from file size (used only in VBR, in CBR vbv buffer size dictates the deviaiton allowed)*/ |
| WORD32 i4_vbr_max_peak_rate_dur; |
| |
| /*Number of frames to encode. required to control allowed bit deviation at any point of time*/ |
| WORD32 i4_num_frms_to_encode; |
| |
| /** Initial buffer fullness when decoding starts */ |
| WORD32 i4_init_vbv_fullness; |
| |
| /** Frame level I frame max qp in rate control mode */ |
| WORD32 i4_max_frame_qp; |
| |
| /** Frame level I frame min qp in rate control mode */ |
| WORD32 i4_min_frame_qp; |
| /* --------- ME related parameters ---------------- */ |
| |
| /** Maximum search range in full pel units. horizontal direction */ |
| WORD32 i4_max_search_range_horz; |
| |
| /** Maximum search range in full pel units. vertical direction */ |
| WORD32 i4_max_search_range_vert; |
| |
| /* Variable used to save old rate factor */ |
| /* Used only for plugin */ |
| WORD32 i4_old_rate_factor; |
| |
| } ihevce_config_prms_t; |
| |
| /** |
| * @brief Structure to describe Dynamic configuralbe |
| * parameters of encoder |
| * |
| * these new params can be passed as async commands |
| * to the enocder by sending a IHEVCE_CMD_CTL_SETPARAMS command |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** Resolution ID of the stream for which bitrate change needs to be applied */ |
| WORD32 i4_tgt_res_id; |
| |
| /** Bitrate ID in the Resolution ID of the stream for which bitrate change needs to be applied */ |
| WORD32 i4_tgt_br_id; |
| |
| /** New Target Bit-rate for on the fly change */ |
| WORD32 i4_new_tgt_bitrate; |
| |
| /** New Peak Bit-rate for on the fly change */ |
| WORD32 i4_new_peak_bitrate; |
| |
| /** New Rate Factor for on the fly change */ |
| WORD32 i4_new_rate_factor; |
| } ihevce_dyn_config_prms_t; |
| |
| /** |
| * @brief Structure to describe Dynamic configuralbe |
| * parameters of encoder for dynamic resolution change |
| * |
| * these new params can be passed as synchromous commands |
| * to the enocder by sending a IHEVCE_SYNCH_API_SET_RES_TAG command |
| */ |
| typedef struct |
| { |
| /** Resolution ID of the stream for which bitrate change needs to be applied */ |
| WORD32 i4_new_res_id; |
| |
| /** New Target Bit-rate for on the fly change */ |
| WORD32 i4_new_tgt_bitrate; |
| |
| } ihevce_dyn_res_prms_t; |
| |
| /** |
| * @brief Structure to describe the Look Ahead |
| * Processing Parameters of Encoder |
| */ |
| typedef struct |
| { |
| /** Used for checking version compatibility */ |
| WORD32 i4_size; |
| |
| /** Number of frames to look-ahead for RC and adaptive quant - |
| * counts each fields as one frame for interlaced |
| */ |
| WORD32 i4_rc_look_ahead_pics; |
| |
| /** Enable computation of weights & offsets for weighted prediction */ |
| WORD32 i4_enable_wts_ofsts; |
| |
| /* Enables denoiser as a part of video preprocessing. */ |
| WORD32 i4_denoise_enable; |
| |
| /* Enable this flag if input is interlaced and output is progressive */ |
| WORD32 i4_deinterlacer_enable; |
| |
| } ihevce_lap_params_t; |
| |
| /** |
| * @brief Structure to describe the parameters |
| * related to multi-bitrate encoding |
| */ |
| typedef struct |
| { |
| /** Number of bit-rate instances */ |
| WORD32 i4_num_bitrate_instances; |
| |
| /* Number of intra modes to be evaluated for derived instance */ |
| WORD32 i4_num_modes_intra; |
| |
| /* Number of inter modes to be evaluated for derived instance */ |
| WORD32 i4_num_modes_inter; |
| |
| } ihevce_mbr_params_t; |
| |
| /** |
| * @brief Vui/Sei parameters of Encoder |
| */ |
| typedef struct |
| { |
| /** |
| * indicates the presence of aspect_ratio |
| */ |
| UWORD8 u1_aspect_ratio_info_present_flag; |
| |
| /** |
| * specifies the aspect ratio of the luma samples |
| */ |
| UWORD8 au1_aspect_ratio_idc[IHEVCE_MAX_NUM_RESOLUTIONS]; |
| |
| /** |
| * width of the luma samples. user dependent |
| */ |
| UWORD16 au2_sar_width[IHEVCE_MAX_NUM_RESOLUTIONS]; |
| |
| /** |
| * height of the luma samples. user dependent |
| */ |
| UWORD16 au2_sar_height[IHEVCE_MAX_NUM_RESOLUTIONS]; |
| |
| /** |
| * if 1, specifies that the overscan_appropriate_flag is present |
| * if 0, the preferred display method for the video signal is unspecified |
| */ |
| UWORD8 u1_overscan_info_present_flag; |
| |
| /** |
| * if 1,indicates that the cropped decoded pictures output |
| * are suitable for display using overscan |
| */ |
| UWORD8 u1_overscan_appropriate_flag; |
| |
| /** |
| * if 1 specifies that video_format, video_full_range_flag and |
| * colour_description_present_flag are present |
| */ |
| UWORD8 u1_video_signal_type_present_flag; |
| |
| /** |
| * |
| */ |
| UWORD8 u1_video_format; |
| |
| /** |
| * indicates the black level and range of the luma and chroma signals |
| */ |
| UWORD8 u1_video_full_range_flag; |
| |
| /** |
| * if 1,to 1 specifies that colour_primaries, transfer_characteristics |
| * and matrix_coefficients are present |
| */ |
| UWORD8 u1_colour_description_present_flag; |
| |
| /** |
| * indicates the chromaticity coordinates of the source primaries |
| */ |
| UWORD8 u1_colour_primaries; |
| |
| /** |
| * indicates the opto-electronic transfer characteristic of the source picture |
| */ |
| UWORD8 u1_transfer_characteristics; |
| |
| /** |
| * the matrix coefficients used in deriving luma and chroma signals |
| * from the green, blue, and red primaries |
| */ |
| UWORD8 u1_matrix_coefficients; |
| |
| /** |
| * if 1, specifies that chroma_sample_loc_type_top_field and |
| * chroma_sample_loc_type_bottom_field are present |
| */ |
| UWORD8 u1_chroma_loc_info_present_flag; |
| |
| /** |
| * location of chroma samples |
| */ |
| UWORD8 u1_chroma_sample_loc_type_top_field; |
| |
| UWORD8 u1_chroma_sample_loc_type_bottom_field; |
| |
| /** |
| * to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue |
| */ |
| UWORD8 u1_vui_hrd_parameters_present_flag; |
| |
| /** |
| * VUI level HRD parameters |
| */ |
| //hrd_params_t s_vui_hrd_parameters; |
| |
| /** |
| * HRD parameter Indicates the presence of the |
| * num_units_in_ticks, time_scale flag |
| */ |
| UWORD8 u1_timing_info_present_flag; |
| |
| /** |
| * Nal- hrd parameters flag |
| */ |
| UWORD8 u1_nal_hrd_parameters_present_flag; |
| |
| } ihevce_vui_sei_params_t; |
| |
| /** |
| * @brief Multi thread related parameters passed to the encoder during create |
| */ |
| |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Total number of logical cores, which are assigned to be used by the encoder |
| */ |
| WORD32 i4_max_num_cores; |
| |
| /** Total number of groups in the machine on which encoder is run. |
| */ |
| WORD32 i4_num_proc_groups; |
| |
| /** Total number of logical cores present per processor group of the machine. |
| */ |
| WORD32 ai4_num_cores_per_grp[MAX_NUMBER_PROC_GRPS]; |
| |
| /** Flag to enableUse thread affintiy feature |
| * 0: Thread affinity disabled |
| * 1: Thread affinity enabled |
| */ |
| WORD32 i4_use_thrd_affinity; |
| |
| /** |
| * Memory allocation control flag: Reserved (to be used later) |
| */ |
| WORD32 i4_memory_alloc_ctrl_flag; |
| |
| /** |
| * Array of thread affinity masks for frame processing threads |
| * PRE Enc Group |
| */ |
| ULWORD64 au8_core_aff_mask[MAX_NUM_CORES]; |
| |
| } ihevce_static_multi_thread_params_t; |
| |
| /** |
| * @brief File IO APIs |
| */ |
| typedef struct |
| { |
| FILE *(*ihevce_fopen)(void *pv_cb_handle, const char *pi1_filename, const char *pi1_mode); |
| |
| int (*ihevce_fclose)(void *pv_cb_handle, FILE *pf_stream); |
| |
| int (*ihevce_fflush)(void *pv_cb_handle, FILE *pf_stream); |
| |
| int (*ihevce_fseek)(void *pv_cb_handle, FILE *pf_stream, long i4_offset, int i4_origin); |
| |
| size_t (*ihevce_fread)( |
| void *pv_cb_handle, void *pv_ptr, size_t u4_size, size_t u4_count, FILE *pf_stream); |
| |
| int (*ihevce_fscanf)( |
| void *pv_cb_handle, |
| IHEVCE_DATA_TYPE e_data_type, |
| FILE *file_ptr, |
| const char *format, |
| void *pv_dst); |
| |
| int (*ihevce_fprintf)(void *pv_cb_handle, FILE *pf_stream, const char *pi1_format, ...); |
| |
| size_t (*ihevce_fwrite)( |
| void *pv_cb_handle, const void *pv_ptr, size_t i4_size, size_t i4_count, FILE *pf_stream); |
| |
| char *(*ihevce_fgets)(void *pv_cb_handle, char *pi1_str, int i4_size, FILE *pf_stream); |
| |
| } ihevce_file_io_api_t; |
| |
| /** |
| * @brief System APIs to implement call back functions in encoder |
| */ |
| typedef struct |
| { |
| /*Call back handle for all system api*/ |
| void *pv_cb_handle; |
| |
| /* Console APIs */ |
| int (*ihevce_printf)(void *pv_cb_handle, const char *i1_str, ...); |
| |
| //int (*ihevce_scanf) (void *pv_handle, const char *i1_str, ...); |
| |
| int (*ihevce_sscanf)(void *pv_cb_handle, const char *pv_src, const char *format, int *p_dst_int); |
| |
| int (*ihevce_sprintf)(void *pv_cb_handle, char *pi1_str, const char *format, ...); |
| |
| int (*ihevce_sprintf_s)( |
| void *pv_cb_handle, char *pi1_str, size_t i4_size, const char *format, ...); |
| |
| /* File I/O APIs */ |
| ihevce_file_io_api_t s_file_io_api; |
| |
| } ihevce_sys_api_t; |
| |
| /** |
| * @brief Structure to describe multipass related params |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /* 0:Normal mode 1: only dumps stat 2: 2nd pass reads from stat file and rewrites the same file*/ |
| WORD32 i4_pass; |
| |
| /* Flag to specify the algorithm used for bit-distribution |
| in second pass */ |
| WORD32 i4_multi_pass_algo_mode; |
| |
| /* Stat file to read or write data of frame statistics */ |
| WORD8 *pi1_frame_stats_filename; |
| |
| /* stat file to read or write data of gop level statstics*/ |
| WORD8 *pi1_gop_stats_filename; |
| |
| /* Stat file to read or write CTB level data*/ |
| WORD8 *pi1_sub_frames_stats_filename; |
| |
| } ihevce_pass_prms_t; |
| |
| /** |
| * @brief Structure to describe tile params |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /* flag to indicate tile encoding enabled/disabled */ |
| WORD32 i4_tiles_enabled_flag; |
| |
| /* flag to indicate unifrom spacing of tiles */ |
| WORD32 i4_uniform_spacing_flag; |
| |
| /* num syntactical tiles in a frame */ |
| WORD32 i4_num_tile_cols; |
| WORD32 i4_num_tile_rows; |
| |
| /* Column width array to store width of each tile column */ |
| WORD32 ai4_column_width[MAX_TILE_COLUMNS]; |
| |
| /* Row height array to store height of each tile row */ |
| WORD32 ai4_row_height[MAX_TILE_ROWS]; |
| |
| } ihevce_app_tile_params_t; |
| |
| /** |
| * @brief Structure to describe slice params |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Flag to control dependent slices. |
| 0: Disable all slice segment limits |
| 1: Enforce max number of CTBs |
| 2: Enforce max number of bytes **/ |
| WORD32 i4_slice_segment_mode; |
| |
| /** Depending on i4_slice_segment_mode being: |
| 1: max number of CTBs per slice segment |
| 2: max number of bytes per slice segment **/ |
| WORD32 i4_slice_segment_argument; |
| |
| } ihevce_slice_params_t; |
| |
| /** |
| * @brief Static configuration parameters of Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Structure describing the input parameters - Applciatiopn should populate |
| * maximum values in this structure . Run time values |
| * should always be lessthan create time values |
| */ |
| ihevce_src_params_t s_src_prms; |
| |
| /** Parmeters for target use-case */ |
| ihevce_tgt_layer_params_t s_tgt_lyr_prms; |
| |
| /** Output stream parameters */ |
| ihevce_out_strm_params_t s_out_strm_prms; |
| |
| /** Coding parameters for the encoder */ |
| ihevce_coding_params_t s_coding_tools_prms; |
| |
| /** Configurable parameters for Encoder */ |
| ihevce_config_prms_t s_config_prms; |
| |
| /** VUI SEI app parameters*/ |
| ihevce_vui_sei_params_t s_vui_sei_prms; |
| |
| /** Multi threads specific pamrameters */ |
| ihevce_static_multi_thread_params_t s_multi_thrd_prms; |
| |
| /** Look-ahead processor related parameters */ |
| ihevce_lap_params_t s_lap_prms; |
| |
| /** Save Recon flag */ |
| WORD32 i4_save_recon; |
| |
| /** Compute PSNR Flag */ |
| /* 0: No logs |
| 1: (Frame level:Bits generation + POC) + (summary level: BitRate) |
| 2: (Frame level:Bits generation + POC + Qp + Pic-type) + (summary level: BitRate + PSNR) |
| */ |
| WORD32 i4_log_dump_level; |
| |
| WORD32 i4_enable_csv_dump; |
| |
| FILE *apF_csv_file[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; |
| |
| /** Enable Logo for Eval versions */ |
| WORD32 i4_enable_logo; |
| |
| /* API structure for exporting console and file I/O operation */ |
| ihevce_sys_api_t s_sys_api; |
| |
| /* Structure to describe multipass related params */ |
| ihevce_pass_prms_t s_pass_prms; |
| |
| /* Structure to describe tile params */ |
| ihevce_app_tile_params_t s_app_tile_params; |
| |
| /** Structure to describe slice segment params */ |
| ihevce_slice_params_t s_slice_params; |
| |
| /** Resolution ID of the current encoder context **/ |
| WORD32 i4_res_id; |
| |
| /** Bitrate ID of the current encoder context **/ |
| WORD32 i4_br_id; |
| |
| /* Architecture type */ |
| IV_ARCH_T e_arch_type; |
| |
| /* Control to free the entropy output buffers */ |
| /* 1 for non_blocking mode */ |
| /* and 0 for blocking mode */ |
| WORD32 i4_outbuf_buf_free_control; |
| |
| } ihevce_static_cfg_params_t; |
| |
| /** |
| * @brief Input structure in which input data and |
| * other parameters are sent to Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Buffer id for the current buffer */ |
| WORD32 i4_buf_id; |
| |
| /** is bottom field 0 = top field, 1 = bottom field */ |
| WORD32 i4_bottom_field; |
| |
| /** top field first input in case of interlaced case */ |
| WORD32 i4_topfield_first; |
| |
| /** input time stamp in terms of ticks: lower 32 */ |
| WORD32 i4_inp_timestamp_low; |
| |
| /** input time stamp in terms of ticks: higher 32 */ |
| WORD32 i4_inp_timestamp_high; |
| |
| /** colour format of input, |
| * should be same as create time value |
| */ |
| WORD32 u1_colour_format; |
| |
| /** |
| * Input frame buffer valid flag |
| * 1 : valid data is present in the s_input_buf |
| * 0 : Only command buffer is valid input buffer is a non valid input (dumy input) |
| */ |
| WORD32 i4_inp_frm_data_valid_flag; |
| |
| /** Synchronous control commands buffer |
| * this will an Tag Length Value (TLV) buffer. |
| * All commands must be terminated with a tag |
| * Tag should be set to IHEVCE_SYNCH_API_END_TAG |
| */ |
| void *pv_synch_ctrl_bufs; |
| |
| /** |
| * Synchronous control commands buffer |
| * size in number of bytes |
| */ |
| WORD32 i4_cmd_buf_size; |
| |
| /** for system use if run time buffer allocation is used*/ |
| void *pv_metadata; |
| |
| /** for system to pass frame context from Input to Output |
| Same pointer will be returned on the output buffer of this frame */ |
| void *pv_app_frm_ctxt; |
| |
| /** Input YUV buffers pointers and related parameters |
| * are set in this structure |
| */ |
| iv_yuv_buf_t s_input_buf; |
| |
| } iv_input_data_ctrl_buffs_t; |
| |
| /** |
| * @brief Input structure in which input async control |
| * commands are sent to Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Buffer id for the current buffer */ |
| WORD32 i4_buf_id; |
| |
| /** Asynchronous control commands buffer |
| * this will an Tag Length Value (TLV) buffer. |
| * The buffer must be ended with a IHEVCE_ASYNCH_API_END_TAG |
| */ |
| void *pv_asynch_ctrl_bufs; |
| |
| /** |
| * Asynchronous control commands buffer |
| * size in number of bytes |
| */ |
| WORD32 i4_cmd_buf_size; |
| |
| } iv_input_ctrl_buffs_t; |
| |
| /** |
| * @brief Ouput structure in which ouput data |
| * and related parameters are sent from Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Buffer id for the current buffer */ |
| WORD32 i4_buf_id; |
| |
| /** processing status of the current output returned */ |
| WORD32 i4_process_ret_sts; |
| |
| /** if error encountered the error code */ |
| WORD32 i4_process_error_code; |
| |
| /** picture type of the current encoded output */ |
| IV_PICTURE_CODING_TYPE_T i4_encoded_frame_type; |
| |
| /** output time stamp of curr encoded buffer : lower 32 */ |
| WORD32 i4_out_timestamp_low; |
| |
| /** output time stamp of curr encoded buffer : higher 32 */ |
| WORD32 i4_out_timestamp_high; |
| |
| /** skip status of the current encoded output */ |
| WORD32 i4_frame_skipped; |
| |
| /** bytes generated in the output buffer */ |
| WORD32 i4_bytes_generated; |
| |
| /** End flag to communicate this is last frame output from encoder */ |
| WORD32 i4_end_flag; |
| |
| /** End flag to communicate encoder that this is the last buffer from application |
| 1 - Last buf, 0 - Not last buffer. No other values are supported. |
| Application has to set the appropriate value before queing in encoder queue */ |
| WORD32 i4_is_last_buf; |
| |
| /** DBF level after the dynamic bitrate change |
| -1 - Value not set by codec |
| Encoder sets to positive value when bitrate change control call is done*/ |
| LWORD64 i8_cur_vbv_level; |
| |
| /** Output buffer pointer */ |
| void *pv_bitstream_bufs; |
| |
| /** Output buffer size */ |
| WORD32 i4_bitstream_buf_size; |
| |
| /** Can be used for tracking purpose if run time buffer allocation is used*/ |
| void *pv_metadata; |
| |
| /** for system to retrive frame context from Input to Output */ |
| void *pv_app_frm_ctxt; |
| |
| /** Can be used for tracking the buffer that is sent back during callback */ |
| WORD32 i4_cb_buf_id; |
| |
| /** Number of Prefix Non-VCL NAL units in the output buffer */ |
| WORD32 i4_num_non_vcl_prefix_nals; |
| |
| /** Number of Suffix Non-VCL NAL units in the output buffer */ |
| WORD32 i4_num_non_vcl_suffix_nals; |
| |
| /** Number of VCL NAL units in the output buffer */ |
| WORD32 i4_num_vcl_nals; |
| |
| /************************************************************************/ |
| /* Size of each NAL based on type: Non-VCL Prefix/ VCL / Non-VCL Suffix */ |
| /* */ |
| /* Ordering of NALS in output buffer is as follows: */ |
| /* Non-VCL Prefix NALs -> VCL NALs -> Non-VCL Suffix NALs */ |
| /* */ |
| /* As there are no holes between adjacent NALs, these sizes can be used */ |
| /* to compute the offsets w.r.t start of the output buffer */ |
| /************************************************************************/ |
| |
| /** Array to the store the size in bytes of Prefix Non-VCL NAL units */ |
| WORD32 ai4_size_non_vcl_prefix_nals[MAX_NUM_PREFIX_NALS_PER_AU]; |
| |
| /* Array to the store the size in bytes of Suffix Non-VCL NAL units */ |
| WORD32 ai4_size_non_vcl_suffix_nals[MAX_NUM_SUFFIX_NALS_PER_AU]; |
| |
| /** Array to the store the size in bytes of VCL NAL units */ |
| WORD32 ai4_size_vcl_nals[MAX_NUM_VCL_NALS_PER_AU]; |
| |
| } iv_output_data_buffs_t; |
| |
| /** |
| * @brief Output structure in which output async control |
| * acknowledgement are sent from Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Buffer id for the current buffer */ |
| WORD32 i4_buf_id; |
| |
| /** Asynchronous control commands ack buffer |
| * this will an Tag Length Value (TLV) buffer. |
| */ |
| void *pv_status_bufs; |
| |
| } iv_output_status_buffs_t; |
| |
| /** |
| * @brief structure in which recon data |
| * and related parameters are sent from Encoder |
| */ |
| typedef struct |
| { |
| /** Kept for maintaining backwards compatibility in future */ |
| WORD32 i4_size; |
| |
| /** Buffer id for the current buffer */ |
| WORD32 i4_buf_id; |
| |
| /** POC of the current buffer */ |
| WORD32 i4_poc; |
| |
| /** End flag to communicate this is last frame output from encoder */ |
| WORD32 i4_end_flag; |
| |
| /** End flag to communicate encoder that this is the last buffer from application |
| 1 - Last buf, 0 - Not last buffer. No other values are supported. |
| Application has to set the appropriate value before queing in encoder queue */ |
| WORD32 i4_is_last_buf; |
| |
| /** Recon luma buffer pointer */ |
| void *pv_y_buf; |
| |
| /** Recon cb buffer pointer */ |
| void *pv_cb_buf; |
| |
| /** Recon cr buffer pointer */ |
| void *pv_cr_buf; |
| |
| /** Luma size **/ |
| WORD32 i4_y_pixels; |
| |
| /** Chroma size **/ |
| WORD32 i4_uv_pixels; |
| |
| } iv_recon_data_buffs_t; |
| |
| /* @brief iv_res_layer_output_bufs_req_t: This structure contains the parameters |
| * related to output (data and control) buffer requirements of the codec for all |
| * target resolution layers |
| * Application can call the memory query API to get these requirements |
| */ |
| |
| typedef struct |
| { |
| /** i4_size of the structure : used for verison tracking */ |
| WORD32 i4_size; |
| |
| /*Memory requirements for each of target resolutions*/ |
| iv_output_bufs_req_t s_output_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; |
| |
| } iv_res_layer_output_bufs_req_t; |
| |
| /* @brief iv_res_layer_recon_bufs_req_t: This structure contains the parameters |
| * related to recon buffer requirements of the codec for all target resolution layers |
| * Application can call the memory query API to get these requirements |
| */ |
| |
| typedef struct |
| { |
| /** i4_size of the structure : used for verison tracking */ |
| WORD32 i4_size; |
| |
| /*Memory requirements for each of target resolutions*/ |
| iv_recon_bufs_req_t s_recon_buf_req[IHEVCE_MAX_NUM_RESOLUTIONS][IHEVCE_MAX_NUM_BITRATES]; |
| } iv_res_layer_recon_bufs_req_t; |
| |
| /* @brief iv_res_layer_output_data_buffs_desc_t: This structure contains |
| * the parameters related to output data buffers for all target resolution layers |
| */ |
| |
| typedef struct |
| { |
| /** i4_size of the structure : used for verison tracking */ |
| WORD32 i4_size; |
| |
| /*Output buffer requirements of each taregt resolution layer*/ |
| iv_output_data_buffs_desc_t s_output_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS] |
| [IHEVCE_MAX_NUM_BITRATES]; |
| |
| } iv_res_layer_output_data_buffs_desc_t; |
| |
| /* @brief iv_res_layer_output_status_buffs_desc_t: This structure contains |
| * the parameters related to recon data buffers for all target resolution layers |
| */ |
| |
| typedef struct |
| { |
| /** i4_size of the structure : used for verison tracking */ |
| WORD32 i4_size; |
| |
| /*Output buffer requirements of each taregt resolution layer*/ |
| iv_recon_data_buffs_desc_t s_recon_data_buffs[IHEVCE_MAX_NUM_RESOLUTIONS] |
| [IHEVCE_MAX_NUM_BITRATES]; |
| |
| } iv_res_layer_recon_data_buffs_desc_t; |
| |
| #endif // _IHEVCE_API_H_ |