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 3// found in the LICENSE file. 4 5#ifndef MEDIA_BASE_AUDIO_RENDERER_SINK_H_ 6#define MEDIA_BASE_AUDIO_RENDERER_SINK_H_ 7 8#include <vector> 9#include "base/basictypes.h" 10#include "base/logging.h" 11#include "base/memory/ref_counted.h" 12#include "media/audio/audio_parameters.h" 13#include "media/base/audio_bus.h" 14#include "media/base/media_export.h" 15 16namespace media { 17 18// AudioRendererSink is an interface representing the end-point for 19// rendered audio. An implementation is expected to 20// periodically call Render() on a callback object. 21 22class AudioRendererSink 23 : public base::RefCountedThreadSafe<media::AudioRendererSink> { 24 public: 25 class RenderCallback { 26 public: 27 // Attempts to completely fill all channels of |dest|, returns actual 28 // number of frames filled. 29 virtual int Render(AudioBus* dest, int audio_delay_milliseconds) = 0; 30 31 // Signals an error has occurred. 32 virtual void OnRenderError() = 0; 33 34 protected: 35 virtual ~RenderCallback() {} 36 }; 37 38 // Sets important information about the audio stream format. 39 // It must be called before any of the other methods. 40 virtual void Initialize(const AudioParameters& params, 41 RenderCallback* callback) = 0; 42 43 // Starts audio playback. 44 virtual void Start() = 0; 45 46 // Stops audio playback. 47 virtual void Stop() = 0; 48 49 // Pauses playback. 50 virtual void Pause() = 0; 51 52 // Resumes playback after calling Pause(). 53 virtual void Play() = 0; 54 55 // Sets the playback volume, with range [0.0, 1.0] inclusive. 56 // Returns |true| on success. 57 virtual bool SetVolume(double volume) = 0; 58 59 protected: 60 friend class base::RefCountedThreadSafe<AudioRendererSink>; 61 virtual ~AudioRendererSink() {} 62}; 63 64} // namespace media 65 66#endif // MEDIA_BASE_AUDIO_RENDERER_SINK_H_ 67