blob: 1b23158166a99795c330f5afaf4f0fa6b6f16814 [file] [log] [blame]
// 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.
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/single_thread_task_runner.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 {
// 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);
~AudioCapturerLinux() override;
// AudioCapturer interface.
bool Start(const PacketCapturedCallback& callback) override;
// AudioPipeReader::StreamObserver interface.
void OnDataRead(scoped_refptr<base::RefCountedString> data) override;
scoped_refptr<AudioPipeReader> pipe_reader_;
PacketCapturedCallback callback_;
AudioSilenceDetector silence_detector_;
} // namespace remoting