summaryrefslogtreecommitdiff
path: root/chromium/media/cast/audio_receiver/audio_decoder_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/audio_receiver/audio_decoder_unittest.cc')
-rw-r--r--chromium/media/cast/audio_receiver/audio_decoder_unittest.cc99
1 files changed, 59 insertions, 40 deletions
diff --git a/chromium/media/cast/audio_receiver/audio_decoder_unittest.cc b/chromium/media/cast/audio_receiver/audio_decoder_unittest.cc
index dbe3e324df0..04df4728bd9 100644
--- a/chromium/media/cast/audio_receiver/audio_decoder_unittest.cc
+++ b/chromium/media/cast/audio_receiver/audio_decoder_unittest.cc
@@ -2,38 +2,49 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/bind.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
+#include "base/test/simple_test_tick_clock.h"
#include "media/cast/audio_receiver/audio_decoder.h"
-#include "media/cast/cast_thread.h"
+#include "media/cast/cast_environment.h"
#include "media/cast/test/fake_task_runner.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace media {
namespace cast {
-static const int64 kStartMillisecond = 123456789;
+namespace {
+class TestRtpPayloadFeedback : public RtpPayloadFeedback {
+ public:
+ TestRtpPayloadFeedback() {}
+ virtual ~TestRtpPayloadFeedback() {}
+
+ virtual void CastFeedback(const RtcpCastMessage& cast_feedback) OVERRIDE {
+ EXPECT_EQ(1u, cast_feedback.ack_frame_id_);
+ EXPECT_EQ(0u, cast_feedback.missing_frames_and_packets_.size());
+ }
+};
+} // namespace.
class AudioDecoderTest : public ::testing::Test {
protected:
- AudioDecoderTest() {}
-
- ~AudioDecoderTest() {}
-
- virtual void SetUp() {
+ AudioDecoderTest() {
+ testing_clock_.Advance(base::TimeDelta::FromMilliseconds(1234));
task_runner_ = new test::FakeTaskRunner(&testing_clock_);
- cast_thread_ = new CastThread(task_runner_, task_runner_, task_runner_,
- task_runner_, task_runner_);
+ cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_,
+ task_runner_, task_runner_, task_runner_, task_runner_,
+ GetDefaultCastLoggingConfig());
}
+ virtual ~AudioDecoderTest() {}
+
void Configure(const AudioReceiverConfig& audio_config) {
- audio_decoder_ = new AudioDecoder(cast_thread_, audio_config);
+ audio_decoder_.reset(
+ new AudioDecoder(cast_environment_, audio_config, &cast_feedback_));
}
+ TestRtpPayloadFeedback cast_feedback_;
base::SimpleTestTickClock testing_clock_;
scoped_refptr<test::FakeTaskRunner> task_runner_;
- scoped_refptr<CastThread> cast_thread_;
- scoped_refptr<AudioDecoder> audio_decoder_;
+ scoped_refptr<CastEnvironment> cast_environment_;
+ scoped_ptr<AudioDecoder> audio_decoder_;
};
TEST_F(AudioDecoderTest, Pcm16MonoNoResampleOnePacket) {
@@ -56,23 +67,26 @@ TEST_F(AudioDecoderTest, Pcm16MonoNoResampleOnePacket) {
rtp_header.webrtc.type.Audio.isCNG = false;
std::vector<int16> payload(640, 0x1234);
-
- uint8* payload_data = reinterpret_cast<uint8*>(&payload[0]);
- int payload_size = payload.size() * sizeof(int16);
-
- audio_decoder_->IncomingParsedRtpPacket(payload_data, payload_size,
- rtp_header);
-
int number_of_10ms_blocks = 4;
int desired_frequency = 16000;
PcmAudioFrame audio_frame;
uint32 rtp_timestamp;
+ EXPECT_FALSE(audio_decoder_->GetRawAudioFrame(number_of_10ms_blocks,
+ desired_frequency,
+ &audio_frame,
+ &rtp_timestamp));
+
+ uint8* payload_data = reinterpret_cast<uint8*>(&payload[0]);
+ size_t payload_size = payload.size() * sizeof(int16);
+
+ audio_decoder_->IncomingParsedRtpPacket(payload_data,
+ payload_size, rtp_header);
+
EXPECT_TRUE(audio_decoder_->GetRawAudioFrame(number_of_10ms_blocks,
desired_frequency,
&audio_frame,
&rtp_timestamp));
-
EXPECT_EQ(1, audio_frame.channels);
EXPECT_EQ(16000, audio_frame.frequency);
EXPECT_EQ(640ul, audio_frame.samples.size());
@@ -80,7 +94,6 @@ TEST_F(AudioDecoderTest, Pcm16MonoNoResampleOnePacket) {
for (size_t i = 10; i < audio_frame.samples.size(); ++i) {
EXPECT_EQ(0x3412, audio_frame.samples[i]);
}
- task_runner_->RunTasks();
}
TEST_F(AudioDecoderTest, Pcm16StereoNoResampleTwoPackets) {
@@ -93,6 +106,7 @@ TEST_F(AudioDecoderTest, Pcm16StereoNoResampleTwoPackets) {
Configure(audio_config);
RtpCastHeader rtp_header;
+ rtp_header.frame_id = 0;
rtp_header.webrtc.header.payloadType = 127;
rtp_header.webrtc.header.sequenceNumber = 1234;
rtp_header.webrtc.header.timestamp = 0x87654321;
@@ -106,11 +120,10 @@ TEST_F(AudioDecoderTest, Pcm16StereoNoResampleTwoPackets) {
std::vector<int16> payload(640, 0x1234);
uint8* payload_data = reinterpret_cast<uint8*>(&payload[0]);
- int payload_size = payload.size() * sizeof(int16);
-
- audio_decoder_->IncomingParsedRtpPacket(payload_data, payload_size,
- rtp_header);
+ size_t payload_size = payload.size() * sizeof(int16);
+ audio_decoder_->IncomingParsedRtpPacket(payload_data,
+ payload_size, rtp_header);
int number_of_10ms_blocks = 2;
int desired_frequency = 16000;
@@ -121,29 +134,36 @@ TEST_F(AudioDecoderTest, Pcm16StereoNoResampleTwoPackets) {
desired_frequency,
&audio_frame,
&rtp_timestamp));
-
EXPECT_EQ(2, audio_frame.channels);
EXPECT_EQ(16000, audio_frame.frequency);
EXPECT_EQ(640ul, audio_frame.samples.size());
+ // First 10 samples per channel are 0 from NetEq.
for (size_t i = 10 * audio_config.channels; i < audio_frame.samples.size();
++i) {
EXPECT_EQ(0x3412, audio_frame.samples[i]);
}
+ rtp_header.frame_id++;
rtp_header.webrtc.header.sequenceNumber++;
rtp_header.webrtc.header.timestamp += (audio_config.frequency / 100) * 2 * 2;
- audio_decoder_->IncomingParsedRtpPacket(payload_data, payload_size,
- rtp_header);
+ audio_decoder_->IncomingParsedRtpPacket(payload_data,
+ payload_size, rtp_header);
+
+ EXPECT_TRUE(audio_decoder_->GetRawAudioFrame(number_of_10ms_blocks,
+ desired_frequency,
+ &audio_frame,
+ &rtp_timestamp));
EXPECT_EQ(2, audio_frame.channels);
EXPECT_EQ(16000, audio_frame.frequency);
EXPECT_EQ(640ul, audio_frame.samples.size());
- // First 10 samples per channel are 0 from NetEq.
- for (size_t i = 10 * audio_config.channels; i < audio_frame.samples.size();
- ++i) {
- EXPECT_EQ(0x3412, audio_frame.samples[i]);
+ for (size_t i = 0; i < audio_frame.samples.size(); ++i) {
+ EXPECT_NEAR(0x3412, audio_frame.samples[i], 1000);
}
- task_runner_->RunTasks();
+ // Test cast callback.
+ audio_decoder_->SendCastMessage();
+ testing_clock_.Advance(base::TimeDelta::FromMilliseconds(33));
+ audio_decoder_->SendCastMessage();
}
TEST_F(AudioDecoderTest, Pcm16Resample) {
@@ -169,10 +189,10 @@ TEST_F(AudioDecoderTest, Pcm16Resample) {
std::vector<int16> payload(640, 0x1234);
uint8* payload_data = reinterpret_cast<uint8*>(&payload[0]);
- int payload_size = payload.size() * sizeof(int16);
+ size_t payload_size = payload.size() * sizeof(int16);
- audio_decoder_->IncomingParsedRtpPacket(payload_data, payload_size,
- rtp_header);
+ audio_decoder_->IncomingParsedRtpPacket(payload_data,
+ payload_size, rtp_header);
int number_of_10ms_blocks = 2;
int desired_frequency = 48000;
@@ -194,7 +214,6 @@ TEST_F(AudioDecoderTest, Pcm16Resample) {
EXPECT_NEAR(0x3412, audio_frame.samples[i], 400);
if (0x3412 == audio_frame.samples[i]) count++;
}
- task_runner_->RunTasks();
}
} // namespace cast