| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 // synchronous reading. | 85 // synchronous reading. |
| 86 class SyncReader { | 86 class SyncReader { |
| 87 public: | 87 public: |
| 88 virtual ~SyncReader() {} | 88 virtual ~SyncReader() {} |
| 89 | 89 |
| 90 // Notify the synchronous reader the number of bytes in the | 90 // Notify the synchronous reader the number of bytes in the |
| 91 // AudioOutputController not yet played. This is used by SyncReader to | 91 // AudioOutputController not yet played. This is used by SyncReader to |
| 92 // prepare more data and perform synchronization. | 92 // prepare more data and perform synchronization. |
| 93 virtual void UpdatePendingBytes(uint32 bytes) = 0; | 93 virtual void UpdatePendingBytes(uint32 bytes) = 0; |
| 94 | 94 |
| 95 // Read certain amount of data into |data|. This method returns if some | 95 // Attempt to completely fill |audio_bus|, return the actual number of |
| 96 // data is available. | 96 // frames that could be read. |
| 97 virtual uint32 Read(void* data, uint32 size) = 0; | 97 virtual int Read(AudioBus* audio_bus) = 0; |
| 98 | 98 |
| 99 // Close this synchronous reader. | 99 // Close this synchronous reader. |
| 100 virtual void Close() = 0; | 100 virtual void Close() = 0; |
| 101 | 101 |
| 102 // Poll if data is ready. | 102 // Poll if data is ready. |
| 103 // Not reliable, as there is no guarantee that renderer is "new-style" | 103 // Not reliable, as there is no guarantee that renderer is "new-style" |
| 104 // renderer that writes metadata into buffer. After several unsuccessful | 104 // renderer that writes metadata into buffer. After several unsuccessful |
| 105 // attempts caller should assume the data is ready even if that function | 105 // attempts caller should assume the data is ready even if that function |
| 106 // returns false. | 106 // returns false. |
| 107 virtual bool DataReady() = 0; | 107 virtual bool DataReady() = 0; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 137 // | 137 // |
| 138 // It is safe to call this method more than once. Calls after the first one | 138 // It is safe to call this method more than once. Calls after the first one |
| 139 // will have no effect. | 139 // will have no effect. |
| 140 void Close(const base::Closure& closed_task); | 140 void Close(const base::Closure& closed_task); |
| 141 | 141 |
| 142 // Sets the volume of the audio output stream. | 142 // Sets the volume of the audio output stream. |
| 143 void SetVolume(double volume); | 143 void SetVolume(double volume); |
| 144 | 144 |
| 145 /////////////////////////////////////////////////////////////////////////// | 145 /////////////////////////////////////////////////////////////////////////// |
| 146 // AudioSourceCallback methods. | 146 // AudioSourceCallback methods. |
| 147 virtual uint32 OnMoreData(uint8* dest, | 147 virtual int OnMoreData(AudioBus* audio_bus, |
| 148 uint32 max_size, | 148 AudioBuffersState buffers_state) OVERRIDE; |
| 149 AudioBuffersState buffers_state) OVERRIDE; | |
| 150 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; | 149 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; |
| 151 virtual void WaitTillDataReady() OVERRIDE; | 150 virtual void WaitTillDataReady() OVERRIDE; |
| 152 | 151 |
| 153 protected: | 152 protected: |
| 154 // Internal state of the source. | 153 // Internal state of the source. |
| 155 enum State { | 154 enum State { |
| 156 kEmpty, | 155 kEmpty, |
| 157 kCreated, | 156 kCreated, |
| 158 kPlaying, | 157 kPlaying, |
| 159 kStarting, | 158 kStarting, |
| 160 kPausedWhenStarting, | 159 kPausedWhenStarting, |
| 161 kPaused, | 160 kPaused, |
| 162 kClosed, | 161 kClosed, |
| 163 kError, | 162 kError, |
| 164 }; | 163 }; |
| 165 | 164 |
| 166 friend class base::RefCountedThreadSafe<AudioOutputController>; | 165 friend class base::RefCountedThreadSafe<AudioOutputController>; |
| 167 virtual ~AudioOutputController(); | 166 virtual ~AudioOutputController(); |
| 168 | 167 |
| 169 private: | 168 private: |
| 170 // We are polling sync reader if data became available. | 169 // We are polling sync reader if data became available. |
| 171 static const int kPollNumAttempts; | 170 static const int kPollNumAttempts; |
| 172 static const int kPollPauseInMilliseconds; | 171 static const int kPollPauseInMilliseconds; |
| 173 | 172 |
| 174 AudioOutputController(EventHandler* handler, | 173 AudioOutputController(EventHandler* handler, |
| 175 SyncReader* sync_reader); | 174 SyncReader* sync_reader, |
| 175 const AudioParameters& params); |
| 176 | 176 |
| 177 // The following methods are executed on the audio manager thread. | 177 // The following methods are executed on the audio manager thread. |
| 178 void DoCreate(AudioManager* audio_manager, const AudioParameters& params); | 178 void DoCreate(AudioManager* audio_manager); |
| 179 void DoPlay(); | 179 void DoPlay(); |
| 180 void PollAndStartIfDataReady(); | 180 void PollAndStartIfDataReady(); |
| 181 void DoPause(); | 181 void DoPause(); |
| 182 void DoFlush(); | 182 void DoFlush(); |
| 183 void DoClose(); | 183 void DoClose(); |
| 184 void DoSetVolume(double volume); | 184 void DoSetVolume(double volume); |
| 185 void DoReportError(int code); | 185 void DoReportError(int code); |
| 186 | 186 |
| 187 // Helper method that starts physical stream. | 187 // Helper method that starts physical stream. |
| 188 void StartStream(); | 188 void StartStream(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 210 // SyncReader is used only in low latency mode for synchronous reading. | 210 // SyncReader is used only in low latency mode for synchronous reading. |
| 211 SyncReader* sync_reader_; | 211 SyncReader* sync_reader_; |
| 212 | 212 |
| 213 // The message loop of audio manager thread that this object runs on. | 213 // The message loop of audio manager thread that this object runs on. |
| 214 scoped_refptr<base::MessageLoopProxy> message_loop_; | 214 scoped_refptr<base::MessageLoopProxy> message_loop_; |
| 215 | 215 |
| 216 // When starting stream we wait for data to become available. | 216 // When starting stream we wait for data to become available. |
| 217 // Number of times left. | 217 // Number of times left. |
| 218 int number_polling_attempts_left_; | 218 int number_polling_attempts_left_; |
| 219 | 219 |
| 220 AudioParameters params_; |
| 221 |
| 220 // Used to post delayed tasks to ourselves that we can cancel. | 222 // Used to post delayed tasks to ourselves that we can cancel. |
| 221 // We don't want the tasks to hold onto a reference as it will slow down | 223 // We don't want the tasks to hold onto a reference as it will slow down |
| 222 // shutdown and force it to wait for the most delayed task. | 224 // shutdown and force it to wait for the most delayed task. |
| 223 // Also, if we're shutting down, we do not want to poll for more data. | 225 // Also, if we're shutting down, we do not want to poll for more data. |
| 224 base::WeakPtrFactory<AudioOutputController> weak_this_; | 226 base::WeakPtrFactory<AudioOutputController> weak_this_; |
| 225 | 227 |
| 226 DISALLOW_COPY_AND_ASSIGN(AudioOutputController); | 228 DISALLOW_COPY_AND_ASSIGN(AudioOutputController); |
| 227 }; | 229 }; |
| 228 | 230 |
| 229 } // namespace media | 231 } // namespace media |
| 230 | 232 |
| 231 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ | 233 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ |
| OLD | NEW |