| 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/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/media_stream_audio_source.h" | 7 #include "content/renderer/media/media_stream_audio_source.h" |
| 8 #include "content/renderer/media/mock_media_constraint_factory.h" | 8 #include "content/renderer/media/mock_media_constraint_factory.h" |
| 9 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h" | 9 #include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h" |
| 10 #include "content/renderer/media/webrtc_audio_capturer.h" | 10 #include "content/renderer/media/webrtc_audio_capturer.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 : capturer_(capturer), | 41 : capturer_(capturer), |
| 42 thread_(), | 42 thread_(), |
| 43 closure_(false, false) { | 43 closure_(false, false) { |
| 44 DCHECK(capturer); | 44 DCHECK(capturer); |
| 45 audio_bus_ = media::AudioBus::Create(params); | 45 audio_bus_ = media::AudioBus::Create(params); |
| 46 } | 46 } |
| 47 | 47 |
| 48 virtual ~FakeAudioThread() { DCHECK(thread_.is_null()); } | 48 virtual ~FakeAudioThread() { DCHECK(thread_.is_null()); } |
| 49 | 49 |
| 50 // base::PlatformThread::Delegate: | 50 // base::PlatformThread::Delegate: |
| 51 virtual void ThreadMain() OVERRIDE { | 51 virtual void ThreadMain() override { |
| 52 while (true) { | 52 while (true) { |
| 53 if (closure_.IsSignaled()) | 53 if (closure_.IsSignaled()) |
| 54 return; | 54 return; |
| 55 | 55 |
| 56 media::AudioCapturerSource::CaptureCallback* callback = | 56 media::AudioCapturerSource::CaptureCallback* callback = |
| 57 static_cast<media::AudioCapturerSource::CaptureCallback*>( | 57 static_cast<media::AudioCapturerSource::CaptureCallback*>( |
| 58 capturer_); | 58 capturer_); |
| 59 audio_bus_->Zero(); | 59 audio_bus_->Zero(); |
| 60 callback->Capture(audio_bus_.get(), 0, 0, false); | 60 callback->Capture(audio_bus_.get(), 0, 0, false); |
| 61 | 61 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 91 MOCK_METHOD3(OnInitialize, void(const media::AudioParameters& params, | 91 MOCK_METHOD3(OnInitialize, void(const media::AudioParameters& params, |
| 92 CaptureCallback* callback, | 92 CaptureCallback* callback, |
| 93 int session_id)); | 93 int session_id)); |
| 94 MOCK_METHOD0(OnStart, void()); | 94 MOCK_METHOD0(OnStart, void()); |
| 95 MOCK_METHOD0(OnStop, void()); | 95 MOCK_METHOD0(OnStop, void()); |
| 96 MOCK_METHOD1(SetVolume, void(double volume)); | 96 MOCK_METHOD1(SetVolume, void(double volume)); |
| 97 MOCK_METHOD1(SetAutomaticGainControl, void(bool enable)); | 97 MOCK_METHOD1(SetAutomaticGainControl, void(bool enable)); |
| 98 | 98 |
| 99 virtual void Initialize(const media::AudioParameters& params, | 99 virtual void Initialize(const media::AudioParameters& params, |
| 100 CaptureCallback* callback, | 100 CaptureCallback* callback, |
| 101 int session_id) OVERRIDE { | 101 int session_id) override { |
| 102 DCHECK(params.IsValid()); | 102 DCHECK(params.IsValid()); |
| 103 params_ = params; | 103 params_ = params; |
| 104 OnInitialize(params, callback, session_id); | 104 OnInitialize(params, callback, session_id); |
| 105 } | 105 } |
| 106 virtual void Start() OVERRIDE { | 106 virtual void Start() override { |
| 107 audio_thread_.reset(new FakeAudioThread(capturer_, params_)); | 107 audio_thread_.reset(new FakeAudioThread(capturer_, params_)); |
| 108 audio_thread_->Start(); | 108 audio_thread_->Start(); |
| 109 OnStart(); | 109 OnStart(); |
| 110 } | 110 } |
| 111 virtual void Stop() OVERRIDE { | 111 virtual void Stop() override { |
| 112 audio_thread_->Stop(); | 112 audio_thread_->Stop(); |
| 113 audio_thread_.reset(); | 113 audio_thread_.reset(); |
| 114 OnStop(); | 114 OnStop(); |
| 115 } | 115 } |
| 116 protected: | 116 protected: |
| 117 virtual ~MockCapturerSource() {} | 117 virtual ~MockCapturerSource() {} |
| 118 | 118 |
| 119 private: | 119 private: |
| 120 scoped_ptr<FakeAudioThread> audio_thread_; | 120 scoped_ptr<FakeAudioThread> audio_thread_; |
| 121 WebRtcAudioCapturer* capturer_; | 121 WebRtcAudioCapturer* capturer_; |
| 122 media::AudioParameters params_; | 122 media::AudioParameters params_; |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 // TODO(xians): Use MediaStreamAudioSink. | 125 // TODO(xians): Use MediaStreamAudioSink. |
| 126 class MockMediaStreamAudioSink : public PeerConnectionAudioSink { | 126 class MockMediaStreamAudioSink : public PeerConnectionAudioSink { |
| 127 public: | 127 public: |
| 128 MockMediaStreamAudioSink() {} | 128 MockMediaStreamAudioSink() {} |
| 129 ~MockMediaStreamAudioSink() {} | 129 ~MockMediaStreamAudioSink() {} |
| 130 int OnData(const int16* audio_data, | 130 int OnData(const int16* audio_data, |
| 131 int sample_rate, | 131 int sample_rate, |
| 132 int number_of_channels, | 132 int number_of_channels, |
| 133 int number_of_frames, | 133 int number_of_frames, |
| 134 const std::vector<int>& channels, | 134 const std::vector<int>& channels, |
| 135 int audio_delay_milliseconds, | 135 int audio_delay_milliseconds, |
| 136 int current_volume, | 136 int current_volume, |
| 137 bool need_audio_processing, | 137 bool need_audio_processing, |
| 138 bool key_pressed) OVERRIDE { | 138 bool key_pressed) override { |
| 139 EXPECT_EQ(params_.sample_rate(), sample_rate); | 139 EXPECT_EQ(params_.sample_rate(), sample_rate); |
| 140 EXPECT_EQ(params_.channels(), number_of_channels); | 140 EXPECT_EQ(params_.channels(), number_of_channels); |
| 141 EXPECT_EQ(params_.frames_per_buffer(), number_of_frames); | 141 EXPECT_EQ(params_.frames_per_buffer(), number_of_frames); |
| 142 CaptureData(channels.size(), | 142 CaptureData(channels.size(), |
| 143 audio_delay_milliseconds, | 143 audio_delay_milliseconds, |
| 144 current_volume, | 144 current_volume, |
| 145 need_audio_processing, | 145 need_audio_processing, |
| 146 key_pressed); | 146 key_pressed); |
| 147 return 0; | 147 return 0; |
| 148 } | 148 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 161 const media::AudioParameters& audio_params() const { return params_; } | 161 const media::AudioParameters& audio_params() const { return params_; } |
| 162 | 162 |
| 163 private: | 163 private: |
| 164 media::AudioParameters params_; | 164 media::AudioParameters params_; |
| 165 }; | 165 }; |
| 166 | 166 |
| 167 } // namespace | 167 } // namespace |
| 168 | 168 |
| 169 class WebRtcLocalAudioTrackTest : public ::testing::Test { | 169 class WebRtcLocalAudioTrackTest : public ::testing::Test { |
| 170 protected: | 170 protected: |
| 171 virtual void SetUp() OVERRIDE { | 171 virtual void SetUp() override { |
| 172 params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, | 172 params_.Reset(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 173 media::CHANNEL_LAYOUT_STEREO, 2, 48000, 16, 480); | 173 media::CHANNEL_LAYOUT_STEREO, 2, 48000, 16, 480); |
| 174 MockMediaConstraintFactory constraint_factory; | 174 MockMediaConstraintFactory constraint_factory; |
| 175 blink_source_.initialize("dummy", blink::WebMediaStreamSource::TypeAudio, | 175 blink_source_.initialize("dummy", blink::WebMediaStreamSource::TypeAudio, |
| 176 "dummy"); | 176 "dummy"); |
| 177 MediaStreamAudioSource* audio_source = new MediaStreamAudioSource(); | 177 MediaStreamAudioSource* audio_source = new MediaStreamAudioSource(); |
| 178 blink_source_.setExtraData(audio_source); | 178 blink_source_.setExtraData(audio_source); |
| 179 | 179 |
| 180 StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE, | 180 StreamDeviceInfo device(MEDIA_DEVICE_AUDIO_CAPTURE, |
| 181 std::string(), std::string()); | 181 std::string(), std::string()); |
| 182 capturer_ = WebRtcAudioCapturer::CreateCapturer( | 182 capturer_ = WebRtcAudioCapturer::CreateCapturer( |
| 183 -1, device, constraint_factory.CreateWebMediaConstraints(), NULL, | 183 -1, device, constraint_factory.CreateWebMediaConstraints(), NULL, |
| 184 audio_source); | 184 audio_source); |
| 185 audio_source->SetAudioCapturer(capturer_.get()); | 185 audio_source->SetAudioCapturer(capturer_.get()); |
| 186 capturer_source_ = new MockCapturerSource(capturer_.get()); | 186 capturer_source_ = new MockCapturerSource(capturer_.get()); |
| 187 EXPECT_CALL(*capturer_source_.get(), OnInitialize(_, capturer_.get(), -1)) | 187 EXPECT_CALL(*capturer_source_.get(), OnInitialize(_, capturer_.get(), -1)) |
| 188 .WillOnce(Return()); | 188 .WillOnce(Return()); |
| 189 EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true)); | 189 EXPECT_CALL(*capturer_source_.get(), SetAutomaticGainControl(true)); |
| 190 EXPECT_CALL(*capturer_source_.get(), OnStart()); | 190 EXPECT_CALL(*capturer_source_.get(), OnStart()); |
| 191 capturer_->SetCapturerSourceForTesting(capturer_source_, params_); | 191 capturer_->SetCapturerSourceForTesting(capturer_source_, params_); |
| 192 } | 192 } |
| 193 | 193 |
| 194 virtual void TearDown() OVERRIDE { | 194 virtual void TearDown() override { |
| 195 blink_source_.reset(); | 195 blink_source_.reset(); |
| 196 blink::WebHeap::collectAllGarbageForTesting(); | 196 blink::WebHeap::collectAllGarbageForTesting(); |
| 197 } | 197 } |
| 198 | 198 |
| 199 media::AudioParameters params_; | 199 media::AudioParameters params_; |
| 200 blink::WebMediaStreamSource blink_source_; | 200 blink::WebMediaStreamSource blink_source_; |
| 201 scoped_refptr<MockCapturerSource> capturer_source_; | 201 scoped_refptr<MockCapturerSource> capturer_source_; |
| 202 scoped_refptr<WebRtcAudioCapturer> capturer_; | 202 scoped_refptr<WebRtcAudioCapturer> capturer_; |
| 203 }; | 203 }; |
| 204 | 204 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 // Stopping the new source will stop the second track. | 534 // Stopping the new source will stop the second track. |
| 535 EXPECT_CALL(*source.get(), OnStop()).Times(1); | 535 EXPECT_CALL(*source.get(), OnStop()).Times(1); |
| 536 capturer->Stop(); | 536 capturer->Stop(); |
| 537 | 537 |
| 538 // Even though this test don't use |capturer_source_| it will be stopped | 538 // Even though this test don't use |capturer_source_| it will be stopped |
| 539 // during teardown of the test harness. | 539 // during teardown of the test harness. |
| 540 EXPECT_CALL(*capturer_source_.get(), OnStop()); | 540 EXPECT_CALL(*capturer_source_.get(), OnStop()); |
| 541 } | 541 } |
| 542 | 542 |
| 543 } // namespace content | 543 } // namespace content |
| OLD | NEW |