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

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: Separate Pli message from Cast message. 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 return std::make_pair( 72 return std::make_pair(
73 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue())); 73 value1, static_cast<uint64_t>(event_timestamp.ToInternalValue()));
74 } 74 }
75 75
76 } // namespace 76 } // namespace
77 77
78 SenderRtcpSession::SenderRtcpSession( 78 SenderRtcpSession::SenderRtcpSession(
79 const RtcpCastMessageCallback& cast_callback, 79 const RtcpCastMessageCallback& cast_callback,
80 const RtcpRttCallback& rtt_callback, 80 const RtcpRttCallback& rtt_callback,
81 const RtcpLogMessageCallback& log_callback, 81 const RtcpLogMessageCallback& log_callback,
82 const RtcpPliCallback pli_callback,
82 base::TickClock* clock, 83 base::TickClock* clock,
83 PacedPacketSender* packet_sender, 84 PacedPacketSender* packet_sender,
84 uint32_t local_ssrc, 85 uint32_t local_ssrc,
85 uint32_t remote_ssrc) 86 uint32_t remote_ssrc)
86 : clock_(clock), 87 : clock_(clock),
87 packet_sender_(packet_sender), 88 packet_sender_(packet_sender),
88 local_ssrc_(local_ssrc), 89 local_ssrc_(local_ssrc),
89 remote_ssrc_(remote_ssrc), 90 remote_ssrc_(remote_ssrc),
90 cast_callback_(cast_callback), 91 cast_callback_(cast_callback),
91 rtt_callback_(rtt_callback), 92 rtt_callback_(rtt_callback),
92 log_callback_(log_callback), 93 log_callback_(log_callback),
94 pli_callback_(pli_callback),
93 largest_seen_timestamp_(base::TimeTicks::FromInternalValue( 95 largest_seen_timestamp_(base::TimeTicks::FromInternalValue(
94 std::numeric_limits<int64_t>::min())), 96 std::numeric_limits<int64_t>::min())),
95 parser_(local_ssrc, remote_ssrc), 97 parser_(local_ssrc, remote_ssrc),
96 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {} 98 ack_frame_id_wrap_helper_(kFirstFrameId - 1) {}
97 99
98 SenderRtcpSession::~SenderRtcpSession() {} 100 SenderRtcpSession::~SenderRtcpSession() {}
99 101
100 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) { 102 bool SenderRtcpSession::IncomingRtcpPacket(const uint8_t* data, size_t length) {
101 // Check if this is a valid RTCP packet. 103 // Check if this is a valid RTCP packet.
102 if (!IsRtcpPacket(data, length)) { 104 if (!IsRtcpPacket(data, length)) {
103 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- " 105 VLOG(1) << "Rtcp@" << this << "::IncomingRtcpPacket() -- "
104 << "Received an invalid (non-RTCP?) packet."; 106 << "Received an invalid (non-RTCP?) packet.";
105 return false; 107 return false;
106 } 108 }
107 109
108 // Check if this packet is to us. 110 // Check if this packet is to us.
109 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length); 111 uint32_t ssrc_of_sender = GetSsrcOfSender(data, length);
110 if (ssrc_of_sender != remote_ssrc_) { 112 if (ssrc_of_sender != remote_ssrc_) {
111 return false; 113 return false;
112 } 114 }
113 115
114 // Parse this packet. 116 // Parse this packet.
115 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); 117 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length);
116 if (parser_.Parse(&reader)) { 118 if (parser_.Parse(&reader)) {
119 if (parser_.has_picture_loss_indicator())
120 OnReceivedPli();
Irfan 2016/02/29 16:01:23 For readability, perhaps a few of these OnReceived
xjz 2016/02/29 19:48:58 Done.
117 if (parser_.has_receiver_reference_time_report()) { 121 if (parser_.has_receiver_reference_time_report()) {
118 base::TimeTicks t = ConvertNtpToTimeTicks( 122 base::TimeTicks t = ConvertNtpToTimeTicks(
119 parser_.receiver_reference_time_report().ntp_seconds, 123 parser_.receiver_reference_time_report().ntp_seconds,
120 parser_.receiver_reference_time_report().ntp_fraction); 124 parser_.receiver_reference_time_report().ntp_fraction);
121 if (t > largest_seen_timestamp_) { 125 if (t > largest_seen_timestamp_) {
122 largest_seen_timestamp_ = t; 126 largest_seen_timestamp_ = t;
123 } else if ((largest_seen_timestamp_ - t).InMilliseconds() > 127 } else if ((largest_seen_timestamp_ - t).InMilliseconds() >
124 kOutOfOrderMaxAgeMs) { 128 kOutOfOrderMaxAgeMs) {
125 // Reject packet, it is too old. 129 // Reject packet, it is too old.
126 VLOG(1) << "Rejecting RTCP packet as it is too old (" 130 VLOG(1) << "Rejecting RTCP packet as it is too old ("
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 cast_callback_.Run(cast_message); 264 cast_callback_.Run(cast_message);
261 } 265 }
262 266
263 void SenderRtcpSession::OnReceivedReceiverLog( 267 void SenderRtcpSession::OnReceivedReceiverLog(
264 const RtcpReceiverLogMessage& receiver_log) { 268 const RtcpReceiverLogMessage& receiver_log) {
265 if (log_callback_.is_null()) 269 if (log_callback_.is_null())
266 return; 270 return;
267 log_callback_.Run(receiver_log); 271 log_callback_.Run(receiver_log);
268 } 272 }
269 273
274 void SenderRtcpSession::OnReceivedPli() {
275 if (pli_callback_.is_null())
276 return;
277 pli_callback_.Run();
278 }
279
270 } // namespace cast 280 } // namespace cast
271 } // namespace media 281 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698