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

Side by Side Diff: remoting/host/audio_pump.cc

Issue 1864213002: Convert //remoting to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mac IWYU Created 4 years, 8 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_pump_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/audio_pump.h" 5 #include "remoting/host/audio_pump.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
14 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
15 #include "remoting/codec/audio_encoder.h" 15 #include "remoting/codec/audio_encoder.h"
16 #include "remoting/host/audio_capturer.h" 16 #include "remoting/host/audio_capturer.h"
17 #include "remoting/proto/audio.pb.h" 17 #include "remoting/proto/audio.pb.h"
18 #include "remoting/protocol/audio_stub.h" 18 #include "remoting/protocol/audio_stub.h"
19 19
20 namespace remoting { 20 namespace remoting {
21 21
22 // Limit the data stored in the pending send buffers to 250ms. 22 // Limit the data stored in the pending send buffers to 250ms.
23 const int kMaxBufferedIntervalMs = 250; 23 const int kMaxBufferedIntervalMs = 250;
24 24
25 class AudioPump::Core { 25 class AudioPump::Core {
26 public: 26 public:
27 Core(base::WeakPtr<AudioPump> pump, 27 Core(base::WeakPtr<AudioPump> pump,
28 scoped_ptr<AudioCapturer> audio_capturer, 28 std::unique_ptr<AudioCapturer> audio_capturer,
29 scoped_ptr<AudioEncoder> audio_encoder); 29 std::unique_ptr<AudioEncoder> audio_encoder);
30 ~Core(); 30 ~Core();
31 31
32 void Start(); 32 void Start();
33 void Pause(bool pause); 33 void Pause(bool pause);
34 34
35 void OnPacketSent(int size); 35 void OnPacketSent(int size);
36 36
37 private: 37 private:
38 void EncodeAudioPacket(scoped_ptr<AudioPacket> packet); 38 void EncodeAudioPacket(std::unique_ptr<AudioPacket> packet);
39 39
40 base::ThreadChecker thread_checker_; 40 base::ThreadChecker thread_checker_;
41 41
42 base::WeakPtr<AudioPump> pump_; 42 base::WeakPtr<AudioPump> pump_;
43 43
44 scoped_refptr<base::SingleThreadTaskRunner> pump_task_runner_; 44 scoped_refptr<base::SingleThreadTaskRunner> pump_task_runner_;
45 45
46 scoped_ptr<AudioCapturer> audio_capturer_; 46 std::unique_ptr<AudioCapturer> audio_capturer_;
47 scoped_ptr<AudioEncoder> audio_encoder_; 47 std::unique_ptr<AudioEncoder> audio_encoder_;
48 48
49 bool enabled_; 49 bool enabled_;
50 50
51 // Number of bytes in the queue that have been encoded but haven't been sent 51 // Number of bytes in the queue that have been encoded but haven't been sent
52 // yet. 52 // yet.
53 int bytes_pending_; 53 int bytes_pending_;
54 54
55 DISALLOW_COPY_AND_ASSIGN(Core); 55 DISALLOW_COPY_AND_ASSIGN(Core);
56 }; 56 };
57 57
58 AudioPump::Core::Core(base::WeakPtr<AudioPump> pump, 58 AudioPump::Core::Core(base::WeakPtr<AudioPump> pump,
59 scoped_ptr<AudioCapturer> audio_capturer, 59 std::unique_ptr<AudioCapturer> audio_capturer,
60 scoped_ptr<AudioEncoder> audio_encoder) 60 std::unique_ptr<AudioEncoder> audio_encoder)
61 : pump_(pump), 61 : pump_(pump),
62 pump_task_runner_(base::ThreadTaskRunnerHandle::Get()), 62 pump_task_runner_(base::ThreadTaskRunnerHandle::Get()),
63 audio_capturer_(std::move(audio_capturer)), 63 audio_capturer_(std::move(audio_capturer)),
64 audio_encoder_(std::move(audio_encoder)), 64 audio_encoder_(std::move(audio_encoder)),
65 enabled_(true), 65 enabled_(true),
66 bytes_pending_(0) { 66 bytes_pending_(0) {
67 thread_checker_.DetachFromThread(); 67 thread_checker_.DetachFromThread();
68 } 68 }
69 69
70 AudioPump::Core::~Core() { 70 AudioPump::Core::~Core() {
(...skipping 13 matching lines...) Expand all
84 enabled_ = !pause; 84 enabled_ = !pause;
85 } 85 }
86 86
87 void AudioPump::Core::OnPacketSent(int size) { 87 void AudioPump::Core::OnPacketSent(int size) {
88 DCHECK(thread_checker_.CalledOnValidThread()); 88 DCHECK(thread_checker_.CalledOnValidThread());
89 89
90 bytes_pending_-= size; 90 bytes_pending_-= size;
91 DCHECK_GE(bytes_pending_, 0); 91 DCHECK_GE(bytes_pending_, 0);
92 } 92 }
93 93
94 void AudioPump::Core::EncodeAudioPacket(scoped_ptr<AudioPacket> packet) { 94 void AudioPump::Core::EncodeAudioPacket(std::unique_ptr<AudioPacket> packet) {
95 DCHECK(thread_checker_.CalledOnValidThread()); 95 DCHECK(thread_checker_.CalledOnValidThread());
96 DCHECK(packet); 96 DCHECK(packet);
97 97
98 int max_buffered_bytes = 98 int max_buffered_bytes =
99 audio_encoder_->GetBitrate() * kMaxBufferedIntervalMs / 1000 / 8; 99 audio_encoder_->GetBitrate() * kMaxBufferedIntervalMs / 1000 / 8;
100 if (!enabled_ || bytes_pending_ > max_buffered_bytes) 100 if (!enabled_ || bytes_pending_ > max_buffered_bytes)
101 return; 101 return;
102 102
103 scoped_ptr<AudioPacket> encoded_packet = 103 std::unique_ptr<AudioPacket> encoded_packet =
104 audio_encoder_->Encode(std::move(packet)); 104 audio_encoder_->Encode(std::move(packet));
105 105
106 // The audio encoder returns a null audio packet if there's no audio to send. 106 // The audio encoder returns a null audio packet if there's no audio to send.
107 if (!encoded_packet) 107 if (!encoded_packet)
108 return; 108 return;
109 109
110 int packet_size = encoded_packet->ByteSize(); 110 int packet_size = encoded_packet->ByteSize();
111 bytes_pending_ += packet_size; 111 bytes_pending_ += packet_size;
112 112
113 pump_task_runner_->PostTask( 113 pump_task_runner_->PostTask(
114 FROM_HERE, base::Bind(&AudioPump::SendAudioPacket, pump_, 114 FROM_HERE, base::Bind(&AudioPump::SendAudioPacket, pump_,
115 base::Passed(&encoded_packet), packet_size)); 115 base::Passed(&encoded_packet), packet_size));
116 } 116 }
117 117
118 AudioPump::AudioPump( 118 AudioPump::AudioPump(
119 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner, 119 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
120 scoped_ptr<AudioCapturer> audio_capturer, 120 std::unique_ptr<AudioCapturer> audio_capturer,
121 scoped_ptr<AudioEncoder> audio_encoder, 121 std::unique_ptr<AudioEncoder> audio_encoder,
122 protocol::AudioStub* audio_stub) 122 protocol::AudioStub* audio_stub)
123 : audio_task_runner_(audio_task_runner), 123 : audio_task_runner_(audio_task_runner),
124 audio_stub_(audio_stub), 124 audio_stub_(audio_stub),
125 weak_factory_(this) { 125 weak_factory_(this) {
126 DCHECK(audio_stub_); 126 DCHECK(audio_stub_);
127 127
128 core_.reset(new Core(weak_factory_.GetWeakPtr(), std::move(audio_capturer), 128 core_.reset(new Core(weak_factory_.GetWeakPtr(), std::move(audio_capturer),
129 std::move(audio_encoder))); 129 std::move(audio_encoder)));
130 130
131 audio_task_runner_->PostTask( 131 audio_task_runner_->PostTask(
132 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get()))); 132 FROM_HERE, base::Bind(&Core::Start, base::Unretained(core_.get())));
133 } 133 }
134 134
135 AudioPump::~AudioPump() { 135 AudioPump::~AudioPump() {
136 DCHECK(thread_checker_.CalledOnValidThread()); 136 DCHECK(thread_checker_.CalledOnValidThread());
137 137
138 audio_task_runner_->DeleteSoon(FROM_HERE, core_.release()); 138 audio_task_runner_->DeleteSoon(FROM_HERE, core_.release());
139 } 139 }
140 140
141 void AudioPump::Pause(bool pause) { 141 void AudioPump::Pause(bool pause) {
142 DCHECK(thread_checker_.CalledOnValidThread()); 142 DCHECK(thread_checker_.CalledOnValidThread());
143 143
144 audio_task_runner_->PostTask( 144 audio_task_runner_->PostTask(
145 FROM_HERE, 145 FROM_HERE,
146 base::Bind(&Core::Pause, base::Unretained(core_.get()), pause)); 146 base::Bind(&Core::Pause, base::Unretained(core_.get()), pause));
147 } 147 }
148 148
149 void AudioPump::SendAudioPacket(scoped_ptr<AudioPacket> packet, int size) { 149 void AudioPump::SendAudioPacket(std::unique_ptr<AudioPacket> packet, int size) {
150 DCHECK(thread_checker_.CalledOnValidThread()); 150 DCHECK(thread_checker_.CalledOnValidThread());
151 DCHECK(packet); 151 DCHECK(packet);
152 152
153 audio_stub_->ProcessAudioPacket( 153 audio_stub_->ProcessAudioPacket(
154 std::move(packet), 154 std::move(packet),
155 base::Bind(&AudioPump::OnPacketSent, weak_factory_.GetWeakPtr(), size)); 155 base::Bind(&AudioPump::OnPacketSent, weak_factory_.GetWeakPtr(), size));
156 } 156 }
157 157
158 void AudioPump::OnPacketSent(int size) { 158 void AudioPump::OnPacketSent(int size) {
159 audio_task_runner_->PostTask( 159 audio_task_runner_->PostTask(
160 FROM_HERE, 160 FROM_HERE,
161 base::Bind(&Core::OnPacketSent, base::Unretained(core_.get()), size)); 161 base::Bind(&Core::OnPacketSent, base::Unretained(core_.get()), size));
162 } 162 }
163 163
164 } // namespace remoting 164 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/audio_pump.h ('k') | remoting/host/audio_pump_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698