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

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

Issue 1780653002: Revert of MediaStream audio object graph untangling and clean-ups. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/renderer/media/webaudio_capturer_source.h" 5 #include "content/renderer/media/webaudio_capturer_source.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "content/renderer/media/webrtc_local_audio_track.h" 10 #include "content/renderer/media/webrtc_local_audio_track.h"
11 11
12 using media::AudioBus; 12 using media::AudioBus;
13 using media::AudioParameters; 13 using media::AudioParameters;
14 using media::ChannelLayout; 14 using media::ChannelLayout;
15 using media::CHANNEL_LAYOUT_MONO; 15 using media::CHANNEL_LAYOUT_MONO;
16 using media::CHANNEL_LAYOUT_STEREO; 16 using media::CHANNEL_LAYOUT_STEREO;
17 17
18 namespace content { 18 namespace content {
19 19
20 WebAudioCapturerSource::WebAudioCapturerSource( 20 WebAudioCapturerSource::WebAudioCapturerSource(
21 blink::WebMediaStreamSource* blink_source) 21 const blink::WebMediaStreamSource& blink_source)
22 : track_(NULL), 22 : track_(NULL),
23 audio_format_changed_(false), 23 audio_format_changed_(false),
24 fifo_(base::Bind(&WebAudioCapturerSource::DeliverRebufferedAudio, 24 fifo_(base::Bind(&WebAudioCapturerSource::DeliverRebufferedAudio,
25 base::Unretained(this))), 25 base::Unretained(this))),
26 blink_source_(*blink_source) { 26 blink_source_(blink_source) {}
27 DCHECK(blink_source);
28 DCHECK(!blink_source_.isNull());
29 DVLOG(1) << "WebAudioCapturerSource::WebAudioCapturerSource()";
30 blink_source_.addAudioConsumer(this);
31 }
32 27
33 WebAudioCapturerSource::~WebAudioCapturerSource() { 28 WebAudioCapturerSource::~WebAudioCapturerSource() {
34 DCHECK(thread_checker_.CalledOnValidThread()); 29 DCHECK(thread_checker_.CalledOnValidThread());
35 DVLOG(1) << "WebAudioCapturerSource::~WebAudioCapturerSource()"; 30 removeFromBlinkSource();
36 DeregisterFromBlinkSource();
37 } 31 }
38 32
39 void WebAudioCapturerSource::setFormat( 33 void WebAudioCapturerSource::setFormat(
40 size_t number_of_channels, float sample_rate) { 34 size_t number_of_channels, float sample_rate) {
41 DCHECK(thread_checker_.CalledOnValidThread()); 35 DCHECK(thread_checker_.CalledOnValidThread());
42 DVLOG(1) << "WebAudioCapturerSource::setFormat(sample_rate=" 36 DVLOG(1) << "WebAudioCapturerSource::setFormat(sample_rate="
43 << sample_rate << ")"; 37 << sample_rate << ")";
44 38
45 // If the channel count is greater than 8, use discrete layout. However, 39 // If the channel count is greater than 8, use discrete layout. However,
46 // anything beyond 8 is ignored by the subsequent (WebRTC) audio pipeline. 40 // anything beyond 8 is ignored by the subsequent (WebRTC) audio pipeline.
(...skipping 27 matching lines...) Expand all
74 base::AutoLock auto_lock(lock_); 68 base::AutoLock auto_lock(lock_);
75 track_ = track; 69 track_ = track;
76 } 70 }
77 71
78 void WebAudioCapturerSource::Stop() { 72 void WebAudioCapturerSource::Stop() {
79 DCHECK(thread_checker_.CalledOnValidThread()); 73 DCHECK(thread_checker_.CalledOnValidThread());
80 { 74 {
81 base::AutoLock auto_lock(lock_); 75 base::AutoLock auto_lock(lock_);
82 track_ = NULL; 76 track_ = NULL;
83 } 77 }
84 // DeregisterFromBlinkSource() should not be called while |lock_| is acquired, 78 // removeFromBlinkSource() should not be called while |lock_| is acquired,
85 // as it could result in a deadlock. 79 // as it could result in a deadlock.
86 DeregisterFromBlinkSource(); 80 removeFromBlinkSource();
87 } 81 }
88 82
89 void WebAudioCapturerSource::consumeAudio( 83 void WebAudioCapturerSource::consumeAudio(
90 const blink::WebVector<const float*>& audio_data, 84 const blink::WebVector<const float*>& audio_data,
91 size_t number_of_frames) { 85 size_t number_of_frames) {
92 // TODO(miu): Plumbing is needed to determine the actual capture timestamp 86 // TODO(miu): Plumbing is needed to determine the actual capture timestamp
93 // of the audio, instead of just snapshotting TimeTicks::Now(), for proper 87 // of the audio, instead of just snapshotting TimeTicks::Now(), for proper
94 // audio/video sync. http://crbug.com/335335 88 // audio/video sync. http://crbug.com/335335
95 current_reference_time_ = base::TimeTicks::Now(); 89 current_reference_time_ = base::TimeTicks::Now();
96 90
(...skipping 19 matching lines...) Expand all
116 110
117 void WebAudioCapturerSource::DeliverRebufferedAudio( 111 void WebAudioCapturerSource::DeliverRebufferedAudio(
118 const media::AudioBus& audio_bus, 112 const media::AudioBus& audio_bus,
119 int frame_delay) { 113 int frame_delay) {
120 lock_.AssertAcquired(); 114 lock_.AssertAcquired();
121 const base::TimeTicks reference_time = 115 const base::TimeTicks reference_time =
122 current_reference_time_ + 116 current_reference_time_ +
123 base::TimeDelta::FromMicroseconds(frame_delay * 117 base::TimeDelta::FromMicroseconds(frame_delay *
124 base::Time::kMicrosecondsPerSecond / 118 base::Time::kMicrosecondsPerSecond /
125 params_.sample_rate()); 119 params_.sample_rate());
126 track_->Capture(audio_bus, reference_time); 120 track_->Capture(audio_bus, reference_time, false);
127 } 121 }
128 122
129 void WebAudioCapturerSource::DeregisterFromBlinkSource() { 123 // If registered as audio consumer in |blink_source_|, deregister from
124 // |blink_source_| and stop keeping a reference to |blink_source_|.
125 // Failure to call this method when stopping the track might leave an invalid
126 // WebAudioCapturerSource reference still registered as an audio consumer on
127 // the blink side.
128 void WebAudioCapturerSource::removeFromBlinkSource() {
130 if (!blink_source_.isNull()) { 129 if (!blink_source_.isNull()) {
131 blink_source_.removeAudioConsumer(this); 130 blink_source_.removeAudioConsumer(this);
132 blink_source_.reset(); 131 blink_source_.reset();
133 } 132 }
134 } 133 }
135 134
136 } // namespace content 135 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webaudio_capturer_source.h ('k') | content/renderer/media/webrtc/media_stream_remote_audio_track.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698