summaryrefslogtreecommitdiff
path: root/chromium/media/audio/sounds/sounds_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/audio/sounds/sounds_manager.cc')
-rw-r--r--chromium/media/audio/sounds/sounds_manager.cc47
1 files changed, 35 insertions, 12 deletions
diff --git a/chromium/media/audio/sounds/sounds_manager.cc b/chromium/media/audio/sounds/sounds_manager.cc
index 72a7a3b15c1..17f0dd87436 100644
--- a/chromium/media/audio/sounds/sounds_manager.cc
+++ b/chromium/media/audio/sounds/sounds_manager.cc
@@ -29,9 +29,12 @@ class SoundsManagerImpl : public SoundsManager {
// SoundsManager implementation:
bool Initialize(SoundKey key, const base::StringPiece& data) override;
bool Play(SoundKey key) override;
+ bool Stop(SoundKey key) override;
base::TimeDelta GetDuration(SoundKey key) override;
private:
+ linked_ptr<AudioStreamHandler> GetHandler(SoundKey key);
+
base::hash_map<SoundKey, linked_ptr<AudioStreamHandler> > handlers_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
@@ -46,36 +49,56 @@ SoundsManagerImpl::~SoundsManagerImpl() { DCHECK(CalledOnValidThread()); }
bool SoundsManagerImpl::Initialize(SoundKey key,
const base::StringPiece& data) {
- if (handlers_.find(key) != handlers_.end() && handlers_[key]->IsInitialized())
+ linked_ptr<AudioStreamHandler> current_handler = GetHandler(key);
+ if (current_handler.get() && current_handler->IsInitialized())
return true;
- linked_ptr<AudioStreamHandler> handler(new AudioStreamHandler(data));
- if (!handler->IsInitialized()) {
+ linked_ptr<AudioStreamHandler> new_handler(new AudioStreamHandler(data));
+ if (!new_handler->IsInitialized()) {
LOG(WARNING) << "Can't initialize AudioStreamHandler for key=" << key;
return false;
}
- handlers_[key] = handler;
+ handlers_[key] = new_handler;
return true;
}
bool SoundsManagerImpl::Play(SoundKey key) {
DCHECK(CalledOnValidThread());
- if (handlers_.find(key) == handlers_.end() ||
- !handlers_[key]->IsInitialized()) {
+ linked_ptr<AudioStreamHandler> handler = GetHandler(key);
+ if (!handler.get())
return false;
- }
- return handlers_[key]->Play();
+ if (!handler->IsInitialized())
+ return false;
+ return handler->Play();
+}
+
+bool SoundsManagerImpl::Stop(SoundKey key) {
+ DCHECK(CalledOnValidThread());
+ linked_ptr<AudioStreamHandler> handler = GetHandler(key);
+ if (!handler.get())
+ return false;
+ if (!handler->IsInitialized())
+ return false;
+ handler->Stop();
+ return true;
}
base::TimeDelta SoundsManagerImpl::GetDuration(SoundKey key) {
DCHECK(CalledOnValidThread());
- if (handlers_.find(key) == handlers_.end() ||
- !handlers_[key]->IsInitialized()) {
+ linked_ptr<AudioStreamHandler> handler = GetHandler(key);
+ if (!handler.get())
+ return base::TimeDelta();
+ if (!handler->IsInitialized())
return base::TimeDelta();
- }
- const WavAudioHandler& wav_audio = handlers_[key]->wav_audio_handler();
+ const WavAudioHandler& wav_audio = handler->wav_audio_handler();
return wav_audio.GetDuration();
}
+linked_ptr<AudioStreamHandler> SoundsManagerImpl::GetHandler(SoundKey key) {
+ auto key_handler_pair_iter = handlers_.find(key);
+ return key_handler_pair_iter == handlers_.end() ?
+ linked_ptr<AudioStreamHandler>() : key_handler_pair_iter->second;
+}
+
} // namespace
SoundsManager::SoundsManager() {}