virtual_audio_output_stream.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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_AUDIO_VIRTUAL_AUDIO_OUTPUT_STREAM_H_ 6#define MEDIA_AUDIO_VIRTUAL_AUDIO_OUTPUT_STREAM_H_ 7 8#include "base/callback.h" 9#include "media/audio/audio_io.h" 10#include "media/audio/audio_parameters.h" 11#include "media/base/audio_converter.h" 12 13namespace base { 14class MessageLoopProxy; 15} 16 17namespace media { 18 19class VirtualAudioInputStream; 20 21// VirtualAudioOutputStream attaches to a VirtualAudioInputStream when Start() 22// is called and is used as an audio source. VirtualAudioOutputStream also 23// implements an interface so it can be used as an input to AudioConverter so 24// that we can get audio frames that match the AudioParameters that 25// VirtualAudioInputStream expects. 26class MEDIA_EXPORT VirtualAudioOutputStream 27 : public AudioOutputStream, 28 public AudioConverter::InputCallback { 29 public: 30 // Callback invoked just after VirtualAudioOutputStream is closed. 31 typedef base::Callback<void(VirtualAudioOutputStream* vaos)> 32 AfterCloseCallback; 33 34 // Construct an audio loopback pathway to the given |target| (not owned). 35 // |target| must outlive this instance. 36 VirtualAudioOutputStream(const AudioParameters& params, 37 base::MessageLoopProxy* message_loop, 38 VirtualAudioInputStream* target, 39 const AfterCloseCallback& after_close_cb); 40 41 virtual ~VirtualAudioOutputStream(); 42 43 // AudioOutputStream: 44 virtual bool Open() OVERRIDE; 45 virtual void Start(AudioSourceCallback* callback) OVERRIDE; 46 virtual void Stop() OVERRIDE; 47 virtual void SetVolume(double volume) OVERRIDE; 48 virtual void GetVolume(double* volume) OVERRIDE; 49 virtual void Close() OVERRIDE; 50 51 private: 52 // AudioConverter::InputCallback: 53 virtual double ProvideInput(AudioBus* audio_bus, 54 base::TimeDelta buffer_delay) OVERRIDE; 55 56 const AudioParameters params_; 57 base::MessageLoopProxy* const message_loop_; 58 // Pointer to the VirtualAudioInputStream to attach to when Start() is called. 59 // This pointer should always be valid because VirtualAudioInputStream should 60 // outlive this class. 61 VirtualAudioInputStream* const target_input_stream_; 62 63 AfterCloseCallback after_close_cb_; 64 65 AudioSourceCallback* callback_; 66 double volume_; 67 68 DISALLOW_COPY_AND_ASSIGN(VirtualAudioOutputStream); 69}; 70 71} // namespace media 72 73#endif // MEDIA_AUDIO_VIRTUAL_AUDIO_OUTPUT_STREAM_H_ 74