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/webrtc_audio_capturer.h" | 7 #include "content/renderer/media/webrtc_audio_capturer.h" |
8 #include "content/renderer/media/webrtc_local_audio_track.h" | 8 #include "content/renderer/media/webrtc_local_audio_track.h" |
9 #include "media/audio/audio_parameters.h" | 9 #include "media/audio/audio_parameters.h" |
10 #include "media/base/audio_bus.h" | 10 #include "media/base/audio_bus.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 ACTION_P(SignalEvent, event) { | 23 ACTION_P(SignalEvent, event) { |
24 event->Signal(); | 24 event->Signal(); |
25 } | 25 } |
26 | 26 |
27 // A simple thread that we use to fake the audio thread which provides data to | 27 // A simple thread that we use to fake the audio thread which provides data to |
28 // the |WebRtcAudioCapturer|. | 28 // the |WebRtcAudioCapturer|. |
29 class FakeAudioThread : public base::PlatformThread::Delegate { | 29 class FakeAudioThread : public base::PlatformThread::Delegate { |
30 public: | 30 public: |
31 explicit FakeAudioThread(const scoped_refptr<WebRtcAudioCapturer>& capturer) | 31 explicit FakeAudioThread(const scoped_refptr<WebRtcAudioCapturer>& capturer) |
32 : capturer_(capturer), | 32 : capturer_(capturer), |
33 thread_(base::kNullThreadHandle), | 33 thread_(), |
34 closure_(false, false) { | 34 closure_(false, false) { |
35 DCHECK(capturer); | 35 DCHECK(capturer); |
36 audio_bus_ = media::AudioBus::Create(capturer_->audio_parameters()); | 36 audio_bus_ = media::AudioBus::Create(capturer_->audio_parameters()); |
37 } | 37 } |
38 | 38 |
39 virtual ~FakeAudioThread() { DCHECK(!thread_); } | 39 virtual ~FakeAudioThread() { DCHECK(thread_.is_null()); } |
40 | 40 |
41 // base::PlatformThread::Delegate: | 41 // base::PlatformThread::Delegate: |
42 virtual void ThreadMain() OVERRIDE { | 42 virtual void ThreadMain() OVERRIDE { |
43 while (true) { | 43 while (true) { |
44 if (closure_.IsSignaled()) | 44 if (closure_.IsSignaled()) |
45 return; | 45 return; |
46 | 46 |
47 media::AudioCapturerSource::CaptureCallback* callback = | 47 media::AudioCapturerSource::CaptureCallback* callback = |
48 static_cast<media::AudioCapturerSource::CaptureCallback*>(capturer_); | 48 static_cast<media::AudioCapturerSource::CaptureCallback*>(capturer_); |
49 audio_bus_->Zero(); | 49 audio_bus_->Zero(); |
50 callback->Capture(audio_bus_.get(), 0, 0); | 50 callback->Capture(audio_bus_.get(), 0, 0); |
51 | 51 |
52 // Sleep 1ms to yield the resource for the main thread. | 52 // Sleep 1ms to yield the resource for the main thread. |
53 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); | 53 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 void Start() { | 57 void Start() { |
58 base::PlatformThread::CreateWithPriority( | 58 base::PlatformThread::CreateWithPriority( |
59 0, this, &thread_, base::kThreadPriority_RealtimeAudio); | 59 0, this, &thread_, base::kThreadPriority_RealtimeAudio); |
60 CHECK(thread_ != base::kNullThreadHandle); | 60 CHECK(!thread_.is_null()); |
61 } | 61 } |
62 | 62 |
63 void Stop() { | 63 void Stop() { |
64 closure_.Signal(); | 64 closure_.Signal(); |
65 base::PlatformThread::Join(thread_); | 65 base::PlatformThread::Join(thread_); |
66 thread_ = base::kNullThreadHandle; | 66 thread_ = base::PlatformThreadHandle(); |
67 } | 67 } |
68 | 68 |
69 private: | 69 private: |
70 scoped_ptr<media::AudioBus> audio_bus_; | 70 scoped_ptr<media::AudioBus> audio_bus_; |
71 scoped_refptr<WebRtcAudioCapturer> capturer_; | 71 scoped_refptr<WebRtcAudioCapturer> capturer_; |
72 base::PlatformThreadHandle thread_; | 72 base::PlatformThreadHandle thread_; |
73 base::WaitableEvent closure_; | 73 base::WaitableEvent closure_; |
74 DISALLOW_COPY_AND_ASSIGN(FakeAudioThread); | 74 DISALLOW_COPY_AND_ASSIGN(FakeAudioThread); |
75 }; | 75 }; |
76 | 76 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 EXPECT_TRUE(event_1.TimedWait(TestTimeouts::tiny_timeout())); | 232 EXPECT_TRUE(event_1.TimedWait(TestTimeouts::tiny_timeout())); |
233 EXPECT_TRUE(event_2.TimedWait(TestTimeouts::tiny_timeout())); | 233 EXPECT_TRUE(event_2.TimedWait(TestTimeouts::tiny_timeout())); |
234 | 234 |
235 track_1->RemoveSink(sink_1.get()); | 235 track_1->RemoveSink(sink_1.get()); |
236 track_2->RemoveSink(sink_2.get()); | 236 track_2->RemoveSink(sink_2.get()); |
237 track_1 = NULL; | 237 track_1 = NULL; |
238 track_2 = NULL; | 238 track_2 = NULL; |
239 } | 239 } |
240 | 240 |
241 } // namespace content | 241 } // namespace content |
OLD | NEW |