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 REMOTING_HOST_AUDIO_CAPTURER_H_
6#define REMOTING_HOST_AUDIO_CAPTURER_H_
7
8#include "base/callback.h"
9#include "base/memory/scoped_ptr.h"
10
11namespace remoting {
12
13class AudioPacket;
14
15class AudioCapturer {
16 public:
17  typedef base::Callback<void(scoped_ptr<AudioPacket> packet)>
18      PacketCapturedCallback;
19
20  virtual ~AudioCapturer() {}
21
22  // Returns true if audio capturing is supported on this platform. If this
23  // returns true, then Create() must not return NULL.
24  static bool IsSupported();
25  static scoped_ptr<AudioCapturer> Create();
26
27  // Capturers should sample at a 44.1 or 48 kHz sampling rate, in uncompressed
28  // PCM stereo format. Capturers may choose the number of frames per packet.
29  // Returns true on success.
30  virtual bool Start(const PacketCapturedCallback& callback) = 0;
31  // Stops the audio capturer, and frees the OS-specific audio capture
32  // resources.
33  virtual void Stop() = 0;
34  // Returns true if the audio capturer is running.
35  virtual bool IsStarted() = 0;
36
37  static bool IsValidSampleRate(int sample_rate);
38};
39
40}  // namespace remoting
41
42#endif  // REMOTING_HOST_AUDIO_CAPTURER_H_
43