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
This commit is contained in:
henrik.lundin@webrtc.org 2014-09-17 15:09:08 +00:00
parent 4a5061fbff
commit 5422e724d3

View File

@ -46,7 +46,7 @@ class NetEqExternalDecoderTest : public ::testing::Test {
frame_size_samples_(frame_size_ms_ * samples_per_ms_), frame_size_samples_(frame_size_ms_ * samples_per_ms_),
output_size_samples_(frame_size_ms_ * samples_per_ms_), output_size_samples_(frame_size_ms_ * samples_per_ms_),
external_decoder_(new MockExternalPcm16B(kDecoderPCM16Bswb32kHz)), external_decoder_(new MockExternalPcm16B(kDecoderPCM16Bswb32kHz)),
rtp_generator_(samples_per_ms_), rtp_generator_(new test::RtpGenerator(samples_per_ms_)),
payload_size_bytes_(0), payload_size_bytes_(0),
last_send_time_(0), last_send_time_(0),
last_arrival_time_(0) { last_arrival_time_(0) {
@ -63,7 +63,6 @@ class NetEqExternalDecoderTest : public ::testing::Test {
delete neteq_; delete neteq_;
// We will now delete the decoder ourselves, so expecting Die to be called. // We will now delete the decoder ourselves, so expecting Die to be called.
EXPECT_CALL(*external_decoder_, Die()).Times(1); EXPECT_CALL(*external_decoder_, Die()).Times(1);
delete external_decoder_;
delete [] input_; delete [] input_;
delete [] encoded_; delete [] encoded_;
} }
@ -78,9 +77,8 @@ class NetEqExternalDecoderTest : public ::testing::Test {
// NetEq is not allowed to delete the external decoder (hence Times(0)). // NetEq is not allowed to delete the external decoder (hence Times(0)).
EXPECT_CALL(*external_decoder_, Die()).Times(0); EXPECT_CALL(*external_decoder_, Die()).Times(0);
ASSERT_EQ(NetEq::kOK, ASSERT_EQ(NetEq::kOK,
neteq_external_->RegisterExternalDecoder(external_decoder_, neteq_external_->RegisterExternalDecoder(
decoder, external_decoder_.get(), decoder, kPayloadType));
kPayloadType));
ASSERT_EQ(NetEq::kOK, ASSERT_EQ(NetEq::kOK,
neteq_->RegisterPayloadType(decoder, kPayloadType)); neteq_->RegisterPayloadType(decoder, kPayloadType));
} }
@ -96,13 +94,12 @@ class NetEqExternalDecoderTest : public ::testing::Test {
if (frame_size_samples_ * 2 != payload_size_bytes_) { if (frame_size_samples_ * 2 != payload_size_bytes_) {
return -1; return -1;
} }
int next_send_time = rtp_generator_.GetRtpHeader(kPayloadType, int next_send_time = rtp_generator_->GetRtpHeader(
frame_size_samples_, kPayloadType, frame_size_samples_, &rtp_header_);
&rtp_header_);
return next_send_time; 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) { for (size_t i = 0; i < num_samples; ++i) {
ASSERT_EQ(output_[i], output_external_[i]) << ASSERT_EQ(output_[i], output_external_[i]) <<
"Diff in sample " << i << "."; "Diff in sample " << i << ".";
@ -118,6 +115,49 @@ class NetEqExternalDecoderTest : public ::testing::Test {
virtual bool Lost() { return false; } 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) { void RunTest(int num_loops) {
// Get next input packets (mono and multi-channel). // Get next input packets (mono and multi-channel).
int next_send_time; int next_send_time;
@ -134,21 +174,8 @@ class NetEqExternalDecoderTest : public ::testing::Test {
int time_now = 0; int time_now = 0;
for (int k = 0; k < num_loops; ++k) { for (int k = 0; k < num_loops; ++k) {
while (time_now >= next_arrival_time) { while (time_now >= next_arrival_time) {
// Insert packet in regular instance. InsertPackets(next_arrival_time);
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));
// Get next input packet. // Get next input packet.
do { do {
next_send_time = GetNewPackets(); next_send_time = GetNewPackets();
@ -156,23 +183,9 @@ class NetEqExternalDecoderTest : public ::testing::Test {
next_arrival_time = GetArrivalTime(next_send_time); next_arrival_time = GetArrivalTime(next_send_time);
} while (Lost()); // If lost, immediately read the next packet. } while (Lost()); // If lost, immediately read the next packet.
} }
NetEqOutputType output_type;
// Get audio from regular instance. GetOutputAudio();
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);
std::ostringstream ss; std::ostringstream ss;
ss << "Lap number " << k << "."; ss << "Lap number " << k << ".";
SCOPED_TRACE(ss.str()); // Print out the parameter values on failure. SCOPED_TRACE(ss.str()); // Print out the parameter values on failure.
@ -190,8 +203,8 @@ class NetEqExternalDecoderTest : public ::testing::Test {
const int output_size_samples_; const int output_size_samples_;
NetEq* neteq_external_; NetEq* neteq_external_;
NetEq* neteq_; NetEq* neteq_;
MockExternalPcm16B* external_decoder_; scoped_ptr<MockExternalPcm16B> external_decoder_;
test::RtpGenerator rtp_generator_; scoped_ptr<test::RtpGenerator> rtp_generator_;
int16_t* input_; int16_t* input_;
uint8_t* encoded_; uint8_t* encoded_;
int16_t output_[kMaxBlockSize]; int16_t output_[kMaxBlockSize];