1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_AUDIO_CLOCKLESS_AUDIO_SINK_H_ 6 #define MEDIA_AUDIO_CLOCKLESS_AUDIO_SINK_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/time/time.h" 10 #include "media/base/audio_renderer_sink.h" 11 12 namespace base { 13 class MessageLoopProxy; 14 } 15 16 namespace media { 17 class AudioBus; 18 class ClocklessAudioSinkThread; 19 20 // Implementation of an AudioRendererSink that consumes the audio as fast as 21 // possible. This class does not support multiple Play()/Pause() events. 22 class MEDIA_EXPORT ClocklessAudioSink NON_EXPORTED_BASE(public AudioRendererSink)23 : NON_EXPORTED_BASE(public AudioRendererSink) { 24 public: 25 ClocklessAudioSink(); 26 27 // AudioRendererSink implementation. 28 virtual void Initialize(const AudioParameters& params, 29 RenderCallback* callback) OVERRIDE; 30 virtual void Start() OVERRIDE; 31 virtual void Stop() OVERRIDE; 32 virtual void Pause() OVERRIDE; 33 virtual void Play() OVERRIDE; 34 virtual bool SetVolume(double volume) OVERRIDE; 35 36 // Returns the time taken to consume all the audio. 37 base::TimeDelta render_time() { return playback_time_; } 38 39 protected: 40 virtual ~ClocklessAudioSink(); 41 42 private: 43 scoped_ptr<ClocklessAudioSinkThread> thread_; 44 bool initialized_; 45 bool playing_; 46 47 // Time taken in last set of Render() calls. 48 base::TimeDelta playback_time_; 49 50 DISALLOW_COPY_AND_ASSIGN(ClocklessAudioSink); 51 }; 52 53 } // namespace media 54 55 #endif // MEDIA_AUDIO_CLOCKLESS_AUDIO_SINK_H_ 56