Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: media/audio/audio_output_controller.h

Issue 10830268: Allow audio system to handle synchronized low-latency audio I/O (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 virtual void OnPlaying(AudioOutputController* controller) = 0; 76 virtual void OnPlaying(AudioOutputController* controller) = 0;
77 virtual void OnPaused(AudioOutputController* controller) = 0; 77 virtual void OnPaused(AudioOutputController* controller) = 0;
78 virtual void OnError(AudioOutputController* controller, int error_code) = 0; 78 virtual void OnError(AudioOutputController* controller, int error_code) = 0;
79 79
80 protected: 80 protected:
81 virtual ~EventHandler() {} 81 virtual ~EventHandler() {}
82 }; 82 };
83 83
84 // A synchronous reader interface used by AudioOutputController for 84 // A synchronous reader interface used by AudioOutputController for
85 // synchronous reading. 85 // synchronous reading.
86 // TODO(crogers): find a better name for this class and the Read() method
87 // now that it can handle synchronized I/O.
86 class SyncReader { 88 class SyncReader {
87 public: 89 public:
88 virtual ~SyncReader() {} 90 virtual ~SyncReader() {}
89 91
90 // Notify the synchronous reader the number of bytes in the 92 // Notify the synchronous reader the number of bytes in the
91 // AudioOutputController not yet played. This is used by SyncReader to 93 // AudioOutputController not yet played. This is used by SyncReader to
92 // prepare more data and perform synchronization. 94 // prepare more data and perform synchronization.
93 virtual void UpdatePendingBytes(uint32 bytes) = 0; 95 virtual void UpdatePendingBytes(uint32 bytes) = 0;
94 96
95 // Attempt to completely fill |audio_bus|, return the actual number of 97 // Attempt to completely fill |dest|, return the actual number of
96 // frames that could be read. 98 // frames that could be read.
97 virtual int Read(AudioBus* audio_bus) = 0; 99 // |source| may optionally be provided for input data.
100 virtual int Read(AudioBus* source, AudioBus* dest) = 0;
henrika (OOO until Aug 14) 2012/09/11 21:44:48 You could also create two different Read methods,
98 101
99 // Close this synchronous reader. 102 // Close this synchronous reader.
100 virtual void Close() = 0; 103 virtual void Close() = 0;
101 104
102 // Poll if data is ready. 105 // Poll if data is ready.
103 // Not reliable, as there is no guarantee that renderer is "new-style" 106 // Not reliable, as there is no guarantee that renderer is "new-style"
104 // renderer that writes metadata into buffer. After several unsuccessful 107 // renderer that writes metadata into buffer. After several unsuccessful
105 // attempts caller should assume the data is ready even if that function 108 // attempts caller should assume the data is ready even if that function
106 // returns false. 109 // returns false.
107 virtual bool DataReady() = 0; 110 virtual bool DataReady() = 0;
(...skipping 29 matching lines...) Expand all
137 // 140 //
138 // It is safe to call this method more than once. Calls after the first one 141 // It is safe to call this method more than once. Calls after the first one
139 // will have no effect. 142 // will have no effect.
140 void Close(const base::Closure& closed_task); 143 void Close(const base::Closure& closed_task);
141 144
142 // Sets the volume of the audio output stream. 145 // Sets the volume of the audio output stream.
143 void SetVolume(double volume); 146 void SetVolume(double volume);
144 147
145 /////////////////////////////////////////////////////////////////////////// 148 ///////////////////////////////////////////////////////////////////////////
146 // AudioSourceCallback methods. 149 // AudioSourceCallback methods.
147 virtual int OnMoreData(AudioBus* audio_bus, 150 virtual int OnMoreData(AudioBus* dest,
148 AudioBuffersState buffers_state) OVERRIDE; 151 AudioBuffersState buffers_state) OVERRIDE;
152 virtual int OnMoreIOData(AudioBus* source,
153 AudioBus* dest,
154 AudioBuffersState buffers_state) OVERRIDE;
149 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; 155 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE;
150 virtual void WaitTillDataReady() OVERRIDE; 156 virtual void WaitTillDataReady() OVERRIDE;
151 157
152 protected: 158 protected:
153 // Internal state of the source. 159 // Internal state of the source.
154 enum State { 160 enum State {
155 kEmpty, 161 kEmpty,
156 kCreated, 162 kCreated,
157 kPlaying, 163 kPlaying,
158 kStarting, 164 kStarting,
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 // shutdown and force it to wait for the most delayed task. 230 // shutdown and force it to wait for the most delayed task.
225 // Also, if we're shutting down, we do not want to poll for more data. 231 // Also, if we're shutting down, we do not want to poll for more data.
226 base::WeakPtrFactory<AudioOutputController> weak_this_; 232 base::WeakPtrFactory<AudioOutputController> weak_this_;
227 233
228 DISALLOW_COPY_AND_ASSIGN(AudioOutputController); 234 DISALLOW_COPY_AND_ASSIGN(AudioOutputController);
229 }; 235 };
230 236
231 } // namespace media 237 } // namespace media
232 238
233 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_ 239 #endif // MEDIA_AUDIO_AUDIO_OUTPUT_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698