Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / media / cast / rtcp / rtcp.cc
index 503614f..fda75ea 100644 (file)
@@ -25,16 +25,12 @@ static const int64 kMaxDiffSinceReceivedRtcpMs = 100000;  // 100 seconds.
 
 class LocalRtcpRttFeedback : public RtcpRttFeedback {
  public:
-  explicit LocalRtcpRttFeedback(Rtcp* rtcp)
-      : rtcp_(rtcp) {
-  }
+  explicit LocalRtcpRttFeedback(Rtcp* rtcp) : rtcp_(rtcp) {}
 
   virtual void OnReceivedDelaySinceLastReport(
-      uint32 receivers_ssrc,
-      uint32 last_report,
+      uint32 receivers_ssrc, uint32 last_report,
       uint32 delay_since_last_report) OVERRIDE {
-    rtcp_->OnReceivedDelaySinceLastReport(receivers_ssrc,
-                                          last_report,
+    rtcp_->OnReceivedDelaySinceLastReport(receivers_ssrc, last_report,
                                           delay_since_last_report);
   }
 
@@ -42,28 +38,11 @@ class LocalRtcpRttFeedback : public RtcpRttFeedback {
   Rtcp* rtcp_;
 };
 
-RtcpCastMessage::RtcpCastMessage(uint32 media_ssrc)
-    : media_ssrc_(media_ssrc) {}
-
-RtcpCastMessage::~RtcpCastMessage() {}
-
-RtcpNackMessage::RtcpNackMessage() {}
-RtcpNackMessage::~RtcpNackMessage() {}
-
-RtcpRembMessage::RtcpRembMessage() {}
-RtcpRembMessage::~RtcpRembMessage() {}
-
-RtcpReceiverFrameLogMessage::RtcpReceiverFrameLogMessage(uint32 timestamp)
-    : rtp_timestamp_(timestamp) {}
-
-RtcpReceiverFrameLogMessage::~RtcpReceiverFrameLogMessage() {}
-
 class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
  public:
   LocalRtcpReceiverFeedback(Rtcp* rtcp,
                             scoped_refptr<CastEnvironment> cast_environment)
-      : rtcp_(rtcp), cast_environment_(cast_environment) {
-  }
+      : rtcp_(rtcp), cast_environment_(cast_environment) {}
 
   virtual void OnReceivedSenderReport(
       const transport::RtcpSenderInfo& remote_sender_info) OVERRIDE {
@@ -86,8 +65,8 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
     rtcp_->OnReceivedSendReportRequest();
   }
 
-  virtual void OnReceivedReceiverLog(
-      const RtcpReceiverLogMessage& receiver_log) OVERRIDE {
+  virtual void OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log)
+      OVERRIDE {
     // Add received log messages into our log system.
     RtcpReceiverLogMessage::const_iterator it = receiver_log.begin();
 
@@ -100,7 +79,8 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
         switch (event_it->type) {
           case kAudioPacketReceived:
           case kVideoPacketReceived:
-          case kDuplicatePacketReceived:
+          case kDuplicateAudioPacketReceived:
+          case kDuplicateVideoPacketReceived:
             cast_environment_->Logging()->InsertPacketEvent(
                 event_it->event_timestamp, event_it->type, rtp_timestamp,
                 kFrameIdUnknown, event_it->packet_id, 0, 0);
@@ -129,7 +109,7 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
   }
 
   virtual void OnReceivedSenderLog(
-      const transport::RtcpSenderLogMessage& sender_log)  OVERRIDE {
+      const transport::RtcpSenderLogMessage& sender_log) OVERRIDE {
     transport::RtcpSenderLogMessage::const_iterator it = sender_log.begin();
 
     for (; it != sender_log.end(); ++it) {
@@ -163,8 +143,8 @@ class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
       // TODO(pwestin): how do we handle the time? we don't care about it but
       // we need to send in one.
       base::TimeTicks now = cast_environment_->Clock()->NowTicks();
-      cast_environment_->Logging()->InsertFrameEvent(now, log_event,
-          rtp_timestamp, kFrameIdUnknown);
+      cast_environment_->Logging()->InsertFrameEvent(
+          now, log_event, rtp_timestamp, kFrameIdUnknown);
     }
   }
 
@@ -178,12 +158,9 @@ Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
            transport::CastTransportSender* const transport_sender,
            transport::PacedPacketSender* paced_packet_sender,
            RtpSenderStatistics* rtp_sender_statistics,
-           RtpReceiverStatistics* rtp_receiver_statistics,
-           RtcpMode rtcp_mode,
-           const base::TimeDelta& rtcp_interval,
-           uint32 local_ssrc,
-           uint32 remote_ssrc,
-           const std::string& c_name)
+           RtpReceiverStatistics* rtp_receiver_statistics, RtcpMode rtcp_mode,
+           const base::TimeDelta& rtcp_interval, uint32 local_ssrc,
+           uint32 remote_ssrc, const std::string& c_name)
     : cast_environment_(cast_environment),
       transport_sender_(transport_sender),
       rtcp_interval_(rtcp_interval),
@@ -203,11 +180,9 @@ Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
       last_received_ntp_fraction_(0),
       min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)),
       number_of_rtt_in_avg_(0) {
-  rtcp_receiver_.reset(new RtcpReceiver(cast_environment,
-                                        sender_feedback,
+  rtcp_receiver_.reset(new RtcpReceiver(cast_environment, sender_feedback,
                                         receiver_feedback_.get(),
-                                        rtt_feedback_.get(),
-                                        local_ssrc));
+                                        rtt_feedback_.get(), local_ssrc));
   rtcp_receiver_->SetRemoteSSRC(remote_ssrc);
 }
 
@@ -253,8 +228,9 @@ void Rtcp::IncomingRtcpPacket(const uint8* rtcp_buffer, size_t length) {
   rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser);
 }
 
-void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message,
-                                   RtcpReceiverLogMessage* receiver_log) {
+void Rtcp::SendRtcpFromRtpReceiver(
+    const RtcpCastMessage* cast_message,
+    ReceiverRtcpEventSubscriber* event_subscriber) {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
   uint32 packet_type_flags = 0;
 
@@ -265,24 +241,22 @@ void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message,
   if (cast_message) {
     packet_type_flags |= RtcpSender::kRtcpCast;
   }
-  if (receiver_log) {
+  if (event_subscriber) {
     packet_type_flags |= RtcpSender::kRtcpReceiverLog;
   }
   if (rtcp_mode_ == kRtcpCompound || now >= next_time_to_send_rtcp_) {
     packet_type_flags |= RtcpSender::kRtcpRr;
 
-    report_block.remote_ssrc = 0;  // Not needed to set send side.
+    report_block.remote_ssrc = 0;            // Not needed to set send side.
     report_block.media_ssrc = remote_ssrc_;  // SSRC of the RTP packet sender.
     if (rtp_receiver_statistics_) {
       rtp_receiver_statistics_->GetStatistics(
-          &report_block.fraction_lost,
-          &report_block.cumulative_lost,
-          &report_block.extended_high_sequence_number,
-          &report_block.jitter);
+          &report_block.fraction_lost, &report_block.cumulative_lost,
+          &report_block.extended_high_sequence_number, &report_block.jitter);
       cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs,
-          report_block.jitter);
-      cast_environment_->Logging()->InsertGenericEvent(now, kPacketLoss,
-          report_block.fraction_lost);
+                                                       report_block.jitter);
+      cast_environment_->Logging()->InsertGenericEvent(
+          now, kPacketLoss, report_block.fraction_lost);
     }
 
     report_block.last_sr = last_report_received_;
@@ -290,8 +264,7 @@ void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message,
       uint32 delay_seconds = 0;
       uint32 delay_fraction = 0;
       base::TimeDelta delta = now - time_last_report_received_;
-      ConvertTimeToFractions(delta.InMicroseconds(),
-                             &delay_seconds,
+      ConvertTimeToFractions(delta.InMicroseconds(), &delay_seconds,
                              &delay_fraction);
       report_block.delay_since_last_sr =
           ConvertToNtpDiff(delay_seconds, delay_fraction);
@@ -304,11 +277,8 @@ void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message,
     SaveLastSentNtpTime(now, rrtr.ntp_seconds, rrtr.ntp_fraction);
     UpdateNextTimeToSendRtcp();
   }
-  rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags,
-                                        &report_block,
-                                        &rrtr,
-                                        cast_message,
-                                        receiver_log);
+  rtcp_sender_->SendRtcpFromRtpReceiver(
+      packet_type_flags, &report_block, &rrtr, cast_message, event_subscriber);
 }
 
 void Rtcp::SendRtcpFromRtpSender(
@@ -336,14 +306,14 @@ void Rtcp::SendRtcpFromRtpSender(
     uint32 delay_seconds = 0;
     uint32 delay_fraction = 0;
     base::TimeDelta delta = now - time_last_report_received_;
-    ConvertTimeToFractions(delta.InMicroseconds(),
-                           &delay_seconds,
+    ConvertTimeToFractions(delta.InMicroseconds(), &delay_seconds,
                            &delay_fraction);
 
     dlrr.delay_since_last_rr = ConvertToNtpDiff(delay_seconds, delay_fraction);
   }
 
-  cast_environment_->PostTask(CastEnvironment::TRANSPORT, FROM_HERE,
+  cast_environment_->PostTask(
+      CastEnvironment::TRANSPORT, FROM_HERE,
       base::Bind(&Rtcp::SendRtcpFromRtpSenderOnTransportThread,
                  base::Unretained(this), packet_type_flags, sender_info, dlrr,
                  sender_log_message, local_ssrc_, c_name_));
@@ -351,20 +321,13 @@ void Rtcp::SendRtcpFromRtpSender(
 }
 
 void Rtcp::SendRtcpFromRtpSenderOnTransportThread(
-    uint32 packet_type_flags,
-    const transport::RtcpSenderInfo& sender_info,
+    uint32 packet_type_flags, const transport::RtcpSenderInfo& sender_info,
     const transport::RtcpDlrrReportBlock& dlrr,
-    const transport::RtcpSenderLogMessage& sender_log,
-    uint32 sending_ssrc,
+    const transport::RtcpSenderLogMessage& sender_log, uint32 sending_ssrc,
     std::string c_name) {
   DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::TRANSPORT));
-  transport_sender_->SendRtcpFromRtpSender(packet_type_flags,
-                                           sender_info,
-                                           dlrr,
-                                           sender_log,
-                                           sending_ssrc,
-                                           c_name);
-
+  transport_sender_->SendRtcpFromRtpSender(packet_type_flags, sender_info, dlrr,
+                                           sender_log, sending_ssrc, c_name);
 }
 
 void Rtcp::OnReceivedNtp(uint32 ntp_seconds, uint32 ntp_fraction) {
@@ -374,8 +337,7 @@ void Rtcp::OnReceivedNtp(uint32 ntp_seconds, uint32 ntp_fraction) {
   time_last_report_received_ = now;
 }
 
-void Rtcp::OnReceivedLipSyncInfo(uint32 rtp_timestamp,
-                                 uint32 ntp_seconds,
+void Rtcp::OnReceivedLipSyncInfo(uint32 rtp_timestamp, uint32 ntp_seconds,
                                  uint32 ntp_fraction) {
   last_received_rtp_timestamp_ = rtp_timestamp;
   last_received_ntp_seconds_ = ntp_seconds;
@@ -390,8 +352,10 @@ void Rtcp::OnReceivedSendReportRequest() {
 }
 
 bool Rtcp::RtpTimestampInSenderTime(int frequency, uint32 rtp_timestamp,
-      base::TimeTicks* rtp_timestamp_in_ticks) const {
-  if (last_received_ntp_seconds_ == 0)  return false;
+                                    base::TimeTicks* rtp_timestamp_in_ticks)
+    const {
+  if (last_received_ntp_seconds_ == 0)
+    return false;
 
   int wrap = CheckForWrapAround(rtp_timestamp, last_received_rtp_timestamp_);
   int64 rtp_timestamp_int64 = rtp_timestamp;
@@ -412,11 +376,12 @@ bool Rtcp::RtpTimestampInSenderTime(int frequency, uint32 rtp_timestamp,
   int64 rtp_time_diff_ms = rtp_timestamp_diff / frequency_khz;
 
   // Sanity check.
-  if (abs(rtp_time_diff_ms) > kMaxDiffSinceReceivedRtcpMs)  return false;
+  if (abs(rtp_time_diff_ms) > kMaxDiffSinceReceivedRtcpMs)
+    return false;
 
   *rtp_timestamp_in_ticks = ConvertNtpToTimeTicks(last_received_ntp_seconds_,
-      last_received_ntp_fraction_) +
-      base::TimeDelta::FromMilliseconds(rtp_time_diff_ms);
+                                                  last_received_ntp_fraction_) +
+                            base::TimeDelta::FromMilliseconds(rtp_time_diff_ms);
   return true;
 }
 
@@ -428,8 +393,8 @@ void Rtcp::OnReceivedDelaySinceLastReport(uint32 receivers_ssrc,
     return;  // Feedback on another report.
   }
 
-  base::TimeDelta sender_delay = cast_environment_->Clock()->NowTicks()
-      - it->second;
+  base::TimeDelta sender_delay =
+      cast_environment_->Clock()->NowTicks() - it->second;
   UpdateRtt(sender_delay, ConvertFromNtpDiff(delay_since_last_report));
 }
 
@@ -438,9 +403,8 @@ void Rtcp::SaveLastSentNtpTime(const base::TimeTicks& now,
                                uint32 last_ntp_fraction) {
   // Make sure |now| is always greater than the last element in
   // |last_reports_sent_queue_|.
-  if (!last_reports_sent_queue_.empty()) {
+  if (!last_reports_sent_queue_.empty())
     DCHECK(now >= last_reports_sent_queue_.back().second);
-  }
 
   uint32 last_report = ConvertToNtpDiff(last_ntp_seconds, last_ntp_fraction);
   last_reports_sent_map_[last_report] = now;
@@ -470,18 +434,16 @@ void Rtcp::UpdateRtt(const base::TimeDelta& sender_delay,
 
   if (number_of_rtt_in_avg_ != 0) {
     float ac = static_cast<float>(number_of_rtt_in_avg_);
-    avg_rtt_ms_= ((ac / (ac + 1.0)) * avg_rtt_ms_) +
-        ((1.0 / (ac + 1.0)) * rtt.InMilliseconds());
+    avg_rtt_ms_ = ((ac / (ac + 1.0)) * avg_rtt_ms_) +
+                  ((1.0 / (ac + 1.0)) * rtt.InMilliseconds());
   } else {
     avg_rtt_ms_ = rtt.InMilliseconds();
   }
   number_of_rtt_in_avg_++;
 }
 
-bool Rtcp::Rtt(base::TimeDelta* rtt,
-               base::TimeDelta* avg_rtt,
-               base::TimeDelta* min_rtt,
-               base::TimeDelta* max_rtt) const {
+bool Rtcp::Rtt(base::TimeDelta* rtt, base::TimeDelta* avg_rtt,
+               base::TimeDelta* min_rtt, base::TimeDelta* max_rtt) const {
   DCHECK(rtt) << "Invalid argument";
   DCHECK(avg_rtt) << "Invalid argument";
   DCHECK(min_rtt) << "Invalid argument";
@@ -500,8 +462,7 @@ bool Rtcp::Rtt(base::TimeDelta* rtt,
   return true;
 }
 
-int Rtcp::CheckForWrapAround(uint32 new_timestamp,
-                             uint32 old_timestamp) const {
+int Rtcp::CheckForWrapAround(uint32 new_timestamp, uint32 old_timestamp) const {
   if (new_timestamp < old_timestamp) {
     // This difference should be less than -2^31 if we have had a wrap around
     // (e.g. |new_timestamp| = 1, |rtcp_rtp_timestamp| = 2^32 - 1). Since it is
@@ -519,8 +480,8 @@ int Rtcp::CheckForWrapAround(uint32 new_timestamp,
 
 void Rtcp::UpdateNextTimeToSendRtcp() {
   int random = base::RandInt(0, 999);
-  base::TimeDelta time_to_next = (rtcp_interval_ / 2) +
-      (rtcp_interval_ * random / 1000);
+  base::TimeDelta time_to_next =
+      (rtcp_interval_ / 2) + (rtcp_interval_ * random / 1000);
 
   base::TimeTicks now = cast_environment_->Clock()->NowTicks();
   next_time_to_send_rtcp_ = now + time_to_next;