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

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

Issue 25643002: Fix cq compilation on win_x64 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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 | « no previous file | no next file » | 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_sender.h" 5 #include "media/cast/rtcp/rtcp_sender.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 169
170 // SDES Source Description. 170 // SDES Source Description.
171 packet->resize(start_size + 10); 171 packet->resize(start_size + 10);
172 172
173 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 10); 173 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 10);
174 // We always need to add one SDES CNAME. 174 // We always need to add one SDES CNAME.
175 big_endian_writer.WriteU8(0x80 + 1); 175 big_endian_writer.WriteU8(0x80 + 1);
176 big_endian_writer.WriteU8(202); 176 big_endian_writer.WriteU8(202);
177 177
178 // Handle SDES length later on. 178 // Handle SDES length later on.
179 uint32 sdes_length_position = start_size + 3; 179 uint32 sdes_length_position = static_cast<uint32>(start_size) + 3;
180 big_endian_writer.WriteU16(0); 180 big_endian_writer.WriteU16(0);
181 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC. 181 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
182 big_endian_writer.WriteU8(1); // CNAME = 1 182 big_endian_writer.WriteU8(1); // CNAME = 1
183 big_endian_writer.WriteU8(static_cast<uint8>(c_name_.length())); 183 big_endian_writer.WriteU8(static_cast<uint8>(c_name_.length()));
184 184
185 size_t sdes_length = 10 + c_name_.length(); 185 size_t sdes_length = 10 + c_name_.length();
186 packet->insert(packet->end(), c_name_.c_str(), 186 packet->insert(packet->end(), c_name_.c_str(),
187 c_name_.c_str() + c_name_.length()); 187 c_name_.c_str() + c_name_.length());
188 188
189 size_t padding = 0; 189 size_t padding = 0;
190 190
191 // We must have a zero field even if we have an even multiple of 4 bytes. 191 // We must have a zero field even if we have an even multiple of 4 bytes.
192 if ((packet->size() % 4) == 0) { 192 if ((packet->size() % 4) == 0) {
193 padding++; 193 padding++;
194 packet->push_back(0); 194 packet->push_back(0);
195 } 195 }
196 while ((packet->size() % 4) != 0) { 196 while ((packet->size() % 4) != 0) {
197 padding++; 197 padding++;
198 packet->push_back(0); 198 packet->push_back(0);
199 } 199 }
200 sdes_length += padding; 200 sdes_length += padding;
201 201
202 // In 32-bit words minus one and we don't count the header. 202 // In 32-bit words minus one and we don't count the header.
203 uint8 buffer_length = (sdes_length / 4) - 1; 203 uint8 buffer_length = static_cast<uint8>((sdes_length / 4) - 1);
204 (*packet)[sdes_length_position] = buffer_length; 204 (*packet)[sdes_length_position] = buffer_length;
205 } 205 }
206 206
207 void RtcpSender::BuildPli(uint32 remote_ssrc, 207 void RtcpSender::BuildPli(uint32 remote_ssrc,
208 std::vector<uint8>* packet) const { 208 std::vector<uint8>* packet) const {
209 size_t start_size = packet->size(); 209 size_t start_size = packet->size();
210 DCHECK_LT(start_size + 12, kIpPacketSize) << "Not enough buffer space"; 210 DCHECK_LT(start_size + 12, kIpPacketSize) << "Not enough buffer space";
211 if (start_size + 12 > kIpPacketSize) return; 211 if (start_size + 12 > kIpPacketSize) return;
212 212
213 packet->resize(start_size + 12); 213 packet->resize(start_size + 12);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 296
297 packet->resize(start_size + remb_size); 297 packet->resize(start_size + remb_size);
298 298
299 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), remb_size); 299 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), remb_size);
300 300
301 // Add application layer feedback. 301 // Add application layer feedback.
302 uint8 FMT = 15; 302 uint8 FMT = 15;
303 big_endian_writer.WriteU8(0x80 + FMT); 303 big_endian_writer.WriteU8(0x80 + FMT);
304 big_endian_writer.WriteU8(206); 304 big_endian_writer.WriteU8(206);
305 big_endian_writer.WriteU8(0); 305 big_endian_writer.WriteU8(0);
306 big_endian_writer.WriteU8(remb->remb_ssrcs.size() + 4); 306 big_endian_writer.WriteU8(static_cast<uint8>(remb->remb_ssrcs.size() + 4));
307 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC. 307 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
308 big_endian_writer.WriteU32(0); // Remote SSRC must be 0. 308 big_endian_writer.WriteU32(0); // Remote SSRC must be 0.
309 big_endian_writer.WriteU32(kRemb); 309 big_endian_writer.WriteU32(kRemb);
310 big_endian_writer.WriteU8(remb->remb_ssrcs.size()); 310 big_endian_writer.WriteU8(static_cast<uint8>(remb->remb_ssrcs.size()));
311 311
312 // 6 bit exponent and a 18 bit mantissa. 312 // 6 bit exponent and a 18 bit mantissa.
313 uint8 bitrate_exponent; 313 uint8 bitrate_exponent;
314 uint32 bitrate_mantissa; 314 uint32 bitrate_mantissa;
315 BitrateToRembExponentBitrate(remb->remb_bitrate, 315 BitrateToRembExponentBitrate(remb->remb_bitrate,
316 &bitrate_exponent, 316 &bitrate_exponent,
317 &bitrate_mantissa); 317 &bitrate_mantissa);
318 318
319 big_endian_writer.WriteU8(static_cast<uint8>((bitrate_exponent << 2) + 319 big_endian_writer.WriteU8(static_cast<uint8>((bitrate_exponent << 2) +
320 ((bitrate_mantissa >> 16) & 0x03))); 320 ((bitrate_mantissa >> 16) & 0x03)));
(...skipping 15 matching lines...) Expand all
336 if (start_size + 16 > kIpPacketSize) return; 336 if (start_size + 16 > kIpPacketSize) return;
337 337
338 packet->resize(start_size + 16); 338 packet->resize(start_size + 16);
339 339
340 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 16); 340 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 16);
341 341
342 uint8 FMT = 1; 342 uint8 FMT = 1;
343 big_endian_writer.WriteU8(0x80 + FMT); 343 big_endian_writer.WriteU8(0x80 + FMT);
344 big_endian_writer.WriteU8(205); 344 big_endian_writer.WriteU8(205);
345 big_endian_writer.WriteU8(0); 345 big_endian_writer.WriteU8(0);
346 int nack_size_pos = start_size + 3; 346 int nack_size_pos = static_cast<int>(start_size) + 3;
347 big_endian_writer.WriteU8(3); 347 big_endian_writer.WriteU8(3);
348 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC. 348 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
349 big_endian_writer.WriteU32(nack->remote_ssrc); // Add the remote SSRC. 349 big_endian_writer.WriteU32(nack->remote_ssrc); // Add the remote SSRC.
350 350
351 // Build NACK bitmasks and write them to the Rtcp message. 351 // Build NACK bitmasks and write them to the Rtcp message.
352 // The nack list should be sorted and not contain duplicates. 352 // The nack list should be sorted and not contain duplicates.
353 int number_of_nack_fields = 0; 353 int number_of_nack_fields = 0;
354 int max_number_of_nack_fields = 354 int max_number_of_nack_fields =
355 std::min<int>(kRtcpMaxNackFields, (kIpPacketSize - packet->size()) / 4); 355 std::min<int>(kRtcpMaxNackFields,
356 (kIpPacketSize - static_cast<int>(packet->size())) / 4);
356 357
357 std::list<uint16>::const_iterator it = nack->nack_list.begin(); 358 std::list<uint16>::const_iterator it = nack->nack_list.begin();
358 while (it != nack->nack_list.end() && 359 while (it != nack->nack_list.end() &&
359 number_of_nack_fields < max_number_of_nack_fields) { 360 number_of_nack_fields < max_number_of_nack_fields) {
360 uint16 nack_sequence_number = *it; 361 uint16 nack_sequence_number = *it;
361 uint16 bitmask = 0; 362 uint16 bitmask = 0;
362 ++it; 363 ++it;
363 while (it != nack->nack_list.end()) { 364 while (it != nack->nack_list.end()) {
364 int shift = static_cast<uint16>(*it - nack_sequence_number) - 1; 365 int shift = static_cast<uint16>(*it - nack_sequence_number) - 1;
365 if (shift >= 0 && shift <= 15) { 366 if (shift >= 0 && shift <= 15) {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 DCHECK_LT(start_size + 20, kIpPacketSize) << "Not enough buffer space"; 467 DCHECK_LT(start_size + 20, kIpPacketSize) << "Not enough buffer space";
467 if (start_size + 20 > kIpPacketSize) return; 468 if (start_size + 20 > kIpPacketSize) return;
468 469
469 packet->resize(start_size + 20); 470 packet->resize(start_size + 20);
470 471
471 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 20); 472 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 20);
472 uint8 FMT = 15; // Application layer feedback. 473 uint8 FMT = 15; // Application layer feedback.
473 big_endian_writer.WriteU8(0x80 + FMT); 474 big_endian_writer.WriteU8(0x80 + FMT);
474 big_endian_writer.WriteU8(206); 475 big_endian_writer.WriteU8(206);
475 big_endian_writer.WriteU8(0); 476 big_endian_writer.WriteU8(0);
476 int cast_size_pos = start_size + 3; // Save length position. 477 int cast_size_pos =
478 static_cast<int>(start_size) + 3; // Save length position.
477 big_endian_writer.WriteU8(4); 479 big_endian_writer.WriteU8(4);
478 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC. 480 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
479 big_endian_writer.WriteU32(cast->media_ssrc_); // Remote SSRC. 481 big_endian_writer.WriteU32(cast->media_ssrc_); // Remote SSRC.
480 big_endian_writer.WriteU32(kCast); 482 big_endian_writer.WriteU32(kCast);
481 big_endian_writer.WriteU8(cast->ack_frame_id_); 483 big_endian_writer.WriteU8(cast->ack_frame_id_);
482 int cast_loss_field_pos = start_size + 17; // Save loss field position. 484 int cast_loss_field_pos =
485 static_cast<int>(start_size) + 17; // Save loss field position.
483 big_endian_writer.WriteU8(0); // Overwritten with number_of_loss_fields. 486 big_endian_writer.WriteU8(0); // Overwritten with number_of_loss_fields.
484 big_endian_writer.WriteU8(0); // Reserved. 487 big_endian_writer.WriteU8(0); // Reserved.
485 big_endian_writer.WriteU8(0); // Reserved. 488 big_endian_writer.WriteU8(0); // Reserved.
486 489
487 int number_of_loss_fields = 0; 490 int number_of_loss_fields = 0;
488 int max_number_of_loss_fields = std::min<int>(kRtcpMaxCastLossFields, 491 int max_number_of_loss_fields =
489 (kIpPacketSize - packet->size()) / 4); 492 std::min<int>(kRtcpMaxCastLossFields,
493 kIpPacketSize - static_cast<int>(packet->size()) / 4);
490 494
491 std::map<uint8, std::set<uint16> >::const_iterator frame_it = 495 std::map<uint8, std::set<uint16> >::const_iterator frame_it =
492 cast->missing_frames_and_packets_.begin(); 496 cast->missing_frames_and_packets_.begin();
493 497
494 for (; frame_it != cast->missing_frames_and_packets_.end() && 498 for (; frame_it != cast->missing_frames_and_packets_.end() &&
495 number_of_loss_fields < max_number_of_loss_fields; ++frame_it) { 499 number_of_loss_fields < max_number_of_loss_fields; ++frame_it) {
496 // Iterate through all frames with missing packets. 500 // Iterate through all frames with missing packets.
497 if (frame_it->second.empty()) { 501 if (frame_it->second.empty()) {
498 // Special case all packets in a frame is missing. 502 // Special case all packets in a frame is missing.
499 start_size = packet->size(); 503 start_size = packet->size();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 (*packet)[cast_size_pos] = static_cast<uint8>(4 + number_of_loss_fields); 540 (*packet)[cast_size_pos] = static_cast<uint8>(4 + number_of_loss_fields);
537 (*packet)[cast_loss_field_pos] = static_cast<uint8>(number_of_loss_fields); 541 (*packet)[cast_loss_field_pos] = static_cast<uint8>(number_of_loss_fields);
538 542
539 // Frames with missing packets. 543 // Frames with missing packets.
540 TRACE_COUNTER_ID1("cast_rtcp", "RtcpSender::CastNACK", ssrc_, 544 TRACE_COUNTER_ID1("cast_rtcp", "RtcpSender::CastNACK", ssrc_,
541 cast->missing_frames_and_packets_.size()); 545 cast->missing_frames_and_packets_.size());
542 } 546 }
543 547
544 } // namespace cast 548 } // namespace cast
545 } // namespace media 549 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698