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_LINUX_H_ 6#define REMOTING_HOST_AUDIO_CAPTURER_LINUX_H_ 7 8#include "base/memory/ref_counted.h" 9#include "remoting/host/audio_capturer.h" 10#include "remoting/host/audio_silence_detector.h" 11#include "remoting/host/linux/audio_pipe_reader.h" 12 13namespace base { 14class FilePath; 15} 16 17namespace remoting { 18 19// Linux implementation of AudioCapturer interface which captures audio by 20// reading samples from a Pulseaudio "pipe" sink. 21class AudioCapturerLinux : public AudioCapturer, 22 public AudioPipeReader::StreamObserver { 23 public: 24 // Must be called to configure the capturer before the first capturer instance 25 // is created. |task_runner| is an IO thread that is passed to AudioPipeReader 26 // to read from the pipe. 27 static void InitializePipeReader( 28 scoped_refptr<base::SingleThreadTaskRunner> task_runner, 29 const base::FilePath& pipe_name); 30 31 explicit AudioCapturerLinux( 32 scoped_refptr<AudioPipeReader> pipe_reader); 33 virtual ~AudioCapturerLinux(); 34 35 // AudioCapturer interface. 36 virtual bool Start(const PacketCapturedCallback& callback) OVERRIDE; 37 virtual void Stop() OVERRIDE; 38 virtual bool IsStarted() OVERRIDE; 39 40 // AudioPipeReader::StreamObserver interface. 41 virtual void OnDataRead(scoped_refptr<base::RefCountedString> data) OVERRIDE; 42 43 private: 44 scoped_refptr<AudioPipeReader> pipe_reader_; 45 PacketCapturedCallback callback_; 46 47 AudioSilenceDetector silence_detector_; 48 49 DISALLOW_COPY_AND_ASSIGN(AudioCapturerLinux); 50}; 51 52} // namespace remoting 53 54#endif // REMOTING_HOST_AUDIO_CAPTURER_LINUX_H_ 55