OLD | NEW |
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 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 void OnPacketReady(uint8_t* data, size_t length) override { | 92 void OnPacketReady(uint8_t* data, size_t length) override { |
93 if (transport_->SendRtcp(data, length)) { | 93 if (transport_->SendRtcp(data, length)) { |
94 bytes_sent_ += length; | 94 bytes_sent_ += length; |
95 if (event_log_) { | 95 if (event_log_) { |
96 event_log_->LogRtcpPacket(kOutgoingPacket, MediaType::ANY, data, | 96 event_log_->LogRtcpPacket(kOutgoingPacket, MediaType::ANY, data, |
97 length); | 97 length); |
98 } | 98 } |
99 } | 99 } |
100 } | 100 } |
101 | 101 |
102 size_t SendPackets() { | 102 size_t SendPackets(size_t max_payload_length) { |
103 rtcp::CompoundPacket::Build(this); | 103 RTC_DCHECK_LE(max_payload_length, static_cast<size_t>(IP_PACKET_SIZE)); |
| 104 uint8_t buffer[IP_PACKET_SIZE]; |
| 105 BuildExternalBuffer(buffer, max_payload_length, this); |
104 return bytes_sent_; | 106 return bytes_sent_; |
105 } | 107 } |
106 | 108 |
107 private: | 109 private: |
108 Transport* transport_; | 110 Transport* transport_; |
109 RtcEventLog* const event_log_; | 111 RtcEventLog* const event_log_; |
110 size_t bytes_sent_; | 112 size_t bytes_sent_; |
111 | 113 |
112 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(PacketContainer); | 114 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(PacketContainer); |
113 }; | 115 }; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 remote_ssrc_(0), | 164 remote_ssrc_(0), |
163 receive_statistics_(receive_statistics), | 165 receive_statistics_(receive_statistics), |
164 | 166 |
165 sequence_number_fir_(0), | 167 sequence_number_fir_(0), |
166 | 168 |
167 remb_bitrate_(0), | 169 remb_bitrate_(0), |
168 | 170 |
169 tmmbr_help_(), | 171 tmmbr_help_(), |
170 tmmbr_send_(0), | 172 tmmbr_send_(0), |
171 packet_oh_send_(0), | 173 packet_oh_send_(0), |
| 174 max_payload_length_(IP_PACKET_SIZE - 28), // IPv4 + UDP by default. |
172 | 175 |
173 app_sub_type_(0), | 176 app_sub_type_(0), |
174 app_name_(0), | 177 app_name_(0), |
175 app_data_(nullptr), | 178 app_data_(nullptr), |
176 app_length_(0), | 179 app_length_(0), |
177 | 180 |
178 xr_send_receiver_reference_time_enabled_(false), | 181 xr_send_receiver_reference_time_enabled_(false), |
179 packet_type_counter_observer_(packet_type_counter_observer) { | 182 packet_type_counter_observer_(packet_type_counter_observer) { |
180 RTC_DCHECK(transport_ != nullptr); | 183 RTC_DCHECK(transport_ != nullptr); |
181 | 184 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 273 |
271 void RTCPSender::SetTMMBRStatus(bool enable) { | 274 void RTCPSender::SetTMMBRStatus(bool enable) { |
272 rtc::CritScope lock(&critical_section_rtcp_sender_); | 275 rtc::CritScope lock(&critical_section_rtcp_sender_); |
273 if (enable) { | 276 if (enable) { |
274 SetFlag(RTCPPacketType::kRtcpTmmbr, false); | 277 SetFlag(RTCPPacketType::kRtcpTmmbr, false); |
275 } else { | 278 } else { |
276 ConsumeFlag(RTCPPacketType::kRtcpTmmbr, true); | 279 ConsumeFlag(RTCPPacketType::kRtcpTmmbr, true); |
277 } | 280 } |
278 } | 281 } |
279 | 282 |
| 283 void RTCPSender::SetMaxPayloadLength(size_t max_payload_length) { |
| 284 max_payload_length_ = max_payload_length; |
| 285 } |
| 286 |
280 void RTCPSender::SetStartTimestamp(uint32_t start_timestamp) { | 287 void RTCPSender::SetStartTimestamp(uint32_t start_timestamp) { |
281 rtc::CritScope lock(&critical_section_rtcp_sender_); | 288 rtc::CritScope lock(&critical_section_rtcp_sender_); |
282 start_timestamp_ = start_timestamp; | 289 start_timestamp_ = start_timestamp; |
283 } | 290 } |
284 | 291 |
285 void RTCPSender::SetLastRtpTime(uint32_t rtp_timestamp, | 292 void RTCPSender::SetLastRtpTime(uint32_t rtp_timestamp, |
286 int64_t capture_time_ms) { | 293 int64_t capture_time_ms) { |
287 rtc::CritScope lock(&critical_section_rtcp_sender_); | 294 rtc::CritScope lock(&critical_section_rtcp_sender_); |
288 last_rtp_timestamp_ = rtp_timestamp; | 295 last_rtp_timestamp_ = rtp_timestamp; |
289 if (capture_time_ms < 0) { | 296 if (capture_time_ms < 0) { |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 } | 809 } |
803 | 810 |
804 if (packet_type_counter_observer_ != nullptr) { | 811 if (packet_type_counter_observer_ != nullptr) { |
805 packet_type_counter_observer_->RtcpPacketTypesCounterUpdated( | 812 packet_type_counter_observer_->RtcpPacketTypesCounterUpdated( |
806 remote_ssrc_, packet_type_counter_); | 813 remote_ssrc_, packet_type_counter_); |
807 } | 814 } |
808 | 815 |
809 RTC_DCHECK(AllVolatileFlagsConsumed()); | 816 RTC_DCHECK(AllVolatileFlagsConsumed()); |
810 } | 817 } |
811 | 818 |
812 size_t bytes_sent = container.SendPackets(); | 819 size_t bytes_sent = container.SendPackets(max_payload_length_); |
813 return bytes_sent == 0 ? -1 : 0; | 820 return bytes_sent == 0 ? -1 : 0; |
814 } | 821 } |
815 | 822 |
816 void RTCPSender::PrepareReport(const std::set<RTCPPacketType>& packetTypes, | 823 void RTCPSender::PrepareReport(const std::set<RTCPPacketType>& packetTypes, |
817 const FeedbackState& feedback_state) { | 824 const FeedbackState& feedback_state) { |
818 // Add all flags as volatile. Non volatile entries will not be overwritten | 825 // Add all flags as volatile. Non volatile entries will not be overwritten |
819 // and all new volatile flags added will be consumed by the end of this call. | 826 // and all new volatile flags added will be consumed by the end of this call. |
820 SetFlags(packetTypes, true); | 827 SetFlags(packetTypes, true); |
821 | 828 |
822 if (packet_type_counter_.first_packet_time_ms == -1) | 829 if (packet_type_counter_.first_packet_time_ms == -1) |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 } | 1030 } |
1024 | 1031 |
1025 Transport* const transport_; | 1032 Transport* const transport_; |
1026 RtcEventLog* const event_log_; | 1033 RtcEventLog* const event_log_; |
1027 bool send_failure_; | 1034 bool send_failure_; |
1028 // TODO(terelius): We would like to | 1035 // TODO(terelius): We would like to |
1029 // RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Sender); | 1036 // RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Sender); |
1030 // but we can't because of an incorrect warning (C4822) in MVS 2013. | 1037 // but we can't because of an incorrect warning (C4822) in MVS 2013. |
1031 } sender(transport_, event_log_); | 1038 } sender(transport_, event_log_); |
1032 | 1039 |
| 1040 RTC_DCHECK_LE(max_payload_length_, static_cast<size_t>(IP_PACKET_SIZE)); |
1033 uint8_t buffer[IP_PACKET_SIZE]; | 1041 uint8_t buffer[IP_PACKET_SIZE]; |
1034 return packet.BuildExternalBuffer(buffer, IP_PACKET_SIZE, &sender) && | 1042 return packet.BuildExternalBuffer(buffer, max_payload_length_, &sender) && |
1035 !sender.send_failure_; | 1043 !sender.send_failure_; |
1036 } | 1044 } |
1037 | 1045 |
1038 } // namespace webrtc | 1046 } // namespace webrtc |
OLD | NEW |