// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef REMOTING_HOST_AUDIO_CAPTURER_LINUX_H_ #define REMOTING_HOST_AUDIO_CAPTURER_LINUX_H_ #include "base/memory/ref_counted.h" #include "remoting/host/audio_capturer.h" #include "remoting/host/audio_silence_detector.h" #include "remoting/host/linux/audio_pipe_reader.h" namespace base { class FilePath; } namespace remoting { // Linux implementation of AudioCapturer interface which captures audio by // reading samples from a Pulseaudio "pipe" sink. class AudioCapturerLinux : public AudioCapturer, public AudioPipeReader::StreamObserver { public: // Must be called to configure the capturer before the first capturer instance // is created. |task_runner| is an IO thread that is passed to AudioPipeReader // to read from the pipe. static void InitializePipeReader( scoped_refptr<base::SingleThreadTaskRunner> task_runner, const base::FilePath& pipe_name); explicit AudioCapturerLinux( scoped_refptr<AudioPipeReader> pipe_reader); virtual ~AudioCapturerLinux(); // AudioCapturer interface. virtual bool Start(const PacketCapturedCallback& callback) OVERRIDE; virtual void Stop() OVERRIDE; virtual bool IsStarted() OVERRIDE; // AudioPipeReader::StreamObserver interface. virtual void OnDataRead(scoped_refptr<base::RefCountedString> data) OVERRIDE; private: scoped_refptr<AudioPipeReader> pipe_reader_; PacketCapturedCallback callback_; AudioSilenceDetector silence_detector_; DISALLOW_COPY_AND_ASSIGN(AudioCapturerLinux); }; } // namespace remoting #endif // REMOTING_HOST_AUDIO_CAPTURER_LINUX_H_