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

Side by Side Diff: media/filters/audio_renderer_impl.h

Issue 403723006: Make media::AudioRenderer inherit from media::TimeSource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 // Audio rendering unit utilizing an AudioRendererSink to output data. 5 // Audio rendering unit utilizing an AudioRendererSink to output data.
6 // 6 //
7 // This class lives inside three threads during it's lifetime, namely: 7 // This class lives inside three threads during it's lifetime, namely:
8 // 1. Render thread 8 // 1. Render thread
9 // Where the object is created. 9 // Where the object is created.
10 // 2. Media thread (provided via constructor) 10 // 2. Media thread (provided via constructor)
(...skipping 16 matching lines...) Expand all
27 #include "base/synchronization/lock.h" 27 #include "base/synchronization/lock.h"
28 #include "media/base/audio_decoder.h" 28 #include "media/base/audio_decoder.h"
29 #include "media/base/audio_renderer.h" 29 #include "media/base/audio_renderer.h"
30 #include "media/base/audio_renderer_sink.h" 30 #include "media/base/audio_renderer_sink.h"
31 #include "media/base/decryptor.h" 31 #include "media/base/decryptor.h"
32 #include "media/filters/audio_renderer_algorithm.h" 32 #include "media/filters/audio_renderer_algorithm.h"
33 #include "media/filters/decoder_stream.h" 33 #include "media/filters/decoder_stream.h"
34 34
35 namespace base { 35 namespace base {
36 class SingleThreadTaskRunner; 36 class SingleThreadTaskRunner;
37 class TickClock;
37 } 38 }
38 39
39 namespace media { 40 namespace media {
40 41
41 class AudioBufferConverter; 42 class AudioBufferConverter;
42 class AudioBus; 43 class AudioBus;
43 class AudioClock; 44 class AudioClock;
44 class AudioHardwareConfig; 45 class AudioHardwareConfig;
45 class AudioSplicer; 46 class AudioSplicer;
46 class DecryptingDemuxerStream; 47 class DecryptingDemuxerStream;
(...skipping 11 matching lines...) Expand all
58 // |set_decryptor_ready_cb| is fired when the audio decryptor is available 59 // |set_decryptor_ready_cb| is fired when the audio decryptor is available
59 // (only applicable if the stream is encrypted and we have a decryptor). 60 // (only applicable if the stream is encrypted and we have a decryptor).
60 AudioRendererImpl( 61 AudioRendererImpl(
61 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 62 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
62 AudioRendererSink* sink, 63 AudioRendererSink* sink,
63 ScopedVector<AudioDecoder> decoders, 64 ScopedVector<AudioDecoder> decoders,
64 const SetDecryptorReadyCB& set_decryptor_ready_cb, 65 const SetDecryptorReadyCB& set_decryptor_ready_cb,
65 AudioHardwareConfig* hardware_params); 66 AudioHardwareConfig* hardware_params);
66 virtual ~AudioRendererImpl(); 67 virtual ~AudioRendererImpl();
67 68
69 // TimeSource implementation.
xhwang 2014/07/21 22:10:06 Since AudioRenderer inherits TimeSource, this is n
70 virtual void StartTicking() OVERRIDE;
71 virtual void StopTicking() OVERRIDE;
72 virtual void SetPlaybackRate(float rate) OVERRIDE;
73 virtual void SetMediaTime(base::TimeDelta timestamp) OVERRIDE;
74 virtual base::TimeDelta CurrentMediaTime() OVERRIDE;
75
68 // AudioRenderer implementation. 76 // AudioRenderer implementation.
69 virtual void Initialize(DemuxerStream* stream, 77 virtual void Initialize(DemuxerStream* stream,
70 const PipelineStatusCB& init_cb, 78 const PipelineStatusCB& init_cb,
71 const StatisticsCB& statistics_cb, 79 const StatisticsCB& statistics_cb,
72 const TimeCB& time_cb, 80 const TimeCB& time_cb,
73 const BufferingStateCB& buffering_state_cb, 81 const BufferingStateCB& buffering_state_cb,
74 const base::Closure& ended_cb, 82 const base::Closure& ended_cb,
75 const PipelineStatusCB& error_cb) OVERRIDE; 83 const PipelineStatusCB& error_cb) OVERRIDE;
76 virtual void StartRendering() OVERRIDE;
77 virtual void StopRendering() OVERRIDE;
78 virtual void SetMediaTime(base::TimeDelta time) OVERRIDE;
79 virtual void Flush(const base::Closure& callback) OVERRIDE; 84 virtual void Flush(const base::Closure& callback) OVERRIDE;
80 virtual void Stop(const base::Closure& callback) OVERRIDE; 85 virtual void Stop(const base::Closure& callback) OVERRIDE;
81 virtual void SetPlaybackRate(float rate) OVERRIDE;
82 virtual void StartPlaying() OVERRIDE; 86 virtual void StartPlaying() OVERRIDE;
83 virtual void SetVolume(float volume) OVERRIDE; 87 virtual void SetVolume(float volume) OVERRIDE;
84 88
89 void SetTickClockForTesting(scoped_ptr<base::TickClock> tick_clock);
90
85 private: 91 private:
86 friend class AudioRendererImplTest; 92 friend class AudioRendererImplTest;
87 93
88 // Important detail: being in kPlaying doesn't imply that audio is being 94 // Important detail: being in kPlaying doesn't imply that audio is being
89 // rendered. Rather, it means that the renderer is ready to go. The actual 95 // rendered. Rather, it means that the renderer is ready to go. The actual
90 // rendering of audio is controlled via Start/StopRendering(). 96 // rendering of audio is controlled via Start/StopRendering().
91 // 97 //
92 // kUninitialized 98 // kUninitialized
93 // | Initialize() 99 // | Initialize()
94 // | 100 // |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 // Callbacks provided during Initialize(). 216 // Callbacks provided during Initialize().
211 PipelineStatusCB init_cb_; 217 PipelineStatusCB init_cb_;
212 TimeCB time_cb_; 218 TimeCB time_cb_;
213 BufferingStateCB buffering_state_cb_; 219 BufferingStateCB buffering_state_cb_;
214 base::Closure ended_cb_; 220 base::Closure ended_cb_;
215 PipelineStatusCB error_cb_; 221 PipelineStatusCB error_cb_;
216 222
217 // Callback provided to Flush(). 223 // Callback provided to Flush().
218 base::Closure flush_cb_; 224 base::Closure flush_cb_;
219 225
226 scoped_ptr<base::TickClock> tick_clock_;
227
220 // After Initialize() has completed, all variables below must be accessed 228 // After Initialize() has completed, all variables below must be accessed
221 // under |lock_|. ------------------------------------------------------------ 229 // under |lock_|. ------------------------------------------------------------
222 base::Lock lock_; 230 base::Lock lock_;
223 231
224 // Algorithm for scaling audio. 232 // Algorithm for scaling audio.
225 scoped_ptr<AudioRendererAlgorithm> algorithm_; 233 scoped_ptr<AudioRendererAlgorithm> algorithm_;
226 234
227 // Simple state tracking variable. 235 // Simple state tracking variable.
228 State state_; 236 State state_;
229 237
230 BufferingState buffering_state_; 238 BufferingState buffering_state_;
231 239
232 // Keep track of whether or not the sink is playing and whether we should be 240 // Keep track of whether or not the sink is playing and whether we should be
233 // rendering. 241 // rendering.
234 bool rendering_; 242 bool rendering_;
235 bool sink_playing_; 243 bool sink_playing_;
236 244
237 // Keep track of our outstanding read to |decoder_|. 245 // Keep track of our outstanding read to |decoder_|.
238 bool pending_read_; 246 bool pending_read_;
239 247
240 // Keeps track of whether we received and rendered the end of stream buffer. 248 // Keeps track of whether we received and rendered the end of stream buffer.
241 bool received_end_of_stream_; 249 bool received_end_of_stream_;
242 bool rendered_end_of_stream_; 250 bool rendered_end_of_stream_;
243 251
244 scoped_ptr<AudioClock> audio_clock_; 252 scoped_ptr<AudioClock> audio_clock_;
253 base::TimeTicks last_render_ticks_;
245 254
246 base::TimeDelta start_timestamp_; 255 base::TimeDelta start_timestamp_;
247 256
248 // End variables which must be accessed under |lock_|. ---------------------- 257 // End variables which must be accessed under |lock_|. ----------------------
249 258
250 // NOTE: Weak pointers must be invalidated before all other member variables. 259 // NOTE: Weak pointers must be invalidated before all other member variables.
251 base::WeakPtrFactory<AudioRendererImpl> weak_factory_; 260 base::WeakPtrFactory<AudioRendererImpl> weak_factory_;
252 261
253 DISALLOW_COPY_AND_ASSIGN(AudioRendererImpl); 262 DISALLOW_COPY_AND_ASSIGN(AudioRendererImpl);
254 }; 263 };
255 264
256 } // namespace media 265 } // namespace media
257 266
258 #endif // MEDIA_FILTERS_AUDIO_RENDERER_IMPL_H_ 267 #endif // MEDIA_FILTERS_AUDIO_RENDERER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698