Index: content/renderer/render_audiosourceprovider.cc |
=================================================================== |
--- content/renderer/render_audiosourceprovider.cc (revision 0) |
+++ content/renderer/render_audiosourceprovider.cc (revision 0) |
@@ -0,0 +1,58 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/renderer/render_audiosourceprovider.h" |
+ |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+using namespace std; |
+using WebKit::WebVector; |
+ |
+RenderAudioSourceProvider::RenderAudioSourceProvider( |
+ media::AudioRendererSink::RenderCallback* callback) |
+ : is_running_(false), |
+ volume_(1.0), |
+ callback_(callback) { |
+ callback->SetAudioRendererSink(this); |
+} |
+ |
+bool RenderAudioSourceProvider::Start() { |
+ if (!is_running_) { |
+ is_running_ = true; |
+ } |
+ return true; |
+} |
+ |
+bool RenderAudioSourceProvider::Stop() { |
+ if (is_running_) { |
+ is_running_ = false; |
+ } |
+ return true; |
+} |
+ |
+bool RenderAudioSourceProvider::SetVolume(double volume) { |
+ volume_ = volume; |
+ return true; |
+} |
+ |
+void RenderAudioSourceProvider::provideInput( |
+ const WebVector<float*>& audio_data, size_t number_of_frames) { |
+ DCHECK(callback_); |
+ if (callback_ && is_running_) { |
+ // Wrap WebVector as regular std::vector. |
+ vector<float*> v(audio_data.size()); |
+ for (size_t i = 0; i < audio_data.size(); ++i) |
+ v[i] = audio_data[i]; |
+ |
+ // TODO(crogers): figure out if we should volume scale here or in common |
+ // WebAudio code. |
+ callback_->Render(v, number_of_frames, 0); |
+ } else { |
+ // Provide silence if the source is not running. |
+ for (size_t i = 0; i < audio_data.size(); ++i) { |
+ memset(audio_data[i], 0, sizeof(float) * number_of_frames); |
+ } |
+ } |
+} |