Chromium Code Reviews| Index: media/base/audio_renderer_mixer.h |
| diff --git a/media/base/audio_renderer_mixer.h b/media/base/audio_renderer_mixer.h |
| index 32102ffb1d5ff119c630d82ada115d763350faa4..efe4662f46762f132b38de4f82d017517886bdc4 100644 |
| --- a/media/base/audio_renderer_mixer.h |
| +++ b/media/base/audio_renderer_mixer.h |
| @@ -12,13 +12,15 @@ |
| #include "base/synchronization/lock.h" |
| #include "media/base/audio_renderer_mixer_input.h" |
| #include "media/base/audio_renderer_sink.h" |
| +#include "media/base/multi_channel_resampler.h" |
| namespace media { |
| // Mixes a set of AudioRendererMixerInputs into a single output stream which is |
| // funneled into a single shared AudioRendererSink; saving a bundle on renderer |
| -// side resources. |
| -// TODO(dalecurtis): Update documentation once resampling is available. |
| +// side resources. Resampling is done post-mixing as it is the most expensive |
| +// process. If the input sample rate matches the audio hardware sample rate, no |
| +// resampling is done. |
| class MEDIA_EXPORT AudioRendererMixer |
| : public base::RefCountedThreadSafe<AudioRendererMixer>, |
| NON_EXPORTED_BASE(public AudioRendererSink::RenderCallback) { |
| @@ -41,8 +43,23 @@ class MEDIA_EXPORT AudioRendererMixer |
| int audio_delay_milliseconds) OVERRIDE; |
| virtual void OnRenderError() OVERRIDE; |
| - // AudioParameters this mixer was constructed with. |
| - AudioParameters audio_parameters_; |
| + // Handles mixing and volume adjustment. Renders |number_of_frames| into |
| + // |audio_data|. When resamplingis necessary, ProvideInput() will be called |
| + // by MultiChannelResampler when more data is necessary. |
| + virtual void ProvideInput(const std::vector<float*>& audio_data, |
|
scherkus (not reviewing)
2012/07/12 23:02:52
does this need to be virtual?
I didn't see any ov
DaleCurtis
2012/07/13 00:01:25
Done.
|
| + int number_of_frames); |
| + |
| + // Constructor using a fixed set of input and output parameters so unit tests |
| + // don't care what audio hardware the test is running on. |
| + friend class AudioRendererMixerTestCase; |
| + friend class AudioRendererMixerInputTest; |
| + AudioRendererMixer(const AudioParameters& input_params, |
| + const AudioParameters& output_params, |
| + const scoped_refptr<AudioRendererSink>& sink); |
| + |
| + // Constructor helper method. |
| + void Initialize(const AudioParameters& input_params, |
| + const AudioParameters& output_params); |
| // Output sink for this mixer. |
| scoped_refptr<AudioRendererSink> audio_sink_; |
| @@ -54,6 +71,16 @@ class MEDIA_EXPORT AudioRendererMixer |
| AudioRendererMixerInputSet mixer_inputs_; |
| base::Lock mixer_inputs_lock_; |
| + // Vector for rendering audio data from each mixer input. |
| + int mixer_input_audio_data_size_; |
| + std::vector<float*> mixer_input_audio_data_; |
| + |
| + // Handles resampling post-mixing. |
| + scoped_ptr<MultiChannelResampler> resampler_; |
| + |
| + // The audio delay in milliseconds received by the last Render() call. |
| + int current_audio_delay_milliseconds_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(AudioRendererMixer); |
| }; |