1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker * *
3*15dc779aSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker *
5*15dc779aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker *
9*15dc779aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker *
11*15dc779aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker *
17*15dc779aSAndroid Build Coastguard Worker *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker /*****************************************************************************/
21*15dc779aSAndroid Build Coastguard Worker /* File includes */
22*15dc779aSAndroid Build Coastguard Worker /*****************************************************************************/
23*15dc779aSAndroid Build Coastguard Worker #include <string.h>
24*15dc779aSAndroid Build Coastguard Worker #include <stdio.h>
25*15dc779aSAndroid Build Coastguard Worker #include <stdlib.h>
26*15dc779aSAndroid Build Coastguard Worker #include <stdint.h>
27*15dc779aSAndroid Build Coastguard Worker #include <fuzzer/FuzzedDataProvider.h>
28*15dc779aSAndroid Build Coastguard Worker
29*15dc779aSAndroid Build Coastguard Worker extern "C" {
30*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
31*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_common_enc.h"
32*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_uni_drc.h"
33*15dc779aSAndroid Build Coastguard Worker #include "impd_drc_api.h"
34*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_api.h"
35*15dc779aSAndroid Build Coastguard Worker #include "ixheaace_loudness_measurement.h"
36*15dc779aSAndroid Build Coastguard Worker }
37*15dc779aSAndroid Build Coastguard Worker
38*15dc779aSAndroid Build Coastguard Worker static constexpr WORD32 k_sample_rates[] = {7350, 8000, 11025, 12000, 16000, 22050, 24000,
39*15dc779aSAndroid Build Coastguard Worker 32000, 44100, 48000, 64000, 88200, 96000};
40*15dc779aSAndroid Build Coastguard Worker static constexpr WORD16 k_frame_length[] = {480, 512, 768, 960, 1024};
41*15dc779aSAndroid Build Coastguard Worker
malloc_global(UWORD32 size,UWORD32 alignment)42*15dc779aSAndroid Build Coastguard Worker pVOID malloc_global(UWORD32 size, UWORD32 alignment) {
43*15dc779aSAndroid Build Coastguard Worker pVOID ptr = NULL;
44*15dc779aSAndroid Build Coastguard Worker if (posix_memalign((VOID **)&ptr, alignment, size)) {
45*15dc779aSAndroid Build Coastguard Worker ptr = NULL;
46*15dc779aSAndroid Build Coastguard Worker }
47*15dc779aSAndroid Build Coastguard Worker return ptr;
48*15dc779aSAndroid Build Coastguard Worker }
49*15dc779aSAndroid Build Coastguard Worker
free_global(pVOID ptr)50*15dc779aSAndroid Build Coastguard Worker VOID free_global(pVOID ptr) { free(ptr); }
51*15dc779aSAndroid Build Coastguard Worker
ixheaace_read_drc_config_params(ia_drc_enc_params_struct * pstr_enc_params,ia_drc_uni_drc_config_struct * pstr_uni_drc_config,ia_drc_loudness_info_set_struct * pstr_enc_loudness_info_set,ia_drc_uni_drc_gain_ext_struct * pstr_enc_gain_extension,FuzzedDataProvider * fuzzed_data,WORD32 in_ch)52*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_read_drc_config_params(
53*15dc779aSAndroid Build Coastguard Worker ia_drc_enc_params_struct *pstr_enc_params, ia_drc_uni_drc_config_struct *pstr_uni_drc_config,
54*15dc779aSAndroid Build Coastguard Worker ia_drc_loudness_info_set_struct *pstr_enc_loudness_info_set,
55*15dc779aSAndroid Build Coastguard Worker ia_drc_uni_drc_gain_ext_struct *pstr_enc_gain_extension, FuzzedDataProvider *fuzzed_data,
56*15dc779aSAndroid Build Coastguard Worker WORD32 in_ch) {
57*15dc779aSAndroid Build Coastguard Worker WORD32 n, g, s, m, ch, p;
58*15dc779aSAndroid Build Coastguard Worker WORD32 gain_set_channels;
59*15dc779aSAndroid Build Coastguard Worker
60*15dc779aSAndroid Build Coastguard Worker pstr_enc_params->gain_sequence_present = fuzzed_data->ConsumeBool();
61*15dc779aSAndroid Build Coastguard Worker pstr_enc_params->delay_mode = fuzzed_data->ConsumeBool();
62*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->sample_rate_present = fuzzed_data->ConsumeBool();
63*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_drc_coefficients_uni_drc->drc_frame_size_present =
64*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
65*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->loudness_info_set_present = fuzzed_data->ConsumeBool();
66*15dc779aSAndroid Build Coastguard Worker
67*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->drc_instructions_uni_drc_count =
68*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DRC_INSTRUCTIONS_COUNT);
69*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_uni_drc_config->drc_instructions_uni_drc_count; n++) {
70*15dc779aSAndroid Build Coastguard Worker ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
71*15dc779aSAndroid Build Coastguard Worker &pstr_uni_drc_config->str_drc_instructions_uni_drc[n];
72*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_id = fuzzed_data->ConsumeIntegral<WORD8>();
73*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
74*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->additional_downmix_id_present = fuzzed_data->ConsumeBool();
75*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->additional_downmix_id_count =
76*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
77*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
78*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->depends_on_drc_set_present = fuzzed_data->ConsumeBool();
79*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->depends_on_drc_set = fuzzed_data->ConsumeIntegral<WORD8>();
80*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->no_independent_use = fuzzed_data->ConsumeBool();
81*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_effect = fuzzed_data->ConsumeIntegral<WORD16>();
82*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_present = fuzzed_data->ConsumeBool();
83*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper =
84*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
85*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present =
86*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
87*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower =
88*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
89*15dc779aSAndroid Build Coastguard Worker
90*15dc779aSAndroid Build Coastguard Worker gain_set_channels = fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_COUNT);
91*15dc779aSAndroid Build Coastguard Worker for (ch = 0; ch < gain_set_channels; ch++) {
92*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] = fuzzed_data->ConsumeIntegral<WORD8>();
93*15dc779aSAndroid Build Coastguard Worker }
94*15dc779aSAndroid Build Coastguard Worker for (; ch < MAX_CHANNEL_COUNT; ch++) {
95*15dc779aSAndroid Build Coastguard Worker if (gain_set_channels > 0) {
96*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] =
97*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
98*15dc779aSAndroid Build Coastguard Worker } else {
99*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
100*15dc779aSAndroid Build Coastguard Worker }
101*15dc779aSAndroid Build Coastguard Worker }
102*15dc779aSAndroid Build Coastguard Worker
103*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->num_drc_channel_groups =
104*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_GROUP_COUNT);
105*15dc779aSAndroid Build Coastguard Worker for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
106*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] =
107*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
108*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] =
109*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
110*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] =
111*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
112*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] =
113*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
114*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] =
115*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
116*15dc779aSAndroid Build Coastguard Worker }
117*15dc779aSAndroid Build Coastguard Worker
118*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->limiter_peak_target_present = fuzzed_data->ConsumeBool();
119*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->limiter_peak_target =
120*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
121*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_instructions_type = fuzzed_data->ConsumeIntegral<WORD8>();
122*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->mae_group_id = fuzzed_data->ConsumeIntegral<WORD8>();
123*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->mae_group_preset_id = fuzzed_data->ConsumeIntegral<WORD8>();
124*15dc779aSAndroid Build Coastguard Worker }
125*15dc779aSAndroid Build Coastguard Worker
126*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->drc_coefficients_uni_drc_count =
127*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DRC_COEFF_COUNT);
128*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_uni_drc_config->drc_coefficients_uni_drc_count; n++) {
129*15dc779aSAndroid Build Coastguard Worker ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc =
130*15dc779aSAndroid Build Coastguard Worker &pstr_uni_drc_config->str_drc_coefficients_uni_drc[n];
131*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
132*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->gain_set_count =
133*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, GAIN_SET_COUNT_MAX);
134*15dc779aSAndroid Build Coastguard Worker for (s = 0; s < pstr_drc_coefficients_uni_drc->gain_set_count; s++) {
135*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_coding_profile =
136*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
137*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_interpolation_type =
138*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
139*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].full_frame =
140*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
141*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_alignment =
142*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
143*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_delta_min_present =
144*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
145*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count =
146*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_BAND_COUNT);
147*15dc779aSAndroid Build Coastguard Worker if (pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count == 1) {
148*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points =
149*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
150*15dc779aSAndroid Build Coastguard Worker for (p = 0;
151*15dc779aSAndroid Build Coastguard Worker p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points;
152*15dc779aSAndroid Build Coastguard Worker p++) {
153*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].x =
154*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
155*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].y =
156*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
157*15dc779aSAndroid Build Coastguard Worker }
158*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].width =
159*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
160*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].attack =
161*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
162*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].decay =
163*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
164*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].drc_characteristic =
165*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
166*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
167*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
168*15dc779aSAndroid Build Coastguard Worker .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
169*15dc779aSAndroid Build Coastguard Worker } else {
170*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count; m++) {
171*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points =
172*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
173*15dc779aSAndroid Build Coastguard Worker for (p = 0;
174*15dc779aSAndroid Build Coastguard Worker p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points;
175*15dc779aSAndroid Build Coastguard Worker p++) {
176*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
177*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
178*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
179*15dc779aSAndroid Build Coastguard Worker .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
180*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
181*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
182*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
183*15dc779aSAndroid Build Coastguard Worker .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
184*15dc779aSAndroid Build Coastguard Worker }
185*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].width =
186*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
187*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].attack =
188*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
189*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].decay =
190*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
191*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s].drc_band_type =
192*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
193*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
194*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
195*15dc779aSAndroid Build Coastguard Worker .start_sub_band_index = fuzzed_data->ConsumeIntegral<WORD16>();
196*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
197*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
198*15dc779aSAndroid Build Coastguard Worker .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
199*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
200*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
201*15dc779aSAndroid Build Coastguard Worker .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
202*15dc779aSAndroid Build Coastguard Worker }
203*15dc779aSAndroid Build Coastguard Worker }
204*15dc779aSAndroid Build Coastguard Worker }
205*15dc779aSAndroid Build Coastguard Worker }
206*15dc779aSAndroid Build Coastguard Worker
207*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->loudness_info_count =
208*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
209*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_enc_loudness_info_set->loudness_info_count; n++) {
210*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].drc_set_id =
211*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
212*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].downmix_id =
213*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
214*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level_present =
215*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
216*15dc779aSAndroid Build Coastguard Worker if (1 == pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level_present) {
217*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level =
218*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
219*15dc779aSAndroid Build Coastguard Worker }
220*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_present =
221*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
222*15dc779aSAndroid Build Coastguard Worker if (1 == pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_present) {
223*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level =
224*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
225*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_measurement_system =
226*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
227*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_reliability =
228*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
229*15dc779aSAndroid Build Coastguard Worker }
230*15dc779aSAndroid Build Coastguard Worker
231*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].measurement_count =
232*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
233*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < pstr_enc_loudness_info_set->str_loudness_info[n].measurement_count; m++) {
234*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].method_definition =
235*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
236*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].method_value =
237*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
238*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n]
239*15dc779aSAndroid Build Coastguard Worker .str_loudness_measure[m]
240*15dc779aSAndroid Build Coastguard Worker .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
241*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].reliability =
242*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
243*15dc779aSAndroid Build Coastguard Worker }
244*15dc779aSAndroid Build Coastguard Worker }
245*15dc779aSAndroid Build Coastguard Worker
246*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->loudness_info_album_count =
247*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
248*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_enc_loudness_info_set->loudness_info_album_count; n++) {
249*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].drc_set_id =
250*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
251*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].downmix_id =
252*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
253*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level_present =
254*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
255*15dc779aSAndroid Build Coastguard Worker if (1 == pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level_present) {
256*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level =
257*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
258*15dc779aSAndroid Build Coastguard Worker }
259*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_present =
260*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
261*15dc779aSAndroid Build Coastguard Worker if (1 == pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_present) {
262*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level =
263*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
264*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_measurement_system =
265*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
266*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_reliability =
267*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
268*15dc779aSAndroid Build Coastguard Worker }
269*15dc779aSAndroid Build Coastguard Worker
270*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].measurement_count =
271*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
272*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < pstr_enc_loudness_info_set->str_loudness_info_album[n].measurement_count;
273*15dc779aSAndroid Build Coastguard Worker m++) {
274*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n]
275*15dc779aSAndroid Build Coastguard Worker .str_loudness_measure[m]
276*15dc779aSAndroid Build Coastguard Worker .method_definition = fuzzed_data->ConsumeIntegral<WORD8>();
277*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n]
278*15dc779aSAndroid Build Coastguard Worker .str_loudness_measure[m]
279*15dc779aSAndroid Build Coastguard Worker .method_value = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
280*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n]
281*15dc779aSAndroid Build Coastguard Worker .str_loudness_measure[m]
282*15dc779aSAndroid Build Coastguard Worker .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
283*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->str_loudness_info_album[n].str_loudness_measure[m].reliability =
284*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
285*15dc779aSAndroid Build Coastguard Worker }
286*15dc779aSAndroid Build Coastguard Worker }
287*15dc779aSAndroid Build Coastguard Worker
288*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_channel_layout.layout_signaling_present = fuzzed_data->ConsumeBool();
289*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_channel_layout.defined_layout = fuzzed_data->ConsumeIntegral<WORD8>();
290*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_channel_layout.speaker_position[0] =
291*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
292*15dc779aSAndroid Build Coastguard Worker
293*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->downmix_instructions_count =
294*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DOWNMIX_INSTRUCTION_COUNT);
295*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_uni_drc_config->downmix_instructions_count; n++) {
296*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_downmix_instructions[n].target_layout =
297*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
298*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_downmix_instructions[n].downmix_coefficients_present =
299*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
300*15dc779aSAndroid Build Coastguard Worker }
301*15dc779aSAndroid Build Coastguard Worker
302*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->drc_description_basic_present = fuzzed_data->ConsumeBool();
303*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->uni_drc_config_ext_present = fuzzed_data->ConsumeBool();
304*15dc779aSAndroid Build Coastguard Worker pstr_enc_loudness_info_set->loudness_info_set_ext_present = fuzzed_data->ConsumeBool();
305*15dc779aSAndroid Build Coastguard Worker pstr_enc_gain_extension->uni_drc_gain_ext_present = fuzzed_data->ConsumeBool();
306*15dc779aSAndroid Build Coastguard Worker
307*15dc779aSAndroid Build Coastguard Worker if (pstr_uni_drc_config->uni_drc_config_ext_present) {
308*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.uni_drc_config_ext_type[0] = UNIDRC_CONF_EXT_V1;
309*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present =
310*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
311*15dc779aSAndroid Build Coastguard Worker if (pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present) {
312*15dc779aSAndroid Build Coastguard Worker /*********** str_downmix_instructions_v1 *************/
313*15dc779aSAndroid Build Coastguard Worker
314*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count =
315*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DOWNMIX_INSTRUCTIONS_COUNT_MAX);
316*15dc779aSAndroid Build Coastguard Worker for (n = 0; n < pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count;
317*15dc779aSAndroid Build Coastguard Worker n++) {
318*15dc779aSAndroid Build Coastguard Worker ia_drc_downmix_instructions_struct *pstr_downmix_instructions_v1 =
319*15dc779aSAndroid Build Coastguard Worker &pstr_uni_drc_config->str_uni_drc_config_ext.str_downmix_instructions_v1[n];
320*15dc779aSAndroid Build Coastguard Worker pstr_downmix_instructions_v1->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
321*15dc779aSAndroid Build Coastguard Worker ;
322*15dc779aSAndroid Build Coastguard Worker pstr_downmix_instructions_v1->target_ch_count = fuzzed_data->ConsumeIntegral<WORD8>();
323*15dc779aSAndroid Build Coastguard Worker pstr_downmix_instructions_v1->target_layout = fuzzed_data->ConsumeIntegral<WORD8>();
324*15dc779aSAndroid Build Coastguard Worker pstr_downmix_instructions_v1->downmix_coefficients_present = fuzzed_data->ConsumeBool();
325*15dc779aSAndroid Build Coastguard Worker if (pstr_downmix_instructions_v1->downmix_coefficients_present) {
326*15dc779aSAndroid Build Coastguard Worker FLOAT32 dwn_mix_coeff = 0.0f;
327*15dc779aSAndroid Build Coastguard Worker for (s = 0; s < pstr_downmix_instructions_v1->target_layout; s++) {
328*15dc779aSAndroid Build Coastguard Worker dwn_mix_coeff = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
329*15dc779aSAndroid Build Coastguard Worker for (ch = 0; ch < in_ch; ch++) {
330*15dc779aSAndroid Build Coastguard Worker pstr_downmix_instructions_v1->downmix_coeff[in_ch * s + ch] = dwn_mix_coeff;
331*15dc779aSAndroid Build Coastguard Worker }
332*15dc779aSAndroid Build Coastguard Worker }
333*15dc779aSAndroid Build Coastguard Worker }
334*15dc779aSAndroid Build Coastguard Worker }
335*15dc779aSAndroid Build Coastguard Worker }
336*15dc779aSAndroid Build Coastguard Worker
337*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.drc_coeffs_and_instructions_uni_drc_v1_present =
338*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
339*15dc779aSAndroid Build Coastguard Worker if (pstr_uni_drc_config->str_uni_drc_config_ext
340*15dc779aSAndroid Build Coastguard Worker .drc_coeffs_and_instructions_uni_drc_v1_present) {
341*15dc779aSAndroid Build Coastguard Worker /*********** str_drc_coefficients_uni_drc_v1 *************/
342*15dc779aSAndroid Build Coastguard Worker
343*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count =
344*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DRC_COEFFICIENTS_UNIDRC_V1_COUNT_MAX);
345*15dc779aSAndroid Build Coastguard Worker for (n = 0;
346*15dc779aSAndroid Build Coastguard Worker n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count;
347*15dc779aSAndroid Build Coastguard Worker n++) {
348*15dc779aSAndroid Build Coastguard Worker ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc_v1 =
349*15dc779aSAndroid Build Coastguard Worker &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_coefficients_uni_drc_v1[n];
350*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
351*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->gain_set_count =
352*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, GAIN_SET_COUNT_MAX);
353*15dc779aSAndroid Build Coastguard Worker for (s = 0; s < pstr_drc_coefficients_uni_drc_v1->gain_set_count; s++) {
354*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_coding_profile =
355*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
356*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_interpolation_type =
357*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
358*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].full_frame =
359*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
360*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_alignment =
361*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
362*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_delta_min_present =
363*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
364*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count =
365*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_BAND_COUNT);
366*15dc779aSAndroid Build Coastguard Worker if (pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count == 1) {
367*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points =
368*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
369*15dc779aSAndroid Build Coastguard Worker for (p = 0; p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
370*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
371*15dc779aSAndroid Build Coastguard Worker .nb_points;
372*15dc779aSAndroid Build Coastguard Worker p++) {
373*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
374*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
375*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
376*15dc779aSAndroid Build Coastguard Worker .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
377*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
378*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
379*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
380*15dc779aSAndroid Build Coastguard Worker .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
381*15dc779aSAndroid Build Coastguard Worker }
382*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].width =
383*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
384*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].attack =
385*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
386*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].decay =
387*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
388*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
389*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
390*15dc779aSAndroid Build Coastguard Worker .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
391*15dc779aSAndroid Build Coastguard Worker ;
392*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
393*15dc779aSAndroid Build Coastguard Worker .gain_params[0]
394*15dc779aSAndroid Build Coastguard Worker .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
395*15dc779aSAndroid Build Coastguard Worker } else {
396*15dc779aSAndroid Build Coastguard Worker for (m = 0; m < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count;
397*15dc779aSAndroid Build Coastguard Worker m++) {
398*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points =
399*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
400*15dc779aSAndroid Build Coastguard Worker for (p = 0; p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
401*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
402*15dc779aSAndroid Build Coastguard Worker .nb_points;
403*15dc779aSAndroid Build Coastguard Worker p++) {
404*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
405*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
406*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
407*15dc779aSAndroid Build Coastguard Worker .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
408*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
409*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
410*15dc779aSAndroid Build Coastguard Worker .gain_points[p]
411*15dc779aSAndroid Build Coastguard Worker .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
412*15dc779aSAndroid Build Coastguard Worker }
413*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].width =
414*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
415*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].attack =
416*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
417*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].decay =
418*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
419*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].drc_band_type = 0;
420*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
421*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
422*15dc779aSAndroid Build Coastguard Worker .start_sub_band_index = fuzzed_data->ConsumeIntegral<WORD16>();
423*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
424*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
425*15dc779aSAndroid Build Coastguard Worker .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
426*15dc779aSAndroid Build Coastguard Worker ;
427*15dc779aSAndroid Build Coastguard Worker pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
428*15dc779aSAndroid Build Coastguard Worker .gain_params[m]
429*15dc779aSAndroid Build Coastguard Worker .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
430*15dc779aSAndroid Build Coastguard Worker }
431*15dc779aSAndroid Build Coastguard Worker }
432*15dc779aSAndroid Build Coastguard Worker }
433*15dc779aSAndroid Build Coastguard Worker }
434*15dc779aSAndroid Build Coastguard Worker
435*15dc779aSAndroid Build Coastguard Worker /*********** str_drc_instructions_uni_drc_v1 *************/
436*15dc779aSAndroid Build Coastguard Worker pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count =
437*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DRC_INSTRUCTIONS_UNIDRC_V1_COUNT_MAX);
438*15dc779aSAndroid Build Coastguard Worker for (n = 0;
439*15dc779aSAndroid Build Coastguard Worker n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count;
440*15dc779aSAndroid Build Coastguard Worker n++) {
441*15dc779aSAndroid Build Coastguard Worker ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
442*15dc779aSAndroid Build Coastguard Worker &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_instructions_uni_drc_v1[n];
443*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_id = fuzzed_data->ConsumeIntegral<WORD8>();
444*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
445*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->additional_downmix_id_present = fuzzed_data->ConsumeBool();
446*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->additional_downmix_id_count =
447*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
448*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
449*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->depends_on_drc_set_present = fuzzed_data->ConsumeBool();
450*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->depends_on_drc_set = fuzzed_data->ConsumeIntegral<WORD8>();
451*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->no_independent_use = fuzzed_data->ConsumeBool();
452*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_effect = fuzzed_data->ConsumeIntegral<WORD16>();
453*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_present =
454*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
455*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper =
456*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
457*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present =
458*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
459*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower =
460*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
461*15dc779aSAndroid Build Coastguard Worker
462*15dc779aSAndroid Build Coastguard Worker gain_set_channels = fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_COUNT);
463*15dc779aSAndroid Build Coastguard Worker for (ch = 0; ch < gain_set_channels; ch++) {
464*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] =
465*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
466*15dc779aSAndroid Build Coastguard Worker }
467*15dc779aSAndroid Build Coastguard Worker for (; ch < MAX_CHANNEL_COUNT; ch++) {
468*15dc779aSAndroid Build Coastguard Worker if (gain_set_channels > 0) {
469*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] =
470*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
471*15dc779aSAndroid Build Coastguard Worker } else {
472*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
473*15dc779aSAndroid Build Coastguard Worker }
474*15dc779aSAndroid Build Coastguard Worker }
475*15dc779aSAndroid Build Coastguard Worker
476*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->num_drc_channel_groups =
477*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_GROUP_COUNT);
478*15dc779aSAndroid Build Coastguard Worker for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
479*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] =
480*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
481*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] =
482*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
483*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] =
484*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
485*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] =
486*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeBool();
487*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] =
488*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
489*15dc779aSAndroid Build Coastguard Worker }
490*15dc779aSAndroid Build Coastguard Worker
491*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->limiter_peak_target_present = fuzzed_data->ConsumeBool();
492*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->limiter_peak_target =
493*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
494*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->drc_instructions_type =
495*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
496*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->mae_group_id = fuzzed_data->ConsumeIntegral<WORD8>();
497*15dc779aSAndroid Build Coastguard Worker pstr_drc_instructions_uni_drc->mae_group_preset_id =
498*15dc779aSAndroid Build Coastguard Worker fuzzed_data->ConsumeIntegral<WORD8>();
499*15dc779aSAndroid Build Coastguard Worker }
500*15dc779aSAndroid Build Coastguard Worker }
501*15dc779aSAndroid Build Coastguard Worker }
502*15dc779aSAndroid Build Coastguard Worker }
503*15dc779aSAndroid Build Coastguard Worker
ixheaace_fuzzer_flag(ixheaace_input_config * pstr_in_cfg,ia_drc_input_config * pstr_drc_cfg,FuzzedDataProvider * fuzzed_data,WORD32 in_ch)504*15dc779aSAndroid Build Coastguard Worker static VOID ixheaace_fuzzer_flag(ixheaace_input_config *pstr_in_cfg,
505*15dc779aSAndroid Build Coastguard Worker ia_drc_input_config *pstr_drc_cfg,
506*15dc779aSAndroid Build Coastguard Worker FuzzedDataProvider *fuzzed_data, WORD32 in_ch) {
507*15dc779aSAndroid Build Coastguard Worker // Set Default value for AAC config structure
508*15dc779aSAndroid Build Coastguard Worker
509*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_bitrate = fuzzed_data->ConsumeIntegral<WORD32>();
510*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_use_mps = fuzzed_data->ConsumeBool();
511*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_use_adts = fuzzed_data->ConsumeBool();
512*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_use_es = fuzzed_data->ConsumeBool();
513*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->aac_config.use_tns = fuzzed_data->ConsumeBool();
514*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->aac_config.noise_filling = fuzzed_data->ConsumeBool();
515*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->ui_pcm_wd_sz = fuzzed_data->ConsumeIntegral<WORD8>();
516*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_channels = fuzzed_data->ConsumeIntegral<WORD8>();
517*15dc779aSAndroid Build Coastguard Worker if (fuzzed_data->ConsumeBool()) {
518*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_samp_freq = fuzzed_data->PickValueInArray(k_sample_rates);
519*15dc779aSAndroid Build Coastguard Worker } else {
520*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_samp_freq = fuzzed_data->ConsumeIntegral<UWORD32>();
521*15dc779aSAndroid Build Coastguard Worker }
522*15dc779aSAndroid Build Coastguard Worker if (fuzzed_data->ConsumeBool()) {
523*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->frame_length = fuzzed_data->PickValueInArray(k_frame_length);
524*15dc779aSAndroid Build Coastguard Worker } else {
525*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->frame_length = fuzzed_data->ConsumeIntegral<WORD16>();
526*15dc779aSAndroid Build Coastguard Worker }
527*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->aot = fuzzed_data->ConsumeIntegral<WORD8>();
528*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->esbr_flag = fuzzed_data->ConsumeBool();
529*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->aac_config.full_bandwidth = fuzzed_data->ConsumeBool();
530*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->aac_config.bitreservoir_size = fuzzed_data->ConsumeIntegral<WORD16>();
531*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_mps_tree_config = fuzzed_data->ConsumeIntegral<WORD8>();
532*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->i_channels_mask = fuzzed_data->ConsumeIntegral<WORD8>();
533*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->cplx_pred = fuzzed_data->ConsumeBool();
534*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->usac_en = fuzzed_data->ConsumeBool();
535*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->ccfl_idx = fuzzed_data->ConsumeIntegral<WORD8>();
536*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->pvc_active = fuzzed_data->ConsumeBool();
537*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->harmonic_sbr = fuzzed_data->ConsumeBool();
538*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->hq_esbr = fuzzed_data->ConsumeBool();
539*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->use_drc_element = fuzzed_data->ConsumeBool();
540*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->inter_tes_active = fuzzed_data->ConsumeBool();
541*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->codec_mode = fuzzed_data->ConsumeIntegral<WORD8>();
542*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->random_access_interval = fuzzed_data->ConsumeIntegral<WORD32>();
543*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->method_def = fuzzed_data->ConsumeIntegral<WORD32>();
544*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->measurement_system = fuzzed_data->ConsumeIntegral<WORD32>();
545*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->measured_loudness = fuzzed_data->ConsumeIntegral<WORD32>();
546*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->stream_id = fuzzed_data->ConsumeIntegral<UWORD16>();
547*15dc779aSAndroid Build Coastguard Worker /* DRC */
548*15dc779aSAndroid Build Coastguard Worker if (pstr_in_cfg->use_drc_element == 1) {
549*15dc779aSAndroid Build Coastguard Worker ixheaace_read_drc_config_params(&pstr_drc_cfg->str_enc_params,
550*15dc779aSAndroid Build Coastguard Worker &pstr_drc_cfg->str_uni_drc_config,
551*15dc779aSAndroid Build Coastguard Worker &pstr_drc_cfg->str_enc_loudness_info_set,
552*15dc779aSAndroid Build Coastguard Worker &pstr_drc_cfg->str_enc_gain_extension, fuzzed_data, in_ch);
553*15dc779aSAndroid Build Coastguard Worker }
554*15dc779aSAndroid Build Coastguard Worker }
555*15dc779aSAndroid Build Coastguard Worker
ia_enhaacplus_enc_pcm_data_read(std::vector<WORD8> input_vec,UWORD32 num_samples,WORD32 num_channels,WORD16 ** data)556*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE ia_enhaacplus_enc_pcm_data_read(std::vector<WORD8> input_vec, UWORD32 num_samples,
557*15dc779aSAndroid Build Coastguard Worker WORD32 num_channels, WORD16 **data) {
558*15dc779aSAndroid Build Coastguard Worker UWORD32 count = 0;
559*15dc779aSAndroid Build Coastguard Worker UWORD8 channel_no;
560*15dc779aSAndroid Build Coastguard Worker UWORD32 sample_no = 0;
561*15dc779aSAndroid Build Coastguard Worker UWORD32 i = 0;
562*15dc779aSAndroid Build Coastguard Worker while (count < num_samples) {
563*15dc779aSAndroid Build Coastguard Worker sample_no = (count / num_channels);
564*15dc779aSAndroid Build Coastguard Worker channel_no = (UWORD8)(count % num_channels);
565*15dc779aSAndroid Build Coastguard Worker data[channel_no][sample_no] = *input_vec.data();
566*15dc779aSAndroid Build Coastguard Worker i++;
567*15dc779aSAndroid Build Coastguard Worker count++;
568*15dc779aSAndroid Build Coastguard Worker }
569*15dc779aSAndroid Build Coastguard Worker return 0;
570*15dc779aSAndroid Build Coastguard Worker }
571*15dc779aSAndroid Build Coastguard Worker
ixheaace_calculate_loudness_measure(ixheaace_input_config * pstr_in_cfg,ixheaace_output_config * pstr_out_cfg,FuzzedDataProvider * fuzzed_data)572*15dc779aSAndroid Build Coastguard Worker static IA_ERRORCODE ixheaace_calculate_loudness_measure(ixheaace_input_config *pstr_in_cfg,
573*15dc779aSAndroid Build Coastguard Worker ixheaace_output_config *pstr_out_cfg,
574*15dc779aSAndroid Build Coastguard Worker FuzzedDataProvider *fuzzed_data) {
575*15dc779aSAndroid Build Coastguard Worker WORD32 input_size;
576*15dc779aSAndroid Build Coastguard Worker WORD32 count = 0;
577*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE err_code = 0;
578*15dc779aSAndroid Build Coastguard Worker VOID *loudness_handle =
579*15dc779aSAndroid Build Coastguard Worker malloc_global(ixheaace_loudness_info_get_handle_size(), DEFAULT_MEM_ALIGN_8);
580*15dc779aSAndroid Build Coastguard Worker if (loudness_handle == NULL) {
581*15dc779aSAndroid Build Coastguard Worker printf("fatal error: libxaac encoder: Memory allocation failed");
582*15dc779aSAndroid Build Coastguard Worker return -1;
583*15dc779aSAndroid Build Coastguard Worker }
584*15dc779aSAndroid Build Coastguard Worker
585*15dc779aSAndroid Build Coastguard Worker err_code = ixheaace_loudness_init_params(loudness_handle, pstr_in_cfg, pstr_out_cfg);
586*15dc779aSAndroid Build Coastguard Worker
587*15dc779aSAndroid Build Coastguard Worker if (err_code) {
588*15dc779aSAndroid Build Coastguard Worker free_global(loudness_handle);
589*15dc779aSAndroid Build Coastguard Worker return -1;
590*15dc779aSAndroid Build Coastguard Worker }
591*15dc779aSAndroid Build Coastguard Worker input_size = (pstr_out_cfg->samp_freq / 10) * (pstr_in_cfg->i_channels);
592*15dc779aSAndroid Build Coastguard Worker WORD16 **samples = 0;
593*15dc779aSAndroid Build Coastguard Worker samples =
594*15dc779aSAndroid Build Coastguard Worker (WORD16 **)malloc_global(pstr_in_cfg->i_channels * sizeof(*samples), DEFAULT_MEM_ALIGN_8);
595*15dc779aSAndroid Build Coastguard Worker if (samples == NULL) {
596*15dc779aSAndroid Build Coastguard Worker printf("fatal error: libxaac encoder: Memory allocation failed");
597*15dc779aSAndroid Build Coastguard Worker free_global(loudness_handle);
598*15dc779aSAndroid Build Coastguard Worker return -1;
599*15dc779aSAndroid Build Coastguard Worker }
600*15dc779aSAndroid Build Coastguard Worker for (count = 0; count < pstr_in_cfg->i_channels; count++) {
601*15dc779aSAndroid Build Coastguard Worker samples[count] = (WORD16 *)malloc_global(
602*15dc779aSAndroid Build Coastguard Worker (pstr_out_cfg->samp_freq / 10) * sizeof(*samples[count]), DEFAULT_MEM_ALIGN_8);
603*15dc779aSAndroid Build Coastguard Worker if (samples[count] == NULL) {
604*15dc779aSAndroid Build Coastguard Worker printf("fatal error: libxaac encoder: Memory allocation failed");
605*15dc779aSAndroid Build Coastguard Worker while (count) {
606*15dc779aSAndroid Build Coastguard Worker count--;
607*15dc779aSAndroid Build Coastguard Worker free_global(samples[count]);
608*15dc779aSAndroid Build Coastguard Worker }
609*15dc779aSAndroid Build Coastguard Worker free_global(samples);
610*15dc779aSAndroid Build Coastguard Worker free_global(loudness_handle);
611*15dc779aSAndroid Build Coastguard Worker return -1;
612*15dc779aSAndroid Build Coastguard Worker }
613*15dc779aSAndroid Build Coastguard Worker memset(samples[count], 0, (pstr_out_cfg->samp_freq / 10) * sizeof(*samples[count]));
614*15dc779aSAndroid Build Coastguard Worker }
615*15dc779aSAndroid Build Coastguard Worker count = 0;
616*15dc779aSAndroid Build Coastguard Worker while (count <= fuzzed_data->remaining_bytes()) {
617*15dc779aSAndroid Build Coastguard Worker std::vector<WORD8> input_vec = fuzzed_data->ConsumeBytes<WORD8>(input_size);
618*15dc779aSAndroid Build Coastguard Worker err_code =
619*15dc779aSAndroid Build Coastguard Worker ia_enhaacplus_enc_pcm_data_read(input_vec, input_size, pstr_in_cfg->i_channels, samples);
620*15dc779aSAndroid Build Coastguard Worker if (err_code) {
621*15dc779aSAndroid Build Coastguard Worker for (count = 0; count < pstr_in_cfg->i_channels; count++) {
622*15dc779aSAndroid Build Coastguard Worker free_global(samples[count]);
623*15dc779aSAndroid Build Coastguard Worker }
624*15dc779aSAndroid Build Coastguard Worker free_global(samples);
625*15dc779aSAndroid Build Coastguard Worker free_global(loudness_handle);
626*15dc779aSAndroid Build Coastguard Worker return -1;
627*15dc779aSAndroid Build Coastguard Worker }
628*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->measured_loudness = ixheaace_measure_loudness(loudness_handle, samples);
629*15dc779aSAndroid Build Coastguard Worker count += input_size;
630*15dc779aSAndroid Build Coastguard Worker }
631*15dc779aSAndroid Build Coastguard Worker if (pstr_in_cfg->method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS) {
632*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->measured_loudness = ixheaace_measure_integrated_loudness(loudness_handle);
633*15dc779aSAndroid Build Coastguard Worker }
634*15dc779aSAndroid Build Coastguard Worker for (count = 0; count < pstr_in_cfg->i_channels; count++) {
635*15dc779aSAndroid Build Coastguard Worker free_global(samples[count]);
636*15dc779aSAndroid Build Coastguard Worker }
637*15dc779aSAndroid Build Coastguard Worker free_global(samples);
638*15dc779aSAndroid Build Coastguard Worker free_global(loudness_handle);
639*15dc779aSAndroid Build Coastguard Worker return err_code;
640*15dc779aSAndroid Build Coastguard Worker }
641*15dc779aSAndroid Build Coastguard Worker
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)642*15dc779aSAndroid Build Coastguard Worker extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
643*15dc779aSAndroid Build Coastguard Worker FuzzedDataProvider fuzzed_data(data, size);
644*15dc779aSAndroid Build Coastguard Worker FuzzedDataProvider fuzzed_data_loudness(data, size);
645*15dc779aSAndroid Build Coastguard Worker
646*15dc779aSAndroid Build Coastguard Worker /* Error code */
647*15dc779aSAndroid Build Coastguard Worker IA_ERRORCODE err_code = 0;
648*15dc779aSAndroid Build Coastguard Worker
649*15dc779aSAndroid Build Coastguard Worker /* API obj */
650*15dc779aSAndroid Build Coastguard Worker pVOID pv_ia_process_api_obj;
651*15dc779aSAndroid Build Coastguard Worker
652*15dc779aSAndroid Build Coastguard Worker pWORD8 pb_inp_buf = NULL;
653*15dc779aSAndroid Build Coastguard Worker WORD32 input_size = 0;
654*15dc779aSAndroid Build Coastguard Worker WORD32 read_inp_data = 1;
655*15dc779aSAndroid Build Coastguard Worker WORD32 num_proc_iterations = 0;
656*15dc779aSAndroid Build Coastguard Worker
657*15dc779aSAndroid Build Coastguard Worker /* ******************************************************************/
658*15dc779aSAndroid Build Coastguard Worker /* The API config structure */
659*15dc779aSAndroid Build Coastguard Worker /* ******************************************************************/
660*15dc779aSAndroid Build Coastguard Worker
661*15dc779aSAndroid Build Coastguard Worker ixheaace_user_config_struct str_enc_api{};
662*15dc779aSAndroid Build Coastguard Worker
663*15dc779aSAndroid Build Coastguard Worker ixheaace_input_config *pstr_in_cfg = &str_enc_api.input_config;
664*15dc779aSAndroid Build Coastguard Worker ixheaace_output_config *pstr_out_cfg = &str_enc_api.output_config;
665*15dc779aSAndroid Build Coastguard Worker pstr_in_cfg->pv_drc_cfg = malloc_global(sizeof(ia_drc_input_config), DEFAULT_MEM_ALIGN_8);
666*15dc779aSAndroid Build Coastguard Worker ia_drc_input_config *pstr_drc_cfg = (ia_drc_input_config *)pstr_in_cfg->pv_drc_cfg;
667*15dc779aSAndroid Build Coastguard Worker memset(pstr_drc_cfg, 0, sizeof(ia_drc_input_config));
668*15dc779aSAndroid Build Coastguard Worker
669*15dc779aSAndroid Build Coastguard Worker pstr_out_cfg->malloc_xheaace = &malloc_global;
670*15dc779aSAndroid Build Coastguard Worker pstr_out_cfg->free_xheaace = &free_global;
671*15dc779aSAndroid Build Coastguard Worker
672*15dc779aSAndroid Build Coastguard Worker /* ******************************************************************/
673*15dc779aSAndroid Build Coastguard Worker /* Parse input configuration parameters */
674*15dc779aSAndroid Build Coastguard Worker /* ******************************************************************/
675*15dc779aSAndroid Build Coastguard Worker ixheaace_fuzzer_flag(pstr_in_cfg, pstr_drc_cfg, &fuzzed_data, pstr_in_cfg->i_channels);
676*15dc779aSAndroid Build Coastguard Worker
677*15dc779aSAndroid Build Coastguard Worker /*1st pass -> Loudness Measurement */
678*15dc779aSAndroid Build Coastguard Worker if (pstr_in_cfg->aot == AOT_USAC) {
679*15dc779aSAndroid Build Coastguard Worker err_code =
680*15dc779aSAndroid Build Coastguard Worker ixheaace_calculate_loudness_measure(pstr_in_cfg, pstr_out_cfg, &fuzzed_data_loudness);
681*15dc779aSAndroid Build Coastguard Worker if (err_code) {
682*15dc779aSAndroid Build Coastguard Worker if (pstr_drc_cfg) {
683*15dc779aSAndroid Build Coastguard Worker free(pstr_drc_cfg);
684*15dc779aSAndroid Build Coastguard Worker pstr_drc_cfg = NULL;
685*15dc779aSAndroid Build Coastguard Worker }
686*15dc779aSAndroid Build Coastguard Worker /* Fatal error code */
687*15dc779aSAndroid Build Coastguard Worker if (err_code & 0x80000000) {
688*15dc779aSAndroid Build Coastguard Worker ixheaace_delete((pVOID)pstr_out_cfg);
689*15dc779aSAndroid Build Coastguard Worker return 0;
690*15dc779aSAndroid Build Coastguard Worker }
691*15dc779aSAndroid Build Coastguard Worker return -1;
692*15dc779aSAndroid Build Coastguard Worker }
693*15dc779aSAndroid Build Coastguard Worker }
694*15dc779aSAndroid Build Coastguard Worker
695*15dc779aSAndroid Build Coastguard Worker err_code = ixheaace_create((pVOID)pstr_in_cfg, (pVOID)pstr_out_cfg);
696*15dc779aSAndroid Build Coastguard Worker if (err_code) {
697*15dc779aSAndroid Build Coastguard Worker if (pstr_drc_cfg) {
698*15dc779aSAndroid Build Coastguard Worker free(pstr_drc_cfg);
699*15dc779aSAndroid Build Coastguard Worker pstr_drc_cfg = NULL;
700*15dc779aSAndroid Build Coastguard Worker }
701*15dc779aSAndroid Build Coastguard Worker /* Fatal error code */
702*15dc779aSAndroid Build Coastguard Worker if (err_code & 0x80000000) {
703*15dc779aSAndroid Build Coastguard Worker ixheaace_delete((pVOID)pstr_out_cfg);
704*15dc779aSAndroid Build Coastguard Worker return 0;
705*15dc779aSAndroid Build Coastguard Worker }
706*15dc779aSAndroid Build Coastguard Worker }
707*15dc779aSAndroid Build Coastguard Worker
708*15dc779aSAndroid Build Coastguard Worker pv_ia_process_api_obj = pstr_out_cfg->pv_ia_process_api_obj;
709*15dc779aSAndroid Build Coastguard Worker pb_inp_buf = (pWORD8)pstr_out_cfg->mem_info_table[IA_MEMTYPE_INPUT].mem_ptr;
710*15dc779aSAndroid Build Coastguard Worker
711*15dc779aSAndroid Build Coastguard Worker /* End first part */
712*15dc779aSAndroid Build Coastguard Worker
713*15dc779aSAndroid Build Coastguard Worker /* Second part */
714*15dc779aSAndroid Build Coastguard Worker /* Initialize process */
715*15dc779aSAndroid Build Coastguard Worker /* Get config params */
716*15dc779aSAndroid Build Coastguard Worker
717*15dc779aSAndroid Build Coastguard Worker input_size = pstr_out_cfg->input_size;
718*15dc779aSAndroid Build Coastguard Worker memset(pb_inp_buf, 0, input_size);
719*15dc779aSAndroid Build Coastguard Worker
720*15dc779aSAndroid Build Coastguard Worker while (fuzzed_data.remaining_bytes()) {
721*15dc779aSAndroid Build Coastguard Worker if (read_inp_data) {
722*15dc779aSAndroid Build Coastguard Worker if (fuzzed_data.ConsumeBool()) {
723*15dc779aSAndroid Build Coastguard Worker std::vector<WORD8> input_vec = fuzzed_data.ConsumeBytes<WORD8>(input_size);
724*15dc779aSAndroid Build Coastguard Worker if (input_vec.size()) {
725*15dc779aSAndroid Build Coastguard Worker memcpy(pb_inp_buf, input_vec.data(), input_vec.size());
726*15dc779aSAndroid Build Coastguard Worker }
727*15dc779aSAndroid Build Coastguard Worker } else {
728*15dc779aSAndroid Build Coastguard Worker memset(pb_inp_buf, fuzzed_data.ConsumeIntegral<WORD8>(), input_size);
729*15dc779aSAndroid Build Coastguard Worker }
730*15dc779aSAndroid Build Coastguard Worker }
731*15dc779aSAndroid Build Coastguard Worker ixheaace_process(pv_ia_process_api_obj, (pVOID)pstr_in_cfg, (pVOID)pstr_out_cfg);
732*15dc779aSAndroid Build Coastguard Worker num_proc_iterations++;
733*15dc779aSAndroid Build Coastguard Worker if (pstr_out_cfg->i_out_bytes == 0) {
734*15dc779aSAndroid Build Coastguard Worker read_inp_data = 0;
735*15dc779aSAndroid Build Coastguard Worker } else {
736*15dc779aSAndroid Build Coastguard Worker read_inp_data = 1;
737*15dc779aSAndroid Build Coastguard Worker }
738*15dc779aSAndroid Build Coastguard Worker /* Stop processing after 500 frames */
739*15dc779aSAndroid Build Coastguard Worker if (num_proc_iterations > 500) break;
740*15dc779aSAndroid Build Coastguard Worker }
741*15dc779aSAndroid Build Coastguard Worker
742*15dc779aSAndroid Build Coastguard Worker ixheaace_delete((pVOID)pstr_out_cfg);
743*15dc779aSAndroid Build Coastguard Worker
744*15dc779aSAndroid Build Coastguard Worker if (pstr_drc_cfg) {
745*15dc779aSAndroid Build Coastguard Worker free(pstr_drc_cfg);
746*15dc779aSAndroid Build Coastguard Worker }
747*15dc779aSAndroid Build Coastguard Worker return 0;
748*15dc779aSAndroid Build Coastguard Worker }
749*15dc779aSAndroid Build Coastguard Worker
750*15dc779aSAndroid Build Coastguard Worker /* End ia_main_process() */
751