audio_renderer_sink.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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/memory/ref_counted.h" 11#include "media/audio/audio_parameters.h" 12#include "media/base/audio_bus.h" 13#include "media/base/media_export.h" 14 15namespace media { 16 17// AudioRendererSink is an interface representing the end-point for 18// rendered audio. An implementation is expected to 19// periodically call Render() on a callback object. 20 21class AudioRendererSink 22 : public base::RefCountedThreadSafe<media::AudioRendererSink> { 23 public: 24 class RenderCallback { 25 public: 26 // Attempts to completely fill all channels of |dest|, returns actual 27 // number of frames filled. 28 virtual int Render(AudioBus* dest, int audio_delay_milliseconds) = 0; 29 30 // Synchronized audio I/O - see InitializeIO() below. 31 virtual void RenderIO(AudioBus* source, 32 AudioBus* dest, 33 int audio_delay_milliseconds) {} 34 35 // Signals an error has occurred. 36 virtual void OnRenderError() = 0; 37 38 protected: 39 virtual ~RenderCallback() {} 40 }; 41 42 // Sets important information about the audio stream format. 43 // It must be called before any of the other methods. 44 virtual void Initialize(const AudioParameters& params, 45 RenderCallback* callback) = 0; 46 47 // InitializeIO() may be called instead of Initialize() for clients who wish 48 // to have synchronized input and output. |input_channels| specifies the 49 // number of input channels which will be at the same sample-rate 50 // and buffer-size as the output as specified in |params|. 51 // The callback's RenderIO() method will be called instead of Render(), 52 // providing the synchronized input data at the same time as when new 53 // output data is to be rendered. 54 virtual void InitializeIO(const AudioParameters& params, 55 int input_channels, 56 RenderCallback* callback) {} 57 58 // Starts audio playback. 59 virtual void Start() = 0; 60 61 // Stops audio playback. 62 virtual void Stop() = 0; 63 64 // Pauses playback. 65 virtual void Pause(bool flush) = 0; 66 67 // Resumes playback after calling Pause(). 68 virtual void Play() = 0; 69 70 // Sets the playback volume, with range [0.0, 1.0] inclusive. 71 // Returns |true| on success. 72 virtual bool SetVolume(double volume) = 0; 73 74 protected: 75 friend class base::RefCountedThreadSafe<AudioRendererSink>; 76 virtual ~AudioRendererSink() {} 77}; 78 79} // namespace media 80 81#endif // MEDIA_BASE_AUDIO_RENDERER_SINK_H_ 82