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

Side by Side Diff: media/blink/webaudiosourceprovider_impl.cc

Issue 1599533003: MediaCaptureFromElement: add support for audio captureStream(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: using refptr iso WeakPtr Created 4 years, 7 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 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 "media/blink/webaudiosourceprovider_impl.h" 5 #include "media/blink/webaudiosourceprovider_impl.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 sink_->Initialize(params, tee_filter_.get()); 227 sink_->Initialize(params, tee_filter_.get());
228 228
229 if (!set_format_cb_.is_null()) 229 if (!set_format_cb_.is_null())
230 base::ResetAndReturn(&set_format_cb_).Run(); 230 base::ResetAndReturn(&set_format_cb_).Run();
231 } 231 }
232 232
233 void WebAudioSourceProviderImpl::SetCopyAudioCallback( 233 void WebAudioSourceProviderImpl::SetCopyAudioCallback(
234 const CopyAudioCB& callback) { 234 const CopyAudioCB& callback) {
235 DCHECK(!callback.is_null()); 235 DCHECK(!callback.is_null());
236
237 // Use |sink_lock_| to protect |tee_filter_| too since they go in lockstep.
238 base::AutoLock auto_lock(sink_lock_);
239
236 DCHECK(tee_filter_); 240 DCHECK(tee_filter_);
237 tee_filter_->set_copy_audio_bus_callback(callback); 241 tee_filter_->set_copy_audio_bus_callback(callback);
238 } 242 }
239 243
240 void WebAudioSourceProviderImpl::ClearCopyAudioCallback() { 244 void WebAudioSourceProviderImpl::ClearCopyAudioCallback() {
241 DCHECK(tee_filter_); 245 DCHECK(tee_filter_);
242 tee_filter_->set_copy_audio_bus_callback(CopyAudioCB()); 246 tee_filter_->set_copy_audio_bus_callback(CopyAudioCB());
243 } 247 }
244 248
249 int WebAudioSourceProviderImpl::RenderForTesting(AudioBus* audio_bus) {
250 return tee_filter_->Render(audio_bus, 0, 0);
251 }
252
245 void WebAudioSourceProviderImpl::OnSetFormat() { 253 void WebAudioSourceProviderImpl::OnSetFormat() {
246 base::AutoLock auto_lock(sink_lock_); 254 base::AutoLock auto_lock(sink_lock_);
247 if (!client_) 255 if (!client_)
248 return; 256 return;
249 257
250 // Inform Blink about the audio stream format. 258 // Inform Blink about the audio stream format.
251 client_->setFormat(tee_filter_->channels(), tee_filter_->sample_rate()); 259 client_->setFormat(tee_filter_->channels(), tee_filter_->sample_rate());
252 } 260 }
253 261
254 int WebAudioSourceProviderImpl::RenderForTesting(AudioBus* audio_bus) {
255 return tee_filter_->Render(audio_bus, 0, 0);
256 }
257
258 int WebAudioSourceProviderImpl::TeeFilter::Render(AudioBus* audio_bus, 262 int WebAudioSourceProviderImpl::TeeFilter::Render(AudioBus* audio_bus,
259 uint32_t delay_milliseconds, 263 uint32_t delay_milliseconds,
260 uint32_t frames_skipped) { 264 uint32_t frames_skipped) {
261 const int num_rendered_frames = 265 const int num_rendered_frames =
262 renderer_->Render(audio_bus, delay_milliseconds, frames_skipped); 266 renderer_->Render(audio_bus, delay_milliseconds, frames_skipped);
263 267
264 if (!copy_audio_bus_callback_.is_null()) { 268 if (!copy_audio_bus_callback_.is_null()) {
265 std::unique_ptr<AudioBus> bus_copy = 269 std::unique_ptr<AudioBus> bus_copy =
266 AudioBus::Create(audio_bus->channels(), audio_bus->frames()); 270 AudioBus::Create(audio_bus->channels(), audio_bus->frames());
267 audio_bus->CopyTo(bus_copy.get()); 271 audio_bus->CopyTo(bus_copy.get());
268 copy_audio_bus_callback_.Run(std::move(bus_copy), delay_milliseconds, 272 copy_audio_bus_callback_.Run(std::move(bus_copy), delay_milliseconds,
269 sample_rate_); 273 sample_rate_);
270 } 274 }
271 275
272 return num_rendered_frames; 276 return num_rendered_frames;
273 } 277 }
274 278
275 void WebAudioSourceProviderImpl::TeeFilter::OnRenderError() { 279 void WebAudioSourceProviderImpl::TeeFilter::OnRenderError() {
276 renderer_->OnRenderError(); 280 renderer_->OnRenderError();
277 } 281 }
278 282
279 } // namespace media 283 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698