OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/rtcp/rtcp_sender.h" | 5 #include "media/cast/rtcp/rtcp_sender.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "media/cast/cast_environment.h" | 11 #include "media/cast/cast_environment.h" |
| 12 #include "media/cast/rtcp/receiver_rtcp_event_subscriber.h" |
12 #include "media/cast/rtcp/rtcp_defines.h" | 13 #include "media/cast/rtcp/rtcp_defines.h" |
13 #include "media/cast/rtcp/rtcp_utility.h" | 14 #include "media/cast/rtcp/rtcp_utility.h" |
14 #include "media/cast/transport/cast_transport_defines.h" | 15 #include "media/cast/transport/cast_transport_defines.h" |
15 #include "media/cast/transport/pacing/paced_sender.h" | 16 #include "media/cast/transport/pacing/paced_sender.h" |
16 #include "net/base/big_endian.h" | 17 #include "net/base/big_endian.h" |
17 | 18 |
18 namespace { | 19 namespace { |
19 | 20 |
20 using media::cast::kRtcpCastLogHeaderSize; | 21 using media::cast::kRtcpCastLogHeaderSize; |
21 using media::cast::kRtcpSenderFrameLogSize; | 22 using media::cast::kRtcpSenderFrameLogSize; |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 } | 143 } |
143 | 144 |
144 RtcpSender::~RtcpSender() {} | 145 RtcpSender::~RtcpSender() {} |
145 | 146 |
146 // static | 147 // static |
147 bool RtcpSender::IsReceiverEvent(const media::cast::CastLoggingEvent& event) { | 148 bool RtcpSender::IsReceiverEvent(const media::cast::CastLoggingEvent& event) { |
148 return ConvertEventTypeToWireFormat(event) != 0; | 149 return ConvertEventTypeToWireFormat(event) != 0; |
149 } | 150 } |
150 | 151 |
151 void RtcpSender::SendRtcpFromRtpReceiver( | 152 void RtcpSender::SendRtcpFromRtpReceiver( |
152 uint32 packet_type_flags, const transport::RtcpReportBlock* report_block, | 153 uint32 packet_type_flags, |
| 154 const transport::RtcpReportBlock* report_block, |
153 const RtcpReceiverReferenceTimeReport* rrtr, | 155 const RtcpReceiverReferenceTimeReport* rrtr, |
154 const RtcpCastMessage* cast_message, RtcpReceiverLogMessage* receiver_log) { | 156 const RtcpCastMessage* cast_message, |
| 157 ReceiverRtcpEventSubscriber* event_subscriber) { |
155 if (packet_type_flags & kRtcpSr || packet_type_flags & kRtcpDlrr || | 158 if (packet_type_flags & kRtcpSr || packet_type_flags & kRtcpDlrr || |
156 packet_type_flags & kRtcpSenderLog) { | 159 packet_type_flags & kRtcpSenderLog) { |
157 NOTREACHED() << "Invalid argument"; | 160 NOTREACHED() << "Invalid argument"; |
158 } | 161 } |
159 if (packet_type_flags & kRtcpPli || packet_type_flags & kRtcpRpsi || | 162 if (packet_type_flags & kRtcpPli || packet_type_flags & kRtcpRpsi || |
160 packet_type_flags & kRtcpRemb || packet_type_flags & kRtcpNack) { | 163 packet_type_flags & kRtcpRemb || packet_type_flags & kRtcpNack) { |
161 // Implement these for webrtc interop. | 164 // Implement these for webrtc interop. |
162 NOTIMPLEMENTED(); | 165 NOTIMPLEMENTED(); |
163 } | 166 } |
164 Packet packet; | 167 Packet packet; |
(...skipping 10 matching lines...) Expand all Loading... |
175 } | 178 } |
176 if (packet_type_flags & kRtcpRrtr) { | 179 if (packet_type_flags & kRtcpRrtr) { |
177 DCHECK(rrtr) << "Invalid argument"; | 180 DCHECK(rrtr) << "Invalid argument"; |
178 BuildRrtr(rrtr, &packet); | 181 BuildRrtr(rrtr, &packet); |
179 } | 182 } |
180 if (packet_type_flags & kRtcpCast) { | 183 if (packet_type_flags & kRtcpCast) { |
181 DCHECK(cast_message) << "Invalid argument"; | 184 DCHECK(cast_message) << "Invalid argument"; |
182 BuildCast(cast_message, &packet); | 185 BuildCast(cast_message, &packet); |
183 } | 186 } |
184 if (packet_type_flags & kRtcpReceiverLog) { | 187 if (packet_type_flags & kRtcpReceiverLog) { |
185 DCHECK(receiver_log) << "Invalid argument"; | 188 DCHECK(event_subscriber) << "Invalid argument"; |
186 BuildReceiverLog(receiver_log, &packet); | 189 RtcpReceiverLogMessage receiver_log; |
| 190 event_subscriber->GetReceiverLogMessageAndReset(&receiver_log); |
| 191 BuildReceiverLog(&receiver_log, &packet); |
187 } | 192 } |
188 if (packet.empty()) return; // Sanity don't send empty packets. | 193 if (packet.empty()) return; // Sanity don't send empty packets. |
189 | 194 |
190 transport_->SendRtcpPacket(packet); | 195 transport_->SendRtcpPacket(packet); |
191 } | 196 } |
192 | 197 |
193 void RtcpSender::BuildRR(const transport::RtcpReportBlock* report_block, | 198 void RtcpSender::BuildRR(const transport::RtcpReportBlock* report_block, |
194 Packet* packet) const { | 199 Packet* packet) const { |
195 size_t start_size = packet->size(); | 200 size_t start_size = packet->size(); |
196 DCHECK_LT(start_size + 32, kMaxIpPacketSize) << "Not enough buffer space"; | 201 DCHECK_LT(start_size + 32, kMaxIpPacketSize) << "Not enough buffer space"; |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 if (frame_log_messages.event_log_messages_.empty()) { | 658 if (frame_log_messages.event_log_messages_.empty()) { |
654 // We sent all messages on this frame; pop the frame header. | 659 // We sent all messages on this frame; pop the frame header. |
655 receiver_log_message->pop_front(); | 660 receiver_log_message->pop_front(); |
656 } | 661 } |
657 } | 662 } |
658 DCHECK_EQ(total_number_of_messages_to_send, 0); | 663 DCHECK_EQ(total_number_of_messages_to_send, 0); |
659 } | 664 } |
660 | 665 |
661 } // namespace cast | 666 } // namespace cast |
662 } // namespace media | 667 } // namespace media |
OLD | NEW |