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

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
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 : public base::NonThreadSafe {
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::WeakPtr<AudioPump> pump_;
33
34 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.
35
36 scoped_ptr<AudioCapturer> audio_capturer_;
37
38 scoped_ptr<AudioEncoder> audio_encoder_;
39
40 bool enabled_;
41
42 DISALLOW_COPY_AND_ASSIGN(Core);
43 };
44
45 AudioPump::Core::Core(
46 base::WeakPtr<AudioPump> pump,
47 scoped_ptr<AudioCapturer> audio_capturer,
48 scoped_ptr<AudioEncoder> audio_encoder)
49 : pump_(pump),
50 caller_task_runner_(base::ThreadTaskRunnerHandle::Get()),
51 audio_capturer_(audio_capturer.Pass()),
52 audio_encoder_(audio_encoder.Pass()),
53 enabled_(true) {
54 DetachFromThread();
55 }
56
57 AudioPump::Core::~Core() {
58 DCHECK(CalledOnValidThread());
59 }
60
61 void AudioPump::Core::Start() {
62 DCHECK(CalledOnValidThread());
63
64 audio_capturer_->Start(
65 base::Bind(&Core::EncodeAudioPacket, base::Unretained(this)));
66 }
67
68 void AudioPump::Core::Pause(bool pause) {
69 DCHECK(CalledOnValidThread());
70
71 enabled_ = !pause;
72 }
73
74 void AudioPump::Core::EncodeAudioPacket(scoped_ptr<AudioPacket> packet) {
75 DCHECK(CalledOnValidThread());
76 DCHECK(packet);
77
78 if (!enabled_)
79 return;
80
81 scoped_ptr<AudioPacket> encoded_packet =
82 audio_encoder_->Encode(packet.Pass());
83
84 // The audio encoder returns a null audio packet if there's no audio to send.
85 if (!encoded_packet)
86 return;
87
88 caller_task_runner_->PostTask(FROM_HERE,
89 base::Bind(&AudioPump::SendAudioPacket, pump_,
90 base::Passed(&encoded_packet)));
91 }
92
93 AudioPump::AudioPump(
94 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
95 scoped_ptr<AudioCapturer> audio_capturer,
96 scoped_ptr<AudioEncoder> audio_encoder,
97 protocol::AudioStub* audio_stub)
98 : audio_task_runner_(audio_task_runner),
99 audio_stub_(audio_stub),
100 weak_factory_(this) {
101 DCHECK(audio_stub_);
102
103 core_.reset(new Core(weak_factory_.GetWeakPtr(), audio_capturer.Pass(),
104 audio_encoder.Pass()));
105
106 audio_task_runner_->PostTask(
107 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
108 }
109
110 AudioPump::~AudioPump() {
111 DCHECK(CalledOnValidThread());
112
113 audio_task_runner_->DeleteSoon(FROM_HERE, core_.release());
114 }
115
116 void AudioPump::Pause(bool pause) {
117 DCHECK(CalledOnValidThread());
118
119 audio_task_runner_->PostTask(
120 FROM_HERE,
121 base::Bind(&Core::Pause, base::Unretained(core_.get()), pause));
122 }
123
124 void AudioPump::SendAudioPacket(scoped_ptr<AudioPacket> packet) {
125 DCHECK(CalledOnValidThread());
126 DCHECK(packet);
127
128 audio_stub_->ProcessAudioPacket(packet.Pass(), base::Closure());
129 }
130
131 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698