Home | History | Annotate | Download | only in base
      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:
     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