Coverage Report

Created: 2026-01-09 06:51

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
71.1k
pVOID malloc_global(UWORD32 size, UWORD32 alignment) {
43
71.1k
  pVOID ptr = NULL;
44
71.1k
  if (posix_memalign((VOID **)&ptr, alignment, size)) {
45
0
    ptr = NULL;
46
0
  }
47
71.1k
  return ptr;
48
71.1k
}
49
50
62.0k
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.38k
    WORD32 in_ch) {
57
3.38k
  WORD32 n, g, s, m, ch, p;
58
3.38k
  WORD32 gain_set_channels;
59
3.38k
#ifdef LOUDNESS_LEVELING_SUPPORT
60
3.38k
  UWORD32 loudness_leveling_extension_present = 0;
61
3.38k
  UWORD32 config_extension_count = 0;
62
3.38k
#endif
63
3.38k
  pstr_enc_params->gain_sequence_present = fuzzed_data->ConsumeBool();
64
3.38k
  pstr_enc_params->delay_mode = fuzzed_data->ConsumeBool();
65
3.38k
  pstr_uni_drc_config->sample_rate_present = fuzzed_data->ConsumeBool();
66
3.38k
  pstr_uni_drc_config->str_drc_coefficients_uni_drc->drc_frame_size_present =
67
3.38k
      fuzzed_data->ConsumeBool();
68
3.38k
  pstr_uni_drc_config->loudness_info_set_present = fuzzed_data->ConsumeBool();
69
70
3.38k
  pstr_uni_drc_config->drc_instructions_uni_drc_count =
71
3.38k
      fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DRC_INSTRUCTIONS_COUNT);
72
21.3k
  for (n = 0; n < pstr_uni_drc_config->drc_instructions_uni_drc_count; n++) {
73
17.9k
    ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
74
17.9k
        &pstr_uni_drc_config->str_drc_instructions_uni_drc[n];
75
17.9k
    pstr_drc_instructions_uni_drc->drc_set_id = fuzzed_data->ConsumeIntegral<WORD8>();
76
17.9k
    pstr_drc_instructions_uni_drc->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
77
17.9k
    pstr_drc_instructions_uni_drc->additional_downmix_id_present = fuzzed_data->ConsumeBool();
78
17.9k
    pstr_drc_instructions_uni_drc->additional_downmix_id_count =
79
17.9k
        fuzzed_data->ConsumeIntegral<WORD8>();
80
17.9k
    pstr_drc_instructions_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
81
17.9k
    pstr_drc_instructions_uni_drc->depends_on_drc_set_present = fuzzed_data->ConsumeBool();
82
17.9k
    pstr_drc_instructions_uni_drc->depends_on_drc_set = fuzzed_data->ConsumeIntegral<WORD8>();
83
17.9k
    pstr_drc_instructions_uni_drc->no_independent_use = fuzzed_data->ConsumeBool();
84
17.9k
    pstr_drc_instructions_uni_drc->drc_set_effect = fuzzed_data->ConsumeIntegral<WORD16>();
85
17.9k
    pstr_drc_instructions_uni_drc->drc_set_target_loudness_present = fuzzed_data->ConsumeBool();
86
17.9k
    pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper =
87
17.9k
        fuzzed_data->ConsumeIntegral<WORD8>();
88
17.9k
    pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present =
89
17.9k
        fuzzed_data->ConsumeBool();
90
17.9k
    pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower =
91
17.9k
        fuzzed_data->ConsumeIntegral<WORD8>();
92
93
17.9k
    gain_set_channels = fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_COUNT);
94
72.2k
    for (ch = 0; ch < gain_set_channels; ch++) {
95
54.3k
      pstr_drc_instructions_uni_drc->gain_set_index[ch] = fuzzed_data->ConsumeIntegral<WORD8>();
96
54.3k
    }
97
107k
    for (; ch < MAX_CHANNEL_COUNT; ch++) {
98
89.2k
      if (gain_set_channels > 0) {
99
47.1k
        pstr_drc_instructions_uni_drc->gain_set_index[ch] =
100
47.1k
            pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
101
47.1k
      } else {
102
42.0k
        pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
103
42.0k
      }
104
89.2k
    }
105
106
17.9k
    pstr_drc_instructions_uni_drc->num_drc_channel_groups =
107
17.9k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_GROUP_COUNT);
108
71.1k
    for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
109
53.1k
      pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] =
110
53.1k
          fuzzed_data->ConsumeBool();
111
53.1k
      pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] =
112
53.1k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
113
53.1k
      pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] =
114
53.1k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
115
53.1k
      pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] =
116
53.1k
          fuzzed_data->ConsumeBool();
117
53.1k
      pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] =
118
53.1k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
119
53.1k
    }
120
121
17.9k
    pstr_drc_instructions_uni_drc->limiter_peak_target_present = fuzzed_data->ConsumeBool();
122
17.9k
    pstr_drc_instructions_uni_drc->limiter_peak_target =
123
17.9k
        fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
124
17.9k
    pstr_drc_instructions_uni_drc->drc_instructions_type = fuzzed_data->ConsumeIntegral<WORD8>();
125
17.9k
    pstr_drc_instructions_uni_drc->mae_group_id = fuzzed_data->ConsumeIntegral<WORD8>();
126
17.9k
    pstr_drc_instructions_uni_drc->mae_group_preset_id = fuzzed_data->ConsumeIntegral<WORD8>();
127
17.9k
#ifdef LOUDNESS_LEVELING_SUPPORT
128
17.9k
    if (pstr_drc_instructions_uni_drc->drc_set_effect & EFFECT_BIT_DUCK_SELF) {
129
7.44k
      pstr_drc_instructions_uni_drc->leveling_present = fuzzed_data->ConsumeBool();
130
7.44k
      pstr_drc_instructions_uni_drc->ducking_only_set_present = fuzzed_data->ConsumeBool();
131
7.44k
      loudness_leveling_extension_present = 1;
132
7.44k
    }
133
17.9k
#endif
134
17.9k
  }
135
136
3.38k
  pstr_uni_drc_config->drc_coefficients_uni_drc_count =
137
3.38k
      fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DRC_COEFF_COUNT);
138
8.34k
  for (n = 0; n < pstr_uni_drc_config->drc_coefficients_uni_drc_count; n++) {
139
4.95k
    ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc =
140
4.95k
        &pstr_uni_drc_config->str_drc_coefficients_uni_drc[n];
141
4.95k
    pstr_drc_coefficients_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
142
4.95k
    pstr_drc_coefficients_uni_drc->gain_set_count =
143
4.95k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, GAIN_SET_COUNT_MAX);
144
14.0k
    for (s = 0; s < pstr_drc_coefficients_uni_drc->gain_set_count; s++) {
145
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_coding_profile =
146
9.13k
          fuzzed_data->ConsumeIntegral<WORD8>();
147
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_interpolation_type =
148
9.13k
          fuzzed_data->ConsumeBool();
149
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].full_frame =
150
9.13k
          fuzzed_data->ConsumeBool();
151
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_alignment =
152
9.13k
          fuzzed_data->ConsumeBool();
153
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].time_delta_min_present =
154
9.13k
          fuzzed_data->ConsumeBool();
155
9.13k
      pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count =
156
9.13k
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_BAND_COUNT);
157
9.13k
      if (pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count == 1) {
158
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points =
159
1.78k
            fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
160
1.78k
        for (p = 0;
161
52.7k
             p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].nb_points;
162
50.9k
             p++) {
163
50.9k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].x =
164
50.9k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
165
50.9k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].gain_points[p].y =
166
50.9k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
167
50.9k
        }
168
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].width =
169
1.78k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
170
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].attack =
171
1.78k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
172
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].decay =
173
1.78k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
174
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[0].drc_characteristic =
175
1.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
176
1.78k
        pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
177
1.78k
            .gain_params[0]
178
1.78k
            .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
179
7.35k
      } else {
180
29.7k
        for (m = 0; m < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].band_count; m++) {
181
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points =
182
22.3k
              fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
183
22.3k
          for (p = 0;
184
790k
               p < pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].nb_points;
185
767k
               p++) {
186
767k
            pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
187
767k
                .gain_params[m]
188
767k
                .gain_points[p]
189
767k
                .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
190
767k
            pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
191
767k
                .gain_params[m]
192
767k
                .gain_points[p]
193
767k
                .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
194
767k
          }
195
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].width =
196
22.3k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
197
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].attack =
198
22.3k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
199
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].gain_params[m].decay =
200
22.3k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
201
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s].drc_band_type =
202
22.3k
              fuzzed_data->ConsumeBool();
203
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
204
22.3k
              .gain_params[m]
205
22.3k
              .start_sub_band_index = fuzzed_data->ConsumeIntegral<WORD16>();
206
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
207
22.3k
              .gain_params[m]
208
22.3k
              .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
209
22.3k
          pstr_drc_coefficients_uni_drc->str_gain_set_params[s]
210
22.3k
              .gain_params[m]
211
22.3k
              .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
212
22.3k
        }
213
7.35k
      }
214
9.13k
    }
215
4.95k
  }
216
217
3.38k
  pstr_enc_loudness_info_set->loudness_info_count =
218
3.38k
      fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
219
16.8k
  for (n = 0; n < pstr_enc_loudness_info_set->loudness_info_count; n++) {
220
13.4k
    pstr_enc_loudness_info_set->str_loudness_info[n].drc_set_id =
221
13.4k
        fuzzed_data->ConsumeIntegral<WORD8>();
222
13.4k
    pstr_enc_loudness_info_set->str_loudness_info[n].downmix_id =
223
13.4k
        fuzzed_data->ConsumeIntegral<WORD8>();
224
13.4k
    pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level_present =
225
13.4k
        fuzzed_data->ConsumeBool();
226
13.4k
    if (1 == pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level_present) {
227
6.42k
      pstr_enc_loudness_info_set->str_loudness_info[n].sample_peak_level =
228
6.42k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
229
6.42k
    }
230
13.4k
    pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_present =
231
13.4k
        fuzzed_data->ConsumeBool();
232
13.4k
    if (1 == pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_present) {
233
6.73k
      pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level =
234
6.73k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
235
6.73k
      pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_measurement_system =
236
6.73k
          fuzzed_data->ConsumeIntegral<WORD8>();
237
6.73k
      pstr_enc_loudness_info_set->str_loudness_info[n].true_peak_level_reliability =
238
6.73k
          fuzzed_data->ConsumeIntegral<WORD8>();
239
6.73k
    }
240
241
13.4k
    pstr_enc_loudness_info_set->str_loudness_info[n].measurement_count =
242
13.4k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
243
99.2k
    for (m = 0; m < pstr_enc_loudness_info_set->str_loudness_info[n].measurement_count; m++) {
244
85.8k
      pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].method_definition =
245
85.8k
          fuzzed_data->ConsumeIntegral<WORD8>();
246
85.8k
      pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].method_value =
247
85.8k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
248
85.8k
      pstr_enc_loudness_info_set->str_loudness_info[n]
249
85.8k
          .str_loudness_measure[m]
250
85.8k
          .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
251
85.8k
      pstr_enc_loudness_info_set->str_loudness_info[n].str_loudness_measure[m].reliability =
252
85.8k
          fuzzed_data->ConsumeIntegral<WORD8>();
253
85.8k
    }
254
13.4k
  }
255
256
3.38k
  pstr_enc_loudness_info_set->loudness_info_album_count =
257
3.38k
      fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
258
21.7k
  for (n = 0; n < pstr_enc_loudness_info_set->loudness_info_album_count; n++) {
259
18.3k
    pstr_enc_loudness_info_set->str_loudness_info_album[n].drc_set_id =
260
18.3k
        fuzzed_data->ConsumeIntegral<WORD8>();
261
18.3k
    pstr_enc_loudness_info_set->str_loudness_info_album[n].downmix_id =
262
18.3k
        fuzzed_data->ConsumeIntegral<WORD8>();
263
18.3k
    pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level_present =
264
18.3k
        fuzzed_data->ConsumeBool();
265
18.3k
    if (1 == pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level_present) {
266
7.08k
      pstr_enc_loudness_info_set->str_loudness_info_album[n].sample_peak_level =
267
7.08k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
268
7.08k
    }
269
18.3k
    pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_present =
270
18.3k
        fuzzed_data->ConsumeBool();
271
18.3k
    if (1 == pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_present) {
272
9.57k
      pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level =
273
9.57k
          fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
274
9.57k
      pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_measurement_system =
275
9.57k
          fuzzed_data->ConsumeIntegral<WORD8>();
276
9.57k
      pstr_enc_loudness_info_set->str_loudness_info_album[n].true_peak_level_reliability =
277
9.57k
          fuzzed_data->ConsumeIntegral<WORD8>();
278
9.57k
    }
279
280
18.3k
    pstr_enc_loudness_info_set->str_loudness_info_album[n].measurement_count =
281
18.3k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
282
124k
    for (m = 0; m < pstr_enc_loudness_info_set->str_loudness_info_album[n].measurement_count;
283
105k
         m++) {
284
105k
      pstr_enc_loudness_info_set->str_loudness_info_album[n]
285
105k
          .str_loudness_measure[m]
286
105k
          .method_definition = fuzzed_data->ConsumeIntegral<WORD8>();
287
105k
      pstr_enc_loudness_info_set->str_loudness_info_album[n]
288
105k
          .str_loudness_measure[m]
289
105k
          .method_value = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
290
105k
      pstr_enc_loudness_info_set->str_loudness_info_album[n]
291
105k
          .str_loudness_measure[m]
292
105k
          .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
293
105k
      pstr_enc_loudness_info_set->str_loudness_info_album[n].str_loudness_measure[m].reliability =
294
105k
          fuzzed_data->ConsumeIntegral<WORD8>();
295
105k
    }
296
18.3k
  }
297
298
3.38k
  pstr_uni_drc_config->str_channel_layout.layout_signaling_present = fuzzed_data->ConsumeBool();
299
3.38k
  pstr_uni_drc_config->str_channel_layout.defined_layout = fuzzed_data->ConsumeIntegral<WORD8>();
300
3.38k
  pstr_uni_drc_config->str_channel_layout.speaker_position[0] =
301
3.38k
      fuzzed_data->ConsumeIntegral<WORD8>();
302
303
3.38k
  pstr_uni_drc_config->downmix_instructions_count =
304
3.38k
      fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_DOWNMIX_INSTRUCTION_COUNT);
305
13.0k
  for (n = 0; n < pstr_uni_drc_config->downmix_instructions_count; n++) {
306
9.61k
    pstr_uni_drc_config->str_downmix_instructions[n].target_layout =
307
9.61k
        fuzzed_data->ConsumeIntegral<WORD8>();
308
9.61k
    pstr_uni_drc_config->str_downmix_instructions[n].downmix_coefficients_present =
309
9.61k
        fuzzed_data->ConsumeBool();
310
9.61k
  }
311
312
3.38k
  pstr_uni_drc_config->drc_description_basic_present = fuzzed_data->ConsumeBool();
313
3.38k
  pstr_uni_drc_config->uni_drc_config_ext_present = fuzzed_data->ConsumeBool();
314
3.38k
  pstr_enc_loudness_info_set->loudness_info_set_ext_present = fuzzed_data->ConsumeBool();
315
3.38k
  pstr_enc_gain_extension->uni_drc_gain_ext_present = fuzzed_data->ConsumeBool();
316
317
3.38k
  if (pstr_uni_drc_config->uni_drc_config_ext_present == 1) {
318
1.63k
#ifdef LOUDNESS_LEVELING_SUPPORT
319
1.63k
    pstr_uni_drc_config->str_uni_drc_config_ext.uni_drc_config_ext_type[config_extension_count] =
320
1.63k
        UNIDRC_CONF_EXT_V1;
321
1.63k
    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.63k
    pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present =
326
1.63k
        fuzzed_data->ConsumeBool();
327
1.63k
    if (pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_present == 1) {
328
      /***********  str_downmix_instructions_v1  *************/
329
330
814
      pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count =
331
814
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DOWNMIX_INSTRUCTIONS_COUNT_MAX);
332
4.05k
      for (n = 0; n < pstr_uni_drc_config->str_uni_drc_config_ext.downmix_instructions_v1_count;
333
3.23k
           n++) {
334
3.23k
        ia_drc_downmix_instructions_struct *pstr_downmix_instructions_v1 =
335
3.23k
            &pstr_uni_drc_config->str_uni_drc_config_ext.str_downmix_instructions_v1[n];
336
3.23k
        pstr_downmix_instructions_v1->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
337
3.23k
        ;
338
3.23k
        pstr_downmix_instructions_v1->target_ch_count = fuzzed_data->ConsumeIntegral<WORD8>();
339
3.23k
        pstr_downmix_instructions_v1->target_layout = fuzzed_data->ConsumeIntegral<WORD8>();
340
3.23k
        pstr_downmix_instructions_v1->downmix_coefficients_present = fuzzed_data->ConsumeBool();
341
3.23k
        if (pstr_downmix_instructions_v1->downmix_coefficients_present) {
342
2.46k
          FLOAT32 dwn_mix_coeff = 0.0f;
343
65.0k
          for (s = 0; s < pstr_downmix_instructions_v1->target_layout; s++) {
344
62.6k
            dwn_mix_coeff = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
345
62.6k
            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
62.6k
          }
349
2.46k
        }
350
3.23k
      }
351
814
    }
352
353
1.63k
    pstr_uni_drc_config->str_uni_drc_config_ext.drc_coeffs_and_instructions_uni_drc_v1_present =
354
1.63k
        fuzzed_data->ConsumeBool();
355
1.63k
    if (pstr_uni_drc_config->str_uni_drc_config_ext
356
1.63k
            .drc_coeffs_and_instructions_uni_drc_v1_present == 1) {
357
      /***********  str_drc_coefficients_uni_drc_v1  *************/
358
359
1.47k
      pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count =
360
1.47k
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DRC_COEFFICIENTS_UNIDRC_V1_COUNT_MAX);
361
1.47k
      for (n = 0;
362
3.47k
           n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_coefficients_uni_drc_v1_count;
363
1.99k
           n++) {
364
1.99k
        ia_drc_coefficients_uni_drc_struct *pstr_drc_coefficients_uni_drc_v1 =
365
1.99k
            &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_coefficients_uni_drc_v1[n];
366
1.99k
        pstr_drc_coefficients_uni_drc_v1->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
367
1.99k
        pstr_drc_coefficients_uni_drc_v1->gain_set_count =
368
1.99k
            fuzzed_data->ConsumeIntegralInRange<WORD8>(0, GAIN_SET_COUNT_MAX);
369
7.86k
        for (s = 0; s < pstr_drc_coefficients_uni_drc_v1->gain_set_count; s++) {
370
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_coding_profile =
371
5.86k
              fuzzed_data->ConsumeIntegral<WORD8>();
372
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_interpolation_type =
373
5.86k
              fuzzed_data->ConsumeBool();
374
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].full_frame =
375
5.86k
              fuzzed_data->ConsumeBool();
376
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_alignment =
377
5.86k
              fuzzed_data->ConsumeBool();
378
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].time_delta_min_present =
379
5.86k
              fuzzed_data->ConsumeBool();
380
5.86k
          pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count =
381
5.86k
              fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_BAND_COUNT);
382
5.86k
          if (pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count == 1) {
383
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].nb_points =
384
1.41k
                fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
385
48.3k
            for (p = 0; p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
386
48.3k
                                .gain_params[0]
387
48.3k
                                .nb_points;
388
46.9k
                 p++) {
389
46.9k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
390
46.9k
                  .gain_params[0]
391
46.9k
                  .gain_points[p]
392
46.9k
                  .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
393
46.9k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
394
46.9k
                  .gain_params[0]
395
46.9k
                  .gain_points[p]
396
46.9k
                  .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
397
46.9k
            }
398
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].width =
399
1.41k
                fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
400
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].attack =
401
1.41k
                fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
402
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[0].decay =
403
1.41k
                fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
404
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
405
1.41k
                .gain_params[0]
406
1.41k
                .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
407
1.41k
            ;
408
1.41k
            pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
409
1.41k
                .gain_params[0]
410
1.41k
                .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
411
4.45k
          } else {
412
19.5k
            for (m = 0; m < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].band_count;
413
15.1k
                 m++) {
414
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].nb_points =
415
15.1k
                  fuzzed_data->ConsumeIntegralInRange<WORD16>(0, MAX_GAIN_POINTS);
416
539k
              for (p = 0; p < pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
417
539k
                                  .gain_params[m]
418
539k
                                  .nb_points;
419
524k
                   p++) {
420
524k
                pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
421
524k
                    .gain_params[m]
422
524k
                    .gain_points[p]
423
524k
                    .x = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
424
524k
                pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
425
524k
                    .gain_params[m]
426
524k
                    .gain_points[p]
427
524k
                    .y = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
428
524k
              }
429
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].width =
430
15.1k
                  fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
431
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].attack =
432
15.1k
                  fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
433
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].gain_params[m].decay =
434
15.1k
                  fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
435
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s].drc_band_type = 0;
436
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
437
15.1k
                  .gain_params[m]
438
15.1k
                  .start_sub_band_index = fuzzed_data->ConsumeIntegral<WORD16>();
439
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
440
15.1k
                  .gain_params[m]
441
15.1k
                  .drc_characteristic = fuzzed_data->ConsumeIntegral<WORD8>();
442
15.1k
              ;
443
15.1k
              pstr_drc_coefficients_uni_drc_v1->str_gain_set_params[s]
444
15.1k
                  .gain_params[m]
445
15.1k
                  .crossover_freq_index = fuzzed_data->ConsumeIntegral<WORD8>();
446
15.1k
            }
447
4.45k
          }
448
5.86k
        }
449
1.99k
      }
450
451
      /***********  str_drc_instructions_uni_drc_v1  *************/
452
1.47k
      pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count =
453
1.47k
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, DRC_INSTRUCTIONS_UNIDRC_V1_COUNT_MAX);
454
1.47k
      for (n = 0;
455
5.26k
           n < pstr_uni_drc_config->str_uni_drc_config_ext.drc_instructions_uni_drc_v1_count;
456
3.78k
           n++) {
457
3.78k
        ia_drc_instructions_uni_drc *pstr_drc_instructions_uni_drc =
458
3.78k
            &pstr_uni_drc_config->str_uni_drc_config_ext.str_drc_instructions_uni_drc_v1[n];
459
3.78k
        pstr_drc_instructions_uni_drc->drc_set_id = fuzzed_data->ConsumeIntegral<WORD8>();
460
3.78k
        pstr_drc_instructions_uni_drc->downmix_id = fuzzed_data->ConsumeIntegral<WORD8>();
461
3.78k
        pstr_drc_instructions_uni_drc->additional_downmix_id_present = fuzzed_data->ConsumeBool();
462
3.78k
        pstr_drc_instructions_uni_drc->additional_downmix_id_count =
463
3.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
464
3.78k
        pstr_drc_instructions_uni_drc->drc_location = fuzzed_data->ConsumeIntegral<WORD8>();
465
3.78k
        pstr_drc_instructions_uni_drc->depends_on_drc_set_present = fuzzed_data->ConsumeBool();
466
3.78k
        pstr_drc_instructions_uni_drc->depends_on_drc_set = fuzzed_data->ConsumeIntegral<WORD8>();
467
3.78k
        pstr_drc_instructions_uni_drc->no_independent_use = fuzzed_data->ConsumeBool();
468
3.78k
        pstr_drc_instructions_uni_drc->drc_set_effect = fuzzed_data->ConsumeIntegral<WORD16>();
469
3.78k
        pstr_drc_instructions_uni_drc->drc_set_target_loudness_present =
470
3.78k
            fuzzed_data->ConsumeBool();
471
3.78k
        pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_upper =
472
3.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
473
3.78k
        pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower_present =
474
3.78k
            fuzzed_data->ConsumeBool();
475
3.78k
        pstr_drc_instructions_uni_drc->drc_set_target_loudness_value_lower =
476
3.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
477
478
3.78k
        gain_set_channels = fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_COUNT);
479
15.8k
        for (ch = 0; ch < gain_set_channels; ch++) {
480
12.0k
          pstr_drc_instructions_uni_drc->gain_set_index[ch] =
481
12.0k
              fuzzed_data->ConsumeIntegral<WORD8>();
482
12.0k
        }
483
22.0k
        for (; ch < MAX_CHANNEL_COUNT; ch++) {
484
18.2k
          if (gain_set_channels > 0) {
485
11.0k
            pstr_drc_instructions_uni_drc->gain_set_index[ch] =
486
11.0k
                pstr_drc_instructions_uni_drc->gain_set_index[gain_set_channels - 1];
487
11.0k
          } else {
488
7.27k
            pstr_drc_instructions_uni_drc->gain_set_index[ch] = 0;
489
7.27k
          }
490
18.2k
        }
491
492
3.78k
        pstr_drc_instructions_uni_drc->num_drc_channel_groups =
493
3.78k
            fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_CHANNEL_GROUP_COUNT);
494
15.5k
        for (g = 0; g < pstr_drc_instructions_uni_drc->num_drc_channel_groups; g++) {
495
11.7k
          pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_scaling_present[0] =
496
11.7k
              fuzzed_data->ConsumeBool();
497
11.7k
          pstr_drc_instructions_uni_drc->str_gain_modifiers[g].attenuation_scaling[0] =
498
11.7k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
499
11.7k
          pstr_drc_instructions_uni_drc->str_gain_modifiers[g].amplification_scaling[0] =
500
11.7k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
501
11.7k
          pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset_present[0] =
502
11.7k
              fuzzed_data->ConsumeBool();
503
11.7k
          pstr_drc_instructions_uni_drc->str_gain_modifiers[g].gain_offset[0] =
504
11.7k
              fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
505
11.7k
        }
506
507
3.78k
        pstr_drc_instructions_uni_drc->limiter_peak_target_present = fuzzed_data->ConsumeBool();
508
3.78k
        pstr_drc_instructions_uni_drc->limiter_peak_target =
509
3.78k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
510
3.78k
        pstr_drc_instructions_uni_drc->drc_instructions_type =
511
3.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
512
3.78k
        pstr_drc_instructions_uni_drc->mae_group_id = fuzzed_data->ConsumeIntegral<WORD8>();
513
3.78k
        pstr_drc_instructions_uni_drc->mae_group_preset_id =
514
3.78k
            fuzzed_data->ConsumeIntegral<WORD8>();
515
3.78k
#ifdef LOUDNESS_LEVELING_SUPPORT
516
517
3.78k
        if (pstr_drc_instructions_uni_drc->drc_set_effect & EFFECT_BIT_DUCK_SELF) {
518
1.64k
          pstr_drc_instructions_uni_drc->leveling_present = fuzzed_data->ConsumeBool();
519
1.64k
          pstr_drc_instructions_uni_drc->ducking_only_set_present = fuzzed_data->ConsumeBool();
520
1.64k
          loudness_leveling_extension_present = 1;
521
1.64k
        }
522
3.78k
#endif
523
3.78k
      }
524
1.47k
    }
525
1.63k
#ifdef LOUDNESS_LEVELING_SUPPORT
526
1.63k
    if (loudness_leveling_extension_present) {
527
749
      pstr_uni_drc_config->str_uni_drc_config_ext
528
749
          .uni_drc_config_ext_type[config_extension_count] = UNIDRCCONFEXT_LEVELING;
529
749
      config_extension_count++;
530
749
    }
531
1.63k
#endif
532
1.63k
  }
533
534
3.38k
  if (pstr_enc_loudness_info_set->loudness_info_set_ext_present == 1) {
535
1.40k
    ia_drc_loudness_info_set_ext_eq_struct *pstr_loudness_info_set_ext_eq =
536
1.40k
        &pstr_enc_loudness_info_set->str_loudness_info_set_extension.str_loudness_info_set_ext_eq;
537
538
1.40k
    pstr_enc_loudness_info_set->str_loudness_info_set_extension.loudness_info_set_ext_type[0] =
539
1.40k
        UNIDRC_LOUD_EXT_EQ;
540
541
    /*********************   loudness_info_v1_album   *********************/
542
1.40k
    pstr_loudness_info_set_ext_eq->loudness_info_v1_album_count =
543
1.40k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
544
17.0k
    for (n = 0; n < pstr_loudness_info_set_ext_eq->loudness_info_v1_album_count; n++) {
545
15.6k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].drc_set_id =
546
15.6k
          fuzzed_data->ConsumeIntegral<WORD8>();
547
15.6k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].downmix_id =
548
15.6k
          fuzzed_data->ConsumeIntegral<WORD8>();
549
15.6k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].sample_peak_level_present =
550
15.6k
          fuzzed_data->ConsumeBool();
551
15.6k
      if (pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
552
15.6k
              .sample_peak_level_present == 1) {
553
9.55k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].sample_peak_level =
554
9.55k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
555
9.55k
      }
556
15.6k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].true_peak_level_present =
557
15.6k
          fuzzed_data->ConsumeBool();
558
15.6k
      if (pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].true_peak_level_present ==
559
15.6k
          1) {
560
10.4k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].true_peak_level =
561
10.4k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
562
10.4k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
563
10.4k
            .true_peak_level_measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
564
10.4k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].true_peak_level_reliability =
565
10.4k
            fuzzed_data->ConsumeIntegral<WORD8>();
566
10.4k
      }
567
15.6k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].measurement_count =
568
15.6k
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
569
15.6k
      for (m = 0;
570
135k
           m < pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n].measurement_count;
571
120k
           m++) {
572
120k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
573
120k
            .str_loudness_measure[m]
574
120k
            .method_definition = fuzzed_data->ConsumeIntegral<WORD8>();
575
120k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
576
120k
            .str_loudness_measure[m]
577
120k
            .method_value = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
578
120k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
579
120k
            .str_loudness_measure[m]
580
120k
            .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
581
120k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1_album[n]
582
120k
            .str_loudness_measure[m]
583
120k
            .reliability = fuzzed_data->ConsumeIntegral<WORD8>();
584
120k
      }
585
15.6k
    }
586
587
    /*********************   loudness_info_v1   *********************/
588
1.40k
    pstr_loudness_info_set_ext_eq->loudness_info_v1_count =
589
1.40k
        fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_LOUDNESS_INFO_COUNT);
590
14.2k
    for (n = 0; n < pstr_loudness_info_set_ext_eq->loudness_info_v1_count; n++) {
591
12.8k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].drc_set_id =
592
12.8k
          fuzzed_data->ConsumeIntegral<WORD8>();
593
12.8k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].downmix_id =
594
12.8k
          fuzzed_data->ConsumeIntegral<WORD8>();
595
12.8k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].sample_peak_level_present =
596
12.8k
          fuzzed_data->ConsumeBool();
597
12.8k
      if (pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].sample_peak_level_present == 1) {
598
7.98k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].sample_peak_level =
599
7.98k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
600
7.98k
      }
601
12.8k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].true_peak_level_present =
602
12.8k
          fuzzed_data->ConsumeBool();
603
12.8k
      if (pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].true_peak_level_present == 1) {
604
8.88k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].true_peak_level =
605
8.88k
            fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
606
8.88k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n]
607
8.88k
            .true_peak_level_measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
608
8.88k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].true_peak_level_reliability =
609
8.88k
            fuzzed_data->ConsumeIntegral<WORD8>();
610
8.88k
      }
611
12.8k
      pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].measurement_count =
612
12.8k
          fuzzed_data->ConsumeIntegralInRange<WORD8>(0, MAX_MEASUREMENT_COUNT);
613
114k
      for (m = 0; m < pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n].measurement_count;
614
101k
           m++) {
615
101k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n]
616
101k
            .str_loudness_measure[m]
617
101k
            .method_definition = fuzzed_data->ConsumeIntegral<WORD8>();
618
101k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n]
619
101k
            .str_loudness_measure[m]
620
101k
            .method_value = fuzzed_data->ConsumeFloatingPoint<FLOAT32>();
621
101k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n]
622
101k
            .str_loudness_measure[m]
623
101k
            .measurement_system = fuzzed_data->ConsumeIntegral<WORD8>();
624
101k
        pstr_loudness_info_set_ext_eq->str_loudness_info_v1[n]
625
101k
            .str_loudness_measure[m]
626
101k
            .reliability = fuzzed_data->ConsumeIntegral<WORD8>();
627
101k
      }
628
12.8k
    }
629
1.40k
  }
630
3.38k
}
631
632
static VOID ixheaace_fuzzer_flag(ixheaace_input_config *pstr_in_cfg,
633
                                 ia_drc_input_config *pstr_drc_cfg,
634
9.05k
                                 FuzzedDataProvider *fuzzed_data, WORD32 in_ch) {
635
  // Set Default value for AAC config structure
636
637
9.05k
  pstr_in_cfg->i_bitrate = fuzzed_data->ConsumeIntegral<WORD32>();
638
9.05k
  pstr_in_cfg->i_use_mps = fuzzed_data->ConsumeBool();
639
9.05k
  pstr_in_cfg->i_use_adts = fuzzed_data->ConsumeBool();
640
9.05k
  pstr_in_cfg->i_use_es = fuzzed_data->ConsumeBool();
641
9.05k
  pstr_in_cfg->aac_config.use_tns = fuzzed_data->ConsumeBool();
642
9.05k
  pstr_in_cfg->aac_config.noise_filling = fuzzed_data->ConsumeBool();
643
9.05k
  pstr_in_cfg->ui_pcm_wd_sz = fuzzed_data->ConsumeIntegral<WORD8>();
644
9.05k
  pstr_in_cfg->i_channels = fuzzed_data->ConsumeIntegral<WORD8>();
645
9.05k
  if (fuzzed_data->ConsumeBool()) {
646
8.34k
    pstr_in_cfg->i_samp_freq = fuzzed_data->PickValueInArray(k_sample_rates);
647
8.34k
  } else {
648
706
    pstr_in_cfg->i_samp_freq = fuzzed_data->ConsumeIntegral<UWORD32>();
649
706
  }
650
9.05k
  if (fuzzed_data->ConsumeBool()) {
651
7.69k
    pstr_in_cfg->frame_length = fuzzed_data->PickValueInArray(k_frame_length);
652
7.69k
  } else {
653
1.35k
    pstr_in_cfg->frame_length = fuzzed_data->ConsumeIntegral<WORD16>();
654
1.35k
  }
655
9.05k
  pstr_in_cfg->aot = fuzzed_data->ConsumeIntegral<WORD8>();
656
9.05k
  pstr_in_cfg->esbr_flag = fuzzed_data->ConsumeBool();
657
9.05k
  pstr_in_cfg->aac_config.full_bandwidth = fuzzed_data->ConsumeBool();
658
9.05k
  pstr_in_cfg->aac_config.bitreservoir_size = fuzzed_data->ConsumeIntegral<WORD16>();
659
9.05k
  pstr_in_cfg->i_mps_tree_config = fuzzed_data->ConsumeIntegral<WORD8>();
660
9.05k
  pstr_in_cfg->i_channels_mask = fuzzed_data->ConsumeIntegral<WORD8>();
661
9.05k
  pstr_in_cfg->cplx_pred = fuzzed_data->ConsumeBool();
662
9.05k
  pstr_in_cfg->usac_en = fuzzed_data->ConsumeBool();
663
9.05k
  pstr_in_cfg->ccfl_idx = fuzzed_data->ConsumeIntegral<WORD8>();
664
9.05k
  pstr_in_cfg->pvc_active = fuzzed_data->ConsumeBool();
665
9.05k
  pstr_in_cfg->harmonic_sbr = fuzzed_data->ConsumeBool();
666
9.05k
  pstr_in_cfg->hq_esbr = fuzzed_data->ConsumeBool();
667
9.05k
  pstr_in_cfg->use_drc_element = fuzzed_data->ConsumeBool();
668
9.05k
  pstr_in_cfg->inter_tes_active = fuzzed_data->ConsumeBool();
669
9.05k
  pstr_in_cfg->codec_mode = fuzzed_data->ConsumeIntegral<WORD8>();
670
9.05k
  pstr_in_cfg->random_access_interval = fuzzed_data->ConsumeIntegral<WORD32>();
671
9.05k
  pstr_in_cfg->method_def = fuzzed_data->ConsumeIntegral<WORD32>();
672
9.05k
  pstr_in_cfg->measurement_system = fuzzed_data->ConsumeIntegral<WORD32>();
673
9.05k
  pstr_in_cfg->measured_loudness = fuzzed_data->ConsumeIntegral<WORD32>();
674
9.05k
  pstr_in_cfg->stream_id = fuzzed_data->ConsumeIntegral<UWORD16>();
675
9.05k
  pstr_in_cfg->use_delay_adjustment = fuzzed_data->ConsumeIntegral<WORD32>();
676
  /* DRC */
677
9.05k
  if (pstr_in_cfg->use_drc_element == 1) {
678
3.38k
    ixheaace_read_drc_config_params(&pstr_drc_cfg->str_enc_params,
679
3.38k
                                    &pstr_drc_cfg->str_uni_drc_config,
680
3.38k
                                    &pstr_drc_cfg->str_enc_loudness_info_set,
681
3.38k
                                    &pstr_drc_cfg->str_enc_gain_extension, fuzzed_data, in_ch);
682
3.38k
  }
683
9.05k
}
684
685
IA_ERRORCODE ia_enhaacplus_enc_pcm_data_read(std::vector<WORD8> input_vec, UWORD32 num_samples,
686
39.6k
                                             WORD32 num_channels, WORD16 **data) {
687
39.6k
  UWORD32 count = 0;
688
39.6k
  UWORD8 channel_no;
689
39.6k
  UWORD32 sample_no = 0;
690
39.6k
  UWORD32 i = 0;
691
201M
  while (count < num_samples) {
692
201M
    sample_no = (count / num_channels);
693
201M
    channel_no = (UWORD8)(count % num_channels);
694
201M
    data[channel_no][sample_no] = *input_vec.data();
695
201M
    i++;
696
201M
    count++;
697
201M
  }
698
39.6k
  return 0;
699
39.6k
}
700
701
static IA_ERRORCODE ixheaace_calculate_loudness_measure(ixheaace_input_config *pstr_in_cfg,
702
                                                        ixheaace_output_config *pstr_out_cfg,
703
5.55k
                                                        FuzzedDataProvider *fuzzed_data) {
704
5.55k
  WORD32 input_size;
705
5.55k
  WORD32 count = 0;
706
5.55k
  IA_ERRORCODE err_code = 0;
707
5.55k
  VOID *loudness_handle =
708
5.55k
      malloc_global(ixheaace_loudness_info_get_handle_size(), DEFAULT_MEM_ALIGN_8);
709
5.55k
  if (loudness_handle == NULL) {
710
0
    printf("fatal error: libxaac encoder: Memory allocation failed");
711
0
    return -1;
712
0
  }
713
714
5.55k
  err_code = ixheaace_loudness_init_params(loudness_handle, pstr_in_cfg, pstr_out_cfg);
715
716
5.55k
  if (err_code) {
717
947
    free_global(loudness_handle);
718
947
    return -1;
719
947
  }
720
4.60k
  input_size = (pstr_out_cfg->samp_freq / 10) * (pstr_in_cfg->i_channels);
721
4.60k
  WORD16 **samples = 0;
722
4.60k
  samples =
723
4.60k
      (WORD16 **)malloc_global(pstr_in_cfg->i_channels * sizeof(*samples), DEFAULT_MEM_ALIGN_8);
724
4.60k
  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
12.4k
  for (count = 0; count < pstr_in_cfg->i_channels; count++) {
730
7.86k
    samples[count] = (WORD16 *)malloc_global(
731
7.86k
        (pstr_out_cfg->samp_freq / 10) * sizeof(*samples[count]), DEFAULT_MEM_ALIGN_8);
732
7.86k
    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
7.86k
    memset(samples[count], 0, (pstr_out_cfg->samp_freq / 10) * sizeof(*samples[count]));
743
7.86k
  }
744
4.60k
  count = 0;
745
44.2k
  while (count <= fuzzed_data->remaining_bytes()) {
746
39.6k
    std::vector<WORD8> input_vec = fuzzed_data->ConsumeBytes<WORD8>(input_size);
747
39.6k
    err_code =
748
39.6k
        ia_enhaacplus_enc_pcm_data_read(input_vec, input_size, pstr_in_cfg->i_channels, samples);
749
39.6k
    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
39.6k
    pstr_in_cfg->measured_loudness = ixheaace_measure_loudness(loudness_handle, samples);
758
39.6k
    count += input_size;
759
39.6k
  }
760
4.60k
  if (pstr_in_cfg->method_def == METHOD_DEFINITION_PROGRAM_LOUDNESS) {
761
30
    pstr_in_cfg->measured_loudness = ixheaace_measure_integrated_loudness(loudness_handle);
762
30
  }
763
12.4k
  for (count = 0; count < pstr_in_cfg->i_channels; count++) {
764
7.86k
    free_global(samples[count]);
765
7.86k
  }
766
4.60k
  free_global(samples);
767
4.60k
  free_global(loudness_handle);
768
4.60k
  return err_code;
769
4.60k
}
770
771
9.05k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
772
9.05k
  FuzzedDataProvider fuzzed_data(data, size);
773
9.05k
  FuzzedDataProvider fuzzed_data_loudness(data, size);
774
775
  /* Error code */
776
9.05k
  IA_ERRORCODE err_code = 0;
777
778
  /* API obj */
779
9.05k
  pVOID pv_ia_process_api_obj;
780
781
9.05k
  pWORD8 pb_inp_buf = NULL;
782
9.05k
  WORD32 input_size = 0;
783
9.05k
  WORD32 read_inp_data = 1;
784
9.05k
  WORD32 num_proc_iterations = 0;
785
786
  /* ******************************************************************/
787
  /* The API config structure                                         */
788
  /* ******************************************************************/
789
790
9.05k
  ixheaace_user_config_struct str_enc_api{};
791
792
9.05k
  ixheaace_input_config *pstr_in_cfg = &str_enc_api.input_config;
793
9.05k
  ixheaace_output_config *pstr_out_cfg = &str_enc_api.output_config;
794
9.05k
  pstr_in_cfg->pv_drc_cfg = malloc_global(sizeof(ia_drc_input_config), DEFAULT_MEM_ALIGN_8);
795
9.05k
  ia_drc_input_config *pstr_drc_cfg = (ia_drc_input_config *)pstr_in_cfg->pv_drc_cfg;
796
9.05k
  memset(pstr_drc_cfg, 0, sizeof(ia_drc_input_config));
797
798
9.05k
  pstr_out_cfg->malloc_xheaace = &malloc_global;
799
9.05k
  pstr_out_cfg->free_xheaace = &free_global;
800
801
  /* ******************************************************************/
802
  /* Parse input configuration parameters                             */
803
  /* ******************************************************************/
804
9.05k
  ixheaace_fuzzer_flag(pstr_in_cfg, pstr_drc_cfg, &fuzzed_data, pstr_in_cfg->i_channels);
805
806
  /*1st pass -> Loudness Measurement */
807
9.05k
  if (pstr_in_cfg->aot == AOT_USAC || pstr_in_cfg->usac_en) {
808
5.55k
    err_code =
809
5.55k
        ixheaace_calculate_loudness_measure(pstr_in_cfg, pstr_out_cfg, &fuzzed_data_loudness);
810
5.55k
    if (err_code) {
811
947
      if (pstr_drc_cfg) {
812
947
        free(pstr_drc_cfg);
813
947
        pstr_drc_cfg = NULL;
814
947
      }
815
      /* Fatal error code */
816
947
      if (err_code & 0x80000000) {
817
947
        ixheaace_delete((pVOID)pstr_out_cfg);
818
947
        return 0;
819
947
      }
820
0
      return -1;
821
947
    }
822
5.55k
  }
823
824
8.10k
  err_code = ixheaace_create((pVOID)pstr_in_cfg, (pVOID)pstr_out_cfg);
825
8.10k
  if (err_code) {
826
2.00k
    if (pstr_drc_cfg) {
827
2.00k
      free(pstr_drc_cfg);
828
2.00k
      pstr_drc_cfg = NULL;
829
2.00k
    }
830
    /* Fatal error code */
831
2.00k
    if (err_code & 0x80000000) {
832
1.76k
      ixheaace_delete((pVOID)pstr_out_cfg);
833
1.76k
      return 0;
834
1.76k
    }
835
2.00k
  }
836
837
6.34k
  pv_ia_process_api_obj = pstr_out_cfg->pv_ia_process_api_obj;
838
6.34k
  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.34k
  input_size = pstr_out_cfg->input_size;
847
6.34k
  memset(pb_inp_buf, 0, input_size);
848
849
524k
  while (fuzzed_data.remaining_bytes()) {
850
518k
    if (read_inp_data) {
851
499k
      if (fuzzed_data.ConsumeBool()) {
852
116k
        std::vector<WORD8> input_vec = fuzzed_data.ConsumeBytes<WORD8>(input_size);
853
116k
        if (input_vec.size()) {
854
102k
          memcpy(pb_inp_buf, input_vec.data(), input_vec.size());
855
102k
        }
856
383k
      } else {
857
383k
        memset(pb_inp_buf, fuzzed_data.ConsumeIntegral<WORD8>(), input_size);
858
383k
      }
859
499k
    }
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
18.8k
      read_inp_data = 0;
864
499k
    } else {
865
499k
      read_inp_data = 1;
866
499k
    }
867
    /* Stop processing after 500 frames */
868
518k
    if (num_proc_iterations > 500) break;
869
518k
  }
870
871
6.34k
  ixheaace_delete((pVOID)pstr_out_cfg);
872
873
6.34k
  if (pstr_drc_cfg) {
874
6.09k
    free(pstr_drc_cfg);
875
6.09k
  }
876
6.34k
  return 0;
877
8.10k
}
878
879
/* End ia_main_process() */