| // 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. |
| |
| #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ |
| #define MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/threading/non_thread_safe.h" |
| #include "media/audio/audio_io.h" |
| #include "media/audio/audio_parameters.h" |
| |
| namespace media { |
| |
| 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 MEDIA_EXPORT AudioOutputProxy |
| : public AudioOutputStream, |
| public NON_EXPORTED_BASE(base::NonThreadSafe) { |
| public: |
| // Caller keeps ownership of |dispatcher|. |
| explicit AudioOutputProxy(AudioOutputDispatcher* dispatcher); |
| |
| // AudioOutputStream interface. |
| virtual bool Open() OVERRIDE; |
| virtual void Start(AudioSourceCallback* callback) OVERRIDE; |
| virtual void Stop() OVERRIDE; |
| virtual void SetVolume(double volume) OVERRIDE; |
| virtual void GetVolume(double* volume) OVERRIDE; |
| virtual void Close() OVERRIDE; |
| |
| private: |
| enum State { |
| kCreated, |
| kOpened, |
| kPlaying, |
| kClosed, |
| kOpenError, |
| kStartError, |
| }; |
| |
| virtual ~AudioOutputProxy(); |
| |
| scoped_refptr<AudioOutputDispatcher> dispatcher_; |
| State state_; |
| |
| // 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); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ |