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