// 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_