Index: media/audio/audio_output_controller.h |
diff --git a/media/audio/audio_output_controller.h b/media/audio/audio_output_controller.h |
index 762a9483d0fb51d1bdeed0cfa08a042508bab368..18ffa1a15b2829e5b1aa27c9e7b4c0a3e0394627 100644 |
--- a/media/audio/audio_output_controller.h |
+++ b/media/audio/audio_output_controller.h |
@@ -65,7 +65,6 @@ namespace media { |
class MEDIA_EXPORT AudioOutputController |
: public base::RefCountedThreadSafe<AudioOutputController>, |
- public AudioOutputStream::AudioSourceCallback, |
NON_EXPORTED_BASE(public AudioManager::AudioDeviceListener) { |
public: |
// An event handler that receives events from the AudioOutputController. The |
@@ -139,21 +138,27 @@ class MEDIA_EXPORT AudioOutputController |
// Sets the volume of the audio output stream. |
void SetVolume(double volume); |
- // AudioSourceCallback implementation. |
- virtual int OnMoreData(AudioBus* dest, |
- AudioBuffersState buffers_state) OVERRIDE; |
- virtual int OnMoreIOData(AudioBus* source, |
- AudioBus* dest, |
- AudioBuffersState buffers_state) OVERRIDE; |
- virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; |
- virtual void WaitTillDataReady() OVERRIDE; |
- |
// AudioDeviceListener implementation. When called AudioOutputController will |
// shutdown the existing |stream_|, transition to the kRecreating state, |
// create a new stream, and then transition back to an equivalent state prior |
// to being called. |
virtual void OnDeviceChange() OVERRIDE; |
+ // Accessor to audio output parameters. |
+ const AudioParameters& params() const { return params_; } |
+ |
+ // Stops the normal audio output stream and creates an AudioSourceCallback to |
+ // provide audio data to some other destination. The given object will always |
+ // return data when OnMoreData() is invoked, even if the underlying |
+ // implementation is paused/stopped. AudioOutputController retains ownership |
+ // of the returned object. |
+ AudioOutputStream::AudioSourceCallback* Divert(); |
+ |
+ // Restores normal audio output behavior for the current playback state. |
+ // |asc| is the pointer returned by the previous call to Divert() and becomes |
+ // invalid once this method is called. |
+ void Revert(AudioOutputStream::AudioSourceCallback* asc); |
+ |
protected: |
// Internal state of the source. |
enum State { |
@@ -172,6 +177,8 @@ class MEDIA_EXPORT AudioOutputController |
virtual ~AudioOutputController(); |
private: |
+ class SourceSharingCallback; |
DaleCurtis
2012/12/12 20:38:38
Don't nest, allows you to avoid huge method prefix
miu
2012/12/13 01:22:51
I removed this.
|
+ |
// We are polling sync reader if data became available. |
static const int kPollNumAttempts; |
static const int kPollPauseInMilliseconds; |
@@ -196,12 +203,19 @@ class MEDIA_EXPORT AudioOutputController |
// Signals event when done if it is not NULL. |
void DoStopCloseAndClearStream(base::WaitableEvent *done); |
- AudioManager* audio_manager_; |
+ AudioManager* const audio_manager_; |
+ const AudioParameters params_; |
// |handler_| may be called only if |state_| is not kClosed. |
EventHandler* handler_; |
+ |
+ // AudioManager-owned stream. |
AudioOutputStream* stream_; |
+ // Consumers of audio data which share sync_reader_. |
+ scoped_refptr<SourceSharingCallback> callback_for_stream_; |
+ scoped_refptr<SourceSharingCallback> callback_for_divert_; |
+ |
// The current volume of the audio stream. |
double volume_; |
@@ -210,10 +224,6 @@ class MEDIA_EXPORT AudioOutputController |
// is not required for reading on the audio manager thread. |
State state_; |
- // The |lock_| must be acquired whenever we access |state_| from a thread |
- // other than the audio manager thread. |
- base::Lock lock_; |
- |
// SyncReader is used only in low latency mode for synchronous reading. |
SyncReader* sync_reader_; |
@@ -224,8 +234,6 @@ class MEDIA_EXPORT AudioOutputController |
// Number of times left. |
int number_polling_attempts_left_; |
- AudioParameters params_; |
- |
// Used to post delayed tasks to ourselves that we can cancel. |
// We don't want the tasks to hold onto a reference as it will slow down |
// shutdown and force it to wait for the most delayed task. |