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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_sender.cc

Issue 2370313002: Reland of Unify rtcp packet setters (Closed)
Patch Set: Fix breaking mistype Created 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 // The timestamp of this RTCP packet should be estimated as the timestamp of 442 // The timestamp of this RTCP packet should be estimated as the timestamp of
443 // the frame being captured at this moment. We are calculating that 443 // the frame being captured at this moment. We are calculating that
444 // timestamp as the last frame's timestamp + the time since the last frame 444 // timestamp as the last frame's timestamp + the time since the last frame
445 // was captured. 445 // was captured.
446 uint32_t rtp_timestamp = 446 uint32_t rtp_timestamp =
447 timestamp_offset_ + last_rtp_timestamp_ + 447 timestamp_offset_ + last_rtp_timestamp_ +
448 (clock_->TimeInMilliseconds() - last_frame_capture_time_ms_) * 448 (clock_->TimeInMilliseconds() - last_frame_capture_time_ms_) *
449 (ctx.feedback_state_.frequency_hz / 1000); 449 (ctx.feedback_state_.frequency_hz / 1000);
450 450
451 rtcp::SenderReport* report = new rtcp::SenderReport(); 451 rtcp::SenderReport* report = new rtcp::SenderReport();
452 report->From(ssrc_); 452 report->SetSenderSsrc(ssrc_);
453 report->WithNtp(NtpTime(ctx.ntp_sec_, ctx.ntp_frac_)); 453 report->SetNtp(NtpTime(ctx.ntp_sec_, ctx.ntp_frac_));
454 report->WithRtpTimestamp(rtp_timestamp); 454 report->SetRtpTimestamp(rtp_timestamp);
455 report->WithPacketCount(ctx.feedback_state_.packets_sent); 455 report->SetPacketCount(ctx.feedback_state_.packets_sent);
456 report->WithOctetCount(ctx.feedback_state_.media_bytes_sent); 456 report->SetOctetCount(ctx.feedback_state_.media_bytes_sent);
457 457
458 for (auto it : report_blocks_) 458 for (auto it : report_blocks_)
459 report->WithReportBlock(it.second); 459 report->AddReportBlock(it.second);
460 460
461 report_blocks_.clear(); 461 report_blocks_.clear();
462 462
463 return std::unique_ptr<rtcp::RtcpPacket>(report); 463 return std::unique_ptr<rtcp::RtcpPacket>(report);
464 } 464 }
465 465
466 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildSDES( 466 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildSDES(
467 const RtcpContext& ctx) { 467 const RtcpContext& ctx) {
468 size_t length_cname = cname_.length(); 468 size_t length_cname = cname_.length();
469 RTC_CHECK_LT(length_cname, static_cast<size_t>(RTCP_CNAME_SIZE)); 469 RTC_CHECK_LT(length_cname, static_cast<size_t>(RTCP_CNAME_SIZE));
470 470
471 rtcp::Sdes* sdes = new rtcp::Sdes(); 471 rtcp::Sdes* sdes = new rtcp::Sdes();
472 sdes->WithCName(ssrc_, cname_); 472 sdes->AddCName(ssrc_, cname_);
473 473
474 for (const auto it : csrc_cnames_) 474 for (const auto it : csrc_cnames_)
475 sdes->WithCName(it.first, it.second); 475 sdes->AddCName(it.first, it.second);
476 476
477 return std::unique_ptr<rtcp::RtcpPacket>(sdes); 477 return std::unique_ptr<rtcp::RtcpPacket>(sdes);
478 } 478 }
479 479
480 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildRR(const RtcpContext& ctx) { 480 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildRR(const RtcpContext& ctx) {
481 rtcp::ReceiverReport* report = new rtcp::ReceiverReport(); 481 rtcp::ReceiverReport* report = new rtcp::ReceiverReport();
482 report->From(ssrc_); 482 report->SetSenderSsrc(ssrc_);
483 for (auto it : report_blocks_) 483 for (auto it : report_blocks_)
484 report->WithReportBlock(it.second); 484 report->AddReportBlock(it.second);
485 485
486 report_blocks_.clear(); 486 report_blocks_.clear();
487 return std::unique_ptr<rtcp::RtcpPacket>(report); 487 return std::unique_ptr<rtcp::RtcpPacket>(report);
488 } 488 }
489 489
490 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildPLI(const RtcpContext& ctx) { 490 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildPLI(const RtcpContext& ctx) {
491 rtcp::Pli* pli = new rtcp::Pli(); 491 rtcp::Pli* pli = new rtcp::Pli();
492 pli->From(ssrc_); 492 pli->SetSenderSsrc(ssrc_);
493 pli->To(remote_ssrc_); 493 pli->SetMediaSsrc(remote_ssrc_);
494 494
495 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 495 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
496 "RTCPSender::PLI"); 496 "RTCPSender::PLI");
497 ++packet_type_counter_.pli_packets; 497 ++packet_type_counter_.pli_packets;
498 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_PLICount", 498 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_PLICount",
499 ssrc_, packet_type_counter_.pli_packets); 499 ssrc_, packet_type_counter_.pli_packets);
500 500
501 return std::unique_ptr<rtcp::RtcpPacket>(pli); 501 return std::unique_ptr<rtcp::RtcpPacket>(pli);
502 } 502 }
503 503
504 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildFIR(const RtcpContext& ctx) { 504 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildFIR(const RtcpContext& ctx) {
505 if (!ctx.repeat_) 505 if (!ctx.repeat_)
506 ++sequence_number_fir_; // Do not increase if repetition. 506 ++sequence_number_fir_; // Do not increase if repetition.
507 507
508 rtcp::Fir* fir = new rtcp::Fir(); 508 rtcp::Fir* fir = new rtcp::Fir();
509 fir->From(ssrc_); 509 fir->SetSenderSsrc(ssrc_);
510 fir->WithRequestTo(remote_ssrc_, sequence_number_fir_); 510 fir->AddRequestTo(remote_ssrc_, sequence_number_fir_);
511 511
512 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 512 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
513 "RTCPSender::FIR"); 513 "RTCPSender::FIR");
514 ++packet_type_counter_.fir_packets; 514 ++packet_type_counter_.fir_packets;
515 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_FIRCount", 515 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_FIRCount",
516 ssrc_, packet_type_counter_.fir_packets); 516 ssrc_, packet_type_counter_.fir_packets);
517 517
518 return std::unique_ptr<rtcp::RtcpPacket>(fir); 518 return std::unique_ptr<rtcp::RtcpPacket>(fir);
519 } 519 }
520 520
521 /* 521 /*
522 0 1 2 3 522 0 1 2 3
523 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 523 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
524 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 524 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
525 | First | Number | PictureID | 525 | First | Number | PictureID |
526 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 526 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
527 */ 527 */
528 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildSLI(const RtcpContext& ctx) { 528 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildSLI(const RtcpContext& ctx) {
529 rtcp::Sli* sli = new rtcp::Sli(); 529 rtcp::Sli* sli = new rtcp::Sli();
530 sli->From(ssrc_); 530 sli->SetSenderSsrc(ssrc_);
531 sli->To(remote_ssrc_); 531 sli->SetMediaSsrc(remote_ssrc_);
532 // Crop picture id to 6 least significant bits. 532 // Crop picture id to 6 least significant bits.
533 sli->WithPictureId(ctx.picture_id_ & 0x3F); 533 sli->AddPictureId(ctx.picture_id_ & 0x3F);
534 534
535 return std::unique_ptr<rtcp::RtcpPacket>(sli); 535 return std::unique_ptr<rtcp::RtcpPacket>(sli);
536 } 536 }
537 537
538 /* 538 /*
539 0 1 2 3 539 0 1 2 3
540 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 540 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
541 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 541 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
542 | PB |0| Payload Type| Native RPSI bit string | 542 | PB |0| Payload Type| Native RPSI bit string |
543 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 543 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
544 | defined per codec ... | Padding (0) | 544 | defined per codec ... | Padding (0) |
545 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 545 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
546 */ 546 */
547 /* 547 /*
548 * Note: not generic made for VP8 548 * Note: not generic made for VP8
549 */ 549 */
550 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildRPSI( 550 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildRPSI(
551 const RtcpContext& ctx) { 551 const RtcpContext& ctx) {
552 if (ctx.feedback_state_.send_payload_type == 0xFF) 552 if (ctx.feedback_state_.send_payload_type == 0xFF)
553 return nullptr; 553 return nullptr;
554 554
555 rtcp::Rpsi* rpsi = new rtcp::Rpsi(); 555 rtcp::Rpsi* rpsi = new rtcp::Rpsi();
556 rpsi->From(ssrc_); 556 rpsi->SetSenderSsrc(ssrc_);
557 rpsi->To(remote_ssrc_); 557 rpsi->SetMediaSsrc(remote_ssrc_);
558 rpsi->WithPayloadType(ctx.feedback_state_.send_payload_type); 558 rpsi->SetPayloadType(ctx.feedback_state_.send_payload_type);
559 rpsi->WithPictureId(ctx.picture_id_); 559 rpsi->SetPictureId(ctx.picture_id_);
560 560
561 return std::unique_ptr<rtcp::RtcpPacket>(rpsi); 561 return std::unique_ptr<rtcp::RtcpPacket>(rpsi);
562 } 562 }
563 563
564 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildREMB( 564 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildREMB(
565 const RtcpContext& ctx) { 565 const RtcpContext& ctx) {
566 rtcp::Remb* remb = new rtcp::Remb(); 566 rtcp::Remb* remb = new rtcp::Remb();
567 remb->From(ssrc_); 567 remb->SetSenderSsrc(ssrc_);
568 for (uint32_t ssrc : remb_ssrcs_) 568 remb->SetBitrateBps(remb_bitrate_);
569 remb->AppliesTo(ssrc); 569 remb->SetSsrcs(remb_ssrcs_);
570 remb->WithBitrateBps(remb_bitrate_);
571 570
572 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 571 TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
573 "RTCPSender::REMB"); 572 "RTCPSender::REMB");
574 573
575 return std::unique_ptr<rtcp::RtcpPacket>(remb); 574 return std::unique_ptr<rtcp::RtcpPacket>(remb);
576 } 575 }
577 576
578 void RTCPSender::SetTargetBitrate(unsigned int target_bitrate) { 577 void RTCPSender::SetTargetBitrate(unsigned int target_bitrate) {
579 rtc::CritScope lock(&critical_section_rtcp_sender_); 578 rtc::CritScope lock(&critical_section_rtcp_sender_);
580 tmmbr_send_bps_ = target_bitrate; 579 tmmbr_send_bps_ = target_bitrate;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 // Did not enter bounding set, no meaning to send this request. 618 // Did not enter bounding set, no meaning to send this request.
620 return nullptr; 619 return nullptr;
621 } 620 }
622 } 621 }
623 } 622 }
624 623
625 if (!tmmbr_send_bps_) 624 if (!tmmbr_send_bps_)
626 return nullptr; 625 return nullptr;
627 626
628 rtcp::Tmmbr* tmmbr = new rtcp::Tmmbr(); 627 rtcp::Tmmbr* tmmbr = new rtcp::Tmmbr();
629 tmmbr->From(ssrc_); 628 tmmbr->SetSenderSsrc(ssrc_);
630 rtcp::TmmbItem request; 629 rtcp::TmmbItem request;
631 request.set_ssrc(remote_ssrc_); 630 request.set_ssrc(remote_ssrc_);
632 request.set_bitrate_bps(tmmbr_send_bps_); 631 request.set_bitrate_bps(tmmbr_send_bps_);
633 request.set_packet_overhead(packet_oh_send_); 632 request.set_packet_overhead(packet_oh_send_);
634 tmmbr->WithTmmbr(request); 633 tmmbr->AddTmmbr(request);
635 634
636 return std::unique_ptr<rtcp::RtcpPacket>(tmmbr); 635 return std::unique_ptr<rtcp::RtcpPacket>(tmmbr);
637 } 636 }
638 637
639 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildTMMBN( 638 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildTMMBN(
640 const RtcpContext& ctx) { 639 const RtcpContext& ctx) {
641 rtcp::Tmmbn* tmmbn = new rtcp::Tmmbn(); 640 rtcp::Tmmbn* tmmbn = new rtcp::Tmmbn();
642 tmmbn->From(ssrc_); 641 tmmbn->SetSenderSsrc(ssrc_);
643 for (const rtcp::TmmbItem& tmmbr : tmmbn_to_send_) { 642 for (const rtcp::TmmbItem& tmmbr : tmmbn_to_send_) {
644 if (tmmbr.bitrate_bps() > 0) { 643 if (tmmbr.bitrate_bps() > 0) {
645 tmmbn->WithTmmbr(tmmbr); 644 tmmbn->AddTmmbr(tmmbr);
646 } 645 }
647 } 646 }
648 647
649 return std::unique_ptr<rtcp::RtcpPacket>(tmmbn); 648 return std::unique_ptr<rtcp::RtcpPacket>(tmmbn);
650 } 649 }
651 650
652 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildAPP(const RtcpContext& ctx) { 651 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildAPP(const RtcpContext& ctx) {
653 rtcp::App* app = new rtcp::App(); 652 rtcp::App* app = new rtcp::App();
654 app->From(ssrc_); 653 app->SetSsrc(ssrc_);
655 app->WithSubType(app_sub_type_); 654 app->SetSubType(app_sub_type_);
656 app->WithName(app_name_); 655 app->SetName(app_name_);
657 app->WithData(app_data_.get(), app_length_); 656 app->SetData(app_data_.get(), app_length_);
658 657
659 return std::unique_ptr<rtcp::RtcpPacket>(app); 658 return std::unique_ptr<rtcp::RtcpPacket>(app);
660 } 659 }
661 660
662 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildNACK( 661 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildNACK(
663 const RtcpContext& ctx) { 662 const RtcpContext& ctx) {
664 rtcp::Nack* nack = new rtcp::Nack(); 663 rtcp::Nack* nack = new rtcp::Nack();
665 nack->From(ssrc_); 664 nack->SetSenderSsrc(ssrc_);
666 nack->To(remote_ssrc_); 665 nack->SetMediaSsrc(remote_ssrc_);
667 nack->WithList(ctx.nack_list_, ctx.nack_size_); 666 nack->SetPacketIds(ctx.nack_list_, ctx.nack_size_);
668 667
669 // Report stats. 668 // Report stats.
670 NACKStringBuilder stringBuilder; 669 NACKStringBuilder stringBuilder;
671 for (int idx = 0; idx < ctx.nack_size_; ++idx) { 670 for (int idx = 0; idx < ctx.nack_size_; ++idx) {
672 stringBuilder.PushNACK(ctx.nack_list_[idx]); 671 stringBuilder.PushNACK(ctx.nack_list_[idx]);
673 nack_stats_.ReportRequest(ctx.nack_list_[idx]); 672 nack_stats_.ReportRequest(ctx.nack_list_[idx]);
674 } 673 }
675 packet_type_counter_.nack_requests = nack_stats_.requests(); 674 packet_type_counter_.nack_requests = nack_stats_.requests();
676 packet_type_counter_.unique_nack_requests = nack_stats_.unique_requests(); 675 packet_type_counter_.unique_nack_requests = nack_stats_.unique_requests();
677 676
678 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 677 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
679 "RTCPSender::NACK", "nacks", 678 "RTCPSender::NACK", "nacks",
680 TRACE_STR_COPY(stringBuilder.GetResult().c_str())); 679 TRACE_STR_COPY(stringBuilder.GetResult().c_str()));
681 ++packet_type_counter_.nack_packets; 680 ++packet_type_counter_.nack_packets;
682 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_NACKCount", 681 TRACE_COUNTER_ID1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), "RTCP_NACKCount",
683 ssrc_, packet_type_counter_.nack_packets); 682 ssrc_, packet_type_counter_.nack_packets);
684 683
685 return std::unique_ptr<rtcp::RtcpPacket>(nack); 684 return std::unique_ptr<rtcp::RtcpPacket>(nack);
686 } 685 }
687 686
688 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildBYE(const RtcpContext& ctx) { 687 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildBYE(const RtcpContext& ctx) {
689 rtcp::Bye* bye = new rtcp::Bye(); 688 rtcp::Bye* bye = new rtcp::Bye();
690 bye->From(ssrc_); 689 bye->SetSenderSsrc(ssrc_);
691 for (uint32_t csrc : csrcs_) 690 bye->SetCsrcs(csrcs_);
692 bye->WithCsrc(csrc);
693 691
694 return std::unique_ptr<rtcp::RtcpPacket>(bye); 692 return std::unique_ptr<rtcp::RtcpPacket>(bye);
695 } 693 }
696 694
697 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildReceiverReferenceTime( 695 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildReceiverReferenceTime(
698 const RtcpContext& ctx) { 696 const RtcpContext& ctx) {
699 697
700 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports(); 698 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports();
701 xr->From(ssrc_); 699 xr->SetSenderSsrc(ssrc_);
702 700
703 rtcp::Rrtr rrtr; 701 rtcp::Rrtr rrtr;
704 rrtr.WithNtp(NtpTime(ctx.ntp_sec_, ctx.ntp_frac_)); 702 rrtr.SetNtp(NtpTime(ctx.ntp_sec_, ctx.ntp_frac_));
705 703
706 xr->WithRrtr(rrtr); 704 xr->AddRrtr(rrtr);
707 705
708 // TODO(sprang): Merge XR report sending to contain all of RRTR, DLRR, VOIP? 706 // TODO(sprang): Merge XR report sending to contain all of RRTR, DLRR, VOIP?
709 707
710 return std::unique_ptr<rtcp::RtcpPacket>(xr); 708 return std::unique_ptr<rtcp::RtcpPacket>(xr);
711 } 709 }
712 710
713 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildDlrr( 711 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildDlrr(
714 const RtcpContext& ctx) { 712 const RtcpContext& ctx) {
715 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports(); 713 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports();
716 xr->From(ssrc_); 714 xr->SetSenderSsrc(ssrc_);
717 715
718 rtcp::Dlrr dlrr; 716 rtcp::Dlrr dlrr;
719 const RtcpReceiveTimeInfo& info = ctx.feedback_state_.last_xr_rr; 717 const RtcpReceiveTimeInfo& info = ctx.feedback_state_.last_xr_rr;
720 dlrr.WithDlrrItem(info.sourceSSRC, info.lastRR, info.delaySinceLastRR); 718 dlrr.AddDlrrItem(info.sourceSSRC, info.lastRR, info.delaySinceLastRR);
721 719
722 xr->WithDlrr(dlrr); 720 xr->AddDlrr(dlrr);
723 721
724 return std::unique_ptr<rtcp::RtcpPacket>(xr); 722 return std::unique_ptr<rtcp::RtcpPacket>(xr);
725 } 723 }
726 724
727 // TODO(sprang): Add a unit test for this, or remove if the code isn't used. 725 // TODO(sprang): Add a unit test for this, or remove if the code isn't used.
728 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildVoIPMetric( 726 std::unique_ptr<rtcp::RtcpPacket> RTCPSender::BuildVoIPMetric(
729 const RtcpContext& context) { 727 const RtcpContext& context) {
730 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports(); 728 rtcp::ExtendedReports* xr = new rtcp::ExtendedReports();
731 xr->From(ssrc_); 729 xr->SetSenderSsrc(ssrc_);
732 730
733 rtcp::VoipMetric voip; 731 rtcp::VoipMetric voip;
734 voip.To(remote_ssrc_); 732 voip.SetMediaSsrc(remote_ssrc_);
735 voip.WithVoipMetric(xr_voip_metric_); 733 voip.SetVoipMetric(xr_voip_metric_);
736 734
737 xr->WithVoipMetric(voip); 735 xr->AddVoipMetric(voip);
738 736
739 return std::unique_ptr<rtcp::RtcpPacket>(xr); 737 return std::unique_ptr<rtcp::RtcpPacket>(xr);
740 } 738 }
741 739
742 int32_t RTCPSender::SendRTCP(const FeedbackState& feedback_state, 740 int32_t RTCPSender::SendRTCP(const FeedbackState& feedback_state,
743 RTCPPacketType packetType, 741 RTCPPacketType packetType,
744 int32_t nack_size, 742 int32_t nack_size,
745 const uint16_t* nack_list, 743 const uint16_t* nack_list,
746 bool repeat, 744 bool repeat,
747 uint64_t pictureID) { 745 uint64_t pictureID) {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 RtcpStatistics stats; 896 RtcpStatistics stats;
899 if (!statistician->GetStatistics(&stats, true)) 897 if (!statistician->GetStatistics(&stats, true))
900 return false; 898 return false;
901 899
902 if (report_blocks_.size() >= RTCP_MAX_REPORT_BLOCKS) { 900 if (report_blocks_.size() >= RTCP_MAX_REPORT_BLOCKS) {
903 LOG(LS_WARNING) << "Too many report blocks."; 901 LOG(LS_WARNING) << "Too many report blocks.";
904 return false; 902 return false;
905 } 903 }
906 RTC_DCHECK(report_blocks_.find(ssrc) == report_blocks_.end()); 904 RTC_DCHECK(report_blocks_.find(ssrc) == report_blocks_.end());
907 rtcp::ReportBlock* block = &report_blocks_[ssrc]; 905 rtcp::ReportBlock* block = &report_blocks_[ssrc];
908 block->To(ssrc); 906 block->SetMediaSsrc(ssrc);
909 block->WithFractionLost(stats.fraction_lost); 907 block->SetFractionLost(stats.fraction_lost);
910 if (!block->WithCumulativeLost(stats.cumulative_lost)) { 908 if (!block->SetCumulativeLost(stats.cumulative_lost)) {
911 report_blocks_.erase(ssrc); 909 report_blocks_.erase(ssrc);
912 LOG(LS_WARNING) << "Cumulative lost is oversized."; 910 LOG(LS_WARNING) << "Cumulative lost is oversized.";
913 return false; 911 return false;
914 } 912 }
915 block->WithExtHighestSeqNum(stats.extended_max_sequence_number); 913 block->SetExtHighestSeqNum(stats.extended_max_sequence_number);
916 block->WithJitter(stats.jitter); 914 block->SetJitter(stats.jitter);
917 block->WithLastSr(feedback_state.remote_sr); 915 block->SetLastSr(feedback_state.remote_sr);
918 916
919 // TODO(sprang): Do we really need separate time stamps for each report? 917 // TODO(sprang): Do we really need separate time stamps for each report?
920 // Get our NTP as late as possible to avoid a race. 918 // Get our NTP as late as possible to avoid a race.
921 uint32_t ntp_secs; 919 uint32_t ntp_secs;
922 uint32_t ntp_frac; 920 uint32_t ntp_frac;
923 clock_->CurrentNtp(ntp_secs, ntp_frac); 921 clock_->CurrentNtp(ntp_secs, ntp_frac);
924 922
925 // Delay since last received report. 923 // Delay since last received report.
926 if ((feedback_state.last_rr_ntp_secs != 0) || 924 if ((feedback_state.last_rr_ntp_secs != 0) ||
927 (feedback_state.last_rr_ntp_frac != 0)) { 925 (feedback_state.last_rr_ntp_frac != 0)) {
928 // Get the 16 lowest bits of seconds and the 16 highest bits of fractions. 926 // Get the 16 lowest bits of seconds and the 16 highest bits of fractions.
929 uint32_t now = ntp_secs & 0x0000FFFF; 927 uint32_t now = ntp_secs & 0x0000FFFF;
930 now <<= 16; 928 now <<= 16;
931 now += (ntp_frac & 0xffff0000) >> 16; 929 now += (ntp_frac & 0xffff0000) >> 16;
932 930
933 uint32_t receiveTime = feedback_state.last_rr_ntp_secs & 0x0000FFFF; 931 uint32_t receiveTime = feedback_state.last_rr_ntp_secs & 0x0000FFFF;
934 receiveTime <<= 16; 932 receiveTime <<= 16;
935 receiveTime += (feedback_state.last_rr_ntp_frac & 0xffff0000) >> 16; 933 receiveTime += (feedback_state.last_rr_ntp_frac & 0xffff0000) >> 16;
936 934
937 block->WithDelayLastSr(now - receiveTime); 935 block->SetDelayLastSr(now - receiveTime);
938 } 936 }
939 return true; 937 return true;
940 } 938 }
941 939
942 void RTCPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) { 940 void RTCPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) {
943 RTC_DCHECK_LE(csrcs.size(), static_cast<size_t>(kRtpCsrcSize)); 941 RTC_DCHECK_LE(csrcs.size(), static_cast<size_t>(kRtpCsrcSize));
944 rtc::CritScope lock(&critical_section_rtcp_sender_); 942 rtc::CritScope lock(&critical_section_rtcp_sender_);
945 csrcs_ = csrcs; 943 csrcs_ = csrcs;
946 } 944 }
947 945
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 // but we can't because of an incorrect warning (C4822) in MVS 2013. 1042 // but we can't because of an incorrect warning (C4822) in MVS 2013.
1045 } sender(transport_, event_log_); 1043 } sender(transport_, event_log_);
1046 1044
1047 RTC_DCHECK_LE(max_payload_length_, static_cast<size_t>(IP_PACKET_SIZE)); 1045 RTC_DCHECK_LE(max_payload_length_, static_cast<size_t>(IP_PACKET_SIZE));
1048 uint8_t buffer[IP_PACKET_SIZE]; 1046 uint8_t buffer[IP_PACKET_SIZE];
1049 return packet.BuildExternalBuffer(buffer, max_payload_length_, &sender) && 1047 return packet.BuildExternalBuffer(buffer, max_payload_length_, &sender) &&
1050 !sender.send_failure_; 1048 !sender.send_failure_;
1051 } 1049 }
1052 1050
1053 } // namespace webrtc 1051 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc ('k') | webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698