From 06cba44d7a67ceffa0b5d477fb8f1dd187e679f8 Mon Sep 17 00:00:00 2001 From: Sam Zackrisson Date: Mon, 21 Nov 2022 16:32:42 +0100 Subject: [PATCH] WebRTC APM: Add missing channel format check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The check was lost in CL https://webrtc-review.googlesource.com/c/src/+/276920 Bug: webrtc:5298 Change-Id: Ic5f072ebef4ad0bdef5446cad0536728b4ad610e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/284560 Reviewed-by: Per Ã…hgren Commit-Queue: Sam Zackrisson Cr-Commit-Position: refs/heads/main@{#38746} --- modules/audio_processing/audio_processing_impl.cc | 12 ++++++++++++ .../audio_processing/audio_processing_unittest.cc | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 2579f6c218..6dba8d7e63 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -201,10 +201,22 @@ std::pair ChooseErrorOutputOption( AudioFormatValidity input_validity = ValidateAudioFormat(input_config); AudioFormatValidity output_validity = ValidateAudioFormat(output_config); + if (input_validity == AudioFormatValidity::kValidAndSupported && + output_validity == AudioFormatValidity::kValidAndSupported && + (output_config.num_channels() == 1 || + output_config.num_channels() == input_config.num_channels())) { + return {AudioProcessing::kNoError, FormatErrorOutputOption::kDoNothing}; + } + int error_code = AudioFormatValidityToErrorCode(input_validity); if (error_code == AudioProcessing::kNoError) { error_code = AudioFormatValidityToErrorCode(output_validity); } + if (error_code == AudioProcessing::kNoError) { + // The individual formats are valid but there is some error - must be + // channel mismatch. + error_code = AudioProcessing::kBadNumberChannelsError; + } FormatErrorOutputOption output_option; if (output_validity != AudioFormatValidity::kValidAndSupported && diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index e99a2a1eef..bbb7f46dc3 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -3217,6 +3217,16 @@ INSTANTIATE_TEST_SUITE_P( StreamConfig(16000, 3), StreamConfig(16000, 3), ApmFormatHandlingTestParams::ExpectedOutput::kNoError}, + // Supported but incompatible formats. + ApmFormatHandlingTestParams{ + StreamConfig(16000, 3), StreamConfig(16000, 2), + ApmFormatHandlingTestParams::ExpectedOutput:: + kErrorAndCopyOfFirstChannel}, + ApmFormatHandlingTestParams{ + StreamConfig(16000, 3), StreamConfig(16000, 4), + ApmFormatHandlingTestParams::ExpectedOutput:: + kErrorAndCopyOfFirstChannel}, + // Unsupported format and input / output mismatch. ApmFormatHandlingTestParams{ StreamConfig(7900, 1), StreamConfig(16000, 1),