diff options
-rw-r--r-- | api/audio_codecs/opus/audio_encoder_opus_config.cc | 3 | ||||
-rw-r--r-- | modules/BUILD.gn | 1 | ||||
-rw-r--r-- | modules/audio_coding/acm2/acm_receive_test.h | 3 | ||||
-rw-r--r-- | modules/audio_coding/acm2/acm_send_test.cc | 10 | ||||
-rw-r--r-- | modules/audio_coding/acm2/audio_coding_module.cc | 4 | ||||
-rw-r--r-- | modules/audio_coding/acm2/audio_coding_module_unittest.cc | 99 | ||||
-rw-r--r-- | modules/audio_coding/codecs/opus/audio_decoder_opus.cc | 3 | ||||
-rw-r--r-- | modules/audio_coding/neteq/tools/input_audio_file.cc | 2 | ||||
-rw-r--r-- | modules/audio_coding/neteq/tools/output_wav_file.h | 6 | ||||
-rw-r--r-- | resources/audio_coding/testfile_fake_stereo_32kHz.pcm.sha1 | 1 |
10 files changed, 35 insertions, 97 deletions
diff --git a/api/audio_codecs/opus/audio_encoder_opus_config.cc b/api/audio_codecs/opus/audio_encoder_opus_config.cc index 2847ceac74..301c25695d 100644 --- a/api/audio_codecs/opus/audio_encoder_opus_config.cc +++ b/api/audio_codecs/opus/audio_encoder_opus_config.cc @@ -55,8 +55,7 @@ AudioEncoderOpusConfig& AudioEncoderOpusConfig::operator=( bool AudioEncoderOpusConfig::IsOk() const { if (frame_size_ms <= 0 || frame_size_ms % 10 != 0) return false; - if (num_channels != 1 && num_channels != 2 && num_channels != 4 && - num_channels != 6 && num_channels != 8) + if (num_channels != 1 && num_channels != 2) return false; if (!bitrate_bps) return false; diff --git a/modules/BUILD.gn b/modules/BUILD.gn index 501ba2a449..40ea128200 100644 --- a/modules/BUILD.gn +++ b/modules/BUILD.gn @@ -126,7 +126,6 @@ if (rtc_include_tests) { "../resources/audio_coding/speech_mono_32_48kHz.pcm", "../resources/audio_coding/speech_4_channels_48k_one_second.wav", "../resources/audio_coding/testfile32kHz.pcm", - "../resources/audio_coding/testfile_fake_stereo_32kHz.pcm", "../resources/audio_coding/teststereo32kHz.pcm", "../resources/audio_device/audio_short16.pcm", "../resources/audio_device/audio_short44.pcm", diff --git a/modules/audio_coding/acm2/acm_receive_test.h b/modules/audio_coding/acm2/acm_receive_test.h index 9d004c65e6..fce3d6b8b9 100644 --- a/modules/audio_coding/acm2/acm_receive_test.h +++ b/modules/audio_coding/acm2/acm_receive_test.h @@ -33,8 +33,7 @@ class AcmReceiveTestOldApi { enum NumOutputChannels : size_t { kArbitraryChannels = 0, kMonoOutput = 1, - kStereoOutput = 2, - kQuadOutput = 4 + kStereoOutput = 2 }; AcmReceiveTestOldApi(PacketSource* packet_source, diff --git a/modules/audio_coding/acm2/acm_send_test.cc b/modules/audio_coding/acm2/acm_send_test.cc index b6110b692f..98d673f3a1 100644 --- a/modules/audio_coding/acm2/acm_send_test.cc +++ b/modules/audio_coding/acm2/acm_send_test.cc @@ -106,9 +106,13 @@ std::unique_ptr<Packet> AcmSendTestOldApi::NextPacket() { // Insert audio and process until one packet is produced. while (clock_.TimeInMilliseconds() < test_duration_ms_) { clock_.AdvanceTimeMilliseconds(kBlockSizeMs); - RTC_CHECK(audio_source_->Read( - input_block_size_samples_ * input_frame_.num_channels_, - input_frame_.mutable_data())); + RTC_CHECK(audio_source_->Read(input_block_size_samples_, + input_frame_.mutable_data())); + if (input_frame_.num_channels_ > 1) { + InputAudioFile::DuplicateInterleaved( + input_frame_.data(), input_block_size_samples_, + input_frame_.num_channels_, input_frame_.mutable_data()); + } data_to_send_ = false; RTC_CHECK_GE(acm_->Add10MsData(input_frame_), 0); input_frame_.timestamp_ += static_cast<uint32_t>(input_block_size_samples_); diff --git a/modules/audio_coding/acm2/audio_coding_module.cc b/modules/audio_coding/acm2/audio_coding_module.cc index 1547b37198..67ef556ac8 100644 --- a/modules/audio_coding/acm2/audio_coding_module.cc +++ b/modules/audio_coding/acm2/audio_coding_module.cc @@ -477,9 +477,7 @@ int AudioCodingModuleImpl::Add10MsDataInternal(const AudioFrame& audio_frame, return -1; } - if (audio_frame.num_channels_ != 1 && audio_frame.num_channels_ != 2 && - audio_frame.num_channels_ != 4 && audio_frame.num_channels_ != 6 && - audio_frame.num_channels_ != 8) { + if (audio_frame.num_channels_ != 1 && audio_frame.num_channels_ != 2) { RTC_LOG(LS_ERROR) << "Cannot Add 10 ms audio, invalid number of channels."; return -1; } diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc index 13b95819b4..c9a03a1db8 100644 --- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc +++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc @@ -17,7 +17,6 @@ #include "api/audio_codecs/audio_encoder.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" -#include "api/audio_codecs/opus/audio_decoder_opus.h" #include "api/audio_codecs/opus/audio_encoder_opus.h" #include "modules/audio_coding/acm2/acm_receive_test.h" #include "modules/audio_coding/acm2/acm_send_test.h" @@ -25,8 +24,6 @@ #include "modules/audio_coding/codecs/g711/audio_decoder_pcm.h" #include "modules/audio_coding/codecs/g711/audio_encoder_pcm.h" #include "modules/audio_coding/codecs/isac/main/include/audio_encoder_isac.h" -#include "modules/audio_coding/codecs/opus/audio_decoder_opus.h" -#include "modules/audio_coding/codecs/opus/audio_encoder_opus.h" #include "modules/audio_coding/include/audio_coding_module.h" #include "modules/audio_coding/include/audio_coding_module_typedefs.h" #include "modules/audio_coding/neteq/tools/audio_checksum.h" @@ -47,7 +44,6 @@ #include "rtc_base/thread_annotations.h" #include "system_wrappers/include/clock.h" #include "system_wrappers/include/sleep.h" -#include "test/audio_decoder_proxy_factory.h" #include "test/gtest.h" #include "test/mock_audio_decoder.h" #include "test/mock_audio_encoder.h" @@ -66,16 +62,6 @@ const int kFrameSizeMs = 10; // Multiple of 10. const int kFrameSizeSamples = kFrameSizeMs / 10 * kNumSamples10ms; const int kPayloadSizeBytes = kFrameSizeSamples * sizeof(int16_t); const uint8_t kPayloadType = 111; -const std::string kTestFileMono32kHz = - webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); -const std::string kTestFileFakeStereo32kHz = - webrtc::test::ResourcePath("audio_coding/testfile_fake_stereo_32kHz", - "pcm"); -const std::string kTestFileQuad48kHz = - webrtc::test::ResourcePath("audio_coding/speech_4_channels_48k_one_second", - "wav"); -const std::string kTestFileSpeechMono16kHz = - webrtc::test::ResourcePath("audio_coding/speech_mono_16kHz", "pcm"); } // namespace class RtpUtility { @@ -639,8 +625,9 @@ class AcmIsacMtTestOldApi : public AudioCodingModuleMtTestOldApi { // Set up input audio source to read from specified file, loop after 5 // seconds, and deliver blocks of 10 ms. - audio_loop_.Init(kTestFileSpeechMono16kHz, 5 * kSampleRateHz, - kNumSamples10ms); + const std::string input_file_name = + webrtc::test::ResourcePath("audio_coding/speech_mono_16kHz", "pcm"); + audio_loop_.Init(input_file_name, 5 * kSampleRateHz, kNumSamples10ms); // Generate one packet to have something to insert. int loop_counter = 0; @@ -754,8 +741,9 @@ class AcmReRegisterIsacMtTestOldApi : public AudioCodingModuleTestOldApi { AudioCodingModuleTestOldApi::SetUp(); // Set up input audio source to read from specified file, loop after 5 // seconds, and deliver blocks of 10 ms. - audio_loop_.Init(kTestFileSpeechMono16kHz, 5 * kSampleRateHz, - kNumSamples10ms); + const std::string input_file_name = + webrtc::test::ResourcePath("audio_coding/speech_mono_16kHz", "pcm"); + audio_loop_.Init(input_file_name, 5 * kSampleRateHz, kNumSamples10ms); RegisterCodec(); // Must be called before the threads start below. StartThreads(); } @@ -947,7 +935,7 @@ class AcmReceiverBitExactnessOldApi : public ::testing::Test { ->test_case_name() + "_" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + "_output.wav"; - test::OutputWavFile output_file(output_file_name, output_freq_hz, 1); + test::OutputWavFile output_file(output_file_name, output_freq_hz); test::AudioSinkFork output(&checksum, &output_file); test::AcmReceiveTestOldApi test( @@ -1128,12 +1116,15 @@ class AcmSenderBitExactnessOldApi : public ::testing::Test, // Sets up the test::AcmSendTest object. Returns true on success, otherwise // false. - bool SetUpSender(std::string input_file_name, int source_rate) { + bool SetUpSender() { + const std::string input_file_name = + webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); // Note that |audio_source_| will loop forever. The test duration is set // explicitly by |kTestDurationMs|. audio_source_.reset(new test::InputAudioFile(input_file_name)); - send_test_.reset(new test::AcmSendTestOldApi(audio_source_.get(), - source_rate, kTestDurationMs)); + static const int kSourceRateHz = 32000; + send_test_.reset(new test::AcmSendTestOldApi( + audio_source_.get(), kSourceRateHz, kTestDurationMs)); return send_test_.get() != NULL; } @@ -1166,11 +1157,7 @@ class AcmSenderBitExactnessOldApi : public ::testing::Test, void Run(const std::string& audio_checksum_ref, const std::string& payload_checksum_ref, int expected_packets, - test::AcmReceiveTestOldApi::NumOutputChannels expected_channels, - rtc::scoped_refptr<AudioDecoderFactory> decoder_factory = nullptr) { - if (!decoder_factory) { - decoder_factory = CreateBuiltinAudioDecoderFactory(); - } + test::AcmReceiveTestOldApi::NumOutputChannels expected_channels) { // Set up the receiver used to decode the packets and verify the decoded // output. test::AudioChecksum audio_checksum; @@ -1182,12 +1169,12 @@ class AcmSenderBitExactnessOldApi : public ::testing::Test, "_" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + "_output.wav"; const int kOutputFreqHz = 8000; - test::OutputWavFile output_file(output_file_name, kOutputFreqHz, - expected_channels); + test::OutputWavFile output_file(output_file_name, kOutputFreqHz); // Have the output audio sent both to file and to the checksum calculator. test::AudioSinkFork output(&audio_checksum, &output_file); test::AcmReceiveTestOldApi receive_test(this, &output, kOutputFreqHz, - expected_channels, decoder_factory); + expected_channels, + CreateBuiltinAudioDecoderFactory()); ASSERT_NO_FATAL_FAILURE(receive_test.RegisterDefaultCodecs()); // This is where the actual test is executed. @@ -1263,8 +1250,7 @@ class AcmSenderBitExactnessOldApi : public ::testing::Test, int payload_type, int codec_frame_size_samples, int codec_frame_size_rtp_timestamps) { - ASSERT_TRUE(SetUpSender( - channels == 1 ? kTestFileMono32kHz : kTestFileFakeStereo32kHz, 32000)); + ASSERT_TRUE(SetUpSender()); ASSERT_TRUE(RegisterSendCodec(codec_name, codec_sample_rate_hz, channels, payload_type, codec_frame_size_samples, codec_frame_size_rtp_timestamps)); @@ -1273,7 +1259,7 @@ class AcmSenderBitExactnessOldApi : public ::testing::Test, void SetUpTestExternalEncoder( std::unique_ptr<AudioEncoder> external_speech_encoder, int payload_type) { - ASSERT_TRUE(send_test_); + ASSERT_TRUE(SetUpSender()); RegisterExternalSendCodec(std::move(external_speech_encoder), payload_type); } @@ -1495,59 +1481,17 @@ TEST_F(AcmSenderBitExactnessOldApi, Opus_stereo_20ms) { TEST_F(AcmSenderBitExactnessNewApi, MAYBE_OpusFromFormat_stereo_20ms) { const auto config = AudioEncoderOpus::SdpToConfig( SdpAudioFormat("opus", 48000, 2, {{"stereo", "1"}})); - ASSERT_TRUE(SetUpSender(kTestFileFakeStereo32kHz, 32000)); ASSERT_NO_FATAL_FAILURE(SetUpTestExternalEncoder( AudioEncoderOpus::MakeAudioEncoder(*config, 120), 120)); Run(audio_checksum, payload_checksum, 50, test::AcmReceiveTestOldApi::kStereoOutput); } -TEST_F(AcmSenderBitExactnessNewApi, OpusManyChannels) { - constexpr int kNumChannels = 4; - constexpr int kOpusPayloadType = 120; - constexpr int kBitrateBps = 128000; - - // Read a 4 channel file at 48kHz. - ASSERT_TRUE(SetUpSender(kTestFileQuad48kHz, 48000)); - - // TODO(webrtc:8649): change to higher level - // AudioEncoderOpus::MakeAudioEncoder once a multistream encoder can be set up - // from SDP. - AudioEncoderOpusConfig config = *AudioEncoderOpus::SdpToConfig( - SdpAudioFormat("opus", 48000, 2, {{"stereo", "1"}})); - config.num_channels = kNumChannels; - config.bitrate_bps = kBitrateBps; - - ASSERT_NO_FATAL_FAILURE(SetUpTestExternalEncoder( - absl::make_unique<AudioEncoderOpusImpl>(config, kOpusPayloadType), - kOpusPayloadType)); - - AudioDecoderOpusImpl opus_decoder(kNumChannels); - - rtc::scoped_refptr<AudioDecoderFactory> decoder_factory = - new rtc::RefCountedObject<test::AudioDecoderProxyFactory>(&opus_decoder); - - // Set up an EXTERNAL DECODER to parse 4 channels. - Run(AcmReceiverBitExactnessOldApi::PlatformChecksum( // audio checksum - "b70470884d9a8613eff019b0d1c8876e|d0a73d377e0ca1be6b06e989e0ad2c35", - "d0a73d377e0ca1be6b06e989e0ad2c35", - "b45d2ce5fc4723e9eb41350af9c68f56", "android arm64 audio checksum", - "1c9a3c9dacdd4b8fc9ff608227e531f2"), - // payload_checksum, - AcmReceiverBitExactnessOldApi::PlatformChecksum( // payload checksum - "c2e7d40f8269ef754bd86d6be9623fa7|76de0f4992e3937ca60d35bbb0d308d6", - "76de0f4992e3937ca60d35bbb0d308d6", - "2a310aca965c16c2dfd61a9f9fc0c877", "android arm64 payload checksum", - "2294f4b61fb8f174f5196776a0a49be7"), - 50, test::AcmReceiveTestOldApi::kQuadOutput, decoder_factory); -} - TEST_F(AcmSenderBitExactnessNewApi, OpusFromFormat_stereo_20ms_voip) { auto config = AudioEncoderOpus::SdpToConfig( SdpAudioFormat("opus", 48000, 2, {{"stereo", "1"}})); // If not set, default will be kAudio in case of stereo. config->application = AudioEncoderOpusConfig::ApplicationMode::kVoip; - ASSERT_TRUE(SetUpSender(kTestFileFakeStereo32kHz, 32000)); ASSERT_NO_FATAL_FAILURE(SetUpTestExternalEncoder( AudioEncoderOpus::MakeAudioEncoder(*config, 120), 120)); // Checksum depends on libopus being compiled with or without SSE. @@ -1578,9 +1522,11 @@ class AcmSetBitRateTest : public ::testing::Test { // Sets up the test::AcmSendTest object. Returns true on success, otherwise // false. bool SetUpSender() { + const std::string input_file_name = + webrtc::test::ResourcePath("audio_coding/testfile32kHz", "pcm"); // Note that |audio_source_| will loop forever. The test duration is set // explicitly by |kTestDurationMs|. - audio_source_.reset(new test::InputAudioFile(kTestFileMono32kHz)); + audio_source_.reset(new test::InputAudioFile(input_file_name)); static const int kSourceRateHz = 32000; send_test_.reset(new test::AcmSendTestOldApi( audio_source_.get(), kSourceRateHz, kTestDurationMs)); @@ -1829,7 +1775,6 @@ TEST_F(AcmSenderBitExactnessOldApi, External_Pcmu_20ms) { &encoder, static_cast<AudioEncoder::EncodedInfo (AudioEncoder::*)( uint32_t, rtc::ArrayView<const int16_t>, rtc::Buffer*)>( &AudioEncoderPcmU::Encode))); - ASSERT_TRUE(SetUpSender(kTestFileMono32kHz, 32000)); ASSERT_NO_FATAL_FAILURE( SetUpTestExternalEncoder(std::move(mock_encoder), config.payload_type)); Run("81a9d4c0bb72e9becc43aef124c981e9", "8f9b8750bd80fe26b6cbf6659b89f0f9", diff --git a/modules/audio_coding/codecs/opus/audio_decoder_opus.cc b/modules/audio_coding/codecs/opus/audio_decoder_opus.cc index b6eada9d7c..1accfe42e9 100644 --- a/modules/audio_coding/codecs/opus/audio_decoder_opus.cc +++ b/modules/audio_coding/codecs/opus/audio_decoder_opus.cc @@ -71,8 +71,7 @@ class OpusFrame : public AudioDecoder::EncodedAudioFrame { AudioDecoderOpusImpl::AudioDecoderOpusImpl(size_t num_channels) : channels_(num_channels) { - RTC_DCHECK(num_channels == 1 || num_channels == 2 || num_channels == 4 || - num_channels == 6 || num_channels == 8); + RTC_DCHECK(num_channels == 1 || num_channels == 2); const int error = WebRtcOpus_DecoderCreate(&dec_state_, channels_); RTC_DCHECK(error == 0); WebRtcOpus_DecoderInit(dec_state_); diff --git a/modules/audio_coding/neteq/tools/input_audio_file.cc b/modules/audio_coding/neteq/tools/input_audio_file.cc index d5e28629b4..6d11064724 100644 --- a/modules/audio_coding/neteq/tools/input_audio_file.cc +++ b/modules/audio_coding/neteq/tools/input_audio_file.cc @@ -18,11 +18,9 @@ namespace test { InputAudioFile::InputAudioFile(const std::string file_name, bool loop_at_end) : loop_at_end_(loop_at_end) { fp_ = fopen(file_name.c_str(), "rb"); - RTC_DCHECK(fp_) << file_name << " could not be opened."; } InputAudioFile::~InputAudioFile() { - RTC_DCHECK(fp_); fclose(fp_); } diff --git a/modules/audio_coding/neteq/tools/output_wav_file.h b/modules/audio_coding/neteq/tools/output_wav_file.h index 6982a76a39..3ffcfc6d62 100644 --- a/modules/audio_coding/neteq/tools/output_wav_file.h +++ b/modules/audio_coding/neteq/tools/output_wav_file.h @@ -24,10 +24,8 @@ class OutputWavFile : public AudioSink { public: // Creates an OutputWavFile, opening a file named |file_name| for writing. // The output file is a PCM encoded wav file. - OutputWavFile(const std::string& file_name, - int sample_rate_hz, - int num_channels = 1) - : wav_writer_(file_name, sample_rate_hz, num_channels) {} + OutputWavFile(const std::string& file_name, int sample_rate_hz) + : wav_writer_(file_name, sample_rate_hz, 1) {} bool WriteArray(const int16_t* audio, size_t num_samples) override { wav_writer_.WriteSamples(audio, num_samples); diff --git a/resources/audio_coding/testfile_fake_stereo_32kHz.pcm.sha1 b/resources/audio_coding/testfile_fake_stereo_32kHz.pcm.sha1 deleted file mode 100644 index 004f8bb7f9..0000000000 --- a/resources/audio_coding/testfile_fake_stereo_32kHz.pcm.sha1 +++ /dev/null @@ -1 +0,0 @@ -4f382602b5605dbbbf78451810ce644788681262
\ No newline at end of file |