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

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

Issue 69603002: Incorporating logging into Cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing errors Created 7 years, 1 month 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
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"
11 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "media/cast/cast_environment.h"
12 #include "media/cast/pacing/paced_sender.h" 12 #include "media/cast/pacing/paced_sender.h"
13 #include "media/cast/rtcp/rtcp_utility.h" 13 #include "media/cast/rtcp/rtcp_utility.h"
14 #include "net/base/big_endian.h" 14 #include "net/base/big_endian.h"
15 15
16 namespace media { 16 namespace media {
17 namespace cast { 17 namespace cast {
18 18
19 static const size_t kRtcpMaxNackFields = 253; 19 static const size_t kRtcpMaxNackFields = 253;
20 static const size_t kRtcpMaxCastLossFields = 100; 20 static const size_t kRtcpMaxCastLossFields = 100;
21 21
22 RtcpSender::RtcpSender(PacedPacketSender* outgoing_transport, 22 RtcpSender::RtcpSender(scoped_refptr<CastEnvironment> cast_environment,
23 PacedPacketSender* outgoing_transport,
23 uint32 sending_ssrc, 24 uint32 sending_ssrc,
24 const std::string& c_name) 25 const std::string& c_name)
25 : ssrc_(sending_ssrc), 26 : ssrc_(sending_ssrc),
26 c_name_(c_name), 27 c_name_(c_name),
27 transport_(outgoing_transport) { 28 transport_(outgoing_transport),
29 cast_environment_(cast_environment) {
28 DCHECK_LT(c_name_.length(), kRtcpCnameSize) << "Invalid config"; 30 DCHECK_LT(c_name_.length(), kRtcpCnameSize) << "Invalid config";
29 } 31 }
30 32
31 RtcpSender::~RtcpSender() {} 33 RtcpSender::~RtcpSender() {}
32 34
33 void RtcpSender::SendRtcp(uint32 packet_type_flags, 35 void RtcpSender::SendRtcp(uint32 packet_type_flags,
34 const RtcpSenderInfo* sender_info, 36 const RtcpSenderInfo* sender_info,
35 const RtcpReportBlock* report_block, 37 const RtcpReportBlock* report_block,
36 uint32 pli_remote_ssrc, 38 uint32 pli_remote_ssrc,
37 const RtcpDlrrReportBlock* dlrr, 39 const RtcpDlrrReportBlock* dlrr,
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 213
212 packet->resize(start_size + 12); 214 packet->resize(start_size + 12);
213 215
214 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 12); 216 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 12);
215 uint8 FMT = 1; // Picture loss indicator. 217 uint8 FMT = 1; // Picture loss indicator.
216 big_endian_writer.WriteU8(0x80 + FMT); 218 big_endian_writer.WriteU8(0x80 + FMT);
217 big_endian_writer.WriteU8(206); 219 big_endian_writer.WriteU8(206);
218 big_endian_writer.WriteU16(2); // Used fixed length of 2. 220 big_endian_writer.WriteU16(2); // Used fixed length of 2.
219 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC. 221 big_endian_writer.WriteU32(ssrc_); // Add our own SSRC.
220 big_endian_writer.WriteU32(remote_ssrc); // Add the remote SSRC. 222 big_endian_writer.WriteU32(remote_ssrc); // Add the remote SSRC.
221 TRACE_EVENT_INSTANT2("cast_rtcp", "RtcpSender::PLI", TRACE_EVENT_SCOPE_THREAD,
222 "remote_ssrc", remote_ssrc,
223 "ssrc", ssrc_);
224 } 223 }
225 224
226 /* 225 /*
227 0 1 2 3 226 0 1 2 3
228 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 227 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
229 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 228 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
230 | PB |0| Payload Type| Native Rpsi bit string | 229 | PB |0| Payload Type| Native Rpsi bit string |
231 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 230 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
232 | defined per codec ... | Padding (0) | 231 | defined per codec ... | Padding (0) |
233 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 232 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 316
318 big_endian_writer.WriteU8(static_cast<uint8>((bitrate_exponent << 2) + 317 big_endian_writer.WriteU8(static_cast<uint8>((bitrate_exponent << 2) +
319 ((bitrate_mantissa >> 16) & 0x03))); 318 ((bitrate_mantissa >> 16) & 0x03)));
320 big_endian_writer.WriteU8(static_cast<uint8>(bitrate_mantissa >> 8)); 319 big_endian_writer.WriteU8(static_cast<uint8>(bitrate_mantissa >> 8));
321 big_endian_writer.WriteU8(static_cast<uint8>(bitrate_mantissa)); 320 big_endian_writer.WriteU8(static_cast<uint8>(bitrate_mantissa));
322 321
323 std::list<uint32>::const_iterator it = remb->remb_ssrcs.begin(); 322 std::list<uint32>::const_iterator it = remb->remb_ssrcs.begin();
324 for (; it != remb->remb_ssrcs.end(); ++it) { 323 for (; it != remb->remb_ssrcs.end(); ++it) {
325 big_endian_writer.WriteU32(*it); 324 big_endian_writer.WriteU32(*it);
326 } 325 }
327 TRACE_COUNTER_ID1("cast_rtcp", "RtcpSender::RembBitrate", ssrc_, 326 cast_environment_->Logging()->InsertGenericEvent(kRembBitrate,
328 remb->remb_bitrate); 327 remb->remb_bitrate);
329 } 328 }
330 329
331 void RtcpSender::BuildNack(const RtcpNackMessage* nack, 330 void RtcpSender::BuildNack(const RtcpNackMessage* nack,
332 std::vector<uint8>* packet) const { 331 std::vector<uint8>* packet) const {
333 size_t start_size = packet->size(); 332 size_t start_size = packet->size();
334 DCHECK_LT(start_size + 16, kIpPacketSize) << "Not enough buffer space"; 333 DCHECK_LT(start_size + 16, kIpPacketSize) << "Not enough buffer space";
335 if (start_size + 16 > kIpPacketSize) return; 334 if (start_size + 16 > kIpPacketSize) return;
336 335
337 packet->resize(start_size + 16); 336 packet->resize(start_size + 16);
338 337
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 if (start_size + 4 > kIpPacketSize) return; 373 if (start_size + 4 > kIpPacketSize) return;
375 374
376 packet->resize(start_size + 4); 375 packet->resize(start_size + 4);
377 net::BigEndianWriter big_endian_nack_writer(&((*packet)[start_size]), 4); 376 net::BigEndianWriter big_endian_nack_writer(&((*packet)[start_size]), 4);
378 big_endian_nack_writer.WriteU16(nack_sequence_number); 377 big_endian_nack_writer.WriteU16(nack_sequence_number);
379 big_endian_nack_writer.WriteU16(bitmask); 378 big_endian_nack_writer.WriteU16(bitmask);
380 number_of_nack_fields++; 379 number_of_nack_fields++;
381 } 380 }
382 DCHECK_GE(kRtcpMaxNackFields, number_of_nack_fields); 381 DCHECK_GE(kRtcpMaxNackFields, number_of_nack_fields);
383 (*packet)[nack_size_pos] = static_cast<uint8>(2 + number_of_nack_fields); 382 (*packet)[nack_size_pos] = static_cast<uint8>(2 + number_of_nack_fields);
384 TRACE_COUNTER_ID1("cast_rtcp", "RtcpSender::NACK", ssrc_,
385 nack->nack_list.size());
386 } 383 }
387 384
388 void RtcpSender::BuildBye(std::vector<uint8>* packet) const { 385 void RtcpSender::BuildBye(std::vector<uint8>* packet) const {
389 size_t start_size = packet->size(); 386 size_t start_size = packet->size();
390 DCHECK_LT(start_size + 8, kIpPacketSize) << "Not enough buffer space"; 387 DCHECK_LT(start_size + 8, kIpPacketSize) << "Not enough buffer space";
391 if (start_size + 8 > kIpPacketSize) return; 388 if (start_size + 8 > kIpPacketSize) return;
392 389
393 packet->resize(start_size + 8); 390 packet->resize(start_size + 8);
394 391
395 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 8); 392 net::BigEndianWriter big_endian_writer(&((*packet)[start_size]), 8);
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 } 526 }
530 } 527 }
531 big_endian_nack_writer.WriteU8(bitmask); 528 big_endian_nack_writer.WriteU8(bitmask);
532 ++number_of_loss_fields; 529 ++number_of_loss_fields;
533 } 530 }
534 } 531 }
535 } 532 }
536 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields); 533 DCHECK_LE(number_of_loss_fields, kRtcpMaxCastLossFields);
537 (*packet)[cast_size_pos] = static_cast<uint8>(4 + number_of_loss_fields); 534 (*packet)[cast_size_pos] = static_cast<uint8>(4 + number_of_loss_fields);
538 (*packet)[cast_loss_field_pos] = static_cast<uint8>(number_of_loss_fields); 535 (*packet)[cast_loss_field_pos] = static_cast<uint8>(number_of_loss_fields);
539
540 // Frames with missing packets.
541 TRACE_COUNTER_ID1("cast_rtcp", "RtcpSender::CastNACK", ssrc_,
542 cast->missing_frames_and_packets_.size());
543 } 536 }
544 537
545 } // namespace cast 538 } // namespace cast
546 } // namespace media 539 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698