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

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

Issue 12102004: Renderer side audio device change wip... Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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/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.
« no previous file with comments | « content/renderer/media/audio_renderer_mixer_manager.h ('k') | content/renderer/media/audio_renderer_mixer_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698