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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 const uint32_t ntp_frac_; | 151 const uint32_t ntp_frac_; |
152 | 152 |
153 PacketContainer* const container_; | 153 PacketContainer* const container_; |
154 }; | 154 }; |
155 | 155 |
156 RTCPSender::RTCPSender( | 156 RTCPSender::RTCPSender( |
157 bool audio, | 157 bool audio, |
158 Clock* clock, | 158 Clock* clock, |
159 ReceiveStatistics* receive_statistics, | 159 ReceiveStatistics* receive_statistics, |
160 RtcpPacketTypeCounterObserver* packet_type_counter_observer, | 160 RtcpPacketTypeCounterObserver* packet_type_counter_observer, |
161 RtcEventLog* event_log, | |
162 Transport* outgoing_transport) | 161 Transport* outgoing_transport) |
163 : audio_(audio), | 162 : audio_(audio), |
164 clock_(clock), | 163 clock_(clock), |
165 random_(clock_->TimeInMicroseconds()), | 164 random_(clock_->TimeInMicroseconds()), |
166 method_(RtcpMode::kOff), | 165 method_(RtcpMode::kOff), |
167 event_log_(event_log), | 166 event_log_(nullptr), |
168 transport_(outgoing_transport), | 167 transport_(outgoing_transport), |
169 | 168 |
170 critical_section_rtcp_sender_( | 169 critical_section_rtcp_sender_( |
171 CriticalSectionWrapper::CreateCriticalSection()), | 170 CriticalSectionWrapper::CreateCriticalSection()), |
172 using_nack_(false), | 171 using_nack_(false), |
173 sending_(false), | 172 sending_(false), |
174 remb_enabled_(false), | 173 remb_enabled_(false), |
175 next_time_to_send_rtcp_(0), | 174 next_time_to_send_rtcp_(0), |
176 start_timestamp_(0), | 175 start_timestamp_(0), |
177 last_rtp_timestamp_(0), | 176 last_rtp_timestamp_(0), |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 nack_size, nack_list, repeat, pictureID); | 764 nack_size, nack_list, repeat, pictureID); |
766 } | 765 } |
767 | 766 |
768 int32_t RTCPSender::SendCompoundRTCP( | 767 int32_t RTCPSender::SendCompoundRTCP( |
769 const FeedbackState& feedback_state, | 768 const FeedbackState& feedback_state, |
770 const std::set<RTCPPacketType>& packet_types, | 769 const std::set<RTCPPacketType>& packet_types, |
771 int32_t nack_size, | 770 int32_t nack_size, |
772 const uint16_t* nack_list, | 771 const uint16_t* nack_list, |
773 bool repeat, | 772 bool repeat, |
774 uint64_t pictureID) { | 773 uint64_t pictureID) { |
| 774 CriticalSectionScoped event_lock(event_log_crit_.get()); |
775 PacketContainer container(transport_, event_log_); | 775 PacketContainer container(transport_, event_log_); |
776 { | 776 { |
777 CriticalSectionScoped lock(critical_section_rtcp_sender_.get()); | 777 CriticalSectionScoped lock(critical_section_rtcp_sender_.get()); |
778 if (method_ == RtcpMode::kOff) { | 778 if (method_ == RtcpMode::kOff) { |
779 LOG(LS_WARNING) << "Can't send rtcp if it is disabled."; | 779 LOG(LS_WARNING) << "Can't send rtcp if it is disabled."; |
780 return -1; | 780 return -1; |
781 } | 781 } |
782 | 782 |
783 // We need to send our NTP even if we haven't received any reports. | 783 // We need to send our NTP even if we haven't received any reports. |
784 uint32_t ntp_sec; | 784 uint32_t ntp_sec; |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1017 | 1017 |
1018 bool RTCPSender::AllVolatileFlagsConsumed() const { | 1018 bool RTCPSender::AllVolatileFlagsConsumed() const { |
1019 for (const ReportFlag& flag : report_flags_) { | 1019 for (const ReportFlag& flag : report_flags_) { |
1020 if (flag.is_volatile) | 1020 if (flag.is_volatile) |
1021 return false; | 1021 return false; |
1022 } | 1022 } |
1023 return true; | 1023 return true; |
1024 } | 1024 } |
1025 | 1025 |
1026 bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) { | 1026 bool RTCPSender::SendFeedbackPacket(const rtcp::TransportFeedback& packet) { |
| 1027 CriticalSectionScoped lock(event_log_crit_.get()); |
1027 class Sender : public rtcp::RtcpPacket::PacketReadyCallback { | 1028 class Sender : public rtcp::RtcpPacket::PacketReadyCallback { |
1028 public: | 1029 public: |
1029 Sender(Transport* transport, RtcEventLog* event_log) | 1030 Sender(Transport* transport, RtcEventLog* event_log) |
1030 : transport_(transport), event_log_(event_log), send_failure_(false) {} | 1031 : transport_(transport), event_log_(event_log), send_failure_(false) {} |
1031 | 1032 |
1032 void OnPacketReady(uint8_t* data, size_t length) override { | 1033 void OnPacketReady(uint8_t* data, size_t length) override { |
1033 if (transport_->SendRtcp(data, length)) { | 1034 if (transport_->SendRtcp(data, length)) { |
1034 if (event_log_) { | 1035 if (event_log_) { |
1035 event_log_->LogRtcpPacket(kOutgoingPacket, MediaType::ANY, data, | 1036 event_log_->LogRtcpPacket(kOutgoingPacket, MediaType::ANY, data, |
1036 length); | 1037 length); |
1037 } | 1038 } |
1038 } else { | 1039 } else { |
1039 send_failure_ = true; | 1040 send_failure_ = true; |
1040 } | 1041 } |
1041 } | 1042 } |
1042 | 1043 |
1043 Transport* const transport_; | 1044 Transport* const transport_; |
1044 RtcEventLog* const event_log_; | 1045 RtcEventLog* const event_log_; |
1045 bool send_failure_; | 1046 bool send_failure_; |
1046 // TODO(terelius): We would like to | 1047 // TODO(terelius): We would like to |
1047 // RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Sender); | 1048 // RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Sender); |
1048 // but we can't because of an incorrect warning (C4822) in MVS 2013. | 1049 // but we can't because of an incorrect warning (C4822) in MVS 2013. |
1049 } sender(transport_, event_log_); | 1050 } sender(transport_, event_log_); |
1050 | 1051 |
1051 uint8_t buffer[IP_PACKET_SIZE]; | 1052 uint8_t buffer[IP_PACKET_SIZE]; |
1052 return packet.BuildExternalBuffer(buffer, IP_PACKET_SIZE, &sender) && | 1053 return packet.BuildExternalBuffer(buffer, IP_PACKET_SIZE, &sender) && |
1053 !sender.send_failure_; | 1054 !sender.send_failure_; |
1054 } | 1055 } |
1055 | 1056 |
| 1057 void RTCPSender::SetRtcEventLog(webrtc::RtcEventLog* event_log) { |
| 1058 CriticalSectionScoped lock(event_log_crit_.get()); |
| 1059 event_log_ = event_log; |
| 1060 } |
1056 } // namespace webrtc | 1061 } // namespace webrtc |
OLD | NEW |