Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: media/cast/audio_receiver/audio_receiver_unittest.cc

Issue 149703002: Cast: Refactor Audio Receiver to Clang format (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Responding to review Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/cast/audio_receiver/audio_receiver.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "media/cast/cast_environment.h" 11 #include "media/cast/cast_environment.h"
12 #include "media/cast/rtcp/test_rtcp_packet_builder.h" 12 #include "media/cast/rtcp/test_rtcp_packet_builder.h"
13 #include "media/cast/test/fake_task_runner.h" 13 #include "media/cast/test/fake_task_runner.h"
14 #include "media/cast/transport/pacing/mock_paced_packet_sender.h" 14 #include "media/cast/transport/pacing/mock_paced_packet_sender.h"
15 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
16 16
17 namespace media { 17 namespace media {
18 namespace cast { 18 namespace cast {
19 19
20 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); 20 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
21 21
22 namespace { 22 namespace {
23 class TestAudioEncoderCallback : 23 class TestAudioEncoderCallback
24 public base::RefCountedThreadSafe<TestAudioEncoderCallback> { 24 : public base::RefCountedThreadSafe<TestAudioEncoderCallback> {
25 public: 25 public:
26 TestAudioEncoderCallback() 26 TestAudioEncoderCallback() : num_called_(0) {}
27 : num_called_(0) {}
28 27
29 void SetExpectedResult(uint8 expected_frame_id, 28 void SetExpectedResult(uint8 expected_frame_id,
30 const base::TimeTicks& expected_playout_time) { 29 const base::TimeTicks& expected_playout_time) {
31 expected_frame_id_ = expected_frame_id; 30 expected_frame_id_ = expected_frame_id;
32 expected_playout_time_ = expected_playout_time; 31 expected_playout_time_ = expected_playout_time;
33 } 32 }
34 33
35 void DeliverEncodedAudioFrame( 34 void DeliverEncodedAudioFrame(
36 scoped_ptr<transport::EncodedAudioFrame> audio_frame, 35 scoped_ptr<transport::EncodedAudioFrame> audio_frame,
37 const base::TimeTicks& playout_time) { 36 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(transport::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:
50 friend class base::RefCountedThreadSafe<TestAudioEncoderCallback>; 49 friend class base::RefCountedThreadSafe<TestAudioEncoderCallback>;
51 50
52 int num_called_; 51 int num_called_;
53 uint8 expected_frame_id_; 52 uint8 expected_frame_id_;
54 base::TimeTicks expected_playout_time_; 53 base::TimeTicks expected_playout_time_;
54
55 DISALLOW_COPY_AND_ASSIGN(TestAudioEncoderCallback);
55 }; 56 };
56 } // namespace 57 } // namespace
57 58
58 class PeerAudioReceiver : public AudioReceiver { 59 class PeerAudioReceiver : public AudioReceiver {
59 public: 60 public:
60 PeerAudioReceiver(scoped_refptr<CastEnvironment> cast_environment, 61 PeerAudioReceiver(scoped_refptr<CastEnvironment> cast_environment,
61 const AudioReceiverConfig& audio_config, 62 const AudioReceiverConfig& audio_config,
62 transport::PacedPacketSender* const packet_sender) 63 transport::PacedPacketSender* const packet_sender)
63 : AudioReceiver(cast_environment, audio_config, packet_sender) {} 64 : AudioReceiver(cast_environment, audio_config, packet_sender) {}
64 65
65 using AudioReceiver::IncomingParsedRtpPacket; 66 using AudioReceiver::IncomingParsedRtpPacket;
66 }; 67 };
67 68
68 class AudioReceiverTest : public ::testing::Test { 69 class AudioReceiverTest : public ::testing::Test {
69 protected: 70 protected:
70 AudioReceiverTest() { 71 AudioReceiverTest() {
71 // Configure the audio receiver to use PCM16. 72 // Configure the audio receiver to use PCM16.
72 audio_config_.rtp_payload_type = 127; 73 audio_config_.rtp_payload_type = 127;
73 audio_config_.frequency = 16000; 74 audio_config_.frequency = 16000;
74 audio_config_.channels = 1; 75 audio_config_.channels = 1;
75 audio_config_.codec = transport::kPcm16; 76 audio_config_.codec = transport::kPcm16;
76 audio_config_.use_external_decoder = false; 77 audio_config_.use_external_decoder = false;
77 audio_config_.feedback_ssrc = 1234; 78 audio_config_.feedback_ssrc = 1234;
78 testing_clock_ = new base::SimpleTestTickClock(); 79 testing_clock_ = new base::SimpleTestTickClock();
79 testing_clock_->Advance( 80 testing_clock_->Advance(
80 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 81 base::TimeDelta::FromMilliseconds(kStartMillisecond));
81 task_runner_ = new test::FakeTaskRunner(testing_clock_); 82 task_runner_ = new test::FakeTaskRunner(testing_clock_);
82 cast_environment_ = new CastEnvironment( 83 cast_environment_ =
83 scoped_ptr<base::TickClock>(testing_clock_).Pass(), task_runner_, 84 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_).Pass(),
84 task_runner_, task_runner_, task_runner_, task_runner_, 85 task_runner_,
85 task_runner_, GetDefaultCastReceiverLoggingConfig()); 86 task_runner_,
87 task_runner_,
88 task_runner_,
89 task_runner_,
90 task_runner_,
91 GetDefaultCastReceiverLoggingConfig());
86 test_audio_encoder_callback_ = new TestAudioEncoderCallback(); 92 test_audio_encoder_callback_ = new TestAudioEncoderCallback();
87 } 93 }
88 94
89 void Configure(bool use_external_decoder) { 95 void Configure(bool use_external_decoder) {
90 audio_config_.use_external_decoder = use_external_decoder; 96 audio_config_.use_external_decoder = use_external_decoder;
91 receiver_.reset(new PeerAudioReceiver(cast_environment_, audio_config_, 97 receiver_.reset(new PeerAudioReceiver(
92 &mock_transport_)); 98 cast_environment_, audio_config_, &mock_transport_));
93 } 99 }
94 100
95 virtual ~AudioReceiverTest() {} 101 virtual ~AudioReceiverTest() {}
96 102
97 static void DummyDeletePacket(const uint8* packet) {}; 103 static void DummyDeletePacket(const uint8* packet) {};
98 104
99 virtual void SetUp() { 105 virtual void SetUp() {
100 payload_.assign(kMaxIpPacketSize, 0); 106 payload_.assign(kMaxIpPacketSize, 0);
101 rtp_header_.is_key_frame = true; 107 rtp_header_.is_key_frame = true;
102 rtp_header_.frame_id = 0; 108 rtp_header_.frame_id = 0;
103 rtp_header_.packet_id = 0; 109 rtp_header_.packet_id = 0;
104 rtp_header_.max_packet_id = 0; 110 rtp_header_.max_packet_id = 0;
105 rtp_header_.is_reference = false; 111 rtp_header_.is_reference = false;
106 rtp_header_.reference_frame_id = 0; 112 rtp_header_.reference_frame_id = 0;
107 rtp_header_.webrtc.header.timestamp = 0; 113 rtp_header_.webrtc.header.timestamp = 0;
108 } 114 }
109 115
110 AudioReceiverConfig audio_config_; 116 AudioReceiverConfig audio_config_;
111 std::vector<uint8> payload_; 117 std::vector<uint8> payload_;
112 RtpCastHeader rtp_header_; 118 RtpCastHeader rtp_header_;
113 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. 119 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
114 transport::MockPacedPacketSender mock_transport_; 120 transport::MockPacedPacketSender mock_transport_;
115 scoped_refptr<test::FakeTaskRunner> task_runner_; 121 scoped_refptr<test::FakeTaskRunner> task_runner_;
116 scoped_ptr<PeerAudioReceiver> receiver_; 122 scoped_ptr<PeerAudioReceiver> receiver_;
117 scoped_refptr<CastEnvironment> cast_environment_; 123 scoped_refptr<CastEnvironment> cast_environment_;
118 scoped_refptr<TestAudioEncoderCallback> test_audio_encoder_callback_; 124 scoped_refptr<TestAudioEncoderCallback> test_audio_encoder_callback_;
119 }; 125 };
120 126
121 TEST_F(AudioReceiverTest, GetOnePacketEncodedframe) { 127 TEST_F(AudioReceiverTest, GetOnePacketEncodedframe) {
122 Configure(true); 128 Configure(true);
123 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).Times(1); 129 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).Times(1);
124 130
125 receiver_->IncomingParsedRtpPacket(payload_.data(), 131 receiver_->IncomingParsedRtpPacket(
126 payload_.size(), rtp_header_); 132 payload_.data(), payload_.size(), rtp_header_);
127 transport::EncodedAudioFrame audio_frame; 133 transport::EncodedAudioFrame audio_frame;
128 base::TimeTicks playout_time; 134 base::TimeTicks playout_time;
129 test_audio_encoder_callback_->SetExpectedResult( 135 test_audio_encoder_callback_->SetExpectedResult(0,
130 0, testing_clock_->NowTicks()); 136 testing_clock_->NowTicks());
131 137
132 AudioFrameEncodedCallback frame_encoded_callback = 138 AudioFrameEncodedCallback frame_encoded_callback =
133 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, 139 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame,
134 test_audio_encoder_callback_.get()); 140 test_audio_encoder_callback_.get());
135 141
136 receiver_->GetEncodedAudioFrame(frame_encoded_callback); 142 receiver_->GetEncodedAudioFrame(frame_encoded_callback);
137 task_runner_->RunTasks(); 143 task_runner_->RunTasks();
138 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); 144 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called());
139 } 145 }
140 146
141 TEST_F(AudioReceiverTest, MultiplePendingGetCalls) { 147 TEST_F(AudioReceiverTest, MultiplePendingGetCalls) {
142 Configure(true); 148 Configure(true);
143 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_)).WillRepeatedly( 149 EXPECT_CALL(mock_transport_, SendRtcpPacket(testing::_))
144 testing::Return(true)); 150 .WillRepeatedly(testing::Return(true));
145 151
146 AudioFrameEncodedCallback frame_encoded_callback = 152 AudioFrameEncodedCallback frame_encoded_callback =
147 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame, 153 base::Bind(&TestAudioEncoderCallback::DeliverEncodedAudioFrame,
148 test_audio_encoder_callback_.get()); 154 test_audio_encoder_callback_.get());
149 155
150 receiver_->GetEncodedAudioFrame(frame_encoded_callback); 156 receiver_->GetEncodedAudioFrame(frame_encoded_callback);
151 157
152 receiver_->IncomingParsedRtpPacket(payload_.data(), payload_.size(), 158 receiver_->IncomingParsedRtpPacket(
153 rtp_header_); 159 payload_.data(), payload_.size(), rtp_header_);
154 160
155 transport::EncodedAudioFrame audio_frame; 161 transport::EncodedAudioFrame audio_frame;
156 base::TimeTicks playout_time; 162 base::TimeTicks playout_time;
157 test_audio_encoder_callback_->SetExpectedResult( 163 test_audio_encoder_callback_->SetExpectedResult(0,
158 0, testing_clock_->NowTicks()); 164 testing_clock_->NowTicks());
159 165
160 task_runner_->RunTasks(); 166 task_runner_->RunTasks();
161 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); 167 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called());
162 168
163 TestRtcpPacketBuilder rtcp_packet; 169 TestRtcpPacketBuilder rtcp_packet;
164 170
165 uint32 ntp_high; 171 uint32 ntp_high;
166 uint32 ntp_low; 172 uint32 ntp_low;
167 ConvertTimeTicksToNtp(testing_clock_->NowTicks(), &ntp_high, &ntp_low); 173 ConvertTimeTicksToNtp(testing_clock_->NowTicks(), &ntp_high, &ntp_low);
168 rtcp_packet.AddSrWithNtp(audio_config_.feedback_ssrc, ntp_high, ntp_low, 174 rtcp_packet.AddSrWithNtp(audio_config_.feedback_ssrc,
169 rtp_header_.webrtc.header.timestamp); 175 ntp_high,
176 ntp_low,
177 rtp_header_.webrtc.header.timestamp);
170 178
171 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); 179 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
172 180
173 receiver_->IncomingPacket(rtcp_packet.GetPacket().Pass()); 181 receiver_->IncomingPacket(rtcp_packet.GetPacket().Pass());
174 182
175 // Make sure that we are not continuous and that the RTP timestamp represent a 183 // Make sure that we are not continuous and that the RTP timestamp represent a
176 // time in the future. 184 // time in the future.
177 rtp_header_.is_key_frame = false; 185 rtp_header_.is_key_frame = false;
178 rtp_header_.frame_id = 2; 186 rtp_header_.frame_id = 2;
179 rtp_header_.is_reference = true; 187 rtp_header_.is_reference = true;
180 rtp_header_.reference_frame_id = 0; 188 rtp_header_.reference_frame_id = 0;
181 rtp_header_.webrtc.header.timestamp = 960; 189 rtp_header_.webrtc.header.timestamp = 960;
182 test_audio_encoder_callback_->SetExpectedResult(2, 190 test_audio_encoder_callback_->SetExpectedResult(
183 testing_clock_->NowTicks() + base::TimeDelta::FromMilliseconds(100)); 191 2, testing_clock_->NowTicks() + base::TimeDelta::FromMilliseconds(100));
184 192
185 receiver_->IncomingParsedRtpPacket(payload_.data(), payload_.size(), 193 receiver_->IncomingParsedRtpPacket(
186 rtp_header_); 194 payload_.data(), payload_.size(), rtp_header_);
187 receiver_->GetEncodedAudioFrame(frame_encoded_callback); 195 receiver_->GetEncodedAudioFrame(frame_encoded_callback);
188 task_runner_->RunTasks(); 196 task_runner_->RunTasks();
189 197
190 // Frame 2 should not come out at this point in time. 198 // Frame 2 should not come out at this point in time.
191 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called()); 199 EXPECT_EQ(1, test_audio_encoder_callback_->number_times_called());
192 200
193 // Through on one more pending callback. 201 // Through on one more pending callback.
194 receiver_->GetEncodedAudioFrame(frame_encoded_callback); 202 receiver_->GetEncodedAudioFrame(frame_encoded_callback);
195 203
196 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(100)); 204 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(100));
197 205
198 task_runner_->RunTasks(); 206 task_runner_->RunTasks();
199 EXPECT_EQ(2, test_audio_encoder_callback_->number_times_called()); 207 EXPECT_EQ(2, test_audio_encoder_callback_->number_times_called());
200 208
201 test_audio_encoder_callback_->SetExpectedResult( 209 test_audio_encoder_callback_->SetExpectedResult(3,
202 3, testing_clock_->NowTicks()); 210 testing_clock_->NowTicks());
203 211
204 // Through on one more pending audio frame. 212 // Through on one more pending audio frame.
205 rtp_header_.frame_id = 3; 213 rtp_header_.frame_id = 3;
206 rtp_header_.is_reference = false; 214 rtp_header_.is_reference = false;
207 rtp_header_.reference_frame_id = 0; 215 rtp_header_.reference_frame_id = 0;
208 rtp_header_.webrtc.header.timestamp = 1280; 216 rtp_header_.webrtc.header.timestamp = 1280;
209 receiver_->IncomingParsedRtpPacket(payload_.data(), payload_.size(), 217 receiver_->IncomingParsedRtpPacket(
210 rtp_header_); 218 payload_.data(), payload_.size(), rtp_header_);
211 219
212 receiver_->GetEncodedAudioFrame(frame_encoded_callback); 220 receiver_->GetEncodedAudioFrame(frame_encoded_callback);
213 task_runner_->RunTasks(); 221 task_runner_->RunTasks();
214 EXPECT_EQ(3, test_audio_encoder_callback_->number_times_called()); 222 EXPECT_EQ(3, test_audio_encoder_callback_->number_times_called());
215 } 223 }
216 224
217 // TODO(mikhal): Add encoded frames. 225 // TODO(mikhal): Add encoded frames.
218 TEST_F(AudioReceiverTest, GetRawFrame) { 226 TEST_F(AudioReceiverTest, GetRawFrame) {}
219 }
220 227
221 } // namespace cast 228 } // namespace cast
222 } // namespace media 229 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/audio_receiver/audio_receiver.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698