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 12namespace base { 13class MessageLoopProxy; 14} 15 16namespace media { 17class AudioBus; 18class 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. 22class MEDIA_EXPORT ClocklessAudioSink 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