Chromium Code Reviews| Index: content/renderer/media/renderer_webaudiodevice_impl.cc |
| =================================================================== |
| --- content/renderer/media/renderer_webaudiodevice_impl.cc (revision 155437) |
| +++ 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 "media/base/media_switches.h" |
| +#include <math.h> |
|
scherkus (not reviewing)
2012/09/10 11:46:32
where's the math.h usage?
Chris Rogers
2012/09/10 19:21:38
Sorry, that was only needed for testing -- removed
|
| + |
| using content::AudioDeviceFactory; |
| using WebKit::WebAudioDevice; |
| using WebKit::WebVector; |
| @@ -17,7 +21,17 @@ |
| : 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. |
| + // https://code.google.com/p/chromium/issues/detail?id=147327 |
| + if (CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kEnableWebAudioInput)) { |
| + // TODO(crogers): support more than hard-coded stereo: |
| + // https://code.google.com/p/chromium/issues/detail?id=147326 |
| + audio_device_->InitializeIO(params, 2, this); |
| + } else { |
| + audio_device_->Initialize(params, this); |
| + } |
| } |
| RendererWebAudioDeviceImpl::~RendererWebAudioDeviceImpl() { |
| @@ -44,18 +58,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. |
|
scherkus (not reviewing)
2012/09/10 11:46:32
s/inputs/input/?
Chris Rogers
2012/09/10 19:21:38
Done.
|
| + 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() { |