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 13 namespace base { 14 class FilePath; 15 } 16 17 namespace remoting { 18 19 // Linux implementation of AudioCapturer interface which captures audio by 20 // reading samples from a Pulseaudio "pipe" sink. 21 class 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