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() { |