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

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

Powered by Google App Engine
This is Rietveld 408576698