Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(304)

Unified Diff: remoting/host/audio_pump.cc

Issue 866863004: Replace AudioScheduler with AudioPump. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mouse_cursor_pipe
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/host/audio_pump.cc
diff --git a/remoting/host/audio_pump.cc b/remoting/host/audio_pump.cc
new file mode 100644
index 0000000000000000000000000000000000000000..832f9e8b8a0d7a4f846190e61deacb2409c6e91e
--- /dev/null
+++ b/remoting/host/audio_pump.cc
@@ -0,0 +1,131 @@
+// 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 "base/bind.h"
+#include "base/location.h"
+#include "base/logging.h"
+#include "base/single_thread_task_runner.h"
+#include "base/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 {
+
+class AudioPump::Core : public base::NonThreadSafe {
+ public:
+ Core(base::WeakPtr<AudioPump> pump,
+ scoped_ptr<AudioCapturer> audio_capturer,
+ scoped_ptr<AudioEncoder> audio_encoder);
+ ~Core();
+
+ void Start();
+ void Pause(bool pause);
+
+ private:
+ void EncodeAudioPacket(scoped_ptr<AudioPacket> packet);
+
+ base::WeakPtr<AudioPump> pump_;
+
+ scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
Wez 2015/02/12 02:26:18 nit: pump_task_runner_, since it's got to be the t
Sergey Ulanov 2015/02/13 17:40:24 Done.
+
+ scoped_ptr<AudioCapturer> audio_capturer_;
+
+ scoped_ptr<AudioEncoder> audio_encoder_;
+
+ bool enabled_;
+
+ DISALLOW_COPY_AND_ASSIGN(Core);
+};
+
+AudioPump::Core::Core(
+ base::WeakPtr<AudioPump> pump,
+ scoped_ptr<AudioCapturer> audio_capturer,
+ scoped_ptr<AudioEncoder> audio_encoder)
+ : pump_(pump),
+ caller_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ audio_capturer_(audio_capturer.Pass()),
+ audio_encoder_(audio_encoder.Pass()),
+ enabled_(true) {
+ DetachFromThread();
+}
+
+AudioPump::Core::~Core() {
+ DCHECK(CalledOnValidThread());
+}
+
+void AudioPump::Core::Start() {
+ DCHECK(CalledOnValidThread());
+
+ audio_capturer_->Start(
+ base::Bind(&Core::EncodeAudioPacket, base::Unretained(this)));
+}
+
+void AudioPump::Core::Pause(bool pause) {
+ DCHECK(CalledOnValidThread());
+
+ enabled_ = !pause;
+}
+
+void AudioPump::Core::EncodeAudioPacket(scoped_ptr<AudioPacket> packet) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(packet);
+
+ if (!enabled_)
+ return;
+
+ scoped_ptr<AudioPacket> encoded_packet =
+ audio_encoder_->Encode(packet.Pass());
+
+ // The audio encoder returns a null audio packet if there's no audio to send.
+ if (!encoded_packet)
+ return;
+
+ caller_task_runner_->PostTask(FROM_HERE,
+ base::Bind(&AudioPump::SendAudioPacket, pump_,
+ base::Passed(&encoded_packet)));
+}
+
+AudioPump::AudioPump(
+ scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
+ scoped_ptr<AudioCapturer> audio_capturer,
+ scoped_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(), audio_capturer.Pass(),
+ audio_encoder.Pass()));
+
+ audio_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
+}
+
+AudioPump::~AudioPump() {
+ DCHECK(CalledOnValidThread());
+
+ audio_task_runner_->DeleteSoon(FROM_HERE, core_.release());
+}
+
+void AudioPump::Pause(bool pause) {
+ DCHECK(CalledOnValidThread());
+
+ audio_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&Core::Pause, base::Unretained(core_.get()), pause));
+}
+
+void AudioPump::SendAudioPacket(scoped_ptr<AudioPacket> packet) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(packet);
+
+ audio_stub_->ProcessAudioPacket(packet.Pass(), base::Closure());
+}
+
+} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698