Modifying NetEqExternalDecoderTest
This change is in preparation for extending the test with another
fixture that inherits from NetEqExternalDecoderTest.
R=tina.legrand@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/24609004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@7213 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/audio_coding/neteq/neteq_external_decoder_unittest.cc b/webrtc/modules/audio_coding/neteq/neteq_external_decoder_unittest.cc
index 9497a85..7761525 100644
--- a/webrtc/modules/audio_coding/neteq/neteq_external_decoder_unittest.cc
+++ b/webrtc/modules/audio_coding/neteq/neteq_external_decoder_unittest.cc
@@ -46,7 +46,7 @@
frame_size_samples_(frame_size_ms_ * samples_per_ms_),
output_size_samples_(frame_size_ms_ * samples_per_ms_),
external_decoder_(new MockExternalPcm16B(kDecoderPCM16Bswb32kHz)),
- rtp_generator_(samples_per_ms_),
+ rtp_generator_(new test::RtpGenerator(samples_per_ms_)),
payload_size_bytes_(0),
last_send_time_(0),
last_arrival_time_(0) {
@@ -63,7 +63,6 @@
delete neteq_;
// We will now delete the decoder ourselves, so expecting Die to be called.
EXPECT_CALL(*external_decoder_, Die()).Times(1);
- delete external_decoder_;
delete [] input_;
delete [] encoded_;
}
@@ -78,9 +77,8 @@
// NetEq is not allowed to delete the external decoder (hence Times(0)).
EXPECT_CALL(*external_decoder_, Die()).Times(0);
ASSERT_EQ(NetEq::kOK,
- neteq_external_->RegisterExternalDecoder(external_decoder_,
- decoder,
- kPayloadType));
+ neteq_external_->RegisterExternalDecoder(
+ external_decoder_.get(), decoder, kPayloadType));
ASSERT_EQ(NetEq::kOK,
neteq_->RegisterPayloadType(decoder, kPayloadType));
}
@@ -96,13 +94,12 @@
if (frame_size_samples_ * 2 != payload_size_bytes_) {
return -1;
}
- int next_send_time = rtp_generator_.GetRtpHeader(kPayloadType,
- frame_size_samples_,
- &rtp_header_);
+ int next_send_time = rtp_generator_->GetRtpHeader(
+ kPayloadType, frame_size_samples_, &rtp_header_);
return next_send_time;
}
- void VerifyOutput(size_t num_samples) {
+ virtual void VerifyOutput(size_t num_samples) const {
for (size_t i = 0; i < num_samples; ++i) {
ASSERT_EQ(output_[i], output_external_[i]) <<
"Diff in sample " << i << ".";
@@ -118,6 +115,49 @@
virtual bool Lost() { return false; }
+ virtual void InsertPackets(int next_arrival_time) {
+ // Insert packet in regular instance.
+ ASSERT_EQ(
+ NetEq::kOK,
+ neteq_->InsertPacket(
+ rtp_header_, encoded_, payload_size_bytes_, next_arrival_time));
+ // Insert packet in external decoder instance.
+ EXPECT_CALL(*external_decoder_,
+ IncomingPacket(_,
+ payload_size_bytes_,
+ rtp_header_.header.sequenceNumber,
+ rtp_header_.header.timestamp,
+ next_arrival_time));
+ ASSERT_EQ(
+ NetEq::kOK,
+ neteq_external_->InsertPacket(
+ rtp_header_, encoded_, payload_size_bytes_, next_arrival_time));
+ }
+
+ virtual void GetOutputAudio() {
+ NetEqOutputType output_type;
+ // Get audio from regular instance.
+ int samples_per_channel;
+ int num_channels;
+ EXPECT_EQ(NetEq::kOK,
+ neteq_->GetAudio(kMaxBlockSize,
+ output_,
+ &samples_per_channel,
+ &num_channels,
+ &output_type));
+ EXPECT_EQ(1, num_channels);
+ EXPECT_EQ(output_size_samples_, samples_per_channel);
+ // Get audio from external decoder instance.
+ ASSERT_EQ(NetEq::kOK,
+ neteq_external_->GetAudio(kMaxBlockSize,
+ output_external_,
+ &samples_per_channel,
+ &num_channels,
+ &output_type));
+ EXPECT_EQ(1, num_channels);
+ EXPECT_EQ(output_size_samples_, samples_per_channel);
+ }
+
void RunTest(int num_loops) {
// Get next input packets (mono and multi-channel).
int next_send_time;
@@ -134,21 +174,8 @@
int time_now = 0;
for (int k = 0; k < num_loops; ++k) {
while (time_now >= next_arrival_time) {
- // Insert packet in regular instance.
- ASSERT_EQ(NetEq::kOK,
- neteq_->InsertPacket(rtp_header_, encoded_,
- payload_size_bytes_,
- next_arrival_time));
- // Insert packet in external decoder instance.
- EXPECT_CALL(*external_decoder_,
- IncomingPacket(_, payload_size_bytes_,
- rtp_header_.header.sequenceNumber,
- rtp_header_.header.timestamp,
- next_arrival_time));
- ASSERT_EQ(NetEq::kOK,
- neteq_external_->InsertPacket(rtp_header_, encoded_,
- payload_size_bytes_,
- next_arrival_time));
+ InsertPackets(next_arrival_time);
+
// Get next input packet.
do {
next_send_time = GetNewPackets();
@@ -156,23 +183,9 @@
next_arrival_time = GetArrivalTime(next_send_time);
} while (Lost()); // If lost, immediately read the next packet.
}
- NetEqOutputType output_type;
- // Get audio from regular instance.
- int samples_per_channel;
- int num_channels;
- EXPECT_EQ(NetEq::kOK,
- neteq_->GetAudio(kMaxBlockSize, output_,
- &samples_per_channel, &num_channels,
- &output_type));
- EXPECT_EQ(1, num_channels);
- EXPECT_EQ(output_size_samples_, samples_per_channel);
- // Get audio from external decoder instance.
- ASSERT_EQ(NetEq::kOK,
- neteq_external_->GetAudio(kMaxBlockSize, output_external_,
- &samples_per_channel, &num_channels,
- &output_type));
- EXPECT_EQ(1, num_channels);
- EXPECT_EQ(output_size_samples_, samples_per_channel);
+
+ GetOutputAudio();
+
std::ostringstream ss;
ss << "Lap number " << k << ".";
SCOPED_TRACE(ss.str()); // Print out the parameter values on failure.
@@ -190,8 +203,8 @@
const int output_size_samples_;
NetEq* neteq_external_;
NetEq* neteq_;
- MockExternalPcm16B* external_decoder_;
- test::RtpGenerator rtp_generator_;
+ scoped_ptr<MockExternalPcm16B> external_decoder_;
+ scoped_ptr<test::RtpGenerator> rtp_generator_;
int16_t* input_;
uint8_t* encoded_;
int16_t output_[kMaxBlockSize];