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#include "remoting/host/ipc_audio_capturer.h"
6
7#include "remoting/host/desktop_session_proxy.h"
8#include "remoting/proto/audio.pb.h"
9
10namespace remoting {
11
12IpcAudioCapturer::IpcAudioCapturer(
13    scoped_refptr<DesktopSessionProxy> desktop_session_proxy)
14    : desktop_session_proxy_(desktop_session_proxy),
15      weak_factory_(this) {
16}
17
18IpcAudioCapturer::~IpcAudioCapturer() {
19}
20
21bool IpcAudioCapturer::Start(const PacketCapturedCallback& callback) {
22  DCHECK(callback_.is_null());
23  DCHECK(!callback.is_null());
24
25  callback_ = callback;
26  desktop_session_proxy_->SetAudioCapturer(weak_factory_.GetWeakPtr());
27  return true;
28}
29
30void IpcAudioCapturer::Stop() {
31  callback_.Reset();
32  weak_factory_.InvalidateWeakPtrs();
33}
34
35bool IpcAudioCapturer::IsStarted() {
36  return !callback_.is_null();
37}
38
39void IpcAudioCapturer::OnAudioPacket(scoped_ptr<AudioPacket> packet) {
40  callback_.Run(packet.Pass());
41}
42
43}  // namespace remoting
44