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

Side by Side Diff: webrtc/voice_engine/channel_proxy.cc

Issue 2672583002: Remove VoEVideoSync interface. (Closed)
Patch Set: rebase Created 3 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 | « webrtc/voice_engine/channel_proxy.h ('k') | webrtc/voice_engine/include/voe_video_sync.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/voice_engine/channel_proxy.h" 11 #include "webrtc/voice_engine/channel_proxy.h"
12 12
13 #include <utility> 13 #include <utility>
14 14
15 #include "webrtc/api/call/audio_sink.h" 15 #include "webrtc/api/call/audio_sink.h"
16 #include "webrtc/base/checks.h" 16 #include "webrtc/base/checks.h"
17 #include "webrtc/voice_engine/channel.h" 17 #include "webrtc/voice_engine/channel.h"
18 18
19 namespace webrtc { 19 namespace webrtc {
20 namespace voe { 20 namespace voe {
21 ChannelProxy::ChannelProxy() : channel_owner_(nullptr) {} 21 ChannelProxy::ChannelProxy() : channel_owner_(nullptr) {}
22 22
23 ChannelProxy::ChannelProxy(const ChannelOwner& channel_owner) : 23 ChannelProxy::ChannelProxy(const ChannelOwner& channel_owner) :
24 channel_owner_(channel_owner) { 24 channel_owner_(channel_owner) {
25 RTC_CHECK(channel_owner_.channel()); 25 RTC_CHECK(channel_owner_.channel());
26 module_process_thread_checker_.DetachFromThread();
26 } 27 }
27 28
28 ChannelProxy::~ChannelProxy() {} 29 ChannelProxy::~ChannelProxy() {}
29 30
30 void ChannelProxy::SetRTCPStatus(bool enable) { 31 void ChannelProxy::SetRTCPStatus(bool enable) {
32 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
31 channel()->SetRTCPStatus(enable); 33 channel()->SetRTCPStatus(enable);
32 } 34 }
33 35
34 void ChannelProxy::SetLocalSSRC(uint32_t ssrc) { 36 void ChannelProxy::SetLocalSSRC(uint32_t ssrc) {
35 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 37 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
36 int error = channel()->SetLocalSSRC(ssrc); 38 int error = channel()->SetLocalSSRC(ssrc);
37 RTC_DCHECK_EQ(0, error); 39 RTC_DCHECK_EQ(0, error);
38 } 40 }
39 41
40 void ChannelProxy::SetRTCP_CNAME(const std::string& c_name) { 42 void ChannelProxy::SetRTCP_CNAME(const std::string& c_name) {
41 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 43 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
42 // Note: VoERTP_RTCP::SetRTCP_CNAME() accepts a char[256] array. 44 // Note: VoERTP_RTCP::SetRTCP_CNAME() accepts a char[256] array.
43 std::string c_name_limited = c_name.substr(0, 255); 45 std::string c_name_limited = c_name.substr(0, 255);
44 int error = channel()->SetRTCP_CNAME(c_name_limited.c_str()); 46 int error = channel()->SetRTCP_CNAME(c_name_limited.c_str());
45 RTC_DCHECK_EQ(0, error); 47 RTC_DCHECK_EQ(0, error);
46 } 48 }
47 49
48 void ChannelProxy::SetNACKStatus(bool enable, int max_packets) { 50 void ChannelProxy::SetNACKStatus(bool enable, int max_packets) {
49 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 51 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
50 channel()->SetNACKStatus(enable, max_packets); 52 channel()->SetNACKStatus(enable, max_packets);
51 } 53 }
52 54
53 void ChannelProxy::SetSendAudioLevelIndicationStatus(bool enable, int id) { 55 void ChannelProxy::SetSendAudioLevelIndicationStatus(bool enable, int id) {
54 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 56 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
55 int error = channel()->SetSendAudioLevelIndicationStatus(enable, id); 57 int error = channel()->SetSendAudioLevelIndicationStatus(enable, id);
56 RTC_DCHECK_EQ(0, error); 58 RTC_DCHECK_EQ(0, error);
57 } 59 }
58 60
59 void ChannelProxy::SetReceiveAudioLevelIndicationStatus(bool enable, int id) { 61 void ChannelProxy::SetReceiveAudioLevelIndicationStatus(bool enable, int id) {
60 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 62 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
61 int error = channel()->SetReceiveAudioLevelIndicationStatus(enable, id); 63 int error = channel()->SetReceiveAudioLevelIndicationStatus(enable, id);
62 RTC_DCHECK_EQ(0, error); 64 RTC_DCHECK_EQ(0, error);
63 } 65 }
64 66
65 void ChannelProxy::EnableSendTransportSequenceNumber(int id) { 67 void ChannelProxy::EnableSendTransportSequenceNumber(int id) {
66 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 68 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
67 channel()->EnableSendTransportSequenceNumber(id); 69 channel()->EnableSendTransportSequenceNumber(id);
68 } 70 }
69 71
70 void ChannelProxy::EnableReceiveTransportSequenceNumber(int id) { 72 void ChannelProxy::EnableReceiveTransportSequenceNumber(int id) {
71 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 73 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
72 channel()->EnableReceiveTransportSequenceNumber(id); 74 channel()->EnableReceiveTransportSequenceNumber(id);
73 } 75 }
74 76
75 void ChannelProxy::RegisterSenderCongestionControlObjects( 77 void ChannelProxy::RegisterSenderCongestionControlObjects(
76 RtpPacketSender* rtp_packet_sender, 78 RtpPacketSender* rtp_packet_sender,
77 TransportFeedbackObserver* transport_feedback_observer, 79 TransportFeedbackObserver* transport_feedback_observer,
78 PacketRouter* packet_router, 80 PacketRouter* packet_router,
79 RtcpBandwidthObserver* bandwidth_observer) { 81 RtcpBandwidthObserver* bandwidth_observer) {
80 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 82 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
81 channel()->RegisterSenderCongestionControlObjects( 83 channel()->RegisterSenderCongestionControlObjects(
82 rtp_packet_sender, transport_feedback_observer, packet_router, 84 rtp_packet_sender, transport_feedback_observer, packet_router,
83 bandwidth_observer); 85 bandwidth_observer);
84 } 86 }
85 87
86 void ChannelProxy::RegisterReceiverCongestionControlObjects( 88 void ChannelProxy::RegisterReceiverCongestionControlObjects(
87 PacketRouter* packet_router) { 89 PacketRouter* packet_router) {
88 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 90 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
89 channel()->RegisterReceiverCongestionControlObjects(packet_router); 91 channel()->RegisterReceiverCongestionControlObjects(packet_router);
90 } 92 }
91 93
92 void ChannelProxy::ResetCongestionControlObjects() { 94 void ChannelProxy::ResetCongestionControlObjects() {
93 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 95 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
94 channel()->ResetCongestionControlObjects(); 96 channel()->ResetCongestionControlObjects();
95 } 97 }
96 98
97 CallStatistics ChannelProxy::GetRTCPStatistics() const { 99 CallStatistics ChannelProxy::GetRTCPStatistics() const {
98 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 100 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
99 CallStatistics stats = {0}; 101 CallStatistics stats = {0};
100 int error = channel()->GetRTPStatistics(stats); 102 int error = channel()->GetRTPStatistics(stats);
101 RTC_DCHECK_EQ(0, error); 103 RTC_DCHECK_EQ(0, error);
102 return stats; 104 return stats;
103 } 105 }
104 106
105 std::vector<ReportBlock> ChannelProxy::GetRemoteRTCPReportBlocks() const { 107 std::vector<ReportBlock> ChannelProxy::GetRemoteRTCPReportBlocks() const {
106 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 108 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
107 std::vector<webrtc::ReportBlock> blocks; 109 std::vector<webrtc::ReportBlock> blocks;
108 int error = channel()->GetRemoteRTCPReportBlocks(&blocks); 110 int error = channel()->GetRemoteRTCPReportBlocks(&blocks);
109 RTC_DCHECK_EQ(0, error); 111 RTC_DCHECK_EQ(0, error);
110 return blocks; 112 return blocks;
111 } 113 }
112 114
113 NetworkStatistics ChannelProxy::GetNetworkStatistics() const { 115 NetworkStatistics ChannelProxy::GetNetworkStatistics() const {
114 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 116 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
115 NetworkStatistics stats = {0}; 117 NetworkStatistics stats = {0};
116 int error = channel()->GetNetworkStatistics(stats); 118 int error = channel()->GetNetworkStatistics(stats);
117 RTC_DCHECK_EQ(0, error); 119 RTC_DCHECK_EQ(0, error);
118 return stats; 120 return stats;
119 } 121 }
120 122
121 AudioDecodingCallStats ChannelProxy::GetDecodingCallStatistics() const { 123 AudioDecodingCallStats ChannelProxy::GetDecodingCallStatistics() const {
122 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 124 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
123 AudioDecodingCallStats stats; 125 AudioDecodingCallStats stats;
124 channel()->GetDecodingCallStatistics(&stats); 126 channel()->GetDecodingCallStatistics(&stats);
125 return stats; 127 return stats;
126 } 128 }
127 129
128 int32_t ChannelProxy::GetSpeechOutputLevelFullRange() const { 130 int32_t ChannelProxy::GetSpeechOutputLevelFullRange() const {
129 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 131 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
130 uint32_t level = 0; 132 uint32_t level = 0;
131 int error = channel()->GetSpeechOutputLevelFullRange(level); 133 int error = channel()->GetSpeechOutputLevelFullRange(level);
132 RTC_DCHECK_EQ(0, error); 134 RTC_DCHECK_EQ(0, error);
133 return static_cast<int32_t>(level); 135 return static_cast<int32_t>(level);
134 } 136 }
135 137
136 uint32_t ChannelProxy::GetDelayEstimate() const { 138 uint32_t ChannelProxy::GetDelayEstimate() const {
137 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 139 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread() ||
140 module_process_thread_checker_.CalledOnValidThread());
138 return channel()->GetDelayEstimate(); 141 return channel()->GetDelayEstimate();
139 } 142 }
140 143
141 bool ChannelProxy::SetSendTelephoneEventPayloadType(int payload_type, 144 bool ChannelProxy::SetSendTelephoneEventPayloadType(int payload_type,
142 int payload_frequency) { 145 int payload_frequency) {
143 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 146 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
144 return channel()->SetSendTelephoneEventPayloadType(payload_type, 147 return channel()->SetSendTelephoneEventPayloadType(payload_type,
145 payload_frequency) == 0; 148 payload_frequency) == 0;
146 } 149 }
147 150
148 bool ChannelProxy::SendTelephoneEventOutband(int event, int duration_ms) { 151 bool ChannelProxy::SendTelephoneEventOutband(int event, int duration_ms) {
149 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 152 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
150 return channel()->SendTelephoneEventOutband(event, duration_ms) == 0; 153 return channel()->SendTelephoneEventOutband(event, duration_ms) == 0;
151 } 154 }
152 155
153 void ChannelProxy::SetBitrate(int bitrate_bps, int64_t probing_interval_ms) { 156 void ChannelProxy::SetBitrate(int bitrate_bps, int64_t probing_interval_ms) {
154 // May be called on different threads and needs to be handled by the channel. 157 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread() ||
158 module_process_thread_checker_.CalledOnValidThread());
155 channel()->SetBitRate(bitrate_bps, probing_interval_ms); 159 channel()->SetBitRate(bitrate_bps, probing_interval_ms);
156 } 160 }
157 161
158 void ChannelProxy::SetRecPayloadType(int payload_type, 162 void ChannelProxy::SetRecPayloadType(int payload_type,
159 const SdpAudioFormat& format) { 163 const SdpAudioFormat& format) {
160 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 164 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
161 const int result = channel()->SetRecPayloadType(payload_type, format); 165 const int result = channel()->SetRecPayloadType(payload_type, format);
162 RTC_DCHECK_EQ(0, result); 166 RTC_DCHECK_EQ(0, result);
163 } 167 }
164 168
165 void ChannelProxy::SetSink(std::unique_ptr<AudioSinkInterface> sink) { 169 void ChannelProxy::SetSink(std::unique_ptr<AudioSinkInterface> sink) {
166 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 170 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
167 channel()->SetSink(std::move(sink)); 171 channel()->SetSink(std::move(sink));
168 } 172 }
169 173
170 void ChannelProxy::SetInputMute(bool muted) { 174 void ChannelProxy::SetInputMute(bool muted) {
171 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 175 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
172 int error = channel()->SetInputMute(muted); 176 int error = channel()->SetInputMute(muted);
173 RTC_DCHECK_EQ(0, error); 177 RTC_DCHECK_EQ(0, error);
174 } 178 }
175 179
176 void ChannelProxy::RegisterExternalTransport(Transport* transport) { 180 void ChannelProxy::RegisterExternalTransport(Transport* transport) {
177 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 181 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
178 int error = channel()->RegisterExternalTransport(transport); 182 int error = channel()->RegisterExternalTransport(transport);
179 RTC_DCHECK_EQ(0, error); 183 RTC_DCHECK_EQ(0, error);
180 } 184 }
181 185
182 void ChannelProxy::DeRegisterExternalTransport() { 186 void ChannelProxy::DeRegisterExternalTransport() {
183 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 187 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
184 channel()->DeRegisterExternalTransport(); 188 channel()->DeRegisterExternalTransport();
185 } 189 }
186 190
187 bool ChannelProxy::ReceivedRTPPacket(const uint8_t* packet, 191 bool ChannelProxy::ReceivedRTPPacket(const uint8_t* packet,
188 size_t length, 192 size_t length,
189 const PacketTime& packet_time) { 193 const PacketTime& packet_time) {
190 // May be called on either worker thread or network thread. 194 // May be called on either worker thread or network thread.
191 return channel()->ReceivedRTPPacket(packet, length, packet_time) == 0; 195 return channel()->ReceivedRTPPacket(packet, length, packet_time) == 0;
192 } 196 }
193 197
194 bool ChannelProxy::ReceivedRTCPPacket(const uint8_t* packet, size_t length) { 198 bool ChannelProxy::ReceivedRTCPPacket(const uint8_t* packet, size_t length) {
195 // May be called on either worker thread or network thread. 199 // May be called on either worker thread or network thread.
196 return channel()->ReceivedRTCPPacket(packet, length) == 0; 200 return channel()->ReceivedRTCPPacket(packet, length) == 0;
197 } 201 }
198 202
199 const rtc::scoped_refptr<AudioDecoderFactory>& 203 const rtc::scoped_refptr<AudioDecoderFactory>&
200 ChannelProxy::GetAudioDecoderFactory() const { 204 ChannelProxy::GetAudioDecoderFactory() const {
201 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 205 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
202 return channel()->GetAudioDecoderFactory(); 206 return channel()->GetAudioDecoderFactory();
203 } 207 }
204 208
205 void ChannelProxy::SetChannelOutputVolumeScaling(float scaling) { 209 void ChannelProxy::SetChannelOutputVolumeScaling(float scaling) {
206 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 210 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
207 int error = channel()->SetChannelOutputVolumeScaling(scaling); 211 int error = channel()->SetChannelOutputVolumeScaling(scaling);
208 RTC_DCHECK_EQ(0, error); 212 RTC_DCHECK_EQ(0, error);
209 } 213 }
210 214
211 void ChannelProxy::SetRtcEventLog(RtcEventLog* event_log) { 215 void ChannelProxy::SetRtcEventLog(RtcEventLog* event_log) {
212 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 216 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
213 channel()->SetRtcEventLog(event_log); 217 channel()->SetRtcEventLog(event_log);
214 } 218 }
215 219
216 void ChannelProxy::EnableAudioNetworkAdaptor(const std::string& config_string) { 220 void ChannelProxy::EnableAudioNetworkAdaptor(const std::string& config_string) {
217 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 221 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
218 bool ret = channel()->EnableAudioNetworkAdaptor(config_string); 222 bool ret = channel()->EnableAudioNetworkAdaptor(config_string);
219 RTC_DCHECK(ret); 223 RTC_DCHECK(ret);
220 ;} 224 ;}
221 225
222 void ChannelProxy::DisableAudioNetworkAdaptor() { 226 void ChannelProxy::DisableAudioNetworkAdaptor() {
223 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 227 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
224 channel()->DisableAudioNetworkAdaptor(); 228 channel()->DisableAudioNetworkAdaptor();
225 } 229 }
226 230
227 void ChannelProxy::SetReceiverFrameLengthRange(int min_frame_length_ms, 231 void ChannelProxy::SetReceiverFrameLengthRange(int min_frame_length_ms,
228 int max_frame_length_ms) { 232 int max_frame_length_ms) {
229 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 233 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
230 channel()->SetReceiverFrameLengthRange(min_frame_length_ms, 234 channel()->SetReceiverFrameLengthRange(min_frame_length_ms,
231 max_frame_length_ms); 235 max_frame_length_ms);
232 } 236 }
233 237
234 AudioMixer::Source::AudioFrameInfo ChannelProxy::GetAudioFrameWithInfo( 238 AudioMixer::Source::AudioFrameInfo ChannelProxy::GetAudioFrameWithInfo(
235 int sample_rate_hz, 239 int sample_rate_hz,
236 AudioFrame* audio_frame) { 240 AudioFrame* audio_frame) {
237 RTC_DCHECK_RUNS_SERIALIZED(&race_checker_); 241 RTC_DCHECK_RUNS_SERIALIZED(&audio_thread_race_checker_);
238 return channel()->GetAudioFrameWithInfo(sample_rate_hz, audio_frame); 242 return channel()->GetAudioFrameWithInfo(sample_rate_hz, audio_frame);
239 } 243 }
240 244
241 int ChannelProxy::NeededFrequency() const { 245 int ChannelProxy::NeededFrequency() const {
246 RTC_DCHECK_RUNS_SERIALIZED(&audio_thread_race_checker_);
242 return static_cast<int>(channel()->NeededFrequency(-1)); 247 return static_cast<int>(channel()->NeededFrequency(-1));
243 } 248 }
244 249
245 void ChannelProxy::SetTransportOverhead(int transport_overhead_per_packet) { 250 void ChannelProxy::SetTransportOverhead(int transport_overhead_per_packet) {
246 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 251 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
247 channel()->SetTransportOverhead(transport_overhead_per_packet); 252 channel()->SetTransportOverhead(transport_overhead_per_packet);
248 } 253 }
249 254
250 void ChannelProxy::AssociateSendChannel( 255 void ChannelProxy::AssociateSendChannel(
251 const ChannelProxy& send_channel_proxy) { 256 const ChannelProxy& send_channel_proxy) {
252 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 257 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
253 channel()->set_associate_send_channel(send_channel_proxy.channel_owner_); 258 channel()->set_associate_send_channel(send_channel_proxy.channel_owner_);
254 } 259 }
255 260
256 void ChannelProxy::DisassociateSendChannel() { 261 void ChannelProxy::DisassociateSendChannel() {
257 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 262 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
258 channel()->set_associate_send_channel(ChannelOwner(nullptr)); 263 channel()->set_associate_send_channel(ChannelOwner(nullptr));
259 } 264 }
260 265
261 void ChannelProxy::GetRtpRtcp(RtpRtcp** rtp_rtcp, 266 void ChannelProxy::GetRtpRtcp(RtpRtcp** rtp_rtcp,
262 RtpReceiver** rtp_receiver) const { 267 RtpReceiver** rtp_receiver) const {
263 // Called on Call's module_process_thread_. 268 RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
264 RTC_DCHECK(rtp_rtcp); 269 RTC_DCHECK(rtp_rtcp);
265 RTC_DCHECK(rtp_receiver); 270 RTC_DCHECK(rtp_receiver);
266 int error = channel()->GetRtpRtcp(rtp_rtcp, rtp_receiver); 271 int error = channel()->GetRtpRtcp(rtp_rtcp, rtp_receiver);
267 RTC_DCHECK_EQ(0, error); 272 RTC_DCHECK_EQ(0, error);
268 } 273 }
269 274
270 void ChannelProxy::GetDelayEstimate(int* jitter_buffer_delay_ms,
271 int* playout_buffer_delay_ms) const {
272 // Called on Call's module_process_thread_.
273 RTC_DCHECK(jitter_buffer_delay_ms);
274 RTC_DCHECK(playout_buffer_delay_ms);
275 bool error = channel()->GetDelayEstimate(jitter_buffer_delay_ms,
276 playout_buffer_delay_ms);
277 RTC_DCHECK(error);
278 }
279
280 uint32_t ChannelProxy::GetPlayoutTimestamp() const { 275 uint32_t ChannelProxy::GetPlayoutTimestamp() const {
281 // Called on video capture thread. 276 RTC_DCHECK_RUNS_SERIALIZED(&video_capture_thread_race_checker_);
282 unsigned int timestamp = 0; 277 unsigned int timestamp = 0;
283 int error = channel()->GetPlayoutTimestamp(timestamp); 278 int error = channel()->GetPlayoutTimestamp(timestamp);
284 RTC_DCHECK(!error || timestamp == 0); 279 RTC_DCHECK(!error || timestamp == 0);
285 return timestamp; 280 return timestamp;
286 } 281 }
287 282
288 void ChannelProxy::SetMinimumPlayoutDelay(int delay_ms) { 283 void ChannelProxy::SetMinimumPlayoutDelay(int delay_ms) {
289 // Called on Call's module_process_thread_. 284 RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
290 // Limit to range accepted by both VoE and ACM, so we're at least getting as 285 // Limit to range accepted by both VoE and ACM, so we're at least getting as
291 // close as possible, instead of failing. 286 // close as possible, instead of failing.
292 delay_ms = std::max(0, std::min(delay_ms, 10000)); 287 delay_ms = std::max(0, std::min(delay_ms, 10000));
293 int error = channel()->SetMinimumPlayoutDelay(delay_ms); 288 int error = channel()->SetMinimumPlayoutDelay(delay_ms);
294 RTC_DCHECK_EQ(0, error); 289 RTC_DCHECK_EQ(0, error);
295 } 290 }
296 291
297 void ChannelProxy::SetRtcpRttStats(RtcpRttStats* rtcp_rtt_stats) { 292 void ChannelProxy::SetRtcpRttStats(RtcpRttStats* rtcp_rtt_stats) {
298 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 293 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
299 channel()->SetRtcpRttStats(rtcp_rtt_stats); 294 channel()->SetRtcpRttStats(rtcp_rtt_stats);
300 } 295 }
301 296
302 bool ChannelProxy::GetRecCodec(CodecInst* codec_inst) const { 297 bool ChannelProxy::GetRecCodec(CodecInst* codec_inst) const {
303 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 298 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
304 return channel()->GetRecCodec(*codec_inst) == 0; 299 return channel()->GetRecCodec(*codec_inst) == 0;
305 } 300 }
306 301
307 bool ChannelProxy::GetSendCodec(CodecInst* codec_inst) const { 302 bool ChannelProxy::GetSendCodec(CodecInst* codec_inst) const {
308 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 303 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
309 return channel()->GetSendCodec(*codec_inst) == 0; 304 return channel()->GetSendCodec(*codec_inst) == 0;
310 } 305 }
311 306
312 bool ChannelProxy::SetVADStatus(bool enable) { 307 bool ChannelProxy::SetVADStatus(bool enable) {
313 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 308 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
314 return channel()->SetVADStatus(enable, VADNormal, false) == 0; 309 return channel()->SetVADStatus(enable, VADNormal, false) == 0;
315 } 310 }
316 311
317 bool ChannelProxy::SetCodecFECStatus(bool enable) { 312 bool ChannelProxy::SetCodecFECStatus(bool enable) {
318 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 313 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
319 return channel()->SetCodecFECStatus(enable) == 0; 314 return channel()->SetCodecFECStatus(enable) == 0;
320 } 315 }
321 316
322 bool ChannelProxy::SetOpusDtx(bool enable) { 317 bool ChannelProxy::SetOpusDtx(bool enable) {
323 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 318 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
324 return channel()->SetOpusDtx(enable) == 0; 319 return channel()->SetOpusDtx(enable) == 0;
325 } 320 }
326 321
327 bool ChannelProxy::SetOpusMaxPlaybackRate(int frequency_hz) { 322 bool ChannelProxy::SetOpusMaxPlaybackRate(int frequency_hz) {
328 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 323 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
329 return channel()->SetOpusMaxPlaybackRate(frequency_hz) == 0; 324 return channel()->SetOpusMaxPlaybackRate(frequency_hz) == 0;
330 } 325 }
331 326
332 bool ChannelProxy::SetSendCodec(const CodecInst& codec_inst) { 327 bool ChannelProxy::SetSendCodec(const CodecInst& codec_inst) {
333 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 328 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
334 // Validation code copied from VoECodecImpl::SetSendCodec(). 329 // Validation code copied from VoECodecImpl::SetSendCodec().
335 if ((STR_CASE_CMP(codec_inst.plname, "L16") == 0) && 330 if ((STR_CASE_CMP(codec_inst.plname, "L16") == 0) &&
336 (codec_inst.pacsize >= 960)) { 331 (codec_inst.pacsize >= 960)) {
337 return false; 332 return false;
338 } 333 }
339 if (!STR_CASE_CMP(codec_inst.plname, "CN") || 334 if (!STR_CASE_CMP(codec_inst.plname, "CN") ||
340 !STR_CASE_CMP(codec_inst.plname, "TELEPHONE-EVENT") || 335 !STR_CASE_CMP(codec_inst.plname, "TELEPHONE-EVENT") ||
341 !STR_CASE_CMP(codec_inst.plname, "RED")) { 336 !STR_CASE_CMP(codec_inst.plname, "RED")) {
342 return false; 337 return false;
343 } 338 }
344 if ((codec_inst.channels != 1) && (codec_inst.channels != 2)) { 339 if ((codec_inst.channels != 1) && (codec_inst.channels != 2)) {
345 return false; 340 return false;
346 } 341 }
347 if (!AudioCodingModule::IsCodecValid(codec_inst)) { 342 if (!AudioCodingModule::IsCodecValid(codec_inst)) {
348 return false; 343 return false;
349 } 344 }
350 return channel()->SetSendCodec(codec_inst) == 0; 345 return channel()->SetSendCodec(codec_inst) == 0;
351 } 346 }
352 347
353 bool ChannelProxy::SetSendCNPayloadType(int type, 348 bool ChannelProxy::SetSendCNPayloadType(int type,
354 PayloadFrequencies frequency) { 349 PayloadFrequencies frequency) {
355 RTC_DCHECK(thread_checker_.CalledOnValidThread()); 350 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
356 // Validation code copied from VoECodecImpl::SetSendCNPayloadType(). 351 // Validation code copied from VoECodecImpl::SetSendCNPayloadType().
357 if (type < 96 || type > 127) { 352 if (type < 96 || type > 127) {
358 // Only allow dynamic range: 96 to 127 353 // Only allow dynamic range: 96 to 127
359 return false; 354 return false;
360 } 355 }
361 if ((frequency != kFreq16000Hz) && (frequency != kFreq32000Hz)) { 356 if ((frequency != kFreq16000Hz) && (frequency != kFreq32000Hz)) {
362 // It is not possible to modify the payload type for CN/8000. 357 // It is not possible to modify the payload type for CN/8000.
363 // We only allow modification of the CN payload type for CN/16000 358 // We only allow modification of the CN payload type for CN/16000
364 // and CN/32000. 359 // and CN/32000.
365 return false; 360 return false;
366 } 361 }
367 return channel()->SetSendCNPayloadType(type, frequency) == 0; 362 return channel()->SetSendCNPayloadType(type, frequency) == 0;
368 } 363 }
369 364
370 Channel* ChannelProxy::channel() const { 365 Channel* ChannelProxy::channel() const {
371 RTC_DCHECK(channel_owner_.channel()); 366 RTC_DCHECK(channel_owner_.channel());
372 return channel_owner_.channel(); 367 return channel_owner_.channel();
373 } 368 }
374 369
375 } // namespace voe 370 } // namespace voe
376 } // namespace webrtc 371 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/voice_engine/channel_proxy.h ('k') | webrtc/voice_engine/include/voe_video_sync.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698