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

Side by Side Diff: webrtc/modules/pacing/packet_router.cc

Issue 2867713003: Remove hardcoded kValueSizeBytes values from variable-length header extensions. (Closed)
Patch Set: use RaceChecker instead of ThreadChecker in a few places. Created 3 years, 6 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/modules/pacing/packet_router.h ('k') | no next file » | 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/modules/pacing/packet_router.h" 11 #include "webrtc/modules/pacing/packet_router.h"
12 12
13 #include "webrtc/base/atomicops.h" 13 #include "webrtc/base/atomicops.h"
14 #include "webrtc/base/checks.h" 14 #include "webrtc/base/checks.h"
15 #include "webrtc/base/timeutils.h" 15 #include "webrtc/base/timeutils.h"
16 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" 16 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" 17 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
19 19
20 namespace webrtc { 20 namespace webrtc {
21 21
22 PacketRouter::PacketRouter() 22 PacketRouter::PacketRouter()
23 : last_remb_time_ms_(rtc::TimeMillis()), 23 : last_remb_time_ms_(rtc::TimeMillis()),
24 last_send_bitrate_bps_(0), 24 last_send_bitrate_bps_(0),
25 transport_seq_(0) { 25 transport_seq_(0) {}
26 pacer_thread_checker_.DetachFromThread();
27 }
28 26
29 PacketRouter::~PacketRouter() { 27 PacketRouter::~PacketRouter() {
30 RTC_DCHECK(rtp_send_modules_.empty()); 28 RTC_DCHECK(rtp_send_modules_.empty());
31 RTC_DCHECK(rtp_receive_modules_.empty()); 29 RTC_DCHECK(rtp_receive_modules_.empty());
32 } 30 }
33 31
34 void PacketRouter::AddSendRtpModule(RtpRtcp* rtp_module) { 32 void PacketRouter::AddSendRtpModule(RtpRtcp* rtp_module) {
35 rtc::CritScope cs(&modules_crit_); 33 rtc::CritScope cs(&modules_crit_);
36 RTC_DCHECK(std::find(rtp_send_modules_.begin(), rtp_send_modules_.end(), 34 RTC_DCHECK(std::find(rtp_send_modules_.begin(), rtp_send_modules_.end(),
37 rtp_module) == rtp_send_modules_.end()); 35 rtp_module) == rtp_send_modules_.end());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 rtp_receive_modules_.front()->SetREMBStatus(true); 89 rtp_receive_modules_.front()->SetREMBStatus(true);
92 } 90 }
93 } 91 }
94 } 92 }
95 93
96 bool PacketRouter::TimeToSendPacket(uint32_t ssrc, 94 bool PacketRouter::TimeToSendPacket(uint32_t ssrc,
97 uint16_t sequence_number, 95 uint16_t sequence_number,
98 int64_t capture_timestamp, 96 int64_t capture_timestamp,
99 bool retransmission, 97 bool retransmission,
100 const PacedPacketInfo& pacing_info) { 98 const PacedPacketInfo& pacing_info) {
101 RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread()); 99 RTC_DCHECK_RUNS_SERIALIZED(&race_checker_);
102 rtc::CritScope cs(&modules_crit_); 100 rtc::CritScope cs(&modules_crit_);
103 for (auto* rtp_module : rtp_send_modules_) { 101 for (auto* rtp_module : rtp_send_modules_) {
104 if (!rtp_module->SendingMedia()) 102 if (!rtp_module->SendingMedia())
105 continue; 103 continue;
106 if (ssrc == rtp_module->SSRC() || ssrc == rtp_module->FlexfecSsrc()) { 104 if (ssrc == rtp_module->SSRC() || ssrc == rtp_module->FlexfecSsrc()) {
107 return rtp_module->TimeToSendPacket(ssrc, sequence_number, 105 return rtp_module->TimeToSendPacket(ssrc, sequence_number,
108 capture_timestamp, retransmission, 106 capture_timestamp, retransmission,
109 pacing_info); 107 pacing_info);
110 } 108 }
111 } 109 }
112 return true; 110 return true;
113 } 111 }
114 112
115 size_t PacketRouter::TimeToSendPadding(size_t bytes_to_send, 113 size_t PacketRouter::TimeToSendPadding(size_t bytes_to_send,
116 const PacedPacketInfo& pacing_info) { 114 const PacedPacketInfo& pacing_info) {
117 RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread()); 115 RTC_DCHECK_RUNS_SERIALIZED(&race_checker_);
118 size_t total_bytes_sent = 0; 116 size_t total_bytes_sent = 0;
119 rtc::CritScope cs(&modules_crit_); 117 rtc::CritScope cs(&modules_crit_);
120 // Rtp modules are ordered by which stream can most benefit from padding. 118 // Rtp modules are ordered by which stream can most benefit from padding.
121 for (RtpRtcp* module : rtp_send_modules_) { 119 for (RtpRtcp* module : rtp_send_modules_) {
122 if (module->SendingMedia() && module->HasBweExtensions()) { 120 if (module->SendingMedia() && module->HasBweExtensions()) {
123 size_t bytes_sent = module->TimeToSendPadding( 121 size_t bytes_sent = module->TimeToSendPadding(
124 bytes_to_send - total_bytes_sent, pacing_info); 122 bytes_to_send - total_bytes_sent, pacing_info);
125 total_bytes_sent += bytes_sent; 123 total_bytes_sent += bytes_sent;
126 if (total_bytes_sent >= bytes_to_send) 124 if (total_bytes_sent >= bytes_to_send)
127 break; 125 break;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 return false; 199 return false;
202 // The Add* and Remove* methods above ensure that this (and only this) module 200 // The Add* and Remove* methods above ensure that this (and only this) module
203 // has REMB enabled. REMB should be disabled on all other modules, because 201 // has REMB enabled. REMB should be disabled on all other modules, because
204 // otherwise, they will send REMB with stale info. 202 // otherwise, they will send REMB with stale info.
205 RTC_DCHECK(remb_module->REMB()); 203 RTC_DCHECK(remb_module->REMB());
206 remb_module->SetREMBData(bitrate_bps, ssrcs); 204 remb_module->SetREMBData(bitrate_bps, ssrcs);
207 return true; 205 return true;
208 } 206 }
209 207
210 bool PacketRouter::SendTransportFeedback(rtcp::TransportFeedback* packet) { 208 bool PacketRouter::SendTransportFeedback(rtcp::TransportFeedback* packet) {
211 RTC_DCHECK(pacer_thread_checker_.CalledOnValidThread()); 209 RTC_DCHECK_RUNS_SERIALIZED(&race_checker_);
212 rtc::CritScope cs(&modules_crit_); 210 rtc::CritScope cs(&modules_crit_);
213 // Prefer send modules. 211 // Prefer send modules.
214 for (auto* rtp_module : rtp_send_modules_) { 212 for (auto* rtp_module : rtp_send_modules_) {
215 packet->SetSenderSsrc(rtp_module->SSRC()); 213 packet->SetSenderSsrc(rtp_module->SSRC());
216 if (rtp_module->SendFeedbackPacket(*packet)) 214 if (rtp_module->SendFeedbackPacket(*packet))
217 return true; 215 return true;
218 } 216 }
219 for (auto* rtp_module : rtp_receive_modules_) { 217 for (auto* rtp_module : rtp_receive_modules_) {
220 packet->SetSenderSsrc(rtp_module->SSRC()); 218 packet->SetSenderSsrc(rtp_module->SSRC());
221 if (rtp_module->SendFeedbackPacket(*packet)) 219 if (rtp_module->SendFeedbackPacket(*packet))
222 return true; 220 return true;
223 } 221 }
224 return false; 222 return false;
225 } 223 }
226 224
227 } // namespace webrtc 225 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/pacing/packet_router.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698