Index: media/cast/rtcp/rtcp.cc |
diff --git a/media/cast/rtcp/rtcp.cc b/media/cast/rtcp/rtcp.cc |
index a1720ffe1a2e433c9026d21c6482df8e79e6bb86..62b525d4ed0fcb4ef7c052eab6d38b1cbae9ab41 100644 |
--- a/media/cast/rtcp/rtcp.cc |
+++ b/media/cast/rtcp/rtcp.cc |
@@ -80,6 +80,20 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback { |
rtcp_->OnReceivedSendReportRequest(); |
} |
+ virtual void OnReceivedReceiverLog( |
+ const RtcpReceiverLogMessage& receiver_log) OVERRIDE { |
+ // TODO(pwestin): Implement. |
+ // Add received log messages into our log system. |
+ NOTIMPLEMENTED(); |
+ } |
+ |
+ virtual void OnReceivedSenderLog( |
+ const RtcpSenderLogMessage& sender_log) OVERRIDE { |
+ // TODO(pwestin): Implement. |
+ // Add received log messages into our log system. |
+ NOTIMPLEMENTED(); |
+ } |
+ |
private: |
Rtcp* rtcp_; |
}; |
@@ -91,13 +105,13 @@ Rtcp::Rtcp(base::TickClock* clock, |
RtpReceiverStatistics* rtp_receiver_statistics, |
RtcpMode rtcp_mode, |
const base::TimeDelta& rtcp_interval, |
- bool sending_media, |
uint32 local_ssrc, |
+ uint32 remote_ssrc, |
const std::string& c_name) |
: rtcp_interval_(rtcp_interval), |
rtcp_mode_(rtcp_mode), |
- sending_media_(sending_media), |
local_ssrc_(local_ssrc), |
+ remote_ssrc_(remote_ssrc), |
rtp_sender_statistics_(rtp_sender_statistics), |
rtp_receiver_statistics_(rtp_receiver_statistics), |
receiver_feedback_(new LocalRtcpReceiverFeedback(this)), |
@@ -115,6 +129,7 @@ Rtcp::Rtcp(base::TickClock* clock, |
receiver_feedback_.get(), |
rtt_feedback_.get(), |
local_ssrc)); |
+ rtcp_receiver_->SetRemoteSSRC(remote_ssrc); |
} |
Rtcp::~Rtcp() {} |
@@ -148,10 +163,6 @@ base::TimeTicks Rtcp::TimeToSendNextRtcpReport() { |
return next_time_to_send_rtcp_; |
} |
-void Rtcp::SetRemoteSSRC(uint32 ssrc) { |
- rtcp_receiver_->SetRemoteSSRC(ssrc); |
-} |
- |
void Rtcp::IncomingRtcpPacket(const uint8* rtcp_buffer, size_t length) { |
RtcpParser rtcp_parser(rtcp_buffer, length); |
if (!rtcp_parser.IsValid()) { |
@@ -162,93 +173,25 @@ void Rtcp::IncomingRtcpPacket(const uint8* rtcp_buffer, size_t length) { |
rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); |
} |
-void Rtcp::SendRtcpCast(const RtcpCastMessage& cast_message) { |
+void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, |
+ const RtcpReceiverLogMessage* receiver_log) { |
uint32 packet_type_flags = 0; |
- base::TimeTicks now = clock_->NowTicks(); |
- |
- if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) { |
- if (sending_media_) { |
- packet_type_flags = RtcpSender::kRtcpSr; |
- } else { |
- packet_type_flags = RtcpSender::kRtcpRr; |
- } |
- } |
- packet_type_flags |= RtcpSender::kRtcpCast; |
- |
- SendRtcp(now, packet_type_flags, 0, &cast_message); |
-} |
-void Rtcp::SendRtcpPli(uint32 pli_remote_ssrc) { |
- uint32 packet_type_flags = 0; |
base::TimeTicks now = clock_->NowTicks(); |
+ RtcpReportBlock report_block; |
+ RtcpReceiverReferenceTimeReport rrtr; |
- if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) { |
- if (sending_media_) { |
- packet_type_flags = RtcpSender::kRtcpSr; |
- } else { |
- packet_type_flags = RtcpSender::kRtcpRr; |
- } |
+ if (cast_message) { |
+ packet_type_flags |= RtcpSender::kRtcpCast; |
} |
- packet_type_flags |= RtcpSender::kRtcpPli; |
- SendRtcp(now, packet_type_flags, pli_remote_ssrc, NULL); |
-} |
- |
-void Rtcp::SendRtcpReport(uint32 media_ssrc) { |
- uint32 packet_type_flags; |
- base::TimeTicks now = clock_->NowTicks(); |
- if (sending_media_) { |
- packet_type_flags = RtcpSender::kRtcpSr; |
- } else { |
- packet_type_flags = RtcpSender::kRtcpRr; |
- } |
- SendRtcp(now, packet_type_flags, media_ssrc, NULL); |
-} |
- |
-void Rtcp::SendRtcp(const base::TimeTicks& now, |
- uint32 packet_type_flags, |
- uint32 media_ssrc, |
- const RtcpCastMessage* cast_message) { |
- if (packet_type_flags & RtcpSender::kRtcpSr || |
- packet_type_flags & RtcpSender::kRtcpRr) { |
- UpdateNextTimeToSendRtcp(); |
+ if (receiver_log) { |
+ packet_type_flags |= RtcpSender::kRtcpReceiverLog; |
} |
- if (packet_type_flags & RtcpSender::kRtcpSr) { |
- RtcpSenderInfo sender_info; |
- |
- if (rtp_sender_statistics_) { |
- rtp_sender_statistics_->GetStatistics(now, &sender_info); |
- } else { |
- memset(&sender_info, 0, sizeof(sender_info)); |
- } |
- time_last_report_sent_ = now; |
- last_report_sent_ = (sender_info.ntp_seconds << 16) + |
- (sender_info.ntp_fraction >> 16); |
- |
- RtcpDlrrReportBlock dlrr; |
- if (!time_last_report_received_.is_null()) { |
- packet_type_flags |= RtcpSender::kRtcpDlrr; |
- dlrr.last_rr = last_report_received_; |
- uint32 delay_seconds = 0; |
- uint32 delay_fraction = 0; |
- base::TimeDelta delta = now - time_last_report_received_; |
- ConvertTimeToFractions(delta.InMicroseconds(), |
- &delay_seconds, |
- &delay_fraction); |
+ if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) { |
+ packet_type_flags |= RtcpSender::kRtcpRr; |
- dlrr.delay_since_last_rr = |
- ConvertToNtpDiff(delay_seconds, delay_fraction); |
- } |
- rtcp_sender_->SendRtcp(packet_type_flags, |
- &sender_info, |
- NULL, |
- media_ssrc, |
- &dlrr, |
- NULL, |
- NULL); |
- } else { |
- RtcpReportBlock report_block; |
report_block.remote_ssrc = 0; // Not needed to set send side. |
- report_block.media_ssrc = media_ssrc; // SSRC of the RTP packet sender. |
+ report_block.media_ssrc = remote_ssrc_; // SSRC of the RTP packet sender. |
if (rtp_receiver_statistics_) { |
rtp_receiver_statistics_->GetStatistics( |
&report_block.fraction_lost, |
@@ -272,20 +215,56 @@ void Rtcp::SendRtcp(const base::TimeTicks& now, |
} |
packet_type_flags |= RtcpSender::kRtcpRrtr; |
- RtcpReceiverReferenceTimeReport rrtr; |
ConvertTimeTicksToNtp(now, &rrtr.ntp_seconds, &rrtr.ntp_fraction); |
time_last_report_sent_ = now; |
last_report_sent_ = ConvertToNtpDiff(rrtr.ntp_seconds, rrtr.ntp_fraction); |
+ UpdateNextTimeToSendRtcp(); |
+ } |
+ rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags, |
+ &report_block, |
+ &rrtr, |
+ cast_message, |
+ receiver_log); |
+} |
+ |
+void Rtcp::SendRtcpFromRtpSender( |
+ const RtcpSenderLogMessage* sender_log_message) { |
+ uint32 packet_type_flags = RtcpSender::kRtcpSr; |
+ base::TimeTicks now = clock_->NowTicks(); |
+ |
+ RtcpSenderInfo sender_info; |
+ RtcpDlrrReportBlock dlrr; |
+ |
+ if (sender_log_message) packet_type_flags |= RtcpSender::kRtcpSenderLog; |
- rtcp_sender_->SendRtcp(packet_type_flags, |
- NULL, |
- &report_block, |
- media_ssrc, |
- NULL, |
- &rrtr, |
- cast_message); |
+ if (rtp_sender_statistics_) { |
+ rtp_sender_statistics_->GetStatistics(now, &sender_info); |
+ } else { |
+ memset(&sender_info, 0, sizeof(sender_info)); |
+ } |
+ time_last_report_sent_ = now; |
+ last_report_sent_ = (sender_info.ntp_seconds << 16) + |
+ (sender_info.ntp_fraction >> 16); |
+ |
+ if (!time_last_report_received_.is_null()) { |
+ packet_type_flags |= RtcpSender::kRtcpDlrr; |
+ dlrr.last_rr = last_report_received_; |
+ uint32 delay_seconds = 0; |
+ uint32 delay_fraction = 0; |
+ base::TimeDelta delta = now - time_last_report_received_; |
+ ConvertTimeToFractions(delta.InMicroseconds(), |
+ &delay_seconds, |
+ &delay_fraction); |
+ |
+ dlrr.delay_since_last_rr = ConvertToNtpDiff(delay_seconds, delay_fraction); |
} |
+ |
+ rtcp_sender_->SendRtcpFromRtpSender(packet_type_flags, |
+ &sender_info, |
+ &dlrr, |
+ sender_log_message); |
+ UpdateNextTimeToSendRtcp(); |
} |
void Rtcp::OnReceivedNtp(uint32 ntp_seconds, uint32 ntp_fraction) { |