libxaac-mirror/encoder/ixheaace_struct_def.h
Akshay Ragir e8d026548e Fix for the Index-out-of-bounds in iusace_quantize_lines
These changes handle the index-out-of-bounds runtime error
reported when the bit consumption exceeds the bit reservoir
and global gain reaches the maximum value. The issue is
reported with USAC and the same changes are extended to AAC.

Bug: ossFuzz: 63019
Test: poc in bug
2023-10-12 19:24:54 +05:30

126 lines
4.6 KiB
C

/******************************************************************************
* *
* Copyright (C) 2023 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
*/
#pragma once
/****************************************************************************/
/* structure definitions */
/****************************************************************************/
/* enhaacplus_enc configuration */
typedef struct {
WORD32 i_channels;
WORD32 i_native_channels;
WORD32 i_n_memtabs;
WORD32 sample_rate;
WORD32 native_sample_rate;
WORD32 i_channels_mode;
WORD32 aot;
WORD32 i_channels_mask;
WORD32 i_num_coupling_chan;
WORD32 element_type;
WORD32 element_slot;
WORD32 num_bs_elements;
WORD32 element_instance_tag;
/* Add config params here */
WORD32 aac_classic;
WORD32 use_parametric_stereo;
WORD32 chmode_nchannels;
WORD32 chmode;
WORD32 firstframe;
WORD32 adts_flag;
WORD32 esbr_flag;
WORD32 init_success;
WORD32 silence_marker;
WORD32 frame_count;
FLAG write_program_config_element;
iaace_config aac_config;
ixheaace_config_ancillary pstr_ancillary;
WORD32 mps_tree_config;
WORD32 use_mps;
WORD32 eldsbr_found;
WORD32 ccfl_idx;
UWORD32 ui_pcm_wd_sz;
WORD32 frame_length;
ia_usac_encoder_config_struct usac_config;
} ixheaace_config_struct;
typedef struct ixheaace_state_struct {
// The first AACENC_BLOCKSIZE*2 elements are the same as that of the encoder i/p buffer.
// The usage of input buffer as scratch is avoided here
FLOAT32 *inp_delay;
FLOAT32 *time_signal_mps;
FLOAT32 *time_signal;
UWORD8 *mps_bs;
ixheaace_config_struct *pstr_config[MAXIMUM_BS_ELE];
WORD32 aot;
WORD32 mps_enable;
WORD32 mps_tree_config;
WORD32 i_out_bytes;
UWORD32 ui_in_bytes;
UWORD32 ui_input_over;
UWORD32 ui_init_done;
/* other state structure variables */
WORD32 downsample[MAXIMUM_BS_ELE];
WORD32 buffer_offset;
iexheaac_encoder_str *aac_enc_pers_mem[MAXIMUM_BS_ELE];
VOID *temp_buff_aac;
ixheaace_bit_buf bit_stream;
ixheaace_bit_buf_handle pstr_bit_stream_handle;
struct ixheaace_str_sbr_enc *spectral_band_replication_enc_pers_mem[MAXIMUM_BS_ELE];
VOID *temp_buff_sbr;
VOID *ptr_temp_buff_resamp;
ixheaace_iir21_resampler down_sampler[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
ixheaace_iir_sos_resampler down_samp_sos[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
ixheaace_iir_sos_resampler up_sampler[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
ixheaace_iir21_resampler hbe_down_sampler[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
ixheaace_iir_sos_resampler hbe_down_samp_sos[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
ixheaace_iir_sos_resampler hbe_up_sampler[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
UWORD8 num_anc_data_bytes[MAXIMUM_BS_ELE][IXHEAACE_MAX_CH_IN_BS_ELE];
UWORD8 anc_data_bytes[MAXIMUM_BS_ELE][IXHEAACE_MAX_PAYLOAD_SIZE];
WORD32 total_fill_bits;
int *scratch_addr;
char flag_error;
FLOAT32 **ptr_in_buf;
FLOAT32 **pp_drc_in_buf;
FLOAT32 *mps_scratch;
ixheaace_audio_specific_config_struct audio_specific_config;
ia_usac_data_struct str_usac_enc_data;
ia_bit_buf_struct str_bit_buf;
ixheaace_mps_212_memory_struct *mps_pers_mem;
ixheaace_mps_515_memory_struct *mps_515_pers_mem;
WORD32 is_quant_spec_zero;
WORD32 is_gain_limited;
} ixheaace_state_struct;
typedef struct ixheaace_api_struct {
/* pointer to the state structure */
ixheaace_state_struct *pstr_state;
ixheaace_config_struct config[MAXIMUM_BS_ELE];
/* the mem tables */
ixheaace_mem_info_struct *pstr_mem_info;
/* the mem pointers */
pVOID *pp_mem;
/* the table structs */
ixheaace_aac_tables pstr_aac_tabs;
ixheaace_comm_tables common_tabs;
ixheaace_str_sbr_tabs spectral_band_replication_tabs;
WORD32 usac_en;
VOID *pstr_mps_212_enc;
VOID *pstr_mps_515_enc;
} ixheaace_api_struct;