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