Chromium Code Reviews| 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 |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a00c60d7fead19b0c244f74f9baf0603ec42faef |
| --- /dev/null |
| +++ b/content/renderer/media/audio_renderer_mixer_manager.cc |
| @@ -0,0 +1,71 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/renderer/media/audio_renderer_mixer_manager.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| +#include "content/renderer/media/audio_device_factory.h" |
| +#include "media/audio/audio_util.h" |
| +#include "media/base/audio_renderer_mixer.h" |
| +#include "media/base/audio_renderer_mixer_input.h" |
| + |
| +using content::AudioDeviceFactory; |
|
jochen (gone - plz use gerrit)
2012/07/13 08:51:03
after you've moved the class into namespace conten
DaleCurtis
2012/07/13 21:28:33
Done.
|
| + |
| +AudioRendererMixerManager::AudioRendererMixerManager() { |
| + // DCHECK something static? |
|
scherkus (not reviewing)
2012/07/13 18:40:16
wha?
DaleCurtis
2012/07/13 21:28:33
Leftover from an earlier thought process about ens
|
| +} |
| + |
| +AudioRendererMixerManager::~AudioRendererMixerManager() {} |
|
jochen (gone - plz use gerrit)
2012/07/13 08:51:03
maybe DCHECK that all mixers have been removed?
scherkus (not reviewing)
2012/07/13 18:40:16
yeah DCHECK(mixer_map_.empty()) wouldn't hurt
DaleCurtis
2012/07/13 21:28:33
Done.
|
| + |
| +scoped_refptr<media::AudioRendererMixerInput> |
| +AudioRendererMixerManager::CreateInput() { |
| + return new media::AudioRendererMixerInput( |
|
jochen (gone - plz use gerrit)
2012/07/13 08:51:03
please add a comment in the header that the caller
DaleCurtis
2012/07/13 21:28:33
Done.
|
| + base::Bind( |
| + &AudioRendererMixerManager::GetMixer, base::Unretained(this)), |
| + base::Bind( |
| + &AudioRendererMixerManager::RemoveMixer, base::Unretained(this))); |
| +} |
| + |
| +media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
| + const media::AudioParameters& params) { |
| + base::AutoLock auto_lock(mixer_map_lock_); |
| + |
| + AudioRendererMixerMap::iterator it = mixer_map_.find(params); |
| + if (it != mixer_map_.end()) { |
| + // Increment the reference count. |
|
scherkus (not reviewing)
2012/07/13 18:40:16
comment ain't useful
DaleCurtis
2012/07/13 21:28:33
Done.
|
| + it->second.second++; |
| + return it->second.first; |
| + } |
| + |
| + // Create output parameters for passing on to the output sink. |
| + // TODO(dalecurtis): Set format and buffer size in AudioRendererImpl. |
| + // TODO(dalecurtis): We don't care about the hardware in the ARMM tests, but |
| + // is it okay for unit tests to call these methods? |
| + media::AudioRendererMixer* mixer = new media::AudioRendererMixer( |
| + params, media::AudioParameters( |
| + media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| + params.channel_layout(), media::GetAudioHardwareSampleRate(), 16, |
| + media::GetAudioHardwareBufferSize()), |
| + AudioDeviceFactory::Create()); |
| + mixer_map_[params] = std::make_pair(mixer, 1); |
| + return mixer; |
| +} |
| + |
| +void AudioRendererMixerManager::RemoveMixer( |
| + const media::AudioParameters& params) { |
| + base::AutoLock auto_lock(mixer_map_lock_); |
| + |
| + AudioRendererMixerMap::iterator it = mixer_map_.find(params); |
| + DCHECK(it != mixer_map_.end()); |
| + |
| + // Remove the reference. |
|
jochen (gone - plz use gerrit)
2012/07/13 08:51:03
that comment doesn't add any value
DaleCurtis
2012/07/13 21:28:33
Done.
|
| + it->second.second--; |
| + |
| + // Only remove the mixer if AudioRendererMixerManager is the last owner. |
| + if (it->second.second == 0) { |
| + delete it->second.first; |
| + mixer_map_.erase(it); |
| + } |
| +} |