OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ | 5 #ifndef MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ |
6 #define MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ | 6 #define MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ |
7 | 7 |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 AudioBuffersState buffers_state) OVERRIDE; | 151 AudioBuffersState buffers_state) OVERRIDE; |
152 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; | 152 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; |
153 virtual void WaitTillDataReady() OVERRIDE; | 153 virtual void WaitTillDataReady() OVERRIDE; |
154 | 154 |
155 // AudioDeviceListener implementation. When called AudioOutputController will | 155 // AudioDeviceListener implementation. When called AudioOutputController will |
156 // shutdown the existing |stream_|, transition to the kRecreating state, | 156 // shutdown the existing |stream_|, transition to the kRecreating state, |
157 // create a new stream, and then transition back to an equivalent state prior | 157 // create a new stream, and then transition back to an equivalent state prior |
158 // to being called. | 158 // to being called. |
159 virtual void OnDeviceChange() OVERRIDE; | 159 virtual void OnDeviceChange() OVERRIDE; |
160 | 160 |
| 161 // Accessor to audio output parameters. |
| 162 const AudioParameters& params() const { return params_; } |
| 163 |
| 164 // Stops the normal audio output stream and creates an AudioSourceCallback to |
| 165 // provide audio data to some other destination. The given object will always |
| 166 // return data when OnMoreData() is invoked, even if the underlying |
| 167 // implementation is paused/stopped. AudioOutputController retains ownership |
| 168 // of the returned object. |
| 169 AudioOutputStream::AudioSourceCallback* Divert(); |
| 170 |
| 171 // Restores normal audio output behavior for the current playback state. |
| 172 // |asc| is the pointer returned by the previous call to Divert() and becomes |
| 173 // invalid once this method is called. |
| 174 void Revert(AudioOutputStream::AudioSourceCallback* asc); |
| 175 |
161 protected: | 176 protected: |
162 // Internal state of the source. | 177 // Internal state of the source. |
163 enum State { | 178 enum State { |
164 kEmpty, | 179 kEmpty, |
165 kCreated, | 180 kCreated, |
166 kPlaying, | 181 kPlaying, |
167 kStarting, | 182 kStarting, |
168 kPausedWhenStarting, | 183 kPausedWhenStarting, |
169 kPaused, | 184 kPaused, |
170 kClosed, | 185 kClosed, |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // SyncReader is used only in low latency mode for synchronous reading. | 236 // SyncReader is used only in low latency mode for synchronous reading. |
222 SyncReader* sync_reader_; | 237 SyncReader* sync_reader_; |
223 | 238 |
224 // The message loop of audio manager thread that this object runs on. | 239 // The message loop of audio manager thread that this object runs on. |
225 scoped_refptr<base::MessageLoopProxy> message_loop_; | 240 scoped_refptr<base::MessageLoopProxy> message_loop_; |
226 | 241 |
227 // When starting stream we wait for data to become available. | 242 // When starting stream we wait for data to become available. |
228 // Number of times left. | 243 // Number of times left. |
229 int number_polling_attempts_left_; | 244 int number_polling_attempts_left_; |
230 | 245 |
231 AudioParameters params_; | 246 const AudioParameters params_; |
232 | 247 |
233 // Used to post delayed tasks to ourselves that we can cancel. | 248 // Used to post delayed tasks to ourselves that we can cancel. |
234 // We don't want the tasks to hold onto a reference as it will slow down | 249 // We don't want the tasks to hold onto a reference as it will slow down |
235 // shutdown and force it to wait for the most delayed task. | 250 // shutdown and force it to wait for the most delayed task. |
236 // Also, if we're shutting down, we do not want to poll for more data. | 251 // Also, if we're shutting down, we do not want to poll for more data. |
237 base::WeakPtrFactory<AudioOutputController> weak_this_; | 252 base::WeakPtrFactory<AudioOutputController> weak_this_; |
238 | 253 |
239 DISALLOW_COPY_AND_ASSIGN(AudioOutputController); | 254 DISALLOW_COPY_AND_ASSIGN(AudioOutputController); |
240 }; | 255 }; |
241 | 256 |
242 } // namespace media | 257 } // namespace media |
243 | 258 |
244 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ | 259 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ |
OLD | NEW |