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

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

Issue 100823015: Cast: move net->transport (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updating transport callback Created 6 years, 12 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/rtcp/rtcp.h ('k') | media/cast/rtcp/rtcp.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/cast/rtcp/rtcp.h" 5 #include "media/cast/rtcp/rtcp.h"
6 6
7 #include "base/rand_util.h" 7 #include "base/rand_util.h"
8 #include "media/cast/cast_config.h" 8 #include "media/cast/cast_config.h"
9 #include "media/cast/cast_defines.h" 9 #include "media/cast/cast_defines.h"
10 #include "media/cast/cast_environment.h" 10 #include "media/cast/cast_environment.h"
11 #include "media/cast/net/rtcp/rtcp_builder.h"
12 #include "media/cast/rtcp/rtcp_defines.h" 11 #include "media/cast/rtcp/rtcp_defines.h"
13 #include "media/cast/rtcp/rtcp_receiver.h" 12 #include "media/cast/rtcp/rtcp_receiver.h"
14 #include "media/cast/rtcp/rtcp_sender.h" 13 #include "media/cast/rtcp/rtcp_sender.h"
15 #include "media/cast/rtcp/rtcp_utility.h" 14 #include "media/cast/rtcp/rtcp_utility.h"
15 #include "media/cast/transport/cast_transport_defines.h"
16 #include "net/base/big_endian.h" 16 #include "net/base/big_endian.h"
17 17
18 namespace media { 18 namespace media {
19 namespace cast { 19 namespace cast {
20 20
21 static const int kMaxRttMs = 10000; // 10 seconds. 21 static const int kMaxRttMs = 10000; // 10 seconds.
22 22
23 // Time limit for received RTCP messages when we stop using it for lip-sync. 23 // Time limit for received RTCP messages when we stop using it for lip-sync.
24 static const int64 kMaxDiffSinceReceivedRtcpMs = 100000; // 100 seconds. 24 static const int64 kMaxDiffSinceReceivedRtcpMs = 100000; // 100 seconds.
25 25
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 RtcpReceiverFrameLogMessage::~RtcpReceiverFrameLogMessage() {} 59 RtcpReceiverFrameLogMessage::~RtcpReceiverFrameLogMessage() {}
60 60
61 class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback { 61 class LocalRtcpReceiverFeedback : public RtcpReceiverFeedback {
62 public: 62 public:
63 LocalRtcpReceiverFeedback(Rtcp* rtcp, 63 LocalRtcpReceiverFeedback(Rtcp* rtcp,
64 scoped_refptr<CastEnvironment> cast_environment) 64 scoped_refptr<CastEnvironment> cast_environment)
65 : rtcp_(rtcp), cast_environment_(cast_environment) { 65 : rtcp_(rtcp), cast_environment_(cast_environment) {
66 } 66 }
67 67
68 virtual void OnReceivedSenderReport( 68 virtual void OnReceivedSenderReport(
69 const RtcpSenderInfo& remote_sender_info) OVERRIDE { 69 const transport::RtcpSenderInfo& remote_sender_info) OVERRIDE {
70 rtcp_->OnReceivedNtp(remote_sender_info.ntp_seconds, 70 rtcp_->OnReceivedNtp(remote_sender_info.ntp_seconds,
71 remote_sender_info.ntp_fraction); 71 remote_sender_info.ntp_fraction);
72 if (remote_sender_info.send_packet_count != 0) { 72 if (remote_sender_info.send_packet_count != 0) {
73 rtcp_->OnReceivedLipSyncInfo(remote_sender_info.rtp_timestamp, 73 rtcp_->OnReceivedLipSyncInfo(remote_sender_info.rtp_timestamp,
74 remote_sender_info.ntp_seconds, 74 remote_sender_info.ntp_seconds,
75 remote_sender_info.ntp_fraction); 75 remote_sender_info.ntp_fraction);
76 } 76 }
77 } 77 }
78 78
79 virtual void OnReceiverReferenceTimeReport( 79 virtual void OnReceiverReferenceTimeReport(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 default: 119 default:
120 VLOG(2) << "Received log message via RTCP that we did not expect: " 120 VLOG(2) << "Received log message via RTCP that we did not expect: "
121 << static_cast<int>(event_it->type); 121 << static_cast<int>(event_it->type);
122 break; 122 break;
123 } 123 }
124 } 124 }
125 } 125 }
126 } 126 }
127 127
128 virtual void OnReceivedSenderLog( 128 virtual void OnReceivedSenderLog(
129 const RtcpSenderLogMessage& sender_log) OVERRIDE { 129 const transport::RtcpSenderLogMessage& sender_log) OVERRIDE {
130 RtcpSenderLogMessage::const_iterator it = sender_log.begin(); 130 transport::RtcpSenderLogMessage::const_iterator it = sender_log.begin();
131 131
132 for (; it != sender_log.end(); ++it) { 132 for (; it != sender_log.end(); ++it) {
133 uint32 rtp_timestamp = it->rtp_timestamp; 133 uint32 rtp_timestamp = it->rtp_timestamp;
134 CastLoggingEvent log_event = kUnknown; 134 CastLoggingEvent log_event = kUnknown;
135 135
136 // These events are provided to know the status of frames that never 136 // These events are provided to know the status of frames that never
137 // reached the receiver. The timing information for these events are not 137 // reached the receiver. The timing information for these events are not
138 // relevant and is not sent over the wire. 138 // relevant and is not sent over the wire.
139 switch (it->frame_status) { 139 switch (it->frame_status) {
140 case kRtcpSenderFrameStatusDroppedByFlowControl: 140 case transport::kRtcpSenderFrameStatusDroppedByFlowControl:
141 // A frame that have been dropped by the flow control would have 141 // A frame that have been dropped by the flow control would have
142 // kVideoFrameCaptured as its last event in the log. 142 // kVideoFrameCaptured as its last event in the log.
143 log_event = kVideoFrameCaptured; 143 log_event = kVideoFrameCaptured;
144 break; 144 break;
145 case kRtcpSenderFrameStatusDroppedByEncoder: 145 case transport::kRtcpSenderFrameStatusDroppedByEncoder:
146 // A frame that have been dropped by the encoder would have 146 // A frame that have been dropped by the encoder would have
147 // kVideoFrameSentToEncoder as its last event in the log. 147 // kVideoFrameSentToEncoder as its last event in the log.
148 log_event = kVideoFrameSentToEncoder; 148 log_event = kVideoFrameSentToEncoder;
149 break; 149 break;
150 case kRtcpSenderFrameStatusSentToNetwork: 150 case transport::kRtcpSenderFrameStatusSentToNetwork:
151 // A frame that have be encoded is always sent to the network. We 151 // A frame that have be encoded is always sent to the network. We
152 // do not add a new log entry for this. 152 // do not add a new log entry for this.
153 log_event = kVideoFrameEncoded; 153 log_event = kVideoFrameEncoded;
154 break; 154 break;
155 default: 155 default:
156 continue; 156 continue;
157 } 157 }
158 // TODO(pwestin): how do we handle the truncated rtp_timestamp? 158 // TODO(pwestin): how do we handle the truncated rtp_timestamp?
159 // Add received log messages into our log system. 159 // Add received log messages into our log system.
160 // TODO(pwestin): how do we handle the time? we don't care about it but 160 // TODO(pwestin): how do we handle the time? we don't care about it but
161 // we need to send in one. 161 // we need to send in one.
162 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 162 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
163 cast_environment_->Logging()->InsertFrameEvent(now, log_event, 163 cast_environment_->Logging()->InsertFrameEvent(now, log_event,
164 rtp_timestamp, kFrameIdUnknown); 164 rtp_timestamp, kFrameIdUnknown);
165 } 165 }
166 } 166 }
167 167
168 private: 168 private:
169 Rtcp* rtcp_; 169 Rtcp* rtcp_;
170 scoped_refptr<CastEnvironment> cast_environment_; 170 scoped_refptr<CastEnvironment> cast_environment_;
171 }; 171 };
172 172
173 Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment, 173 Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
174 RtcpSenderFeedback* sender_feedback, 174 RtcpSenderFeedback* sender_feedback,
175 PacedPacketSender* paced_packet_sender, 175 transport::PacedPacketSender* paced_packet_sender,
176 RtpSenderStatistics* rtp_sender_statistics, 176 RtpSenderStatistics* rtp_sender_statistics,
177 RtpReceiverStatistics* rtp_receiver_statistics, 177 RtpReceiverStatistics* rtp_receiver_statistics,
178 RtcpMode rtcp_mode, 178 RtcpMode rtcp_mode,
179 const base::TimeDelta& rtcp_interval, 179 const base::TimeDelta& rtcp_interval,
180 uint32 local_ssrc, 180 uint32 local_ssrc,
181 uint32 remote_ssrc, 181 uint32 remote_ssrc,
182 const std::string& c_name) 182 const std::string& c_name)
183 : rtcp_interval_(rtcp_interval), 183 : rtcp_interval_(rtcp_interval),
184 rtcp_mode_(rtcp_mode), 184 rtcp_mode_(rtcp_mode),
185 local_ssrc_(local_ssrc), 185 local_ssrc_(local_ssrc),
186 remote_ssrc_(remote_ssrc), 186 remote_ssrc_(remote_ssrc),
187 rtp_sender_statistics_(rtp_sender_statistics), 187 rtp_sender_statistics_(rtp_sender_statistics),
188 rtp_receiver_statistics_(rtp_receiver_statistics), 188 rtp_receiver_statistics_(rtp_receiver_statistics),
189 receiver_feedback_(new LocalRtcpReceiverFeedback(this, cast_environment)), 189 receiver_feedback_(new LocalRtcpReceiverFeedback(this, cast_environment)),
190 rtt_feedback_(new LocalRtcpRttFeedback(this)), 190 rtt_feedback_(new LocalRtcpRttFeedback(this)),
191 rtcp_sender_(new RtcpSender(cast_environment, paced_packet_sender, 191 rtcp_sender_(new RtcpSender(cast_environment, paced_packet_sender,
192 local_ssrc, c_name)), 192 local_ssrc, c_name)),
193 rtcp_builder_(new RtcpBuilder(paced_packet_sender, local_ssrc, c_name)), 193 rtcp_builder_(new
194 transport::RtcpBuilder(paced_packet_sender, local_ssrc, c_name)),
194 last_report_received_(0), 195 last_report_received_(0),
195 last_received_rtp_timestamp_(0), 196 last_received_rtp_timestamp_(0),
196 last_received_ntp_seconds_(0), 197 last_received_ntp_seconds_(0),
197 last_received_ntp_fraction_(0), 198 last_received_ntp_fraction_(0),
198 min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)), 199 min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)),
199 number_of_rtt_in_avg_(0), 200 number_of_rtt_in_avg_(0),
200 cast_environment_(cast_environment) { 201 cast_environment_(cast_environment) {
201 rtcp_receiver_.reset(new RtcpReceiver(cast_environment, 202 rtcp_receiver_.reset(new RtcpReceiver(cast_environment,
202 sender_feedback, 203 sender_feedback,
203 receiver_feedback_.get(), 204 receiver_feedback_.get(),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 return; 246 return;
246 } 247 }
247 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser); 248 rtcp_receiver_->IncomingRtcpPacket(&rtcp_parser);
248 } 249 }
249 250
250 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message, 251 void Rtcp::SendRtcpFromRtpReceiver(const RtcpCastMessage* cast_message,
251 RtcpReceiverLogMessage* receiver_log) { 252 RtcpReceiverLogMessage* receiver_log) {
252 uint32 packet_type_flags = 0; 253 uint32 packet_type_flags = 0;
253 254
254 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 255 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
255 RtcpReportBlock report_block; 256 transport::RtcpReportBlock report_block;
256 RtcpReceiverReferenceTimeReport rrtr; 257 RtcpReceiverReferenceTimeReport rrtr;
257 258
258 if (cast_message) { 259 if (cast_message) {
259 packet_type_flags |= RtcpSender::kRtcpCast; 260 packet_type_flags |= RtcpSender::kRtcpCast;
260 cast_environment_->Logging()->InsertGenericEvent(now, kAckSent, 261 cast_environment_->Logging()->InsertGenericEvent(now, kAckSent,
261 cast_message->ack_frame_id_); 262 cast_message->ack_frame_id_);
262 } 263 }
263 if (receiver_log) { 264 if (receiver_log) {
264 packet_type_flags |= RtcpSender::kRtcpReceiverLog; 265 packet_type_flags |= RtcpSender::kRtcpReceiverLog;
265 } 266 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 UpdateNextTimeToSendRtcp(); 302 UpdateNextTimeToSendRtcp();
302 } 303 }
303 rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags, 304 rtcp_sender_->SendRtcpFromRtpReceiver(packet_type_flags,
304 &report_block, 305 &report_block,
305 &rrtr, 306 &rrtr,
306 cast_message, 307 cast_message,
307 receiver_log); 308 receiver_log);
308 } 309 }
309 310
310 void Rtcp::SendRtcpFromRtpSender( 311 void Rtcp::SendRtcpFromRtpSender(
311 RtcpSenderLogMessage* sender_log_message) { 312 transport::RtcpSenderLogMessage* sender_log_message) {
312 uint32 packet_type_flags = RtcpSender::kRtcpSr; 313 uint32 packet_type_flags = RtcpSender::kRtcpSr;
313 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 314 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
314 315
315 if (sender_log_message) { 316 if (sender_log_message) {
316 packet_type_flags |= RtcpSender::kRtcpSenderLog; 317 packet_type_flags |= RtcpSender::kRtcpSenderLog;
317 } 318 }
318 319
319 RtcpSenderInfo sender_info; 320 transport::RtcpSenderInfo sender_info;
320 if (rtp_sender_statistics_) { 321 if (rtp_sender_statistics_) {
321 rtp_sender_statistics_->GetStatistics(now, &sender_info); 322 rtp_sender_statistics_->GetStatistics(now, &sender_info);
322 } else { 323 } else {
323 memset(&sender_info, 0, sizeof(sender_info)); 324 memset(&sender_info, 0, sizeof(sender_info));
324 } 325 }
325 SaveLastSentNtpTime(now, sender_info.ntp_seconds, sender_info.ntp_fraction); 326 SaveLastSentNtpTime(now, sender_info.ntp_seconds, sender_info.ntp_fraction);
326 327
327 RtcpDlrrReportBlock dlrr; 328 transport::RtcpDlrrReportBlock dlrr;
328 if (!time_last_report_received_.is_null()) { 329 if (!time_last_report_received_.is_null()) {
329 packet_type_flags |= RtcpSender::kRtcpDlrr; 330 packet_type_flags |= RtcpSender::kRtcpDlrr;
330 dlrr.last_rr = last_report_received_; 331 dlrr.last_rr = last_report_received_;
331 uint32 delay_seconds = 0; 332 uint32 delay_seconds = 0;
332 uint32 delay_fraction = 0; 333 uint32 delay_fraction = 0;
333 base::TimeDelta delta = now - time_last_report_received_; 334 base::TimeDelta delta = now - time_last_report_received_;
334 ConvertTimeToFractions(delta.InMicroseconds(), 335 ConvertTimeToFractions(delta.InMicroseconds(),
335 &delay_seconds, 336 &delay_seconds,
336 &delay_fraction); 337 &delay_fraction);
337 338
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 int random = base::RandInt(0, 999); 500 int random = base::RandInt(0, 999);
500 base::TimeDelta time_to_next = (rtcp_interval_ / 2) + 501 base::TimeDelta time_to_next = (rtcp_interval_ / 2) +
501 (rtcp_interval_ * random / 1000); 502 (rtcp_interval_ * random / 1000);
502 503
503 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 504 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
504 next_time_to_send_rtcp_ = now + time_to_next; 505 next_time_to_send_rtcp_ = now + time_to_next;
505 } 506 }
506 507
507 } // namespace cast 508 } // namespace cast
508 } // namespace media 509 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp.h ('k') | media/cast/rtcp/rtcp.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698