1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ 6 #define MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "base/memory/ref_counted.h" 11 #include "base/threading/non_thread_safe.h" 12 #include "media/audio/audio_io.h" 13 #include "media/audio/audio_parameters.h" 14 15 namespace media { 16 17 class AudioOutputDispatcher; 18 19 // AudioOutputProxy is an audio otput stream that uses resources more 20 // efficiently than a regular audio output stream: it opens audio 21 // device only when sound is playing, i.e. between Start() and Stop() 22 // (there is still one physical stream per each audio output proxy in 23 // playing state). 24 // 25 // AudioOutputProxy uses AudioOutputDispatcher to open and close 26 // physical output streams. 27 class MEDIA_EXPORT AudioOutputProxy 28 : public AudioOutputStream, 29 public NON_EXPORTED_BASE(base::NonThreadSafe) { 30 public: 31 // Caller keeps ownership of |dispatcher|. 32 explicit AudioOutputProxy(AudioOutputDispatcher* dispatcher); 33 34 // AudioOutputStream interface. 35 virtual bool Open() OVERRIDE; 36 virtual void Start(AudioSourceCallback* callback) OVERRIDE; 37 virtual void Stop() OVERRIDE; 38 virtual void SetVolume(double volume) OVERRIDE; 39 virtual void GetVolume(double* volume) OVERRIDE; 40 virtual void Close() OVERRIDE; 41 42 private: 43 enum State { 44 kCreated, 45 kOpened, 46 kPlaying, 47 kClosed, 48 kOpenError, 49 kStartError, 50 }; 51 52 virtual ~AudioOutputProxy(); 53 54 scoped_refptr<AudioOutputDispatcher> dispatcher_; 55 State state_; 56 57 // Need to save volume here, so that we can restore it in case the stream 58 // is stopped, and then started again. 59 double volume_; 60 61 DISALLOW_COPY_AND_ASSIGN(AudioOutputProxy); 62 }; 63 64 } // namespace media 65 66 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_PROXY_H_ 67