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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_sender.cc

Issue 1365043002: Set RtcpSender transport at construction. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase + cleanup Created 5 years, 2 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
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 } 128 }
129 129
130 private: 130 private:
131 RtcpContext* const context_; 131 RtcpContext* const context_;
132 }; 132 };
133 133
134 RTCPSender::RTCPSender( 134 RTCPSender::RTCPSender(
135 bool audio, 135 bool audio,
136 Clock* clock, 136 Clock* clock,
137 ReceiveStatistics* receive_statistics, 137 ReceiveStatistics* receive_statistics,
138 RtcpPacketTypeCounterObserver* packet_type_counter_observer) 138 RtcpPacketTypeCounterObserver* packet_type_counter_observer,
139 Transport* outgoing_transport)
139 : audio_(audio), 140 : audio_(audio),
140 clock_(clock), 141 clock_(clock),
141 method_(kRtcpOff), 142 method_(kRtcpOff),
142 critical_section_transport_( 143 transport_(outgoing_transport),
143 CriticalSectionWrapper::CreateCriticalSection()),
144 cbTransport_(nullptr),
145 144
146 critical_section_rtcp_sender_( 145 critical_section_rtcp_sender_(
147 CriticalSectionWrapper::CreateCriticalSection()), 146 CriticalSectionWrapper::CreateCriticalSection()),
148 using_nack_(false), 147 using_nack_(false),
149 sending_(false), 148 sending_(false),
150 remb_enabled_(false), 149 remb_enabled_(false),
151 next_time_to_send_rtcp_(0), 150 next_time_to_send_rtcp_(0),
152 start_timestamp_(0), 151 start_timestamp_(0),
153 last_rtp_timestamp_(0), 152 last_rtp_timestamp_(0),
154 last_frame_capture_time_ms_(-1), 153 last_frame_capture_time_ms_(-1),
(...skipping 11 matching lines...) Expand all
166 165
167 app_sub_type_(0), 166 app_sub_type_(0),
168 app_name_(0), 167 app_name_(0),
169 app_data_(nullptr), 168 app_data_(nullptr),
170 app_length_(0), 169 app_length_(0),
171 170
172 xr_send_receiver_reference_time_enabled_(false), 171 xr_send_receiver_reference_time_enabled_(false),
173 packet_type_counter_observer_(packet_type_counter_observer) { 172 packet_type_counter_observer_(packet_type_counter_observer) {
174 memset(last_send_report_, 0, sizeof(last_send_report_)); 173 memset(last_send_report_, 0, sizeof(last_send_report_));
175 memset(last_rtcp_time_, 0, sizeof(last_rtcp_time_)); 174 memset(last_rtcp_time_, 0, sizeof(last_rtcp_time_));
175 RTC_DCHECK(transport_ != nullptr);
176 176
177 builders_[kRtcpSr] = &RTCPSender::BuildSR; 177 builders_[kRtcpSr] = &RTCPSender::BuildSR;
178 builders_[kRtcpRr] = &RTCPSender::BuildRR; 178 builders_[kRtcpRr] = &RTCPSender::BuildRR;
179 builders_[kRtcpSdes] = &RTCPSender::BuildSDES; 179 builders_[kRtcpSdes] = &RTCPSender::BuildSDES;
180 builders_[kRtcpPli] = &RTCPSender::BuildPLI; 180 builders_[kRtcpPli] = &RTCPSender::BuildPLI;
181 builders_[kRtcpFir] = &RTCPSender::BuildFIR; 181 builders_[kRtcpFir] = &RTCPSender::BuildFIR;
182 builders_[kRtcpSli] = &RTCPSender::BuildSLI; 182 builders_[kRtcpSli] = &RTCPSender::BuildSLI;
183 builders_[kRtcpRpsi] = &RTCPSender::BuildRPSI; 183 builders_[kRtcpRpsi] = &RTCPSender::BuildRPSI;
184 builders_[kRtcpRemb] = &RTCPSender::BuildREMB; 184 builders_[kRtcpRemb] = &RTCPSender::BuildREMB;
185 builders_[kRtcpBye] = &RTCPSender::BuildBYE; 185 builders_[kRtcpBye] = &RTCPSender::BuildBYE;
186 builders_[kRtcpApp] = &RTCPSender::BuildAPP; 186 builders_[kRtcpApp] = &RTCPSender::BuildAPP;
187 builders_[kRtcpTmmbr] = &RTCPSender::BuildTMMBR; 187 builders_[kRtcpTmmbr] = &RTCPSender::BuildTMMBR;
188 builders_[kRtcpTmmbn] = &RTCPSender::BuildTMMBN; 188 builders_[kRtcpTmmbn] = &RTCPSender::BuildTMMBN;
189 builders_[kRtcpNack] = &RTCPSender::BuildNACK; 189 builders_[kRtcpNack] = &RTCPSender::BuildNACK;
190 builders_[kRtcpXrVoipMetric] = &RTCPSender::BuildVoIPMetric; 190 builders_[kRtcpXrVoipMetric] = &RTCPSender::BuildVoIPMetric;
191 builders_[kRtcpXrReceiverReferenceTime] = 191 builders_[kRtcpXrReceiverReferenceTime] =
192 &RTCPSender::BuildReceiverReferenceTime; 192 &RTCPSender::BuildReceiverReferenceTime;
193 builders_[kRtcpXrDlrrReportBlock] = &RTCPSender::BuildDlrr; 193 builders_[kRtcpXrDlrrReportBlock] = &RTCPSender::BuildDlrr;
194 } 194 }
195 195
196 RTCPSender::~RTCPSender() { 196 RTCPSender::~RTCPSender() {
197 } 197 }
198 198
199 int32_t RTCPSender::RegisterSendTransport(Transport* outgoingTransport) {
200 CriticalSectionScoped lock(critical_section_transport_.get());
201 cbTransport_ = outgoingTransport;
202 return 0;
203 }
204
205 RTCPMethod RTCPSender::Status() const { 199 RTCPMethod RTCPSender::Status() const {
206 CriticalSectionScoped lock(critical_section_rtcp_sender_.get()); 200 CriticalSectionScoped lock(critical_section_rtcp_sender_.get());
207 return method_; 201 return method_;
208 } 202 }
209 203
210 void RTCPSender::SetRTCPStatus(RTCPMethod method) { 204 void RTCPSender::SetRTCPStatus(RTCPMethod method) {
211 CriticalSectionScoped lock(critical_section_rtcp_sender_.get()); 205 CriticalSectionScoped lock(critical_section_rtcp_sender_.get());
212 method_ = method; 206 method_ = method;
213 207
214 if (method == kRtcpOff) 208 if (method == kRtcpOff)
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 receiveTime += (feedback_state.last_rr_ntp_frac & 0xffff0000) >> 16; 1102 receiveTime += (feedback_state.last_rr_ntp_frac & 0xffff0000) >> 16;
1109 1103
1110 delaySinceLastReceivedSR = now-receiveTime; 1104 delaySinceLastReceivedSR = now-receiveTime;
1111 } 1105 }
1112 report_block->delaySinceLastSR = delaySinceLastReceivedSR; 1106 report_block->delaySinceLastSR = delaySinceLastReceivedSR;
1113 report_block->lastSR = feedback_state.remote_sr; 1107 report_block->lastSR = feedback_state.remote_sr;
1114 return true; 1108 return true;
1115 } 1109 }
1116 1110
1117 int32_t RTCPSender::SendToNetwork(const uint8_t* dataBuffer, size_t length) { 1111 int32_t RTCPSender::SendToNetwork(const uint8_t* dataBuffer, size_t length) {
1118 CriticalSectionScoped lock(critical_section_transport_.get()); 1112 if (transport_->SendRtcp(dataBuffer, length))
1119 if (cbTransport_) { 1113 return 0;
1120 if (cbTransport_->SendRtcp(dataBuffer, length))
1121 return 0;
1122 }
1123 return -1; 1114 return -1;
1124 } 1115 }
1125 1116
1126 void RTCPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) { 1117 void RTCPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) {
1127 assert(csrcs.size() <= kRtpCsrcSize); 1118 assert(csrcs.size() <= kRtpCsrcSize);
1128 CriticalSectionScoped lock(critical_section_rtcp_sender_.get()); 1119 CriticalSectionScoped lock(critical_section_rtcp_sender_.get());
1129 csrcs_ = csrcs; 1120 csrcs_ = csrcs;
1130 } 1121 }
1131 1122
1132 int32_t RTCPSender::SetApplicationSpecificData(uint8_t subType, 1123 int32_t RTCPSender::SetApplicationSpecificData(uint8_t subType,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1194
1204 bool RTCPSender::AllVolatileFlagsConsumed() const { 1195 bool RTCPSender::AllVolatileFlagsConsumed() const {
1205 for (const ReportFlag& flag : report_flags_) { 1196 for (const ReportFlag& flag : report_flags_) {
1206 if (flag.is_volatile) 1197 if (flag.is_volatile)
1207 return false; 1198 return false;
1208 } 1199 }
1209 return true; 1200 return true;
1210 } 1201 }
1211 1202
1212 bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) { 1203 bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) {
1213 CriticalSectionScoped lock(critical_section_transport_.get());
1214 if (!cbTransport_)
1215 return false;
1216
1217 class Sender : public rtcp::RtcpPacket::PacketReadyCallback { 1204 class Sender : public rtcp::RtcpPacket::PacketReadyCallback {
1218 public: 1205 public:
1219 Sender(Transport* transport) 1206 Sender(Transport* transport)
1220 : transport_(transport), send_failure_(false) {} 1207 : transport_(transport), send_failure_(false) {}
1221 1208
1222 void OnPacketReady(uint8_t* data, size_t length) override { 1209 void OnPacketReady(uint8_t* data, size_t length) override {
1223 if (!transport_->SendRtcp(data, length)) 1210 if (!transport_->SendRtcp(data, length))
1224 send_failure_ = true; 1211 send_failure_ = true;
1225 } 1212 }
1226 1213
1227 Transport* const transport_; 1214 Transport* const transport_;
1228 bool send_failure_; 1215 bool send_failure_;
1229 } sender(cbTransport_); 1216 } sender(transport_);
1230 1217
1231 uint8_t buffer[IP_PACKET_SIZE]; 1218 uint8_t buffer[IP_PACKET_SIZE];
1232 return packet.BuildExternalBuffer(buffer, IP_PACKET_SIZE, &sender) && 1219 return packet.BuildExternalBuffer(buffer, IP_PACKET_SIZE, &sender) &&
1233 !sender.send_failure_; 1220 !sender.send_failure_;
1234 } 1221 }
1235 1222
1236 } // namespace webrtc 1223 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_sender.h ('k') | webrtc/modules/rtp_rtcp/source/rtcp_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698