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_receiver.h" | 5 #include "media/cast/rtcp/rtcp_receiver.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | |
8 #include "base/logging.h" | 7 #include "base/logging.h" |
9 #include "media/cast/rtcp/rtcp_utility.h" | 8 #include "media/cast/rtcp/rtcp_utility.h" |
10 | 9 |
11 namespace media { | 10 namespace media { |
12 namespace cast { | 11 namespace cast { |
13 | 12 |
14 RtcpReceiver::RtcpReceiver(RtcpSenderFeedback* sender_feedback, | 13 RtcpReceiver::RtcpReceiver(scoped_refptr<CastEnvironment> cast_environment, |
| 14 RtcpSenderFeedback* sender_feedback, |
15 RtcpReceiverFeedback* receiver_feedback, | 15 RtcpReceiverFeedback* receiver_feedback, |
16 RtcpRttFeedback* rtt_feedback, | 16 RtcpRttFeedback* rtt_feedback, |
17 uint32 local_ssrc) | 17 uint32 local_ssrc) |
18 : ssrc_(local_ssrc), | 18 : ssrc_(local_ssrc), |
19 remote_ssrc_(0), | 19 remote_ssrc_(0), |
20 sender_feedback_(sender_feedback), | 20 sender_feedback_(sender_feedback), |
21 receiver_feedback_(receiver_feedback), | 21 receiver_feedback_(receiver_feedback), |
22 rtt_feedback_(rtt_feedback) { | 22 rtt_feedback_(rtt_feedback), |
23 } | 23 cast_environment_(cast_environment) {} |
24 | 24 |
25 RtcpReceiver::~RtcpReceiver() {} | 25 RtcpReceiver::~RtcpReceiver() {} |
26 | 26 |
27 void RtcpReceiver::SetRemoteSSRC(uint32 ssrc) { | 27 void RtcpReceiver::SetRemoteSSRC(uint32 ssrc) { |
28 remote_ssrc_ = ssrc; | 28 remote_ssrc_ = ssrc; |
29 } | 29 } |
30 | 30 |
31 void RtcpReceiver::IncomingRtcpPacket(RtcpParser* rtcp_parser) { | 31 void RtcpReceiver::IncomingRtcpPacket(RtcpParser* rtcp_parser) { |
32 RtcpFieldTypes field_type = rtcp_parser->Begin(); | 32 RtcpFieldTypes field_type = rtcp_parser->Begin(); |
33 while (field_type != kRtcpNotValidCode) { | 33 while (field_type != kRtcpNotValidCode) { |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // which the information in this reception report block pertains. | 155 // which the information in this reception report block pertains. |
156 | 156 |
157 const RtcpFieldReportBlockItem& rb = rtcp_field->report_block_item; | 157 const RtcpFieldReportBlockItem& rb = rtcp_field->report_block_item; |
158 | 158 |
159 // Filter out all report blocks that are not for us. | 159 // Filter out all report blocks that are not for us. |
160 if (rb.ssrc != ssrc_) { | 160 if (rb.ssrc != ssrc_) { |
161 // This block is not for us ignore it. | 161 // This block is not for us ignore it. |
162 return; | 162 return; |
163 } | 163 } |
164 VLOG(1) << "Cast RTCP received RB from SSRC " << remote_ssrc; | 164 VLOG(1) << "Cast RTCP received RB from SSRC " << remote_ssrc; |
165 | 165 cast_environment_->Logging()->InsertGenericEvent(kPacketLoss, |
166 TRACE_COUNTER_ID1("cast_rtcp", "RtcpReceiver::FractionLost", | 166 rb.fraction_lost); |
167 rb.ssrc, rb.fraction_lost); | 167 cast_environment_->Logging()->InsertGenericEvent(kJitterMs, |
168 TRACE_COUNTER_ID1("cast_rtcp", "RtcpReceiver::CumulativeNumberOfPacketsLost", | 168 rb.jitter); |
169 rb.ssrc, rb.cumulative_number_of_packets_lost); | |
170 TRACE_COUNTER_ID1("cast_rtcp", "RtcpReceiver::Jitter", | |
171 rb.ssrc, rb.jitter); | |
172 | 169 |
173 RtcpReportBlock report_block; | 170 RtcpReportBlock report_block; |
174 report_block.remote_ssrc = remote_ssrc; | 171 report_block.remote_ssrc = remote_ssrc; |
175 report_block.media_ssrc = rb.ssrc; | 172 report_block.media_ssrc = rb.ssrc; |
176 report_block.fraction_lost = rb.fraction_lost; | 173 report_block.fraction_lost = rb.fraction_lost; |
177 report_block.cumulative_lost = rb.cumulative_number_of_packets_lost; | 174 report_block.cumulative_lost = rb.cumulative_number_of_packets_lost; |
178 report_block.extended_high_sequence_number = | 175 report_block.extended_high_sequence_number = |
179 rb.extended_highest_sequence_number; | 176 rb.extended_highest_sequence_number; |
180 report_block.jitter = rb.jitter; | 177 report_block.jitter = rb.jitter; |
181 report_block.last_sr = rb.last_sender_report; | 178 report_block.last_sr = rb.last_sender_report; |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 | 435 |
439 void RtcpReceiver::HandleFIRItem(const RtcpField* rtcp_field) { | 436 void RtcpReceiver::HandleFIRItem(const RtcpField* rtcp_field) { |
440 // Is it our sender that is requested to generate a new keyframe. | 437 // Is it our sender that is requested to generate a new keyframe. |
441 if (ssrc_ != rtcp_field->fir_item.ssrc) return; | 438 if (ssrc_ != rtcp_field->fir_item.ssrc) return; |
442 | 439 |
443 VLOG(1) << "Cast RTCP received FIR on our SSRC " << ssrc_; | 440 VLOG(1) << "Cast RTCP received FIR on our SSRC " << ssrc_; |
444 } | 441 } |
445 | 442 |
446 } // namespace cast | 443 } // namespace cast |
447 } // namespace media | 444 } // namespace media |
OLD | NEW |