Coverage Report

Created: 2025-10-13 07:04

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