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

Side by Side Diff: content/renderer/media/webrtc_local_audio_track_unittest.cc

Issue 90743004: Add generic interfaces for the sinks of the media stream audio track (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed the nits. Created 7 years 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 | « content/renderer/media/webrtc_local_audio_track.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/synchronization/waitable_event.h" 5 #include "base/synchronization/waitable_event.h"
6 #include "base/test/test_timeouts.h" 6 #include "base/test/test_timeouts.h"
7 #include "content/renderer/media/rtc_media_constraints.h" 7 #include "content/renderer/media/rtc_media_constraints.h"
8 #include "content/renderer/media/webrtc_audio_capturer.h" 8 #include "content/renderer/media/webrtc_audio_capturer.h"
9 #include "content/renderer/media/webrtc_audio_device_impl.h"
9 #include "content/renderer/media/webrtc_local_audio_source_provider.h" 10 #include "content/renderer/media/webrtc_local_audio_source_provider.h"
10 #include "content/renderer/media/webrtc_local_audio_track.h" 11 #include "content/renderer/media/webrtc_local_audio_track.h"
11 #include "media/audio/audio_parameters.h" 12 #include "media/audio/audio_parameters.h"
12 #include "media/base/audio_bus.h" 13 #include "media/base/audio_bus.h"
13 #include "media/base/audio_capturer_source.h" 14 #include "media/base/audio_capturer_source.h"
14 #include "testing/gmock/include/gmock/gmock.h" 15 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 17 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
17 18
18 using ::testing::_; 19 using ::testing::_;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 } 112 }
112 protected: 113 protected:
113 virtual ~MockCapturerSource() {} 114 virtual ~MockCapturerSource() {}
114 115
115 private: 116 private:
116 scoped_ptr<FakeAudioThread> audio_thread_; 117 scoped_ptr<FakeAudioThread> audio_thread_;
117 WebRtcAudioCapturer* capturer_; 118 WebRtcAudioCapturer* capturer_;
118 media::AudioParameters params_; 119 media::AudioParameters params_;
119 }; 120 };
120 121
121 class MockWebRtcAudioCapturerSink : public WebRtcAudioCapturerSink { 122 // TODO(xians): Use MediaStreamAudioSink.
123 class MockMediaStreamAudioSink : public PeerConnectionAudioSink {
122 public: 124 public:
123 MockWebRtcAudioCapturerSink() {} 125 MockMediaStreamAudioSink() {}
124 ~MockWebRtcAudioCapturerSink() {} 126 ~MockMediaStreamAudioSink() {}
125 int CaptureData(const std::vector<int>& channels, 127 int OnData(const int16* audio_data,
126 const int16* audio_data, 128 int sample_rate,
127 int sample_rate, 129 int number_of_channels,
128 int number_of_channels, 130 int number_of_frames,
129 int number_of_frames, 131 const std::vector<int>& channels,
130 int audio_delay_milliseconds, 132 int audio_delay_milliseconds,
131 int current_volume, 133 int current_volume,
132 bool need_audio_processing, 134 bool need_audio_processing,
133 bool key_pressed) OVERRIDE { 135 bool key_pressed) OVERRIDE {
134 CaptureData(channels.size(), 136 CaptureData(channels.size(),
135 sample_rate, 137 sample_rate,
136 number_of_channels, 138 number_of_channels,
137 number_of_frames, 139 number_of_frames,
138 audio_delay_milliseconds, 140 audio_delay_milliseconds,
139 current_volume, 141 current_volume,
140 need_audio_processing, 142 need_audio_processing,
141 key_pressed); 143 key_pressed);
142 return 0; 144 return 0;
143 } 145 }
144 MOCK_METHOD8(CaptureData, 146 MOCK_METHOD8(CaptureData,
145 void(int number_of_network_channels, 147 void(int number_of_network_channels,
146 int sample_rate, 148 int sample_rate,
147 int number_of_channels, 149 int number_of_channels,
148 int number_of_frames, 150 int number_of_frames,
149 int audio_delay_milliseconds, 151 int audio_delay_milliseconds,
150 int current_volume, 152 int current_volume,
151 bool need_audio_processing, 153 bool need_audio_processing,
152 bool key_pressed)); 154 bool key_pressed));
153 MOCK_METHOD1(SetCaptureFormat, void(const media::AudioParameters& params)); 155 MOCK_METHOD1(OnSetFormat, void(const media::AudioParameters& params));
154 }; 156 };
155 157
156 } // namespace 158 } // namespace
157 159
158 class WebRtcLocalAudioTrackTest : public ::testing::Test { 160 class WebRtcLocalAudioTrackTest : public ::testing::Test {
159 protected: 161 protected:
160 virtual void SetUp() OVERRIDE { 162 virtual void SetUp() OVERRIDE {
161 params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, 163 params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
162 media::CHANNEL_LAYOUT_STEREO, 2, 0, 48000, 16, 480); 164 media::CHANNEL_LAYOUT_STEREO, 2, 0, 48000, 16, 480);
163 capturer_ = WebRtcAudioCapturer::CreateCapturer(); 165 capturer_ = WebRtcAudioCapturer::CreateCapturer();
(...skipping 25 matching lines...) Expand all
189 track->audio_source_provider())->SetSinkParamsForTesting(params_); 191 track->audio_source_provider())->SetSinkParamsForTesting(params_);
190 track->Start(); 192 track->Start();
191 EXPECT_TRUE(track->enabled()); 193 EXPECT_TRUE(track->enabled());
192 194
193 // Connect a number of network channels to the audio track. 195 // Connect a number of network channels to the audio track.
194 static const int kNumberOfNetworkChannels = 4; 196 static const int kNumberOfNetworkChannels = 4;
195 for (int i = 0; i < kNumberOfNetworkChannels; ++i) { 197 for (int i = 0; i < kNumberOfNetworkChannels; ++i) {
196 static_cast<webrtc::AudioTrackInterface*>(track.get())-> 198 static_cast<webrtc::AudioTrackInterface*>(track.get())->
197 GetRenderer()->AddChannel(i); 199 GetRenderer()->AddChannel(i);
198 } 200 }
199 scoped_ptr<MockWebRtcAudioCapturerSink> sink( 201 scoped_ptr<MockMediaStreamAudioSink> sink(new MockMediaStreamAudioSink());
200 new MockWebRtcAudioCapturerSink());
201 const media::AudioParameters params = capturer_->audio_parameters(); 202 const media::AudioParameters params = capturer_->audio_parameters();
202 base::WaitableEvent event(false, false); 203 base::WaitableEvent event(false, false);
203 EXPECT_CALL(*sink, SetCaptureFormat(_)).WillOnce(Return()); 204 EXPECT_CALL(*sink, OnSetFormat(_)).WillOnce(Return());
204 EXPECT_CALL(*sink, 205 EXPECT_CALL(*sink,
205 CaptureData(kNumberOfNetworkChannels, 206 CaptureData(kNumberOfNetworkChannels,
206 params.sample_rate(), 207 params.sample_rate(),
207 params.channels(), 208 params.channels(),
208 params.sample_rate() / 100, 209 params.sample_rate() / 100,
209 0, 210 0,
210 0, 211 0,
211 false, 212 false,
212 false)).Times(AtLeast(1)) 213 false)).Times(AtLeast(1))
213 .WillRepeatedly(SignalEvent(&event)); 214 .WillRepeatedly(SignalEvent(&event));
(...skipping 19 matching lines...) Expand all
233 scoped_refptr<WebRtcLocalAudioTrack> track = 234 scoped_refptr<WebRtcLocalAudioTrack> track =
234 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL, 235 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL,
235 &constraints); 236 &constraints);
236 static_cast<WebRtcLocalAudioSourceProvider*>( 237 static_cast<WebRtcLocalAudioSourceProvider*>(
237 track->audio_source_provider())->SetSinkParamsForTesting(params_); 238 track->audio_source_provider())->SetSinkParamsForTesting(params_);
238 track->Start(); 239 track->Start();
239 static_cast<webrtc::AudioTrackInterface*>(track.get())-> 240 static_cast<webrtc::AudioTrackInterface*>(track.get())->
240 GetRenderer()->AddChannel(0); 241 GetRenderer()->AddChannel(0);
241 EXPECT_TRUE(track->enabled()); 242 EXPECT_TRUE(track->enabled());
242 EXPECT_TRUE(track->set_enabled(false)); 243 EXPECT_TRUE(track->set_enabled(false));
243 scoped_ptr<MockWebRtcAudioCapturerSink> sink( 244 scoped_ptr<MockMediaStreamAudioSink> sink(new MockMediaStreamAudioSink());
244 new MockWebRtcAudioCapturerSink());
245 const media::AudioParameters params = capturer_->audio_parameters(); 245 const media::AudioParameters params = capturer_->audio_parameters();
246 base::WaitableEvent event(false, false); 246 base::WaitableEvent event(false, false);
247 EXPECT_CALL(*sink, SetCaptureFormat(_)).Times(1); 247 EXPECT_CALL(*sink, OnSetFormat(_)).Times(1);
248 EXPECT_CALL(*sink, 248 EXPECT_CALL(*sink,
249 CaptureData(1, 249 CaptureData(1,
250 params.sample_rate(), 250 params.sample_rate(),
251 params.channels(), 251 params.channels(),
252 params.sample_rate() / 100, 252 params.sample_rate() / 100,
253 0, 253 0,
254 0, 254 0,
255 false, 255 false,
256 false)).Times(0); 256 false)).Times(0);
257 track->AddSink(sink.get()); 257 track->AddSink(sink.get());
(...skipping 28 matching lines...) Expand all
286 RTCMediaConstraints constraints; 286 RTCMediaConstraints constraints;
287 scoped_refptr<WebRtcLocalAudioTrack> track_1 = 287 scoped_refptr<WebRtcLocalAudioTrack> track_1 =
288 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL, 288 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL,
289 &constraints); 289 &constraints);
290 static_cast<WebRtcLocalAudioSourceProvider*>( 290 static_cast<WebRtcLocalAudioSourceProvider*>(
291 track_1->audio_source_provider())->SetSinkParamsForTesting(params_); 291 track_1->audio_source_provider())->SetSinkParamsForTesting(params_);
292 track_1->Start(); 292 track_1->Start();
293 static_cast<webrtc::AudioTrackInterface*>(track_1.get())-> 293 static_cast<webrtc::AudioTrackInterface*>(track_1.get())->
294 GetRenderer()->AddChannel(0); 294 GetRenderer()->AddChannel(0);
295 EXPECT_TRUE(track_1->enabled()); 295 EXPECT_TRUE(track_1->enabled());
296 scoped_ptr<MockWebRtcAudioCapturerSink> sink_1( 296 scoped_ptr<MockMediaStreamAudioSink> sink_1(new MockMediaStreamAudioSink());
297 new MockWebRtcAudioCapturerSink());
298 const media::AudioParameters params = capturer_->audio_parameters(); 297 const media::AudioParameters params = capturer_->audio_parameters();
299 base::WaitableEvent event_1(false, false); 298 base::WaitableEvent event_1(false, false);
300 EXPECT_CALL(*sink_1, SetCaptureFormat(_)).WillOnce(Return()); 299 EXPECT_CALL(*sink_1, OnSetFormat(_)).WillOnce(Return());
301 EXPECT_CALL(*sink_1, 300 EXPECT_CALL(*sink_1,
302 CaptureData(1, 301 CaptureData(1,
303 params.sample_rate(), 302 params.sample_rate(),
304 params.channels(), 303 params.channels(),
305 params.sample_rate() / 100, 304 params.sample_rate() / 100,
306 0, 305 0,
307 0, 306 0,
308 false, 307 false,
309 false)).Times(AtLeast(1)) 308 false)).Times(AtLeast(1))
310 .WillRepeatedly(SignalEvent(&event_1)); 309 .WillRepeatedly(SignalEvent(&event_1));
311 track_1->AddSink(sink_1.get()); 310 track_1->AddSink(sink_1.get());
312 EXPECT_TRUE(event_1.TimedWait(TestTimeouts::tiny_timeout())); 311 EXPECT_TRUE(event_1.TimedWait(TestTimeouts::tiny_timeout()));
313 312
314 scoped_refptr<WebRtcLocalAudioTrack> track_2 = 313 scoped_refptr<WebRtcLocalAudioTrack> track_2 =
315 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL, 314 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL,
316 &constraints); 315 &constraints);
317 static_cast<WebRtcLocalAudioSourceProvider*>( 316 static_cast<WebRtcLocalAudioSourceProvider*>(
318 track_2->audio_source_provider())->SetSinkParamsForTesting(params_); 317 track_2->audio_source_provider())->SetSinkParamsForTesting(params_);
319 track_2->Start(); 318 track_2->Start();
320 static_cast<webrtc::AudioTrackInterface*>(track_2.get())-> 319 static_cast<webrtc::AudioTrackInterface*>(track_2.get())->
321 GetRenderer()->AddChannel(1); 320 GetRenderer()->AddChannel(1);
322 EXPECT_TRUE(track_2->enabled()); 321 EXPECT_TRUE(track_2->enabled());
323 322
324 // Verify both |sink_1| and |sink_2| get data. 323 // Verify both |sink_1| and |sink_2| get data.
325 event_1.Reset(); 324 event_1.Reset();
326 base::WaitableEvent event_2(false, false); 325 base::WaitableEvent event_2(false, false);
327 326
328 scoped_ptr<MockWebRtcAudioCapturerSink> sink_2( 327 scoped_ptr<MockMediaStreamAudioSink> sink_2(new MockMediaStreamAudioSink());
329 new MockWebRtcAudioCapturerSink()); 328 EXPECT_CALL(*sink_2, OnSetFormat(_)).WillOnce(Return());
330 EXPECT_CALL(*sink_2, SetCaptureFormat(_)).WillOnce(Return());
331 EXPECT_CALL(*sink_1, 329 EXPECT_CALL(*sink_1,
332 CaptureData(1, 330 CaptureData(1,
333 params.sample_rate(), 331 params.sample_rate(),
334 params.channels(), 332 params.channels(),
335 params.sample_rate() / 100, 333 params.sample_rate() / 100,
336 0, 334 0,
337 0, 335 0,
338 false, 336 false,
339 false)).Times(AtLeast(1)) 337 false)).Times(AtLeast(1))
340 .WillRepeatedly(SignalEvent(&event_1)); 338 .WillRepeatedly(SignalEvent(&event_1));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL, 395 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL,
398 &constraints); 396 &constraints);
399 static_cast<webrtc::AudioTrackInterface*>(track_1.get())-> 397 static_cast<webrtc::AudioTrackInterface*>(track_1.get())->
400 GetRenderer()->AddChannel(0); 398 GetRenderer()->AddChannel(0);
401 static_cast<WebRtcLocalAudioSourceProvider*>( 399 static_cast<WebRtcLocalAudioSourceProvider*>(
402 track_1->audio_source_provider())->SetSinkParamsForTesting(params_); 400 track_1->audio_source_provider())->SetSinkParamsForTesting(params_);
403 track_1->Start(); 401 track_1->Start();
404 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout())); 402 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
405 403
406 // Verify the data flow by connecting the sink to |track_1|. 404 // Verify the data flow by connecting the sink to |track_1|.
407 scoped_ptr<MockWebRtcAudioCapturerSink> sink( 405 scoped_ptr<MockMediaStreamAudioSink> sink(new MockMediaStreamAudioSink());
408 new MockWebRtcAudioCapturerSink());
409 event.Reset(); 406 event.Reset();
410 EXPECT_CALL(*sink, SetCaptureFormat(_)).WillOnce(SignalEvent(&event)); 407 EXPECT_CALL(*sink, OnSetFormat(_)).WillOnce(SignalEvent(&event));
411 EXPECT_CALL(*sink, CaptureData(_, _, _, _, 0, 0, false, false)) 408 EXPECT_CALL(*sink, CaptureData(_, _, _, _, 0, 0, false, false))
412 .Times(AnyNumber()).WillRepeatedly(Return()); 409 .Times(AnyNumber()).WillRepeatedly(Return());
413 track_1->AddSink(sink.get()); 410 track_1->AddSink(sink.get());
414 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout())); 411 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
415 412
416 // Start the second audio track will not start the |capturer_source_| 413 // Start the second audio track will not start the |capturer_source_|
417 // since it has been started. 414 // since it has been started.
418 EXPECT_CALL(*capturer_source_.get(), OnStart()).Times(0); 415 EXPECT_CALL(*capturer_source_.get(), OnStart()).Times(0);
419 scoped_refptr<WebRtcLocalAudioTrack> track_2 = 416 scoped_refptr<WebRtcLocalAudioTrack> track_2 =
420 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL, 417 WebRtcLocalAudioTrack::Create(std::string(), capturer_, NULL, NULL,
421 &constraints); 418 &constraints);
422 static_cast<WebRtcLocalAudioSourceProvider*>( 419 static_cast<WebRtcLocalAudioSourceProvider*>(
423 track_2->audio_source_provider())->SetSinkParamsForTesting(params_); 420 track_2->audio_source_provider())->SetSinkParamsForTesting(params_);
424 track_2->Start(); 421 track_2->Start();
425 static_cast<webrtc::AudioTrackInterface*>(track_2.get())-> 422 static_cast<webrtc::AudioTrackInterface*>(track_2.get())->
426 GetRenderer()->AddChannel(1); 423 GetRenderer()->AddChannel(1);
427 424
428 // Stop the capturer will clear up the track lists in the capturer. 425 // Stop the capturer will clear up the track lists in the capturer.
429 EXPECT_CALL(*capturer_source_.get(), OnStop()); 426 EXPECT_CALL(*capturer_source_.get(), OnStop());
430 capturer_->Stop(); 427 capturer_->Stop();
431 428
432 // Adding a new track to the capturer. 429 // Adding a new track to the capturer.
433 track_2->AddSink(sink.get()); 430 track_2->AddSink(sink.get());
434 EXPECT_CALL(*sink, SetCaptureFormat(_)).Times(0); 431 EXPECT_CALL(*sink, OnSetFormat(_)).Times(0);
435 432
436 // Stop the capturer again will not trigger stopping the source of the 433 // Stop the capturer again will not trigger stopping the source of the
437 // capturer again.. 434 // capturer again..
438 event.Reset(); 435 event.Reset();
439 EXPECT_CALL(*capturer_source_.get(), OnStop()).Times(0); 436 EXPECT_CALL(*capturer_source_.get(), OnStop()).Times(0);
440 capturer_->Stop(); 437 capturer_->Stop();
441 } 438 }
442 439
443 // Set new source to the existing capturer. 440 // Set new source to the existing capturer.
444 TEST_F(WebRtcLocalAudioTrackTest, SetNewSourceForCapturerAfterStartTrack) { 441 TEST_F(WebRtcLocalAudioTrackTest, SetNewSourceForCapturerAfterStartTrack) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 track_1->audio_source_provider())->SetSinkParamsForTesting(params_); 480 track_1->audio_source_provider())->SetSinkParamsForTesting(params_);
484 track_1->Start(); 481 track_1->Start();
485 482
486 // Connect a number of network channels to the |track_1|. 483 // Connect a number of network channels to the |track_1|.
487 static const int kNumberOfNetworkChannelsForTrack1 = 2; 484 static const int kNumberOfNetworkChannelsForTrack1 = 2;
488 for (int i = 0; i < kNumberOfNetworkChannelsForTrack1; ++i) { 485 for (int i = 0; i < kNumberOfNetworkChannelsForTrack1; ++i) {
489 static_cast<webrtc::AudioTrackInterface*>(track_1.get())-> 486 static_cast<webrtc::AudioTrackInterface*>(track_1.get())->
490 GetRenderer()->AddChannel(i); 487 GetRenderer()->AddChannel(i);
491 } 488 }
492 // Verify the data flow by connecting the |sink_1| to |track_1|. 489 // Verify the data flow by connecting the |sink_1| to |track_1|.
493 scoped_ptr<MockWebRtcAudioCapturerSink> sink_1( 490 scoped_ptr<MockMediaStreamAudioSink> sink_1(new MockMediaStreamAudioSink());
494 new MockWebRtcAudioCapturerSink());
495 EXPECT_CALL( 491 EXPECT_CALL(
496 *sink_1.get(), 492 *sink_1.get(),
497 CaptureData( 493 CaptureData(
498 kNumberOfNetworkChannelsForTrack1, 48000, 2, _, 0, 0, false, false)) 494 kNumberOfNetworkChannelsForTrack1, 48000, 2, _, 0, 0, false, false))
499 .Times(AnyNumber()).WillRepeatedly(Return()); 495 .Times(AnyNumber()).WillRepeatedly(Return());
500 EXPECT_CALL(*sink_1.get(), SetCaptureFormat(_)).Times(AnyNumber()); 496 EXPECT_CALL(*sink_1.get(), OnSetFormat(_)).Times(AnyNumber());
501 track_1->AddSink(sink_1.get()); 497 track_1->AddSink(sink_1.get());
502 498
503 // Create a new capturer with new source with different audio format. 499 // Create a new capturer with new source with different audio format.
504 scoped_refptr<WebRtcAudioCapturer> new_capturer( 500 scoped_refptr<WebRtcAudioCapturer> new_capturer(
505 WebRtcAudioCapturer::CreateCapturer()); 501 WebRtcAudioCapturer::CreateCapturer());
506 scoped_refptr<MockCapturerSource> new_source( 502 scoped_refptr<MockCapturerSource> new_source(
507 new MockCapturerSource(new_capturer.get())); 503 new MockCapturerSource(new_capturer.get()));
508 EXPECT_CALL(*new_source.get(), OnInitialize(_, new_capturer.get(), 0)); 504 EXPECT_CALL(*new_source.get(), OnInitialize(_, new_capturer.get(), 0));
509 new_capturer->SetCapturerSource(new_source, 505 new_capturer->SetCapturerSource(new_source,
510 media::CHANNEL_LAYOUT_MONO, 506 media::CHANNEL_LAYOUT_MONO,
511 44100); 507 44100);
512 508
513 // Setup the second audio track, connect it to the new capturer and start it. 509 // Setup the second audio track, connect it to the new capturer and start it.
514 EXPECT_CALL(*new_source.get(), SetAutomaticGainControl(true)); 510 EXPECT_CALL(*new_source.get(), SetAutomaticGainControl(true));
515 EXPECT_CALL(*new_source.get(), OnStart()); 511 EXPECT_CALL(*new_source.get(), OnStart());
516 scoped_refptr<WebRtcLocalAudioTrack> track_2 = 512 scoped_refptr<WebRtcLocalAudioTrack> track_2 =
517 WebRtcLocalAudioTrack::Create(std::string(), new_capturer, NULL, NULL, 513 WebRtcLocalAudioTrack::Create(std::string(), new_capturer, NULL, NULL,
518 &constraints); 514 &constraints);
519 static_cast<WebRtcLocalAudioSourceProvider*>( 515 static_cast<WebRtcLocalAudioSourceProvider*>(
520 track_2->audio_source_provider())->SetSinkParamsForTesting(params_); 516 track_2->audio_source_provider())->SetSinkParamsForTesting(params_);
521 track_2->Start(); 517 track_2->Start();
522 518
523 // Connect a number of network channels to the |track_2|. 519 // Connect a number of network channels to the |track_2|.
524 static const int kNumberOfNetworkChannelsForTrack2 = 3; 520 static const int kNumberOfNetworkChannelsForTrack2 = 3;
525 for (int i = 0; i < kNumberOfNetworkChannelsForTrack2; ++i) { 521 for (int i = 0; i < kNumberOfNetworkChannelsForTrack2; ++i) {
526 static_cast<webrtc::AudioTrackInterface*>(track_2.get())-> 522 static_cast<webrtc::AudioTrackInterface*>(track_2.get())->
527 GetRenderer()->AddChannel(i); 523 GetRenderer()->AddChannel(i);
528 } 524 }
529 // Verify the data flow by connecting the |sink_2| to |track_2|. 525 // Verify the data flow by connecting the |sink_2| to |track_2|.
530 scoped_ptr<MockWebRtcAudioCapturerSink> sink_2( 526 scoped_ptr<MockMediaStreamAudioSink> sink_2(new MockMediaStreamAudioSink());
531 new MockWebRtcAudioCapturerSink());
532 base::WaitableEvent event(false, false); 527 base::WaitableEvent event(false, false);
533 EXPECT_CALL( 528 EXPECT_CALL(
534 *sink_2, 529 *sink_2,
535 CaptureData( 530 CaptureData(
536 kNumberOfNetworkChannelsForTrack2, 44100, 1, _, 0, 0, false, false)) 531 kNumberOfNetworkChannelsForTrack2, 44100, 1, _, 0, 0, false, false))
537 .Times(AnyNumber()).WillRepeatedly(Return()); 532 .Times(AnyNumber()).WillRepeatedly(Return());
538 EXPECT_CALL(*sink_2, SetCaptureFormat(_)).WillOnce(SignalEvent(&event)); 533 EXPECT_CALL(*sink_2, OnSetFormat(_)).WillOnce(SignalEvent(&event));
539 track_2->AddSink(sink_2.get()); 534 track_2->AddSink(sink_2.get());
540 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout())); 535 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
541 536
542 // Stopping the new source will stop the second track. 537 // Stopping the new source will stop the second track.
543 event.Reset(); 538 event.Reset();
544 EXPECT_CALL(*new_source.get(), OnStop()) 539 EXPECT_CALL(*new_source.get(), OnStop())
545 .Times(1).WillOnce(SignalEvent(&event)); 540 .Times(1).WillOnce(SignalEvent(&event));
546 new_capturer->Stop(); 541 new_capturer->Stop();
547 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout())); 542 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
548 543
(...skipping 27 matching lines...) Expand all
576 EXPECT_CALL(*source.get(), OnStart()); 571 EXPECT_CALL(*source.get(), OnStart());
577 RTCMediaConstraints constraints; 572 RTCMediaConstraints constraints;
578 scoped_refptr<WebRtcLocalAudioTrack> track = 573 scoped_refptr<WebRtcLocalAudioTrack> track =
579 WebRtcLocalAudioTrack::Create(std::string(), capturer, NULL, NULL, 574 WebRtcLocalAudioTrack::Create(std::string(), capturer, NULL, NULL,
580 &constraints); 575 &constraints);
581 static_cast<WebRtcLocalAudioSourceProvider*>( 576 static_cast<WebRtcLocalAudioSourceProvider*>(
582 track->audio_source_provider())->SetSinkParamsForTesting(params); 577 track->audio_source_provider())->SetSinkParamsForTesting(params);
583 track->Start(); 578 track->Start();
584 579
585 // Verify the data flow by connecting the |sink| to |track|. 580 // Verify the data flow by connecting the |sink| to |track|.
586 scoped_ptr<MockWebRtcAudioCapturerSink> sink( 581 scoped_ptr<MockMediaStreamAudioSink> sink(new MockMediaStreamAudioSink());
587 new MockWebRtcAudioCapturerSink());
588 base::WaitableEvent event(false, false); 582 base::WaitableEvent event(false, false);
589 EXPECT_CALL(*sink, SetCaptureFormat(_)).Times(1); 583 EXPECT_CALL(*sink, OnSetFormat(_)).Times(1);
590 // Verify the sinks are getting the packets with an expecting buffer size. 584 // Verify the sinks are getting the packets with an expecting buffer size.
591 #if defined(OS_ANDROID) 585 #if defined(OS_ANDROID)
592 const int expected_buffer_size = params.sample_rate() / 100; 586 const int expected_buffer_size = params.sample_rate() / 100;
593 #else 587 #else
594 const int expected_buffer_size = params.frames_per_buffer(); 588 const int expected_buffer_size = params.frames_per_buffer();
595 #endif 589 #endif
596 EXPECT_CALL(*sink, CaptureData( 590 EXPECT_CALL(*sink, CaptureData(
597 0, params.sample_rate(), params.channels(), expected_buffer_size, 591 0, params.sample_rate(), params.channels(), expected_buffer_size,
598 0, 0, false, false)) 592 0, 0, false, false))
599 .Times(AtLeast(1)).WillRepeatedly(SignalEvent(&event)); 593 .Times(AtLeast(1)).WillRepeatedly(SignalEvent(&event));
600 track->AddSink(sink.get()); 594 track->AddSink(sink.get());
601 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout())); 595 EXPECT_TRUE(event.TimedWait(TestTimeouts::tiny_timeout()));
602 596
603 // Stopping the new source will stop the second track. 597 // Stopping the new source will stop the second track.
604 EXPECT_CALL(*source, OnStop()).Times(1); 598 EXPECT_CALL(*source, OnStop()).Times(1);
605 capturer->Stop(); 599 capturer->Stop();
606 } 600 }
607 601
608 } // namespace content 602 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc_local_audio_track.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698