Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(725)

Unified Diff: media/cast/net/rtcp/rtcp_receiver.cc

Issue 387933005: Cast: Refactor RTCP handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: smaller diff Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/net/rtcp/rtcp_receiver.cc
diff --git a/media/cast/net/rtcp/rtcp_receiver.cc b/media/cast/net/rtcp/rtcp_receiver.cc
index e71d23b8f93bec7238288e7103aaa0fbab753fa2..fd0ad196d60bb12407d12eb0cce896cfa2ece5ea 100644
--- a/media/cast/net/rtcp/rtcp_receiver.cc
+++ b/media/cast/net/rtcp/rtcp_receiver.cc
@@ -4,6 +4,7 @@
#include "media/cast/net/rtcp/rtcp_receiver.h"
+#include "base/big_endian.h"
#include "base/logging.h"
#include "media/cast/net/cast_transport_defines.h"
#include "media/cast/net/rtcp/rtcp_utility.h"
@@ -38,21 +39,39 @@ std::pair<uint64, uint64> GetReceiverEventKey(
namespace media {
namespace cast {
-RtcpReceiver::RtcpReceiver(scoped_refptr<CastEnvironment> cast_environment,
- RtcpSenderFeedback* sender_feedback,
- RtcpReceiverFeedback* receiver_feedback,
- RtcpRttFeedback* rtt_feedback,
+RtcpReceiver::RtcpReceiver(RtcpMessageHandler* handler,
uint32 local_ssrc)
: ssrc_(local_ssrc),
remote_ssrc_(0),
- sender_feedback_(sender_feedback),
- receiver_feedback_(receiver_feedback),
- rtt_feedback_(rtt_feedback),
- cast_environment_(cast_environment),
+ handler_(handler),
receiver_event_history_size_(0) {}
miu 2014/07/16 00:09:32 To simplify, consider adding DCHECK(handler_) here
Alpha Left Google 2014/07/17 01:01:45 Done.
RtcpReceiver::~RtcpReceiver() {}
+// static
+bool RtcpReceiver::IsRtcpPacket(const uint8* packet, size_t length) {
miu 2014/07/16 00:09:32 You could get rid of this method, and roll it into
Alpha Left Google 2014/07/17 01:01:45 0 is a valid SSRC so I would like to keep this met
+ DCHECK_GE(length, kMinLengthOfRtcp) << "Invalid RTCP packet";
+ if (length < kMinLengthOfRtcp) return false;
+
+ uint8 packet_type = packet[1];
+ if (packet_type >= kPacketTypeLow &&
+ packet_type <= kPacketTypeHigh) {
+ return true;
+ }
+ return false;
+}
+
+// static
+uint32 RtcpReceiver::GetSsrcOfSender(const uint8* rtcp_buffer, size_t length) {
+ DCHECK_GE(length, kMinLengthOfRtcp) << "Invalid RTCP packet";
miu 2014/07/16 00:09:32 Don't need this DCHECK if checking big_endian_read
+ uint32 ssrc_of_sender;
+ base::BigEndianReader big_endian_reader(
+ reinterpret_cast<const char*>(rtcp_buffer), length);
+ big_endian_reader.Skip(4); // Skip header
miu 2014/07/16 00:09:32 Note: These two method calls on big_endian_reader
Alpha Left Google 2014/07/17 01:01:45 IsRtcpPacket is actually useful because 0 is also
+ big_endian_reader.ReadU32(&ssrc_of_sender);
+ return ssrc_of_sender;
+}
+
void RtcpReceiver::SetRemoteSSRC(uint32 ssrc) { remote_ssrc_ = ssrc; }
void RtcpReceiver::SetCastReceiverEventHistorySize(size_t size) {
@@ -83,9 +102,6 @@ void RtcpReceiver::IncomingRtcpPacket(RtcpParser* rtcp_parser) {
case kRtcpGenericRtpFeedbackNackCode:
HandleNACK(rtcp_parser);
break;
- case kRtcpGenericRtpFeedbackSrReqCode:
- HandleSendReportRequest(rtcp_parser);
- break;
case kRtcpPayloadSpecificPliCode:
HandlePLI(rtcp_parser);
break;
@@ -110,6 +126,7 @@ void RtcpReceiver::IncomingRtcpPacket(RtcpParser* rtcp_parser) {
case kRtcpNotValidCode:
case kRtcpReportBlockItemCode:
case kRtcpSdesChunkCode:
+ case kRtcpGenericRtpFeedbackSrReqCode:
case kRtcpGenericRtpFeedbackNackItemCode:
case kRtcpPayloadSpecificFirItemCode:
case kRtcpXrRrtrCode:
@@ -145,8 +162,8 @@ void RtcpReceiver::HandleSenderReport(RtcpParser* rtcp_parser) {
rtcp_field.sender_report.sender_packet_count;
remote_sender_info.send_octet_count =
rtcp_field.sender_report.sender_octet_count;
- if (receiver_feedback_) {
- receiver_feedback_->OnReceivedSenderReport(remote_sender_info);
+ if (handler_) {
+ handler_->OnReceivedSenderReport(remote_sender_info);
}
}
rtcp_field_type = rtcp_parser->Iterate();
@@ -204,9 +221,9 @@ void RtcpReceiver::HandleReportBlock(const RtcpField* rtcp_field,
report_block.last_sr = rb.last_sender_report;
report_block.delay_since_last_sr = rb.delay_last_sender_report;
- if (rtt_feedback_) {
- rtt_feedback_->OnReceivedDelaySinceLastReport(
- rb.ssrc, rb.last_sender_report, rb.delay_last_sender_report);
+ if (handler_) {
+ handler_->OnReceivedDelaySinceLastReport(
+ rb.last_sender_report, rb.delay_last_sender_report);
}
}
@@ -255,8 +272,8 @@ void RtcpReceiver::HandleRrtr(RtcpParser* rtcp_parser, uint32 remote_ssrc) {
remote_time_report.ntp_seconds = rtcp_field.rrtr.ntp_most_significant;
remote_time_report.ntp_fraction = rtcp_field.rrtr.ntp_least_significant;
- if (receiver_feedback_) {
- receiver_feedback_->OnReceiverReferenceTimeReport(remote_time_report);
+ if (handler_) {
+ handler_->OnReceiverReferenceTimeReport(remote_time_report);
}
}
@@ -266,9 +283,8 @@ void RtcpReceiver::HandleDlrr(RtcpParser* rtcp_parser) {
// Not to us.
return;
}
- if (rtt_feedback_) {
- rtt_feedback_->OnReceivedDelaySinceLastReport(
- rtcp_field.dlrr.receivers_ssrc,
+ if (handler_) {
+ handler_->OnReceivedDelaySinceLastReport(
rtcp_field.dlrr.last_receiver_report,
rtcp_field.dlrr.delay_last_receiver_report);
}
@@ -326,13 +342,6 @@ void RtcpReceiver::HandlePLI(RtcpParser* rtcp_parser) {
rtcp_parser->Iterate();
}
-void RtcpReceiver::HandleSendReportRequest(RtcpParser* rtcp_parser) {
- if (receiver_feedback_) {
- receiver_feedback_->OnReceivedSendReportRequest();
- }
- rtcp_parser->Iterate();
-}
-
void RtcpReceiver::HandleRpsi(RtcpParser* rtcp_parser) {
const RtcpField& rtcp_field = rtcp_parser->Field();
if (rtcp_parser->Iterate() != kRtcpPayloadSpecificRpsiCode) {
@@ -436,8 +445,8 @@ void RtcpReceiver::HandleApplicationSpecificCastReceiverLog(
receiver_log.push_back(frame_log);
}
- if (receiver_feedback_ && !receiver_log.empty()) {
- receiver_feedback_->OnReceivedReceiverLog(receiver_log);
+ if (handler_ && !receiver_log.empty()) {
+ handler_->OnReceivedReceiverLog(receiver_log);
}
}
@@ -502,8 +511,8 @@ void RtcpReceiver::HandlePayloadSpecificCastItem(RtcpParser* rtcp_parser) {
&rtcp_field, &cast_message.missing_frames_and_packets_);
packet_type = rtcp_parser->Iterate();
}
- if (sender_feedback_) {
- sender_feedback_->OnReceivedCastFeedback(cast_message);
+ if (handler_) {
+ handler_->OnReceivedCastFeedback(cast_message);
}
}

Powered by Google App Engine
This is Rietveld 408576698