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

Unified Diff: media/blink/webaudiosourceprovider_impl.cc

Issue 1781043002: media::WebAudioSourceProviderImpl, add support for getting a copy of passing AudioBuses (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 side-by-side diff with in-line comments
Download patch
Index: media/blink/webaudiosourceprovider_impl.cc
diff --git a/media/blink/webaudiosourceprovider_impl.cc b/media/blink/webaudiosourceprovider_impl.cc
index 5b70a3091ba7760878c7f5d9f80147af4a1292c6..142b450fe5d25eacb0e160992876664424d9800a 100644
--- a/media/blink/webaudiosourceprovider_impl.cc
+++ b/media/blink/webaudiosourceprovider_impl.cc
@@ -53,8 +53,8 @@ WebAudioSourceProviderImpl::WebAudioSourceProviderImpl(
sample_rate_(0),
volume_(1.0),
state_(kStopped),
- renderer_(NULL),
- client_(NULL),
+ renderer_(nullptr),
+ client_(nullptr),
sink_(sink),
weak_factory_(this) {}
@@ -172,12 +172,13 @@ OutputDevice* WebAudioSourceProviderImpl::GetOutputDevice() {
void WebAudioSourceProviderImpl::Initialize(
const AudioParameters& params,
- RenderCallback* renderer) {
+ AudioRendererSink::RenderCallback* renderer) {
base::AutoLock auto_lock(sink_lock_);
+
renderer_ = renderer;
DCHECK_EQ(state_, kStopped);
- sink_->Initialize(params, renderer);
+ sink_->Initialize(params, this); // We act as forwarder to |renderer_|.
// Keep track of the format in case the client hasn't yet been set.
channels_ = params.channels();
@@ -187,6 +188,42 @@ void WebAudioSourceProviderImpl::Initialize(
base::ResetAndReturn(&set_format_cb_).Run();
}
+int WebAudioSourceProviderImpl::Render(AudioBus* audio_bus,
+ uint32_t delay_milliseconds,
+ uint32_t frames_skipped) {
+ DCHECK(renderer_);
+ DCHECK(!frames_skipped);
DaleCurtis 2016/03/11 01:41:42 Is this reasonable?
mcasas 2016/03/11 04:06:23 Prob remainder of some test. Removed.
+
+ const int num_rendered_frames =
+ renderer_->Render(audio_bus, delay_milliseconds, frames_skipped);
+
+ if (!onaudiobus_callback_.is_null()) {
+ scoped_ptr<AudioBus> bus_copy =
+ AudioBus::Create(audio_bus->channels(), audio_bus->frames());
+ audio_bus->CopyTo(bus_copy.get());
+ onaudiobus_callback_.Run(std::move(bus_copy), delay_milliseconds);
+ }
+
+ return num_rendered_frames;
+}
+
+void WebAudioSourceProviderImpl::OnRenderError() {
+ DCHECK(renderer_);
+ renderer_->OnRenderError();
+}
+
+void WebAudioSourceProviderImpl::RegisterOnAudioBusCallback(
+ const OnAudioBusCB& callback) {
+ DCHECK(!callback.is_null());
+ DCHECK(onaudiobus_callback_.is_null());
+ onaudiobus_callback_ = callback;
+}
+
+void WebAudioSourceProviderImpl::ResetOnAudioBusCallback() {
+ DCHECK(!onaudiobus_callback_.is_null());
+ onaudiobus_callback_.Reset();
+}
+
void WebAudioSourceProviderImpl::OnSetFormat() {
base::AutoLock auto_lock(sink_lock_);
if (!client_)

Powered by Google App Engine
This is Rietveld 408576698