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 |
index 12ea300fe5760634b4698736abf2b15921f8a186..7330a9f43779772b7211e16d9364b4611a884269 100644 |
--- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc |
+++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc |
@@ -37,6 +37,19 @@ bool CodecsEqual(const CodecInst& codec_a, const CodecInst& codec_b) { |
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, |
@@ -57,9 +70,7 @@ class AcmReceiverTestOldApi : public AudioPacketizationCallback, |
void SetUp() override { |
ASSERT_TRUE(receiver_.get() != NULL); |
ASSERT_TRUE(acm_.get() != NULL); |
- for (int n = 0; n < ACMCodecDB::kNumCodecs; n++) { |
- ASSERT_EQ(0, ACMCodecDB::Codec(n, &codecs_[n])); |
- } |
+ codecs_ = RentACodec::Database(); |
acm_->InitializeReceiver(); |
acm_->RegisterTransportCallback(this); |
@@ -103,14 +114,14 @@ class AcmReceiverTestOldApi : public AudioPacketizationCallback, |
} |
} |
- // Last element of id should be negative. |
- void AddSetOfCodecs(const int* id) { |
- int n = 0; |
- while (id[n] >= 0) { |
- ASSERT_EQ(0, receiver_->AddCodec(id[n], codecs_[id[n]].pltype, |
- codecs_[id[n]].channels, |
- codecs_[id[n]].plfreq, NULL)); |
- ++n; |
+ 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)); |
} |
} |
@@ -144,7 +155,7 @@ class AcmReceiverTestOldApi : public AudioPacketizationCallback, |
} |
rtc::scoped_ptr<AcmReceiver> receiver_; |
- CodecInst codecs_[ACMCodecDB::kMaxNumCodecs]; |
+ rtc::ArrayView<const CodecInst> codecs_; |
rtc::scoped_ptr<AudioCodingModule> acm_; |
WebRtcRTPHeader rtp_header_; |
uint32_t timestamp_; |
@@ -155,14 +166,14 @@ class AcmReceiverTestOldApi : public AudioPacketizationCallback, |
TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecGetCodec)) { |
// Add codec. |
- for (int n = 0; n < ACMCodecDB::kNumCodecs; ++n) { |
+ 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 (int n = 0; n < ACMCodecDB::kNumCodecs; ++n) { |
+ for (size_t n = 0; n < codecs_.size(); ++n) { |
CodecInst my_codec; |
if (n & 0x1) { |
// Codecs with odd index should match the reference. |
@@ -178,58 +189,52 @@ TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecGetCodec)) { |
} |
TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecChangePayloadType)) { |
- const int codec_id = ACMCodecDB::kPCMA; |
- CodecInst ref_codec1; |
- EXPECT_EQ(0, ACMCodecDB::Codec(codec_id, &ref_codec1)); |
- CodecInst ref_codec2 = ref_codec1; |
- ++ref_codec2.pltype; |
+ 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(codec_id, ref_codec1.pltype, ref_codec1.channels, |
- ref_codec1.plfreq, NULL)); |
- EXPECT_EQ( |
- 0, receiver_->AddCodec(codec_id, ref_codec2.pltype, ref_codec2.channels, |
- ref_codec2.plfreq, NULL)); |
+ 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(ref_codec1.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(ref_codec1, test_codec)); |
- EXPECT_EQ(0, receiver_->DecoderByPayloadType(ref_codec2.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(ref_codec2, test_codec)); |
+ 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 int codec_id1 = ACMCodecDB::kPCMU; |
- CodecInst ref_codec1; |
- EXPECT_EQ(0, ACMCodecDB::Codec(codec_id1, &ref_codec1)); |
- const int codec_id2 = ACMCodecDB::kPCMA; |
- CodecInst ref_codec2; |
- EXPECT_EQ(0, ACMCodecDB::Codec(codec_id2, &ref_codec2)); |
- ref_codec2.pltype = ref_codec1.pltype; |
+ 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(codec_id1, ref_codec1.pltype, ref_codec1.channels, |
- ref_codec1.plfreq, NULL)); |
- EXPECT_EQ( |
- 0, receiver_->AddCodec(codec_id2, ref_codec2.pltype, ref_codec2.channels, |
- ref_codec2.plfreq, NULL)); |
+ 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(ref_codec2.pltype, &test_codec)); |
- EXPECT_EQ(true, CodecsEqual(ref_codec2, test_codec)); |
+ 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)) { |
- CodecInst codec; |
- const int codec_id = ACMCodecDB::kPCMA; |
- EXPECT_EQ(0, ACMCodecDB::Codec(codec_id, &codec)); |
- const int payload_type = codec.pltype; |
- EXPECT_EQ(0, receiver_->AddCodec(codec_id, codec.pltype, codec.channels, |
- codec.plfreq, NULL)); |
+ 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)); |
@@ -238,46 +243,43 @@ TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(AddCodecRemoveCodec)) { |
EXPECT_EQ(0, receiver_->RemoveCodec(payload_type)); |
// Ask for the removed codec, must fail. |
- EXPECT_EQ(-1, receiver_->DecoderByPayloadType(payload_type, &codec)); |
+ CodecInst ci; |
+ EXPECT_EQ(-1, receiver_->DecoderByPayloadType(payload_type, &ci)); |
} |
TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(SampleRate)) { |
- const int kCodecId[] = { |
- ACMCodecDB::kISAC, ACMCodecDB::kISACSWB, |
- -1 // Terminator. |
- }; |
+ const RentACodec::CodecId kCodecId[] = {RentACodec::CodecId::kISAC, |
+ RentACodec::CodecId::kISACSWB}; |
AddSetOfCodecs(kCodecId); |
AudioFrame frame; |
const int kOutSampleRateHz = 8000; // Different than codec sample rate. |
- int n = 0; |
- while (kCodecId[n] >= 0) { |
- const int num_10ms_frames = codecs_[kCodecId[n]].pacsize / |
- (codecs_[kCodecId[n]].plfreq / 100); |
- InsertOnePacketOfSilence(kCodecId[n]); |
+ 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(std::min(32000, codecs_[kCodecId[n]].plfreq), |
+ EXPECT_EQ(std::min(32000, codec.inst.plfreq), |
receiver_->current_sample_rate_hz()); |
- ++n; |
} |
} |
TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PostdecodingVad)) { |
receiver_->EnableVad(); |
EXPECT_TRUE(receiver_->vad_enabled()); |
- |
- const int id = ACMCodecDB::kPCM16Bwb; |
- ASSERT_EQ(0, receiver_->AddCodec(id, codecs_[id].pltype, codecs_[id].channels, |
- codecs_[id].plfreq, NULL)); |
+ 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 = codecs_[id].pacsize / (codecs_[id].plfreq / 100); |
+ const int num_10ms_frames = codec.inst.pacsize / (codec.inst.plfreq / 100); |
AudioFrame frame; |
for (int n = 0; n < kNumPackets; ++n) { |
- InsertOnePacketOfSilence(id); |
+ InsertOnePacketOfSilence(codec.id); |
for (int k = 0; k < num_10ms_frames; ++k) |
- ASSERT_EQ(0, receiver_->GetAudio(codecs_[id].plfreq, &frame)); |
+ ASSERT_EQ(0, receiver_->GetAudio(codec.inst.plfreq, &frame)); |
} |
EXPECT_EQ(AudioFrame::kVadPassive, frame.vad_activity_); |
@@ -285,9 +287,9 @@ TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PostdecodingVad)) { |
EXPECT_FALSE(receiver_->vad_enabled()); |
for (int n = 0; n < kNumPackets; ++n) { |
- InsertOnePacketOfSilence(id); |
+ InsertOnePacketOfSilence(codec.id); |
for (int k = 0; k < num_10ms_frames; ++k) |
- ASSERT_EQ(0, receiver_->GetAudio(codecs_[id].plfreq, &frame)); |
+ ASSERT_EQ(0, receiver_->GetAudio(codec.inst.plfreq, &frame)); |
} |
EXPECT_EQ(AudioFrame::kVadUnknown, frame.vad_activity_); |
} |
@@ -300,25 +302,20 @@ TEST_F(AcmReceiverTestOldApi, DISABLED_ON_ANDROID(PostdecodingVad)) { |
TEST_F(AcmReceiverTestOldApi, |
DISABLED_ON_ANDROID(IF_ISAC_FLOAT(LastAudioCodec))) { |
- const int kCodecId[] = { |
- ACMCodecDB::kISAC, ACMCodecDB::kPCMA, ACMCodecDB::kISACSWB, |
- ACMCodecDB::kPCM16Bswb32kHz, |
- -1 // Terminator. |
- }; |
+ const RentACodec::CodecId kCodecId[] = { |
+ RentACodec::CodecId::kISAC, RentACodec::CodecId::kPCMA, |
+ RentACodec::CodecId::kISACSWB, RentACodec::CodecId::kPCM16Bswb32kHz}; |
AddSetOfCodecs(kCodecId); |
- const int kCngId[] = { // Not including full-band. |
- ACMCodecDB::kCNNB, ACMCodecDB::kCNWB, ACMCodecDB::kCNSWB, |
- -1 // Terminator. |
- }; |
+ const RentACodec::CodecId kCngId[] = { |
+ // Not including full-band. |
+ RentACodec::CodecId::kCNNB, RentACodec::CodecId::kCNWB, |
+ RentACodec::CodecId::kCNSWB}; |
AddSetOfCodecs(kCngId); |
// Register CNG at sender side. |
- int n = 0; |
- while (kCngId[n] > 0) { |
- ASSERT_EQ(0, acm_->RegisterSendCodec(codecs_[kCngId[n]])); |
- ++n; |
- } |
+ for (auto id : kCngId) |
+ ASSERT_EQ(0, acm_->RegisterSendCodec(CodecIdInst(id).inst)); |
CodecInst codec; |
// No audio payload is received. |
@@ -327,7 +324,8 @@ TEST_F(AcmReceiverTestOldApi, |
// Start with sending DTX. |
ASSERT_EQ(0, acm_->SetVAD(true, true, VADVeryAggr)); |
packet_sent_ = false; |
- InsertOnePacketOfSilence(kCodecId[0]); // Enough to test with one codec. |
+ InsertOnePacketOfSilence(CodecIdInst(kCodecId[0]).id); // Enough to test |
+ // with one codec. |
ASSERT_TRUE(packet_sent_); |
EXPECT_EQ(kAudioFrameCN, last_frame_type_); |
@@ -335,18 +333,19 @@ TEST_F(AcmReceiverTestOldApi, |
EXPECT_EQ(-1, receiver_->LastAudioCodec(&codec)); |
EXPECT_EQ(-1, receiver_->last_audio_codec_id()); |
- n = 0; |
- while (kCodecId[n] >= 0) { // Loop over codecs. |
+ for (auto id : kCodecId) { |
+ const CodecIdInst c(id); |
+ |
// Set DTX off to send audio payload. |
acm_->SetVAD(false, false, VADAggr); |
packet_sent_ = false; |
- InsertOnePacketOfSilence(kCodecId[n]); |
+ 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(kCodecId[n], receiver_->last_audio_codec_id()); |
+ EXPECT_EQ(c.id, receiver_->last_audio_codec_id()); |
// Set VAD on to send DTX. Then check if the "Last Audio codec" returns |
// the expected codec. |
@@ -355,13 +354,12 @@ TEST_F(AcmReceiverTestOldApi, |
// Do as many encoding until a DTX is sent. |
while (last_frame_type_ != kAudioFrameCN) { |
packet_sent_ = false; |
- InsertOnePacketOfSilence(kCodecId[n]); |
+ InsertOnePacketOfSilence(c.id); |
ASSERT_TRUE(packet_sent_); |
} |
- EXPECT_EQ(kCodecId[n], receiver_->last_audio_codec_id()); |
+ EXPECT_EQ(c.id, receiver_->last_audio_codec_id()); |
EXPECT_EQ(0, receiver_->LastAudioCodec(&codec)); |
- EXPECT_TRUE(CodecsEqual(codecs_[kCodecId[n]], codec)); |
- ++n; |
+ EXPECT_TRUE(CodecsEqual(c.inst, codec)); |
} |
} |