Index: content/renderer/media/audio_renderer_mixer_manager.cc |
diff --git a/content/renderer/media/audio_renderer_mixer_manager.cc b/content/renderer/media/audio_renderer_mixer_manager.cc |
index 71fafcbdd81ca6a6835dcc0e7c2b7526251ab495..49ff4437b28aa7ba50278074b6226510b40e6dee 100644 |
--- a/content/renderer/media/audio_renderer_mixer_manager.cc |
+++ b/content/renderer/media/audio_renderer_mixer_manager.cc |
@@ -6,18 +6,26 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
+// #include "content/renderer/media/audio_hardware.h" |
#include "content/renderer/media/audio_device_factory.h" |
#include "content/renderer/media/renderer_audio_output_device.h" |
#include "media/base/audio_renderer_mixer.h" |
#include "media/base/audio_renderer_mixer_input.h" |
+#include "media/base/audio_hardware_config.h" |
namespace content { |
-AudioRendererMixerManager::AudioRendererMixerManager(int hardware_sample_rate, |
- int hardware_buffer_size) |
- : hardware_sample_rate_(hardware_sample_rate), |
- hardware_buffer_size_(hardware_buffer_size), |
+// AudioRendererMixerManager::AudioRendererMixerManager(int hardware_sample_rate, |
+// int hardware_buffer_size) |
+// : hardware_sample_rate_(hardware_sample_rate), |
+// hardware_buffer_size_(hardware_buffer_size), |
+AudioRendererMixerManager::AudioRendererMixerManager( |
+ media::AudioHardwareConfig* hardware_config) |
+ : hardware_config_(hardware_config), |
sink_for_testing_(NULL) { |
+ // TODO(dalecurtis): Fix this so that buffer size and sample rate are only |
+ // passed in for testing. Though RendererViewImpl still needs to initialize |
+ // the AudioHardware cache... |
} |
AudioRendererMixerManager::~AudioRendererMixerManager() { |
@@ -46,32 +54,48 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
const MixerKey key(source_render_view_id, params); |
base::AutoLock auto_lock(mixers_lock_); |
- AudioRendererMixerMap::iterator it = mixers_.find(key); |
- if (it != mixers_.end()) { |
- it->second.ref_count++; |
- return it->second.mixer; |
- } |
+ // AudioRendererMixerMap::iterator it = mixers_.find(key); |
+ // if (it != mixers_.end()) { |
+ // it->second.ref_count++; |
+ // return it->second.mixer; |
+ // } |
+ |
+ LOG(ERROR) << "Getting mixer..."; |
// On Linux and ChromeOS we can rely on the playback device to handle |
// resampling, so don't waste cycles on it here. |
-#if defined(OS_LINUX) |
- int sample_rate = params.sample_rate(); |
-#else |
- int sample_rate = hardware_sample_rate_; |
-#endif |
+// #if defined(OS_LINUX) |
+// int sample_rate = params.sample_rate(); |
+// #else |
+// int sample_rate = hardware_sample_rate_; |
+// #endif |
// Create output parameters based on the audio hardware configuration for |
// passing on to the output sink. Force to 16-bit output for now since we |
// know that works well for WebAudio and WebRTC. |
media::AudioParameters output_params( |
media::AudioParameters::AUDIO_PCM_LOW_LATENCY, params.channel_layout(), |
- sample_rate, 16, hardware_buffer_size_); |
+ // hardware_sample_rate_, 16, hardware_buffer_size_); |
+ hardware_config_->GetOutputSampleRate(), 16, |
+ hardware_config_->GetOutputBufferSize()); |
+ |
+ // GetAudioOutputSampleRate(), 16, GetAudioOutputBufferSize()); |
+ // TODO(justinlin): Fix and uncomment the above. |
+ LOG(ERROR) << "GetAudioOutputSampleRate() and GetAudioOutputBufferSize() will" |
+ << " fail if no cache exists since we're not on the RenderThread!"; |
// If we've created invalid output parameters, simply pass on the input params |
// and let the browser side handle automatic fallback. |
if (!output_params.IsValid()) |
output_params = params; |
+ IOParamsKey mixer_key = std::make_pair(params, output_params); |
+ AudioRendererMixerMap::iterator it = mixers_.find(mixer_key); |
+ if (it != mixers_.end()) { |
+ it->second.ref_count++; |
+ return it->second.mixer; |
+ } |
+ |
media::AudioRendererMixer* mixer; |
if (sink_for_testing_) { |
mixer = new media::AudioRendererMixer( |
@@ -84,17 +108,25 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
} |
AudioRendererMixerReference mixer_reference = { mixer, 1 }; |
- mixers_[key] = mixer_reference; |
+ // mixers_[key] = mixer_reference; |
+ mixers_[mixer_key] = mixer_reference; |
return mixer; |
} |
void AudioRendererMixerManager::RemoveMixer( |
int source_render_view_id, |
- const media::AudioParameters& params) { |
- const MixerKey key(source_render_view_id, params); |
+ media::AudioRendererMixer* mixer/*const media::AudioParameters& params*/) { |
+// +void AudioRendererMixerManager::RemoveMixer(media::AudioRendererMixer* mixer) { |
+ // base::AutoLock auto_lock(mixers_lock_); |
+ |
+ // const MixerKey key(source_render_view_id, params); |
base::AutoLock auto_lock(mixers_lock_); |
- AudioRendererMixerMap::iterator it = mixers_.find(key); |
+ // AudioRendererMixerMap::iterator it = mixers_.find(key); |
+ IOParamsKey mixer_key = std::make_pair( |
+ mixer->input_params(), mixer->output_params()); |
+ |
+ AudioRendererMixerMap::iterator it = mixers_.find(mixer_key); |
DCHECK(it != mixers_.end()); |
// Only remove the mixer if AudioRendererMixerManager is the last owner. |