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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « remoting/host/audio_pump.h ('k') | remoting/host/audio_scheduler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 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 #include "remoting/host/audio_pump.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/logging.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "remoting/codec/audio_encoder.h"
13 #include "remoting/host/audio_capturer.h"
14 #include "remoting/proto/audio.pb.h"
15 #include "remoting/protocol/audio_stub.h"
16
17 namespace remoting {
18
19 class AudioPump::Core {
20 public:
21 Core(base::WeakPtr<AudioPump> pump,
22 scoped_ptr<AudioCapturer> audio_capturer,
23 scoped_ptr<AudioEncoder> audio_encoder);
24 ~Core();
25
26 void Start();
27 void Pause(bool pause);
28
29 private:
30 void EncodeAudioPacket(scoped_ptr<AudioPacket> packet);
31
32 base::ThreadChecker thread_checker_;
33
34 base::WeakPtr<AudioPump> pump_;
35
36 scoped_refptr<base::SingleThreadTaskRunner> pump_task_runner_;
37
38 scoped_ptr<AudioCapturer> audio_capturer_;
39
40 scoped_ptr<AudioEncoder> audio_encoder_;
41
42 bool enabled_;
43
44 DISALLOW_COPY_AND_ASSIGN(Core);
45 };
46
47 AudioPump::Core::Core(
48 base::WeakPtr<AudioPump> pump,
49 scoped_ptr<AudioCapturer> audio_capturer,
50 scoped_ptr<AudioEncoder> audio_encoder)
51 : pump_(pump),
52 pump_task_runner_(base::ThreadTaskRunnerHandle::Get()),
53 audio_capturer_(audio_capturer.Pass()),
54 audio_encoder_(audio_encoder.Pass()),
55 enabled_(true) {
56 thread_checker_.DetachFromThread();
57 }
58
59 AudioPump::Core::~Core() {
60 DCHECK(thread_checker_.CalledOnValidThread());
61 }
62
63 void AudioPump::Core::Start() {
64 DCHECK(thread_checker_.CalledOnValidThread());
65
66 audio_capturer_->Start(
67 base::Bind(&Core::EncodeAudioPacket, base::Unretained(this)));
68 }
69
70 void AudioPump::Core::Pause(bool pause) {
71 DCHECK(thread_checker_.CalledOnValidThread());
72
73 enabled_ = !pause;
74 }
75
76 void AudioPump::Core::EncodeAudioPacket(scoped_ptr<AudioPacket> packet) {
77 DCHECK(thread_checker_.CalledOnValidThread());
78 DCHECK(packet);
79
80 if (!enabled_)
81 return;
82
83 scoped_ptr<AudioPacket> encoded_packet =
84 audio_encoder_->Encode(packet.Pass());
85
86 // The audio encoder returns a null audio packet if there's no audio to send.
87 if (!encoded_packet)
88 return;
89
90 pump_task_runner_->PostTask(FROM_HERE,
91 base::Bind(&AudioPump::SendAudioPacket, pump_,
92 base::Passed(&encoded_packet)));
93 }
94
95 AudioPump::AudioPump(
96 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
97 scoped_ptr<AudioCapturer> audio_capturer,
98 scoped_ptr<AudioEncoder> audio_encoder,
99 protocol::AudioStub* audio_stub)
100 : audio_task_runner_(audio_task_runner),
101 audio_stub_(audio_stub),
102 weak_factory_(this) {
103 DCHECK(audio_stub_);
104
105 core_.reset(new Core(weak_factory_.GetWeakPtr(), audio_capturer.Pass(),
106 audio_encoder.Pass()));
107
108 audio_task_runner_->PostTask(
109 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
110 }
111
112 AudioPump::~AudioPump() {
113 DCHECK(thread_checker_.CalledOnValidThread());
114
115 audio_task_runner_->DeleteSoon(FROM_HERE, core_.release());
116 }
117
118 void AudioPump::Pause(bool pause) {
119 DCHECK(thread_checker_.CalledOnValidThread());
120
121 audio_task_runner_->PostTask(
122 FROM_HERE,
123 base::Bind(&Core::Pause, base::Unretained(core_.get()), pause));
124 }
125
126 void AudioPump::SendAudioPacket(scoped_ptr<AudioPacket> packet) {
127 DCHECK(thread_checker_.CalledOnValidThread());
128 DCHECK(packet);
129
130 audio_stub_->ProcessAudioPacket(packet.Pass(), base::Closure());
131 }
132
133 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/audio_pump.h ('k') | remoting/host/audio_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698