| Index: remoting/host/audio_pump.cc
|
| diff --git a/remoting/host/audio_pump.cc b/remoting/host/audio_pump.cc
|
| deleted file mode 100644
|
| index 4055913ff57d622dfbed22e342fb44f487f3aba1..0000000000000000000000000000000000000000
|
| --- a/remoting/host/audio_pump.cc
|
| +++ /dev/null
|
| @@ -1,164 +0,0 @@
|
| -// Copyright 2015 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 "remoting/host/audio_pump.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/location.h"
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "remoting/codec/audio_encoder.h"
|
| -#include "remoting/host/audio_capturer.h"
|
| -#include "remoting/proto/audio.pb.h"
|
| -#include "remoting/protocol/audio_stub.h"
|
| -
|
| -namespace remoting {
|
| -
|
| -// Limit the data stored in the pending send buffers to 250ms.
|
| -const int kMaxBufferedIntervalMs = 250;
|
| -
|
| -class AudioPump::Core {
|
| - public:
|
| - Core(base::WeakPtr<AudioPump> pump,
|
| - std::unique_ptr<AudioCapturer> audio_capturer,
|
| - std::unique_ptr<AudioEncoder> audio_encoder);
|
| - ~Core();
|
| -
|
| - void Start();
|
| - void Pause(bool pause);
|
| -
|
| - void OnPacketSent(int size);
|
| -
|
| - private:
|
| - void EncodeAudioPacket(std::unique_ptr<AudioPacket> packet);
|
| -
|
| - base::ThreadChecker thread_checker_;
|
| -
|
| - base::WeakPtr<AudioPump> pump_;
|
| -
|
| - scoped_refptr<base::SingleThreadTaskRunner> pump_task_runner_;
|
| -
|
| - std::unique_ptr<AudioCapturer> audio_capturer_;
|
| - std::unique_ptr<AudioEncoder> audio_encoder_;
|
| -
|
| - bool enabled_;
|
| -
|
| - // Number of bytes in the queue that have been encoded but haven't been sent
|
| - // yet.
|
| - int bytes_pending_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Core);
|
| -};
|
| -
|
| -AudioPump::Core::Core(base::WeakPtr<AudioPump> pump,
|
| - std::unique_ptr<AudioCapturer> audio_capturer,
|
| - std::unique_ptr<AudioEncoder> audio_encoder)
|
| - : pump_(pump),
|
| - pump_task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| - audio_capturer_(std::move(audio_capturer)),
|
| - audio_encoder_(std::move(audio_encoder)),
|
| - enabled_(true),
|
| - bytes_pending_(0) {
|
| - thread_checker_.DetachFromThread();
|
| -}
|
| -
|
| -AudioPump::Core::~Core() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -}
|
| -
|
| -void AudioPump::Core::Start() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - audio_capturer_->Start(
|
| - base::Bind(&Core::EncodeAudioPacket, base::Unretained(this)));
|
| -}
|
| -
|
| -void AudioPump::Core::Pause(bool pause) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - enabled_ = !pause;
|
| -}
|
| -
|
| -void AudioPump::Core::OnPacketSent(int size) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - bytes_pending_-= size;
|
| - DCHECK_GE(bytes_pending_, 0);
|
| -}
|
| -
|
| -void AudioPump::Core::EncodeAudioPacket(std::unique_ptr<AudioPacket> packet) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(packet);
|
| -
|
| - int max_buffered_bytes =
|
| - audio_encoder_->GetBitrate() * kMaxBufferedIntervalMs / 1000 / 8;
|
| - if (!enabled_ || bytes_pending_ > max_buffered_bytes)
|
| - return;
|
| -
|
| - std::unique_ptr<AudioPacket> encoded_packet =
|
| - audio_encoder_->Encode(std::move(packet));
|
| -
|
| - // The audio encoder returns a null audio packet if there's no audio to send.
|
| - if (!encoded_packet)
|
| - return;
|
| -
|
| - int packet_size = encoded_packet->ByteSize();
|
| - bytes_pending_ += packet_size;
|
| -
|
| - pump_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&AudioPump::SendAudioPacket, pump_,
|
| - base::Passed(&encoded_packet), packet_size));
|
| -}
|
| -
|
| -AudioPump::AudioPump(
|
| - scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
|
| - std::unique_ptr<AudioCapturer> audio_capturer,
|
| - std::unique_ptr<AudioEncoder> audio_encoder,
|
| - protocol::AudioStub* audio_stub)
|
| - : audio_task_runner_(audio_task_runner),
|
| - audio_stub_(audio_stub),
|
| - weak_factory_(this) {
|
| - DCHECK(audio_stub_);
|
| -
|
| - core_.reset(new Core(weak_factory_.GetWeakPtr(), std::move(audio_capturer),
|
| - std::move(audio_encoder)));
|
| -
|
| - audio_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
|
| -}
|
| -
|
| -AudioPump::~AudioPump() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - audio_task_runner_->DeleteSoon(FROM_HERE, core_.release());
|
| -}
|
| -
|
| -void AudioPump::Pause(bool pause) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - audio_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&Core::Pause, base::Unretained(core_.get()), pause));
|
| -}
|
| -
|
| -void AudioPump::SendAudioPacket(std::unique_ptr<AudioPacket> packet, int size) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(packet);
|
| -
|
| - audio_stub_->ProcessAudioPacket(
|
| - std::move(packet),
|
| - base::Bind(&AudioPump::OnPacketSent, weak_factory_.GetWeakPtr(), size));
|
| -}
|
| -
|
| -void AudioPump::OnPacketSent(int size) {
|
| - audio_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&Core::OnPacketSent, base::Unretained(core_.get()), size));
|
| -}
|
| -
|
| -} // namespace remoting
|
|
|