diff --git a/test/fuzzers/audio_processing_configs_fuzzer.cc b/test/fuzzers/audio_processing_configs_fuzzer.cc index 8dd0e29634..57699dd5b3 100644 --- a/test/fuzzers/audio_processing_configs_fuzzer.cc +++ b/test/fuzzers/audio_processing_configs_fuzzer.cc @@ -122,6 +122,7 @@ std::unique_ptr CreateApm(test::FuzzDataHelper* fuzz_data, #endif webrtc::AudioProcessing::Config apm_config; + apm_config.pipeline.experimental_multi_channel = true; apm_config.echo_canceller.enabled = use_aec || use_aecm; apm_config.echo_canceller.mobile_mode = use_aecm; apm_config.residual_echo_detector.enabled = red; diff --git a/test/fuzzers/audio_processing_fuzzer_helper.cc b/test/fuzzers/audio_processing_fuzzer_helper.cc index 5d7ea4c807..eb2e0e8960 100644 --- a/test/fuzzers/audio_processing_fuzzer_helper.cc +++ b/test/fuzzers/audio_processing_fuzzer_helper.cc @@ -71,12 +71,14 @@ void GenerateFixedFrame(test::FuzzDataHelper* fuzz_data, void FuzzAudioProcessing(test::FuzzDataHelper* fuzz_data, std::unique_ptr apm) { AudioFrame fixed_frame; - std::array float_frame1; - std::array float_frame2; - std::array float_frame_ptrs = { - &float_frame1[0], - &float_frame2[0], - }; + // Normal usage is up to 8 channels. Allowing to fuzz one beyond this allows + // us to catch implicit assumptions about normal usage. + constexpr int kMaxNumChannels = 9; + std::array, kMaxNumChannels> float_frames; + std::array float_frame_ptrs; + for (int i = 0; i < kMaxNumChannels; ++i) { + float_frame_ptrs[i] = float_frames[i].data(); + } float* const* ptr_to_float_frames = &float_frame_ptrs[0]; using Rate = AudioProcessing::NativeRate; @@ -94,7 +96,6 @@ void FuzzAudioProcessing(test::FuzzDataHelper* fuzz_data, const auto output_rate = static_cast(fuzz_data->SelectOneOf(rate_kinds)); - const int num_channels = fuzz_data->ReadOrDefaultValue(true) ? 2 : 1; const uint8_t stream_delay = fuzz_data->ReadOrDefaultValue(0); // API call needed for AEC-2 and AEC-m to run. @@ -110,6 +111,9 @@ void FuzzAudioProcessing(test::FuzzDataHelper* fuzz_data, // Fill the arrays with audio samples from the data. int apm_return_code = AudioProcessing::Error::kNoError; if (is_float) { + const int num_channels = + fuzz_data->ReadOrDefaultValue(1) % kMaxNumChannels; + GenerateFloatFrame(fuzz_data, input_rate, num_channels, ptr_to_float_frames); if (is_capture) { @@ -122,6 +126,7 @@ void FuzzAudioProcessing(test::FuzzDataHelper* fuzz_data, StreamConfig(output_rate, 1), ptr_to_float_frames); } } else { + const int num_channels = fuzz_data->ReadOrDefaultValue(true) ? 2 : 1; GenerateFixedFrame(fuzz_data, input_rate, num_channels, &fixed_frame); if (is_capture) {