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

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

Issue 1515433002: Replace uses of raw uint32's with a type-checked RtpTimeTicks data type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/net/rtcp/rtcp_utility.h" 5 #include "media/cast/net/rtcp/rtcp_utility.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "media/cast/net/cast_transport_defines.h" 10 #include "media/cast/net/cast_transport_defines.h"
(...skipping 18 matching lines...) Expand all
29 remote_ssrc_(remote_ssrc), 29 remote_ssrc_(remote_ssrc),
30 has_sender_report_(false), 30 has_sender_report_(false),
31 has_last_report_(false), 31 has_last_report_(false),
32 has_cast_message_(false), 32 has_cast_message_(false),
33 has_receiver_reference_time_report_(false) { 33 has_receiver_reference_time_report_(false) {
34 } 34 }
35 35
36 RtcpParser::~RtcpParser() {} 36 RtcpParser::~RtcpParser() {}
37 37
38 bool RtcpParser::Parse(base::BigEndianReader* reader) { 38 bool RtcpParser::Parse(base::BigEndianReader* reader) {
39 // Reset.
40 has_sender_report_ = false;
41 sender_report_ = RtcpSenderInfo();
42 has_last_report_ = false;
43 receiver_log_.clear();
44 has_cast_message_ = false;
45 has_receiver_reference_time_report_ = false;
46
39 while (reader->remaining()) { 47 while (reader->remaining()) {
40 RtcpCommonHeader header; 48 RtcpCommonHeader header;
41 if (!ParseCommonHeader(reader, &header)) 49 if (!ParseCommonHeader(reader, &header))
42 return false; 50 return false;
43 51
44 base::StringPiece tmp; 52 base::StringPiece tmp;
45 if (!reader->ReadPiece(&tmp, header.length_in_octets - 4)) 53 if (!reader->ReadPiece(&tmp, header.length_in_octets - 4))
46 return false; 54 return false;
47 base::BigEndianReader chunk(tmp.data(), tmp.size()); 55 base::BigEndianReader chunk(tmp.data(), tmp.size());
48 56
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 122
115 bool RtcpParser::ParseSR(base::BigEndianReader* reader, 123 bool RtcpParser::ParseSR(base::BigEndianReader* reader,
116 const RtcpCommonHeader& header) { 124 const RtcpCommonHeader& header) {
117 uint32 sender_ssrc; 125 uint32 sender_ssrc;
118 if (!reader->ReadU32(&sender_ssrc)) 126 if (!reader->ReadU32(&sender_ssrc))
119 return false; 127 return false;
120 128
121 if (sender_ssrc != remote_ssrc_) 129 if (sender_ssrc != remote_ssrc_)
122 return true; 130 return true;
123 131
124 uint32 tmp; 132 uint32_t truncated_rtp_timestamp;
133 uint32 send_octet_count;
125 if (!reader->ReadU32(&sender_report_.ntp_seconds) || 134 if (!reader->ReadU32(&sender_report_.ntp_seconds) ||
126 !reader->ReadU32(&sender_report_.ntp_fraction) || 135 !reader->ReadU32(&sender_report_.ntp_fraction) ||
127 !reader->ReadU32(&sender_report_.rtp_timestamp) || 136 !reader->ReadU32(&truncated_rtp_timestamp) ||
128 !reader->ReadU32(&sender_report_.send_packet_count) || 137 !reader->ReadU32(&sender_report_.send_packet_count) ||
129 !reader->ReadU32(&tmp)) 138 !reader->ReadU32(&send_octet_count))
130 return false; 139 return false;
131 sender_report_.send_octet_count = tmp; 140 sender_report_.rtp_timestamp = last_parsed_sr_rtp_timestamp_ =
141 last_parsed_sr_rtp_timestamp_.Expand(truncated_rtp_timestamp);
142 sender_report_.send_octet_count = send_octet_count;
132 has_sender_report_ = true; 143 has_sender_report_ = true;
133 144
134 for (size_t block = 0; block < header.IC; block++) 145 for (size_t block = 0; block < header.IC; block++)
135 if (!ParseReportBlock(reader)) 146 if (!ParseReportBlock(reader))
136 return false; 147 return false;
137 148
138 return true; 149 return true;
139 } 150 }
140 151
141 bool RtcpParser::ParseRR(base::BigEndianReader* reader, 152 bool RtcpParser::ParseRR(base::BigEndianReader* reader,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 return false; 202 return false;
192 break; 203 break;
193 } 204 }
194 return true; 205 return true;
195 } 206 }
196 207
197 bool RtcpParser::ParseCastReceiverLogFrameItem( 208 bool RtcpParser::ParseCastReceiverLogFrameItem(
198 base::BigEndianReader* reader) { 209 base::BigEndianReader* reader) {
199 210
200 while (reader->remaining()) { 211 while (reader->remaining()) {
201 uint32 rtp_timestamp; 212 uint32 truncated_rtp_timestamp;
202 uint32 data; 213 uint32 data;
203 if (!reader->ReadU32(&rtp_timestamp) || 214 if (!reader->ReadU32(&truncated_rtp_timestamp) || !reader->ReadU32(&data))
204 !reader->ReadU32(&data))
205 return false; 215 return false;
206 216
207 // We have 24 LSB of the event timestamp base on the wire. 217 // We have 24 LSB of the event timestamp base on the wire.
208 base::TimeTicks event_timestamp_base = base::TimeTicks() + 218 base::TimeTicks event_timestamp_base = base::TimeTicks() +
209 base::TimeDelta::FromMilliseconds(data & 0xffffff); 219 base::TimeDelta::FromMilliseconds(data & 0xffffff);
210 220
211 size_t num_events = 1 + static_cast<uint8>(data >> 24); 221 size_t num_events = 1 + static_cast<uint8>(data >> 24);
212 222
213 RtcpReceiverFrameLogMessage frame_log(rtp_timestamp); 223 const RtpTimeTicks frame_log_rtp_timestamp =
224 last_parsed_frame_log_rtp_timestamp_.Expand(truncated_rtp_timestamp);
225 RtcpReceiverFrameLogMessage frame_log(frame_log_rtp_timestamp);
214 for (size_t event = 0; event < num_events; event++) { 226 for (size_t event = 0; event < num_events; event++) {
215 uint16 delay_delta_or_packet_id; 227 uint16 delay_delta_or_packet_id;
216 uint16 event_type_and_timestamp_delta; 228 uint16 event_type_and_timestamp_delta;
217 if (!reader->ReadU16(&delay_delta_or_packet_id) || 229 if (!reader->ReadU16(&delay_delta_or_packet_id) ||
218 !reader->ReadU16(&event_type_and_timestamp_delta)) 230 !reader->ReadU16(&event_type_and_timestamp_delta))
219 return false; 231 return false;
220 232
221 RtcpReceiverEventLogMessage event_log; 233 RtcpReceiverEventLogMessage event_log;
222 event_log.type = TranslateToLogEventFromWireFormat( 234 event_log.type = TranslateToLogEventFromWireFormat(
223 static_cast<uint8>(event_type_and_timestamp_delta >> 12)); 235 static_cast<uint8>(event_type_and_timestamp_delta >> 12));
224 event_log.event_timestamp = 236 event_log.event_timestamp =
225 event_timestamp_base + 237 event_timestamp_base +
226 base::TimeDelta::FromMilliseconds( 238 base::TimeDelta::FromMilliseconds(
227 event_type_and_timestamp_delta & 0xfff); 239 event_type_and_timestamp_delta & 0xfff);
228 if (event_log.type == PACKET_RECEIVED) { 240 if (event_log.type == PACKET_RECEIVED) {
229 event_log.packet_id = delay_delta_or_packet_id; 241 event_log.packet_id = delay_delta_or_packet_id;
230 } else { 242 } else {
231 event_log.delay_delta = base::TimeDelta::FromMilliseconds( 243 event_log.delay_delta = base::TimeDelta::FromMilliseconds(
232 static_cast<int16>(delay_delta_or_packet_id)); 244 static_cast<int16>(delay_delta_or_packet_id));
233 } 245 }
234 frame_log.event_log_messages_.push_back(event_log); 246 frame_log.event_log_messages_.push_back(event_log);
235 } 247 }
236 248
249 last_parsed_frame_log_rtp_timestamp_ = frame_log_rtp_timestamp;
237 receiver_log_.push_back(frame_log); 250 receiver_log_.push_back(frame_log);
238 } 251 }
239 252
240 return true; 253 return true;
241 } 254 }
242 255
243 // RFC 4585. 256 // RFC 4585.
244 bool RtcpParser::ParseFeedbackCommon(base::BigEndianReader* reader, 257 bool RtcpParser::ParseFeedbackCommon(base::BigEndianReader* reader,
245 const RtcpCommonHeader& header) { 258 const RtcpCommonHeader& header) {
246 // See RTC 4585 Section 6.4 for application specific feedback messages. 259 // See RTC 4585 Section 6.4 for application specific feedback messages.
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 static_cast<int64_t>(std::ceil(ntp_fractions / kMagicFractionalUnit)); 448 static_cast<int64_t>(std::ceil(ntp_fractions / kMagicFractionalUnit));
436 449
437 base::TimeDelta elapsed_since_unix_epoch = base::TimeDelta::FromMicroseconds( 450 base::TimeDelta elapsed_since_unix_epoch = base::TimeDelta::FromMicroseconds(
438 ntp_time_us - 451 ntp_time_us -
439 (kUnixEpochInNtpSeconds * base::Time::kMicrosecondsPerSecond)); 452 (kUnixEpochInNtpSeconds * base::Time::kMicrosecondsPerSecond));
440 return base::TimeTicks::UnixEpoch() + elapsed_since_unix_epoch; 453 return base::TimeTicks::UnixEpoch() + elapsed_since_unix_epoch;
441 } 454 }
442 455
443 } // namespace cast 456 } // namespace cast
444 } // namespace media 457 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698