Index: webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc |
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc |
deleted file mode 100644 |
index 8f43ac456a2dd449159d055a953914f133d658b6..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc |
+++ /dev/null |
@@ -1,369 +0,0 @@ |
-/* |
- * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/modules/audio_coding/main/acm2/acm_receiver.h" |
- |
-#include <algorithm> // std::min |
- |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "webrtc/base/scoped_ptr.h" |
-#include "webrtc/modules/audio_coding/main/include/audio_coding_module.h" |
-#include "webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h" |
-#include "webrtc/modules/audio_coding/neteq/tools/rtp_generator.h" |
-#include "webrtc/system_wrappers/include/clock.h" |
-#include "webrtc/test/test_suite.h" |
-#include "webrtc/test/testsupport/fileutils.h" |
-#include "webrtc/test/testsupport/gtest_disable.h" |
- |
-namespace webrtc { |
- |
-namespace acm2 { |
-namespace { |
- |
-bool CodecsEqual(const CodecInst& codec_a, const CodecInst& codec_b) { |
- if (strcmp(codec_a.plname, codec_b.plname) != 0 || |
- codec_a.plfreq != codec_b.plfreq || |
- codec_a.pltype != codec_b.pltype || |
- codec_b.channels != codec_a.channels) |
- return false; |
- return true; |
-} |
- |
-struct CodecIdInst { |
- explicit CodecIdInst(RentACodec::CodecId codec_id) { |
- const auto codec_ix = RentACodec::CodecIndexFromId(codec_id); |
- EXPECT_TRUE(codec_ix); |
- id = *codec_ix; |
- const auto codec_inst = RentACodec::CodecInstById(codec_id); |
- EXPECT_TRUE(codec_inst); |
- inst = *codec_inst; |
- } |
- int id; |
- CodecInst inst; |
-}; |
- |
-} // namespace |
- |
-class AcmReceiverTestOldApi : public AudioPacketizationCallback, |
- public ::testing::Test { |
- protected: |
- AcmReceiverTestOldApi() |
- : timestamp_(0), |
- packet_sent_(false), |
- last_packet_send_timestamp_(timestamp_), |
- last_frame_type_(kEmptyFrame) { |
- AudioCodingModule::Config config; |
- acm_.reset(new AudioCodingModuleImpl(config)); |
- receiver_.reset(new AcmReceiver(config)); |
- } |
- |
- ~AcmReceiverTestOldApi() {} |
- |
- void SetUp() override { |
- ASSERT_TRUE(receiver_.get() != NULL); |
- ASSERT_TRUE(acm_.get() != NULL); |
- codecs_ = RentACodec::Database(); |
- |
- acm_->InitializeReceiver(); |
- acm_->RegisterTransportCallback(this); |
- |
- rtp_header_.header.sequenceNumber = 0; |
- rtp_header_.header.timestamp = 0; |
- rtp_header_.header.markerBit = false; |
- rtp_header_.header.ssrc = 0x12345678; // Arbitrary. |
- rtp_header_.header.numCSRCs = 0; |
- rtp_header_.header.payloadType = 0; |
- rtp_header_.frameType = kAudioFrameSpeech; |
- rtp_header_.type.Audio.isCNG = false; |
- } |
- |
- void TearDown() override {} |
- |
- void InsertOnePacketOfSilence(int codec_id) { |
- CodecInst codec = |
- *RentACodec::CodecInstById(*RentACodec::CodecIdFromIndex(codec_id)); |
- if (timestamp_ == 0) { // This is the first time inserting audio. |
- ASSERT_EQ(0, acm_->RegisterSendCodec(codec)); |
- } else { |
- auto current_codec = acm_->SendCodec(); |
- ASSERT_TRUE(current_codec); |
- if (!CodecsEqual(codec, *current_codec)) |
- ASSERT_EQ(0, acm_->RegisterSendCodec(codec)); |
- } |
- AudioFrame frame; |
- // Frame setup according to the codec. |
- frame.sample_rate_hz_ = codec.plfreq; |
- frame.samples_per_channel_ = codec.plfreq / 100; // 10 ms. |
- frame.num_channels_ = codec.channels; |
- memset(frame.data_, 0, frame.samples_per_channel_ * frame.num_channels_ * |
- sizeof(int16_t)); |
- packet_sent_ = false; |
- last_packet_send_timestamp_ = timestamp_; |
- while (!packet_sent_) { |
- frame.timestamp_ = timestamp_; |
- timestamp_ += frame.samples_per_channel_; |
- ASSERT_GE(acm_->Add10MsData(frame), 0); |
- } |
- } |
- |
- template <size_t N> |
- void AddSetOfCodecs(const RentACodec::CodecId(&ids)[N]) { |
- for (auto id : ids) { |
- const auto i = RentACodec::CodecIndexFromId(id); |
- ASSERT_TRUE(i); |
- ASSERT_EQ( |
- 0, receiver_->AddCodec(*i, codecs_[*i].pltype, codecs_[*i].channels, |
- codecs_[*i].plfreq, nullptr)); |
- } |
- } |
- |
- int SendData(FrameType frame_type, |
- uint8_t payload_type, |
- uint32_t timestamp, |
- const uint8_t* payload_data, |
- size_t payload_len_bytes, |
- const RTPFragmentationHeader* fragmentation) override { |
- if (frame_type == kEmptyFrame) |
- return 0; |
- |
- rtp_header_.header.payloadType = payload_type; |
- rtp_header_.frameType = frame_type; |
- if (frame_type == kAudioFrameSpeech) |
- rtp_header_.type.Audio.isCNG = false; |
- else |
- rtp_header_.type.Audio.isCNG = true; |
- rtp_header_.header.timestamp = timestamp; |
- |
- int ret_val = receiver_->InsertPacket( |
- rtp_header_, |
- rtc::ArrayView<const uint8_t>(payload_data, payload_len_bytes)); |
- if (ret_val < 0) { |
- assert(false); |
- return -1; |
- } |
- rtp_header_.header.sequenceNumber++; |
- packet_sent_ = true; |
- last_frame_type_ = frame_type; |
- return 0; |
- } |
- |
- rtc::scoped_ptr<AcmReceiver> receiver_; |
- rtc::ArrayView<const CodecInst> codecs_; |
- rtc::scoped_ptr<AudioCodingModule> acm_; |
- WebRtcRTPHeader rtp_header_; |
- uint32_t timestamp_; |
- bool packet_sent_; // Set when SendData is called reset when inserting audio. |
- uint32_t last_packet_send_timestamp_; |
- FrameType last_frame_type_; |
-}; |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecGetCodec)) { |
- // Add codec. |
- for (size_t n = 0; n < codecs_.size(); ++n) { |
- if (n & 0x1) // Just add codecs with odd index. |
- EXPECT_EQ(0, |
- receiver_->AddCodec(n, codecs_[n].pltype, codecs_[n].channels, |
- codecs_[n].plfreq, NULL)); |
- } |
- // Get codec and compare. |
- for (size_t n = 0; n < codecs_.size(); ++n) { |
- CodecInst my_codec; |
- if (n & 0x1) { |
- // Codecs with odd index should match the reference. |
- EXPECT_EQ(0, receiver_->DecoderByPayloadType(codecs_[n].pltype, |
- &my_codec)); |
- EXPECT_TRUE(CodecsEqual(codecs_[n], my_codec)); |
- } else { |
- // Codecs with even index are not registered. |
- EXPECT_EQ(-1, receiver_->DecoderByPayloadType(codecs_[n].pltype, |
- &my_codec)); |
- } |
- } |
-} |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecChangePayloadType)) { |
- const CodecIdInst codec1(RentACodec::CodecId::kPCMA); |
- CodecInst codec2 = codec1.inst; |
- ++codec2.pltype; |
- CodecInst test_codec; |
- |
- // Register the same codec with different payloads. |
- EXPECT_EQ(0, receiver_->AddCodec(codec1.id, codec1.inst.pltype, |
- codec1.inst.channels, codec1.inst.plfreq, |
- nullptr)); |
- EXPECT_EQ(0, receiver_->AddCodec(codec1.id, codec2.pltype, codec2.channels, |
- codec2.plfreq, NULL)); |
- |
- // Both payload types should exist. |
- EXPECT_EQ(0, |
- receiver_->DecoderByPayloadType(codec1.inst.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(codec1.inst, test_codec)); |
- EXPECT_EQ(0, receiver_->DecoderByPayloadType(codec2.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(codec2, test_codec)); |
-} |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecChangeCodecId)) { |
- const CodecIdInst codec1(RentACodec::CodecId::kPCMU); |
- CodecIdInst codec2(RentACodec::CodecId::kPCMA); |
- codec2.inst.pltype = codec1.inst.pltype; |
- CodecInst test_codec; |
- |
- // Register the same payload type with different codec ID. |
- EXPECT_EQ(0, receiver_->AddCodec(codec1.id, codec1.inst.pltype, |
- codec1.inst.channels, codec1.inst.plfreq, |
- nullptr)); |
- EXPECT_EQ(0, receiver_->AddCodec(codec2.id, codec2.inst.pltype, |
- codec2.inst.channels, codec2.inst.plfreq, |
- nullptr)); |
- |
- // Make sure that the last codec is used. |
- EXPECT_EQ(0, |
- receiver_->DecoderByPayloadType(codec2.inst.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(codec2.inst, test_codec)); |
-} |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecRemoveCodec)) { |
- const CodecIdInst codec(RentACodec::CodecId::kPCMA); |
- const int payload_type = codec.inst.pltype; |
- EXPECT_EQ( |
- 0, receiver_->AddCodec(codec.id, codec.inst.pltype, codec.inst.channels, |
- codec.inst.plfreq, nullptr)); |
- |
- // Remove non-existing codec should not fail. ACM1 legacy. |
- EXPECT_EQ(0, receiver_->RemoveCodec(payload_type + 1)); |
- |
- // Remove an existing codec. |
- EXPECT_EQ(0, receiver_->RemoveCodec(payload_type)); |
- |
- // Ask for the removed codec, must fail. |
- CodecInst ci; |
- EXPECT_EQ(-1, receiver_->DecoderByPayloadType(payload_type, &ci)); |
-} |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(SampleRate)) { |
- const RentACodec::CodecId kCodecId[] = {RentACodec::CodecId::kISAC, |
- RentACodec::CodecId::kISACSWB}; |
- AddSetOfCodecs(kCodecId); |
- |
- AudioFrame frame; |
- const int kOutSampleRateHz = 8000; // Different than codec sample rate. |
- for (const auto codec_id : kCodecId) { |
- const CodecIdInst codec(codec_id); |
- const int num_10ms_frames = codec.inst.pacsize / (codec.inst.plfreq / 100); |
- InsertOnePacketOfSilence(codec.id); |
- for (int k = 0; k < num_10ms_frames; ++k) { |
- EXPECT_EQ(0, receiver_->GetAudio(kOutSampleRateHz, &frame)); |
- } |
- EXPECT_EQ(codec.inst.plfreq, receiver_->last_output_sample_rate_hz()); |
- } |
-} |
- |
-TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PostdecodingVad)) { |
- receiver_->EnableVad(); |
- EXPECT_TRUE(receiver_->vad_enabled()); |
- const CodecIdInst codec(RentACodec::CodecId::kPCM16Bwb); |
- ASSERT_EQ( |
- 0, receiver_->AddCodec(codec.id, codec.inst.pltype, codec.inst.channels, |
- codec.inst.plfreq, nullptr)); |
- const int kNumPackets = 5; |
- const int num_10ms_frames = codec.inst.pacsize / (codec.inst.plfreq / 100); |
- AudioFrame frame; |
- for (int n = 0; n < kNumPackets; ++n) { |
- InsertOnePacketOfSilence(codec.id); |
- for (int k = 0; k < num_10ms_frames; ++k) |
- ASSERT_EQ(0, receiver_->GetAudio(codec.inst.plfreq, &frame)); |
- } |
- EXPECT_EQ(AudioFrame::kVadPassive, frame.vad_activity_); |
- |
- receiver_->DisableVad(); |
- EXPECT_FALSE(receiver_->vad_enabled()); |
- |
- for (int n = 0; n < kNumPackets; ++n) { |
- InsertOnePacketOfSilence(codec.id); |
- for (int k = 0; k < num_10ms_frames; ++k) |
- ASSERT_EQ(0, receiver_->GetAudio(codec.inst.plfreq, &frame)); |
- } |
- EXPECT_EQ(AudioFrame::kVadUnknown, frame.vad_activity_); |
-} |
- |
-#ifdef WEBRTC_CODEC_ISAC |
-#define IF_ISAC_FLOAT(x) x |
-#else |
-#define IF_ISAC_FLOAT(x) DISABLED_##x |
-#endif |
- |
-TEST_F(AcmReceiverTestOldApi, |
- DISABLED_ON_ANDROID(IF_ISAC_FLOAT(LastAudioCodec))) { |
- const RentACodec::CodecId kCodecId[] = { |
- RentACodec::CodecId::kISAC, RentACodec::CodecId::kPCMA, |
- RentACodec::CodecId::kISACSWB, RentACodec::CodecId::kPCM16Bswb32kHz}; |
- AddSetOfCodecs(kCodecId); |
- |
- const RentACodec::CodecId kCngId[] = { |
- // Not including full-band. |
- RentACodec::CodecId::kCNNB, RentACodec::CodecId::kCNWB, |
- RentACodec::CodecId::kCNSWB}; |
- AddSetOfCodecs(kCngId); |
- |
- // Register CNG at sender side. |
- for (auto id : kCngId) |
- ASSERT_EQ(0, acm_->RegisterSendCodec(CodecIdInst(id).inst)); |
- |
- CodecInst codec; |
- // No audio payload is received. |
- EXPECT_EQ(-1, receiver_->LastAudioCodec(&codec)); |
- |
- // Start with sending DTX. |
- ASSERT_EQ(0, acm_->SetVAD(true, true, VADVeryAggr)); |
- packet_sent_ = false; |
- InsertOnePacketOfSilence(CodecIdInst(kCodecId[0]).id); // Enough to test |
- // with one codec. |
- ASSERT_TRUE(packet_sent_); |
- EXPECT_EQ(kAudioFrameCN, last_frame_type_); |
- |
- // Has received, only, DTX. Last Audio codec is undefined. |
- EXPECT_EQ(-1, receiver_->LastAudioCodec(&codec)); |
- EXPECT_FALSE(receiver_->last_packet_sample_rate_hz()); |
- |
- for (auto id : kCodecId) { |
- const CodecIdInst c(id); |
- |
- // Set DTX off to send audio payload. |
- acm_->SetVAD(false, false, VADAggr); |
- packet_sent_ = false; |
- InsertOnePacketOfSilence(c.id); |
- |
- // Sanity check if Actually an audio payload received, and it should be |
- // of type "speech." |
- ASSERT_TRUE(packet_sent_); |
- ASSERT_EQ(kAudioFrameSpeech, last_frame_type_); |
- EXPECT_EQ(rtc::Optional<int>(c.inst.plfreq), |
- receiver_->last_packet_sample_rate_hz()); |
- |
- // Set VAD on to send DTX. Then check if the "Last Audio codec" returns |
- // the expected codec. |
- acm_->SetVAD(true, true, VADAggr); |
- |
- // Do as many encoding until a DTX is sent. |
- while (last_frame_type_ != kAudioFrameCN) { |
- packet_sent_ = false; |
- InsertOnePacketOfSilence(c.id); |
- ASSERT_TRUE(packet_sent_); |
- } |
- EXPECT_EQ(rtc::Optional<int>(c.inst.plfreq), |
- receiver_->last_packet_sample_rate_hz()); |
- EXPECT_EQ(0, receiver_->LastAudioCodec(&codec)); |
- EXPECT_TRUE(CodecsEqual(c.inst, codec)); |
- } |
-} |
- |
-} // namespace acm2 |
- |
-} // namespace webrtc |