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

Unified Diff: content/renderer/media/renderer_webaudiodevice_impl.cc

Issue 10830268: Allow audio system to handle synchronized low-latency audio I/O (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 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: content/renderer/media/renderer_webaudiodevice_impl.cc
===================================================================
--- content/renderer/media/renderer_webaudiodevice_impl.cc (revision 155057)
+++ content/renderer/media/renderer_webaudiodevice_impl.cc (working copy)
@@ -4,9 +4,13 @@
#include "content/renderer/media/renderer_webaudiodevice_impl.h"
+#include "base/command_line.h"
#include "base/logging.h"
#include "content/renderer/media/audio_device_factory.h"
+#include "content/public/common/content_switches.h"
+#include <math.h>
+
using content::AudioDeviceFactory;
using WebKit::WebAudioDevice;
using WebKit::WebVector;
@@ -17,7 +21,14 @@
: is_running_(false),
client_callback_(callback) {
audio_device_ = AudioDeviceFactory::NewOutputDevice();
- audio_device_->Initialize(params, this);
+
+ // TODO(crogers): remove once we properly handle input device selection.
tommi (sloooow) - chröme 2012/09/07 09:58:19 file a bug for tracking?
Chris Rogers 2012/09/07 20:34:01 Done.
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableWebAudioInput)) {
+ audio_device_->InitializeIO(params, 2, this);
tommi (sloooow) - chröme 2012/09/07 09:58:19 won't hardcoding this at 2 be problematic for non-
Chris Rogers 2012/09/07 20:34:01 The Mac-backend will automatically handle this cas
+ } else {
+ audio_device_->Initialize(params, this);
+ }
}
RendererWebAudioDeviceImpl::~RendererWebAudioDeviceImpl() {
@@ -44,18 +55,33 @@
int RendererWebAudioDeviceImpl::Render(media::AudioBus* audio_bus,
int audio_delay_milliseconds) {
- // Make the client callback to get rendered audio.
+ RenderIO(NULL, audio_bus, audio_delay_milliseconds);
+ return audio_bus->frames();
+}
+
+void RendererWebAudioDeviceImpl::RenderIO(media::AudioBus* audio_input_bus,
+ media::AudioBus* audio_bus,
+ int audio_delay_milliseconds) {
+ // Make the client callback for an I/O cycle.
DCHECK(client_callback_);
if (client_callback_) {
- // Wrap the pointers using WebVector.
+ // Wrap the inputs pointers using WebVector.
+ size_t input_channels =
+ audio_input_bus ? static_cast<size_t>(audio_input_bus->channels()) : 0;
+ WebVector<float*> web_audio_input_data(input_channels);
+ for (size_t i = 0; i < input_channels; ++i)
+ web_audio_input_data[i] = audio_input_bus->channel(i);
+
+ // Wrap the output pointers using WebVector.
WebVector<float*> web_audio_data(
static_cast<size_t>(audio_bus->channels()));
for (int i = 0; i < audio_bus->channels(); ++i)
web_audio_data[i] = audio_bus->channel(i);
- client_callback_->render(web_audio_data, audio_bus->frames());
+ client_callback_->render(web_audio_input_data,
+ web_audio_data,
+ audio_bus->frames());
}
- return audio_bus->frames();
}
void RendererWebAudioDeviceImpl::OnRenderError() {

Powered by Google App Engine
This is Rietveld 408576698