OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/memory/ref_counted.h" | 6 #include "base/memory/ref_counted.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
9 #include "media/cast/audio_receiver/audio_receiver.h" | 9 #include "media/cast/audio_receiver/audio_receiver.h" |
10 #include "media/cast/cast_defines.h" | 10 #include "media/cast/cast_defines.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 public: | 25 public: |
26 TestAudioEncoderCallback() | 26 TestAudioEncoderCallback() |
27 : num_called_(0) {} | 27 : num_called_(0) {} |
28 | 28 |
29 void SetExpectedResult(uint8 expected_frame_id, | 29 void SetExpectedResult(uint8 expected_frame_id, |
30 const base::TimeTicks& expected_playout_time) { | 30 const base::TimeTicks& expected_playout_time) { |
31 expected_frame_id_ = expected_frame_id; | 31 expected_frame_id_ = expected_frame_id; |
32 expected_playout_time_ = expected_playout_time; | 32 expected_playout_time_ = expected_playout_time; |
33 } | 33 } |
34 | 34 |
35 void DeliverEncodedAudioFrame( | 35 void DeliverEncodedAudioFrame(scoped_ptr<EncodedAudioFrame> audio_frame, |
36 scoped_ptr<transport::EncodedAudioFrame> audio_frame, | 36 const base::TimeTicks& playout_time) { |
37 const base::TimeTicks& playout_time) { | |
38 EXPECT_EQ(expected_frame_id_, audio_frame->frame_id); | 37 EXPECT_EQ(expected_frame_id_, audio_frame->frame_id); |
39 EXPECT_EQ(transport::kPcm16, audio_frame->codec); | 38 EXPECT_EQ(kPcm16, audio_frame->codec); |
40 EXPECT_EQ(expected_playout_time_, playout_time); | 39 EXPECT_EQ(expected_playout_time_, playout_time); |
41 num_called_++; | 40 num_called_++; |
42 } | 41 } |
43 | 42 |
44 int number_times_called() const { return num_called_;} | 43 int number_times_called() const { return num_called_;} |
45 | 44 |
46 protected: | 45 protected: |
47 virtual ~TestAudioEncoderCallback() {} | 46 virtual ~TestAudioEncoderCallback() {} |
48 | 47 |
49 private: | 48 private: |
(...skipping 15 matching lines...) Expand all Loading... |
65 using AudioReceiver::IncomingParsedRtpPacket; | 64 using AudioReceiver::IncomingParsedRtpPacket; |
66 }; | 65 }; |
67 | 66 |
68 class AudioReceiverTest : public ::testing::Test { | 67 class AudioReceiverTest : public ::testing::Test { |
69 protected: | 68 protected: |
70 AudioReceiverTest() { | 69 AudioReceiverTest() { |
71 // Configure the audio receiver to use PCM16. | 70 // Configure the audio receiver to use PCM16. |
72 audio_config_.rtp_payload_type = 127; | 71 audio_config_.rtp_payload_type = 127; |
73 audio_config_.frequency = 16000; | 72 audio_config_.frequency = 16000; |
74 audio_config_.channels = 1; | 73 audio_config_.channels = 1; |
75 audio_config_.codec = transport::kPcm16; | 74 audio_config_.codec = kPcm16; |
76 audio_config_.use_external_decoder = false; | 75 audio_config_.use_external_decoder = false; |
77 audio_config_.feedback_ssrc = 1234; | 76 audio_config_.feedback_ssrc = 1234; |
78 testing_clock_.Advance( | 77 testing_clock_.Advance( |
79 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 78 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
80 task_runner_ = new test::FakeTaskRunner(&testing_clock_); | 79 task_runner_ = new test::FakeTaskRunner(&testing_clock_); |
81 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_, | 80 cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_, |
82 task_runner_, task_runner_, task_runner_, task_runner_, | 81 task_runner_, task_runner_, task_runner_, task_runner_, |
83 task_runner_, GetDefaultCastLoggingConfig()); | 82 GetDefaultCastLoggingConfig()); |
84 test_audio_encoder_callback_ = new TestAudioEncoderCallback(); | 83 test_audio_encoder_callback_ = new TestAudioEncoderCallback(); |
85 } | 84 } |
86 | 85 |
87 void Configure(bool use_external_decoder) { | 86 void Configure(bool use_external_decoder) { |
88 audio_config_.use_external_decoder = use_external_decoder; | 87 audio_config_.use_external_decoder = use_external_decoder; |
89 receiver_.reset(new PeerAudioReceiver(cast_environment_, audio_config_, | 88 receiver_.reset(new PeerAudioReceiver(cast_environment_, audio_config_, |
90 &mock_transport_)); | 89 &mock_transport_)); |
91 } | 90 } |
92 | 91 |
93 virtual ~AudioReceiverTest() {} | 92 virtual ~AudioReceiverTest() {} |
94 | 93 |
95 static void DummyDeletePacket(const uint8* packet) {}; | 94 static void DummyDeletePacket(const uint8* packet) {}; |
96 | 95 |
97 virtual void SetUp() { | 96 virtual void SetUp() { |
98 payload_.assign(kMaxIpPacketSize, 0); | 97 payload_.assign(kIpPacketSize, 0); |
99 rtp_header_.is_key_frame = true; | 98 rtp_header_.is_key_frame = true; |
100 rtp_header_.frame_id = 0; | 99 rtp_header_.frame_id = 0; |
101 rtp_header_.packet_id = 0; | 100 rtp_header_.packet_id = 0; |
102 rtp_header_.max_packet_id = 0; | 101 rtp_header_.max_packet_id = 0; |
103 rtp_header_.is_reference = false; | 102 rtp_header_.is_reference = false; |
104 rtp_header_.reference_frame_id = 0; | 103 rtp_header_.reference_frame_id = 0; |
105 rtp_header_.webrtc.header.timestamp = 0; | 104 rtp_header_.webrtc.header.timestamp = 0; |
106 } | 105 } |
107 | 106 |
108 AudioReceiverConfig audio_config_; | 107 AudioReceiverConfig audio_config_; |
109 std::vector<uint8> payload_; | 108 std::vector<uint8> payload_; |
110 RtpCastHeader rtp_header_; | 109 RtpCastHeader rtp_header_; |
111 base::SimpleTestTickClock testing_clock_; | 110 base::SimpleTestTickClock testing_clock_; |
112 transport::MockPacedPacketSender mock_transport_; | 111 transport::MockPacedPacketSender mock_transport_; |
113 scoped_refptr<test::FakeTaskRunner> task_runner_; | 112 scoped_refptr<test::FakeTaskRunner> task_runner_; |
114 scoped_ptr<PeerAudioReceiver> receiver_; | 113 scoped_ptr<PeerAudioReceiver> receiver_; |
115 scoped_refptr<CastEnvironment> cast_environment_; | 114 scoped_refptr<CastEnvironment> cast_environment_; |
116 scoped_refptr<TestAudioEncoderCallback> test_audio_encoder_callback_; | 115 scoped_refptr<TestAudioEncoderCallback> test_audio_encoder_callback_; |
117 }; | 116 }; |
118 | 117 |
119 TEST_F(AudioReceiverTest, GetOnePacketEncodedframe) { | 118 TEST_F(AudioReceiverTest, GetOnePacketEncodedframe) { |
120 Configure(true); | 119 Configure(true); |
121 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).Times(1); | 120 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).Times(1); |
122 | 121 |
123 receiver_->IncomingParsedRtpPacket(payload_.data(), | 122 receiver_->IncomingParsedRtpPacket(payload_.data(), |
124 payload_.size(), rtp_header_); | 123 payload_.size(), rtp_header_); |
125 transport::EncodedAudioFrame audio_frame; | 124 EncodedAudioFrame audio_frame; |
126 base::TimeTicks playout_time; | 125 base::TimeTicks playout_time; |
127 test_audio_encoder_callback_->SetExpectedResult(0, testing_clock_.NowTicks()); | 126 test_audio_encoder_callback_->SetExpectedResult(0, testing_clock_.NowTicks()); |
128 | 127 |
129 AudioFrameEncodedCallback frame_encoded_callback = | 128 AudioFrameEncodedCallback frame_encoded_callback = |
130 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, | 129 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, |
131 test_audio_encoder_callback_.get()); | 130 test_audio_encoder_callback_.get()); |
132 | 131 |
133 receiver_->GetEncodedAudioFrame(frame_encoded_callback); | 132 receiver_->GetEncodedAudioFrame(frame_encoded_callback); |
134 task_runner_->RunTasks(); | 133 task_runner_->RunTasks(); |
135 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); | 134 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); |
136 } | 135 } |
137 | 136 |
138 TEST_F(AudioReceiverTest, MultiplePendingGetCalls) { | 137 TEST_F(AudioReceiverTest, MultiplePendingGetCalls) { |
139 Configure(true); | 138 Configure(true); |
140 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).WillRepeatedly( | 139 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).WillRepeatedly( |
141 testing::Return(true)); | 140 testing::Return(true)); |
142 | 141 |
143 AudioFrameEncodedCallback frame_encoded_callback = | 142 AudioFrameEncodedCallback frame_encoded_callback = |
144 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, | 143 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, |
145 test_audio_encoder_callback_.get()); | 144 test_audio_encoder_callback_.get()); |
146 | 145 |
147 receiver_->GetEncodedAudioFrame(frame_encoded_callback); | 146 receiver_->GetEncodedAudioFrame(frame_encoded_callback); |
148 | 147 |
149 receiver_->IncomingParsedRtpPacket(payload_.data(), payload_.size(), | 148 receiver_->IncomingParsedRtpPacket(payload_.data(), payload_.size(), |
150 rtp_header_); | 149 rtp_header_); |
151 | 150 |
152 transport::EncodedAudioFrame audio_frame; | 151 EncodedAudioFrame audio_frame; |
153 base::TimeTicks playout_time; | 152 base::TimeTicks playout_time; |
154 test_audio_encoder_callback_->SetExpectedResult(0, testing_clock_.NowTicks()); | 153 test_audio_encoder_callback_->SetExpectedResult(0, testing_clock_.NowTicks()); |
155 | 154 |
156 task_runner_->RunTasks(); | 155 task_runner_->RunTasks(); |
157 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); | 156 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); |
158 | 157 |
159 TestRtcpPacketBuilder rtcp_packet; | 158 TestRtcpPacketBuilder rtcp_packet; |
160 | 159 |
161 uint32 ntp_high; | 160 uint32 ntp_high; |
162 uint32 ntp_low; | 161 uint32 ntp_low; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 task_runner_->RunTasks(); | 208 task_runner_->RunTasks(); |
210 EXPECT_EQ(3, test_audio_encoder_callback_->number_times_called()); | 209 EXPECT_EQ(3, test_audio_encoder_callback_->number_times_called()); |
211 } | 210 } |
212 | 211 |
213 // TODO(mikhal): Add encoded frames. | 212 // TODO(mikhal): Add encoded frames. |
214 TEST_F(AudioReceiverTest, GetRawFrame) { | 213 TEST_F(AudioReceiverTest, GetRawFrame) { |
215 } | 214 } |
216 | 215 |
217 } // namespace cast | 216 } // namespace cast |
218 } // namespace media | 217 } // namespace media |
OLD | NEW |