diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 22:22:46 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-24 22:22:46 +0000 |
commit | e667807890b931d41a4529165bedef5203382bbd (patch) | |
tree | 1ac7430f2e9cd9d6000fdc8fbff28d17c42ad3c6 /media/audio/audio_output_proxy.h | |
parent | c78a2fa648c28bd7874df7b65962975bea027ea0 (diff) | |
download | chromium_src-e667807890b931d41a4529165bedef5203382bbd.zip chromium_src-e667807890b931d41a4529165bedef5203382bbd.tar.gz chromium_src-e667807890b931d41a4529165bedef5203382bbd.tar.bz2 |
Implemented AudioOutputProxy.
AudioOutputProxy implements AudioOutputStream interface, but opens
audio device only when audio is playing.
BUG=39825
TEST=Unittests.
Review URL: http://codereview.chromium.org/5158003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67327 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_output_proxy.h')
-rw-r--r-- | media/audio/audio_output_proxy.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/media/audio/audio_output_proxy.h b/media/audio/audio_output_proxy.h new file mode 100644 index 0000000..4835cc8 --- /dev/null +++ b/media/audio/audio_output_proxy.h @@ -0,0 +1,64 @@ +// Copyright (c) 2010 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. + +#ifndef MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_PROXY_H_ +#define MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_PROXY_H_ + +#include "base/basictypes.h" +#include "base/task.h" +#include "media/audio/audio_io.h" +#include "media/audio/audio_parameters.h" + +class AudioOutputDispatcher; + +// AudioOutputProxy is an audio otput stream that uses resources more +// efficiently than a regular audio output stream: it opens audio +// device only when sound is playing, i.e. between Start() and Stop() +// (there is still one physical stream per each audio output proxy in +// playing state). +// +// AudioOutputProxy uses AudioOutputDispatcher to open and close +// physical output streams. +class AudioOutputProxy : public AudioOutputStream { + public: + // Caller keeps ownership of |dispatcher|. + AudioOutputProxy(AudioOutputDispatcher* dispatcher); + + // AudioOutputStream interface. + virtual bool Open(); + virtual void Start(AudioSourceCallback* callback); + virtual void Stop(); + virtual void SetVolume(double volume); + virtual void GetVolume(double* volume); + virtual void Close(); + + private: + // Needs to access destructor. + friend class DeleteTask<AudioOutputProxy>; + + enum State { + kCreated, + kOpened, + kPlaying, + kClosed, + kError, + }; + + virtual ~AudioOutputProxy(); + + scoped_refptr<AudioOutputDispatcher> dispatcher_; + State state_; + + // The actual audio stream. Must be set to NULL in any state other + // than kPlaying. + AudioOutputStream* physical_stream_; + + // Need to save volume here, so that we can restore it in case the stream + // is stopped, and then started again. + double volume_; + + DISALLOW_COPY_AND_ASSIGN(AudioOutputProxy); +}; + +#endif // MEDIA_AUDIO_AUDIO_OUTPUT_STREAM_PROXY_H_ |