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

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

Issue 270493003: Cast: Deduplicate event types in cast library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 7 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
« no previous file with comments | « media/cast/rtcp/rtcp.h ('k') | media/cast/rtcp/rtcp_defines.h » ('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/big_endian.h" 7 #include "base/big_endian.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "media/cast/cast_config.h" 9 #include "media/cast/cast_config.h"
10 #include "media/cast/cast_defines.h" 10 #include "media/cast/cast_defines.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 rtcp_->OnReceivedNtp(remote_time_report.ntp_seconds, 61 rtcp_->OnReceivedNtp(remote_time_report.ntp_seconds,
62 remote_time_report.ntp_fraction); 62 remote_time_report.ntp_fraction);
63 } 63 }
64 64
65 virtual void OnReceivedSendReportRequest() OVERRIDE { 65 virtual void OnReceivedSendReportRequest() OVERRIDE {
66 rtcp_->OnReceivedSendReportRequest(); 66 rtcp_->OnReceivedSendReportRequest();
67 } 67 }
68 68
69 virtual void OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log) 69 virtual void OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log)
70 OVERRIDE { 70 OVERRIDE {
71 // Add received log messages into our log system. 71 rtcp_->OnReceivedReceiverLog(receiver_log);
72 RtcpReceiverLogMessage::const_iterator it = receiver_log.begin();
73
74 for (; it != receiver_log.end(); ++it) {
75 uint32 rtp_timestamp = it->rtp_timestamp_;
76
77 RtcpReceiverEventLogMessages::const_iterator event_it =
78 it->event_log_messages_.begin();
79 for (; event_it != it->event_log_messages_.end(); ++event_it) {
80 switch (event_it->type) {
81 case kAudioPacketReceived:
82 case kVideoPacketReceived:
83 case kDuplicateAudioPacketReceived:
84 case kDuplicateVideoPacketReceived:
85 cast_environment_->Logging()->InsertPacketEvent(
86 event_it->event_timestamp, event_it->type, rtp_timestamp,
87 kFrameIdUnknown, event_it->packet_id, 0, 0);
88 break;
89 case kAudioAckSent:
90 case kVideoAckSent:
91 case kAudioFrameDecoded:
92 case kVideoFrameDecoded:
93 cast_environment_->Logging()->InsertFrameEvent(
94 event_it->event_timestamp, event_it->type, rtp_timestamp,
95 kFrameIdUnknown);
96 break;
97 case kAudioPlayoutDelay:
98 case kVideoRenderDelay:
99 cast_environment_->Logging()->InsertFrameEventWithDelay(
100 event_it->event_timestamp, event_it->type, rtp_timestamp,
101 kFrameIdUnknown, event_it->delay_delta);
102 break;
103 default:
104 VLOG(2) << "Received log message via RTCP that we did not expect: "
105 << static_cast<int>(event_it->type);
106 break;
107 }
108 }
109 }
110 } 72 }
111 73
112 virtual void OnReceivedSenderLog( 74 virtual void OnReceivedSenderLog(
113 const transport::RtcpSenderLogMessage& sender_log) OVERRIDE { 75 const transport::RtcpSenderLogMessage& sender_log) OVERRIDE {
114 transport::RtcpSenderLogMessage::const_iterator it = sender_log.begin(); 76 transport::RtcpSenderLogMessage::const_iterator it = sender_log.begin();
115 77
116 for (; it != sender_log.end(); ++it) { 78 for (; it != sender_log.end(); ++it) {
117 uint32 rtp_timestamp = it->rtp_timestamp; 79 uint32 rtp_timestamp = it->rtp_timestamp;
118 CastLoggingEvent log_event = kUnknown; 80 CastLoggingEvent log_event = UNKNOWN;
119 81
120 // These events are provided to know the status of frames that never 82 // These events are provided to know the status of frames that never
121 // reached the receiver. The timing information for these events are not 83 // reached the receiver. The timing information for these events are not
122 // relevant and is not sent over the wire. 84 // relevant and is not sent over the wire.
123 switch (it->frame_status) { 85 switch (it->frame_status) {
124 case transport::kRtcpSenderFrameStatusDroppedByFlowControl: 86 case transport::kRtcpSenderFrameStatusDroppedByFlowControl:
125 // A frame that have been dropped by the flow control would have 87 // A frame that have been dropped by the flow control would have
126 // kVideoFrameCaptureBegin as its last event in the log. 88 // FRAME_CAPTURE_BEGIN as its last event in the log.
127 log_event = kVideoFrameCaptureBegin; 89 log_event = FRAME_CAPTURE_BEGIN;
128 break;
129 case transport::kRtcpSenderFrameStatusDroppedByEncoder:
130 // A frame that have been dropped by the encoder would have
131 // kVideoFrameSentToEncoder as its last event in the log.
132 log_event = kVideoFrameSentToEncoder;
133 break; 90 break;
134 case transport::kRtcpSenderFrameStatusSentToNetwork: 91 case transport::kRtcpSenderFrameStatusSentToNetwork:
135 // A frame that have be encoded is always sent to the network. We 92 // A frame that have be encoded is always sent to the network. We
136 // do not add a new log entry for this. 93 // do not add a new log entry for this.
137 log_event = kVideoFrameEncoded; 94 log_event = FRAME_ENCODED;
138 break; 95 break;
139 default: 96 default:
140 continue; 97 continue;
141 } 98 }
142 // TODO(pwestin): how do we handle the truncated rtp_timestamp? 99 // TODO(pwestin): how do we handle the truncated rtp_timestamp?
143 // Add received log messages into our log system. 100 // Add received log messages into our log system.
144 // TODO(pwestin): how do we handle the time? we don't care about it but 101 // TODO(pwestin): how do we handle the time? we don't care about it but
145 // we need to send in one. 102 // we need to send in one.
146 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 103 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
147 cast_environment_->Logging()->InsertFrameEvent( 104 cast_environment_->Logging()->InsertFrameEvent(
148 now, log_event, rtp_timestamp, kFrameIdUnknown); 105 now, log_event, VIDEO_EVENT, rtp_timestamp, kFrameIdUnknown);
149 } 106 }
150 } 107 }
151 108
152 private: 109 private:
153 Rtcp* rtcp_; 110 Rtcp* rtcp_;
154 scoped_refptr<CastEnvironment> cast_environment_; 111 scoped_refptr<CastEnvironment> cast_environment_;
155 }; 112 };
156 113
157 Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment, 114 Rtcp::Rtcp(scoped_refptr<CastEnvironment> cast_environment,
158 RtcpSenderFeedback* sender_feedback, 115 RtcpSenderFeedback* sender_feedback,
159 transport::CastTransportSender* const transport_sender, 116 transport::CastTransportSender* const transport_sender,
160 transport::PacedPacketSender* paced_packet_sender, 117 transport::PacedPacketSender* paced_packet_sender,
161 RtpReceiverStatistics* rtp_receiver_statistics, RtcpMode rtcp_mode, 118 RtpReceiverStatistics* rtp_receiver_statistics, RtcpMode rtcp_mode,
162 const base::TimeDelta& rtcp_interval, uint32 local_ssrc, 119 const base::TimeDelta& rtcp_interval, uint32 local_ssrc,
163 uint32 remote_ssrc, const std::string& c_name) 120 uint32 remote_ssrc, const std::string& c_name, bool is_audio)
164 : cast_environment_(cast_environment), 121 : cast_environment_(cast_environment),
165 transport_sender_(transport_sender), 122 transport_sender_(transport_sender),
166 rtcp_interval_(rtcp_interval), 123 rtcp_interval_(rtcp_interval),
167 rtcp_mode_(rtcp_mode), 124 rtcp_mode_(rtcp_mode),
168 local_ssrc_(local_ssrc), 125 local_ssrc_(local_ssrc),
169 remote_ssrc_(remote_ssrc), 126 remote_ssrc_(remote_ssrc),
170 c_name_(c_name), 127 c_name_(c_name),
171 rtp_receiver_statistics_(rtp_receiver_statistics), 128 rtp_receiver_statistics_(rtp_receiver_statistics),
172 rtt_feedback_(new LocalRtcpRttFeedback(this)), 129 rtt_feedback_(new LocalRtcpRttFeedback(this)),
173 receiver_feedback_(new LocalRtcpReceiverFeedback(this, cast_environment)), 130 receiver_feedback_(new LocalRtcpReceiverFeedback(this, cast_environment)),
174 rtcp_sender_(new RtcpSender(cast_environment, paced_packet_sender, 131 rtcp_sender_(new RtcpSender(cast_environment, paced_packet_sender,
175 local_ssrc, c_name)), 132 local_ssrc, c_name)),
176 last_report_received_(0), 133 last_report_received_(0),
177 last_received_rtp_timestamp_(0), 134 last_received_rtp_timestamp_(0),
178 last_received_ntp_seconds_(0), 135 last_received_ntp_seconds_(0),
179 last_received_ntp_fraction_(0), 136 last_received_ntp_fraction_(0),
180 min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)), 137 min_rtt_(base::TimeDelta::FromMilliseconds(kMaxRttMs)),
181 number_of_rtt_in_avg_(0) { 138 number_of_rtt_in_avg_(0),
139 is_audio_(is_audio) {
182 rtcp_receiver_.reset(new RtcpReceiver(cast_environment, sender_feedback, 140 rtcp_receiver_.reset(new RtcpReceiver(cast_environment, sender_feedback,
183 receiver_feedback_.get(), 141 receiver_feedback_.get(),
184 rtt_feedback_.get(), local_ssrc)); 142 rtt_feedback_.get(), local_ssrc));
185 rtcp_receiver_->SetRemoteSSRC(remote_ssrc); 143 rtcp_receiver_->SetRemoteSSRC(remote_ssrc);
186 } 144 }
187 145
188 Rtcp::~Rtcp() {} 146 Rtcp::~Rtcp() {}
189 147
190 // static 148 // static
191 bool Rtcp::IsRtcpPacket(const uint8* packet, size_t length) { 149 bool Rtcp::IsRtcpPacket(const uint8* packet, size_t length) {
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 428
471 void Rtcp::UpdateNextTimeToSendRtcp() { 429 void Rtcp::UpdateNextTimeToSendRtcp() {
472 int random = base::RandInt(0, 999); 430 int random = base::RandInt(0, 999);
473 base::TimeDelta time_to_next = 431 base::TimeDelta time_to_next =
474 (rtcp_interval_ / 2) + (rtcp_interval_ * random / 1000); 432 (rtcp_interval_ / 2) + (rtcp_interval_ * random / 1000);
475 433
476 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 434 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
477 next_time_to_send_rtcp_ = now + time_to_next; 435 next_time_to_send_rtcp_ = now + time_to_next;
478 } 436 }
479 437
438 void Rtcp::OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
439 // Add received log messages into our log system.
440 RtcpReceiverLogMessage::const_iterator it = receiver_log.begin();
441 EventMediaType media_type = is_audio_ ? AUDIO_EVENT : VIDEO_EVENT;
442 for (; it != receiver_log.end(); ++it) {
443 uint32 rtp_timestamp = it->rtp_timestamp_;
444
445 RtcpReceiverEventLogMessages::const_iterator event_it =
446 it->event_log_messages_.begin();
447 for (; event_it != it->event_log_messages_.end(); ++event_it) {
448 switch (event_it->type) {
449 case PACKET_RECEIVED:
450 cast_environment_->Logging()->InsertPacketEvent(
451 event_it->event_timestamp, event_it->type,
452 media_type, rtp_timestamp,
453 kFrameIdUnknown, event_it->packet_id, 0, 0);
454 break;
455 case FRAME_ACK_SENT:
456 case FRAME_DECODED:
457 cast_environment_->Logging()->InsertFrameEvent(
458 event_it->event_timestamp, event_it->type, media_type,
459 rtp_timestamp, kFrameIdUnknown);
460 break;
461 case FRAME_PLAYOUT:
462 cast_environment_->Logging()->InsertFrameEventWithDelay(
463 event_it->event_timestamp, event_it->type, media_type,
464 rtp_timestamp, kFrameIdUnknown, event_it->delay_delta);
465 break;
466 default:
467 VLOG(2) << "Received log message via RTCP that we did not expect: "
468 << static_cast<int>(event_it->type);
469 break;
470 }
471 }
472 }
473 }
474
480 } // namespace cast 475 } // namespace cast
481 } // namespace media 476 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtcp/rtcp.h ('k') | media/cast/rtcp/rtcp_defines.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698