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

Side by Side Diff: media/cast/net/rtcp/sender_rtcp_session.cc

Issue 1709863002: Add Cast PLI support on sender side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address dcheng's comments. Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <algorithm> 5 #include <algorithm>
6 #include <limits> 6 #include <limits>
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/big_endian.h" 9 #include "base/big_endian.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 return std::make_pair( 65 return std::make_pair(
66 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); 66 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue()));
67 } 67 }
68 68
69 } // namespace 69 } // namespace
70 70
71 SenderRtcpSession::SenderRtcpSession( 71 SenderRtcpSession::SenderRtcpSession(
72 const RtcpCastMessageCallback& cast_callback, 72 const RtcpCastMessageCallback& cast_callback,
73 const RtcpRttCallback& rtt_callback, 73 const RtcpRttCallback& rtt_callback,
74 const RtcpLogMessageCallback& log_callback, 74 const RtcpLogMessageCallback& log_callback,
75 const RtcpPliCallback pli_callback,
75 base::TickClock* clock, 76 base::TickClock* clock,
76 PacedPacketSender* packet_sender, 77 PacedPacketSender* packet_sender,
77 uint32_t local_ssrc, 78 uint32_t local_ssrc,
78 uint32_t remote_ssrc) 79 uint32_t remote_ssrc)
79 : clock_(clock), 80 : clock_(clock),
80 packet_sender_(packet_sender), 81 packet_sender_(packet_sender),
81 local_ssrc_(local_ssrc), 82 local_ssrc_(local_ssrc),
82 remote_ssrc_(remote_ssrc), 83 remote_ssrc_(remote_ssrc),
83 cast_callback_(cast_callback), 84 cast_callback_(cast_callback),
84 rtt_callback_(rtt_callback), 85 rtt_callback_(rtt_callback),
85 log_callback_(log_callback), 86 log_callback_(log_callback),
87 pli_callback_(pli_callback),
86 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( 88 largest_seen_timestamp_(base::TimeTicks::FromInternalValue(
87 std::numeric_limits<int64_t>::min())), 89 std::numeric_limits<int64_t>::min())),
88 parser_(local_ssrc, remote_ssrc), 90 parser_(local_ssrc, remote_ssrc),
89 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} 91 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {}
90 92
91 SenderRtcpSession::~SenderRtcpSession() {} 93 SenderRtcpSession::~SenderRtcpSession() {}
92 94
93 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { 95 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) {
94 // Check if this is a valid RTCP packet. 96 // Check if this is a valid RTCP packet.
95 if (!IsRtcpPacket(data, length)) { 97 if (!IsRtcpPacket(data, length)) {
96 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " 98 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- "
97 << "Received an invalid (non-RTCP?) packet."; 99 << "Received an invalid (non-RTCP?) packet.";
98 return false; 100 return false;
99 } 101 }
100 102
101 // Check if this packet is to us. 103 // Check if this packet is to us.
102 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); 104 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length);
103 if (ssrc_of_sender != remote_ssrc_) { 105 if (ssrc_of_sender != remote_ssrc_) {
104 return false; 106 return false;
105 } 107 }
106 108
107 // Parse this packet. 109 // Parse this packet.
108 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); 110 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length);
109 if (parser_.Parse(&reader)) { 111 if (parser_.Parse(&reader)) {
112 if (parser_.has_picture_loss_indicator()) {
113 if (!pli_callback_.is_null())
114 pli_callback_.Run();
115 }
110 if (parser_.has_receiver_reference_time_report()) { 116 if (parser_.has_receiver_reference_time_report()) {
111 base::TimeTicks t = ConvertNtpToTimeTicks( 117 base::TimeTicks t = ConvertNtpToTimeTicks(
112 parser_.receiver_reference_time_report().ntp_seconds, 118 parser_.receiver_reference_time_report().ntp_seconds,
113 parser_.receiver_reference_time_report().ntp_fraction); 119 parser_.receiver_reference_time_report().ntp_fraction);
114 if (t > largest_seen_timestamp_) { 120 if (t > largest_seen_timestamp_) {
115 largest_seen_timestamp_ = t; 121 largest_seen_timestamp_ = t;
116 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > 122 } else if ((largest_seen_timestamp_ - t).InMilliseconds() >
117 kOutOfOrderMaxAgeMs) { 123 kOutOfOrderMaxAgeMs) {
118 // Reject packet, it is too old. 124 // Reject packet, it is too old.
119 VLOG(1) << "Rejecting RTCP packet as it is too old (" 125 VLOG(1) << "Rejecting RTCP packet as it is too old ("
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 261
256 void SenderRtcpSession::OnReceivedReceiverLog( 262 void SenderRtcpSession::OnReceivedReceiverLog(
257 const RtcpReceiverLogMessage& receiver_log) { 263 const RtcpReceiverLogMessage& receiver_log) {
258 if (log_callback_.is_null()) 264 if (log_callback_.is_null())
259 return; 265 return;
260 log_callback_.Run(receiver_log); 266 log_callback_.Run(receiver_log);
261 } 267 }
262 268
263 } // namespace cast 269 } // namespace cast
264 } // namespace media 270 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/net/rtcp/sender_rtcp_session.h ('k') | media/cast/net/rtcp/test_rtcp_packet_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698