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 16 namespace 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 22 class 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: ~RenderCallback()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>; ~AudioRendererSink()61 virtual ~AudioRendererSink() {} 62 }; 63 64 } // namespace media 65 66 #endif // MEDIA_BASE_AUDIO_RENDERER_SINK_H_ 67