Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 PacedSender* paced_sender, | 90 PacedSender* paced_sender, |
| 91 PacketRouter* packet_router, | 91 PacketRouter* packet_router, |
| 92 size_t max_rtp_streams, | 92 size_t max_rtp_streams, |
| 93 bool sender) | 93 bool sender) |
| 94 : number_of_cores_(number_of_cores), | 94 : number_of_cores_(number_of_cores), |
| 95 sender_(sender), | 95 sender_(sender), |
| 96 module_process_thread_(module_process_thread), | 96 module_process_thread_(module_process_thread), |
| 97 send_payload_router_(send_payload_router), | 97 send_payload_router_(send_payload_router), |
| 98 vcm_protection_callback_(new ViEChannelProtectionCallback(this)), | 98 vcm_protection_callback_(new ViEChannelProtectionCallback(this)), |
| 99 vcm_(vcm), | 99 vcm_(vcm), |
| 100 vie_receiver_(vcm_, remote_bitrate_estimator, this), | 100 vie_receiver_(vcm_, remote_bitrate_estimator, this), |
|
stefan-webrtc
2016/02/05 14:35:57
I wonder if it would make sense to instantiate the
pbos-webrtc
2016/02/05 15:15:51
I think that makes sense in a follow-up, right now
| |
| 101 vie_sync_(vcm_), | 101 vie_sync_(vcm_), |
| 102 stats_observer_(new ChannelStatsObserver(this)), | 102 stats_observer_(new ChannelStatsObserver(this)), |
| 103 receive_stats_callback_(nullptr), | 103 receive_stats_callback_(nullptr), |
| 104 incoming_video_stream_(nullptr), | 104 incoming_video_stream_(nullptr), |
| 105 intra_frame_observer_(intra_frame_observer), | 105 intra_frame_observer_(intra_frame_observer), |
| 106 rtt_stats_(rtt_stats), | 106 rtt_stats_(rtt_stats), |
| 107 paced_sender_(paced_sender), | 107 paced_sender_(paced_sender), |
| 108 packet_router_(packet_router), | 108 packet_router_(packet_router), |
| 109 bandwidth_observer_(bandwidth_observer), | 109 bandwidth_observer_(bandwidth_observer), |
| 110 transport_feedback_observer_(transport_feedback_observer), | 110 transport_feedback_observer_(transport_feedback_observer), |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 410 // Register new active modules. | 410 // Register new active modules. |
| 411 for (size_t i = num_prev_active_modules; i < num_active_modules; ++i) { | 411 for (size_t i = num_prev_active_modules; i < num_active_modules; ++i) { |
| 412 module_process_thread_->RegisterModule(rtp_rtcp_modules_[i]); | 412 module_process_thread_->RegisterModule(rtp_rtcp_modules_[i]); |
| 413 packet_router_->AddRtpModule(rtp_rtcp_modules_[i], sender_); | 413 packet_router_->AddRtpModule(rtp_rtcp_modules_[i], sender_); |
| 414 } | 414 } |
| 415 return 0; | 415 return 0; |
| 416 } | 416 } |
| 417 | 417 |
| 418 int32_t ViEChannel::SetReceiveCodec(const VideoCodec& video_codec) { | 418 int32_t ViEChannel::SetReceiveCodec(const VideoCodec& video_codec) { |
| 419 RTC_DCHECK(!sender_); | 419 RTC_DCHECK(!sender_); |
| 420 if (!vie_receiver_.SetReceiveCodec(video_codec)) { | 420 if (!vie_receiver_.SetReceiveCodec(video_codec)) { |
|
stefan-webrtc
2016/02/05 14:35:56
Should be able to move this out too
pbos-webrtc
2016/02/05 15:15:51
Done.
| |
| 421 return -1; | 421 return -1; |
| 422 } | 422 } |
| 423 | 423 |
| 424 if (video_codec.codecType != kVideoCodecRED && | 424 if (video_codec.codecType != kVideoCodecRED && |
| 425 video_codec.codecType != kVideoCodecULPFEC) { | 425 video_codec.codecType != kVideoCodecULPFEC) { |
| 426 // Register codec type with VCM, but do not register RED or ULPFEC. | 426 // Register codec type with VCM, but do not register RED or ULPFEC. |
| 427 if (vcm_->RegisterReceiveCodec(&video_codec, number_of_cores_, false) != | 427 if (vcm_->RegisterReceiveCodec(&video_codec, number_of_cores_, false) != |
| 428 VCM_OK) { | 428 VCM_OK) { |
| 429 return -1; | 429 return -1; |
| 430 } | 430 } |
| 431 } | 431 } |
| 432 return 0; | 432 return 0; |
| 433 } | 433 } |
| 434 | 434 |
| 435 void ViEChannel::RegisterExternalDecoder(const uint8_t pl_type, | |
| 436 VideoDecoder* decoder) { | |
| 437 RTC_DCHECK(!sender_); | |
| 438 vcm_->RegisterExternalDecoder(decoder, pl_type); | |
| 439 } | |
| 440 | |
| 441 int32_t ViEChannel::ReceiveCodecStatistics(uint32_t* num_key_frames, | |
| 442 uint32_t* num_delta_frames) { | |
| 443 rtc::CritScope lock(&crit_); | |
| 444 *num_key_frames = receive_frame_counts_.key_frames; | |
| 445 *num_delta_frames = receive_frame_counts_.delta_frames; | |
| 446 return 0; | |
| 447 } | |
| 448 | |
| 449 void ViEChannel::SetExpectedRenderDelay(int delay_ms) { | |
| 450 RTC_DCHECK(!sender_); | |
| 451 vcm_->SetRenderDelay(delay_ms); | |
| 452 } | |
| 453 | |
| 454 void ViEChannel::SetRTCPMode(const RtcpMode rtcp_mode) { | 435 void ViEChannel::SetRTCPMode(const RtcpMode rtcp_mode) { |
| 436 RTC_DCHECK(sender_); | |
| 455 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 437 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 456 rtp_rtcp->SetRTCPStatus(rtcp_mode); | 438 rtp_rtcp->SetRTCPStatus(rtcp_mode); |
| 457 } | 439 } |
| 458 | 440 |
| 459 void ViEChannel::SetProtectionMode(bool enable_nack, | 441 void ViEChannel::SetProtectionMode(bool enable_nack, |
| 460 bool enable_fec, | 442 bool enable_fec, |
| 461 int payload_type_red, | 443 int payload_type_red, |
| 462 int payload_type_fec) { | 444 int payload_type_fec) { |
| 463 // Validate payload types. | 445 // Validate payload types. |
| 464 if (enable_fec) { | 446 if (enable_fec) { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 573 return 0; | 555 return 0; |
| 574 // Enable the extension. | 556 // Enable the extension. |
| 575 int error = 0; | 557 int error = 0; |
| 576 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 558 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 577 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( | 559 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( |
| 578 kRtpExtensionTransmissionTimeOffset, id); | 560 kRtpExtensionTransmissionTimeOffset, id); |
| 579 } | 561 } |
| 580 return error; | 562 return error; |
| 581 } | 563 } |
| 582 | 564 |
| 583 int ViEChannel::SetReceiveTimestampOffsetStatus(bool enable, int id) { | |
| 584 return vie_receiver_.SetReceiveTimestampOffsetStatus(enable, id) ? 0 : -1; | |
| 585 } | |
| 586 | |
| 587 int ViEChannel::SetSendAbsoluteSendTimeStatus(bool enable, int id) { | 565 int ViEChannel::SetSendAbsoluteSendTimeStatus(bool enable, int id) { |
| 588 // Disable any previous registrations of this extension to avoid errors. | 566 // Disable any previous registrations of this extension to avoid errors. |
| 589 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 567 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 590 rtp_rtcp->DeregisterSendRtpHeaderExtension(kRtpExtensionAbsoluteSendTime); | 568 rtp_rtcp->DeregisterSendRtpHeaderExtension(kRtpExtensionAbsoluteSendTime); |
| 591 if (!enable) | 569 if (!enable) |
| 592 return 0; | 570 return 0; |
| 593 // Enable the extension. | 571 // Enable the extension. |
| 594 int error = 0; | 572 int error = 0; |
| 595 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 573 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 596 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( | 574 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( |
| 597 kRtpExtensionAbsoluteSendTime, id); | 575 kRtpExtensionAbsoluteSendTime, id); |
| 598 } | 576 } |
| 599 return error; | 577 return error; |
| 600 } | 578 } |
| 601 | 579 |
| 602 int ViEChannel::SetReceiveAbsoluteSendTimeStatus(bool enable, int id) { | |
| 603 return vie_receiver_.SetReceiveAbsoluteSendTimeStatus(enable, id) ? 0 : -1; | |
| 604 } | |
| 605 | |
| 606 int ViEChannel::SetSendVideoRotationStatus(bool enable, int id) { | 580 int ViEChannel::SetSendVideoRotationStatus(bool enable, int id) { |
| 607 // Disable any previous registrations of this extension to avoid errors. | 581 // Disable any previous registrations of this extension to avoid errors. |
| 608 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 582 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 609 rtp_rtcp->DeregisterSendRtpHeaderExtension(kRtpExtensionVideoRotation); | 583 rtp_rtcp->DeregisterSendRtpHeaderExtension(kRtpExtensionVideoRotation); |
| 610 if (!enable) | 584 if (!enable) |
| 611 return 0; | 585 return 0; |
| 612 // Enable the extension. | 586 // Enable the extension. |
| 613 int error = 0; | 587 int error = 0; |
| 614 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 588 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 615 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( | 589 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( |
| 616 kRtpExtensionVideoRotation, id); | 590 kRtpExtensionVideoRotation, id); |
| 617 } | 591 } |
| 618 return error; | 592 return error; |
| 619 } | 593 } |
| 620 | 594 |
| 621 int ViEChannel::SetReceiveVideoRotationStatus(bool enable, int id) { | |
| 622 return vie_receiver_.SetReceiveVideoRotationStatus(enable, id) ? 0 : -1; | |
| 623 } | |
| 624 | |
| 625 int ViEChannel::SetSendTransportSequenceNumber(bool enable, int id) { | 595 int ViEChannel::SetSendTransportSequenceNumber(bool enable, int id) { |
| 596 RTC_DCHECK(sender_); | |
| 626 // Disable any previous registrations of this extension to avoid errors. | 597 // Disable any previous registrations of this extension to avoid errors. |
| 627 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 598 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 628 rtp_rtcp->DeregisterSendRtpHeaderExtension( | 599 rtp_rtcp->DeregisterSendRtpHeaderExtension( |
| 629 kRtpExtensionTransportSequenceNumber); | 600 kRtpExtensionTransportSequenceNumber); |
| 630 } | 601 } |
| 631 if (!enable) | 602 if (!enable) |
| 632 return 0; | 603 return 0; |
| 633 // Enable the extension. | 604 // Enable the extension. |
| 634 int error = 0; | 605 int error = 0; |
| 635 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 606 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 636 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( | 607 error |= rtp_rtcp->RegisterSendRtpHeaderExtension( |
| 637 kRtpExtensionTransportSequenceNumber, id); | 608 kRtpExtensionTransportSequenceNumber, id); |
| 638 } | 609 } |
| 639 return error; | 610 return error; |
| 640 } | 611 } |
| 641 | 612 |
| 642 int ViEChannel::SetReceiveTransportSequenceNumber(bool enable, int id) { | |
| 643 return vie_receiver_.SetReceiveTransportSequenceNumber(enable, id) ? 0 : -1; | |
| 644 } | |
| 645 | |
| 646 void ViEChannel::SetRtcpXrRrtrStatus(bool enable) { | |
| 647 rtp_rtcp_modules_[0]->SetRtcpXrRrtrStatus(enable); | |
| 648 } | |
| 649 | |
| 650 void ViEChannel::EnableTMMBR(bool enable) { | |
| 651 rtp_rtcp_modules_[0]->SetTMMBRStatus(enable); | |
| 652 } | |
| 653 | |
| 654 int32_t ViEChannel::SetSSRC(const uint32_t SSRC, | 613 int32_t ViEChannel::SetSSRC(const uint32_t SSRC, |
| 655 const StreamType usage, | 614 const StreamType usage, |
| 656 const uint8_t simulcast_idx) { | 615 const uint8_t simulcast_idx) { |
| 616 RTC_DCHECK(sender_); | |
| 657 RtpRtcp* rtp_rtcp = rtp_rtcp_modules_[simulcast_idx]; | 617 RtpRtcp* rtp_rtcp = rtp_rtcp_modules_[simulcast_idx]; |
| 658 if (usage == kViEStreamTypeRtx) { | 618 if (usage == kViEStreamTypeRtx) { |
| 659 rtp_rtcp->SetRtxSsrc(SSRC); | 619 rtp_rtcp->SetRtxSsrc(SSRC); |
| 660 } else { | 620 } else { |
| 661 rtp_rtcp->SetSSRC(SSRC); | 621 rtp_rtcp->SetSSRC(SSRC); |
| 662 } | 622 } |
| 663 return 0; | 623 return 0; |
| 664 } | 624 } |
| 665 | 625 |
| 666 int32_t ViEChannel::SetRemoteSSRCType(const StreamType usage, | |
| 667 const uint32_t SSRC) { | |
| 668 vie_receiver_.SetRtxSsrc(SSRC); | |
| 669 return 0; | |
| 670 } | |
| 671 | |
| 672 int32_t ViEChannel::GetLocalSSRC(uint8_t idx, unsigned int* ssrc) { | 626 int32_t ViEChannel::GetLocalSSRC(uint8_t idx, unsigned int* ssrc) { |
| 673 RTC_DCHECK_LE(idx, rtp_rtcp_modules_.size()); | 627 RTC_DCHECK_LE(idx, rtp_rtcp_modules_.size()); |
| 674 *ssrc = rtp_rtcp_modules_[idx]->SSRC(); | 628 *ssrc = rtp_rtcp_modules_[idx]->SSRC(); |
| 675 return 0; | 629 return 0; |
| 676 } | 630 } |
| 677 | 631 |
| 678 uint32_t ViEChannel::GetRemoteSSRC() { | 632 uint32_t ViEChannel::GetRemoteSSRC() { |
| 633 RTC_DCHECK(sender_); | |
| 679 return vie_receiver_.GetRemoteSsrc(); | 634 return vie_receiver_.GetRemoteSsrc(); |
| 680 } | 635 } |
| 681 | 636 |
| 682 int ViEChannel::SetRtxSendPayloadType(int payload_type, | 637 int ViEChannel::SetRtxSendPayloadType(int payload_type, |
| 683 int associated_payload_type) { | 638 int associated_payload_type) { |
| 684 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 639 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 685 rtp_rtcp->SetRtxSendPayloadType(payload_type, associated_payload_type); | 640 rtp_rtcp->SetRtxSendPayloadType(payload_type, associated_payload_type); |
| 686 SetRtxSendStatus(true); | 641 SetRtxSendStatus(true); |
| 687 return 0; | 642 return 0; |
| 688 } | 643 } |
| 689 | 644 |
| 690 void ViEChannel::SetRtxSendStatus(bool enable) { | 645 void ViEChannel::SetRtxSendStatus(bool enable) { |
| 691 int rtx_settings = | 646 int rtx_settings = |
| 692 enable ? kRtxRetransmitted | kRtxRedundantPayloads : kRtxOff; | 647 enable ? kRtxRetransmitted | kRtxRedundantPayloads : kRtxOff; |
| 693 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 648 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 694 rtp_rtcp->SetRtxSendStatus(rtx_settings); | 649 rtp_rtcp->SetRtxSendStatus(rtx_settings); |
| 695 } | 650 } |
| 696 | 651 |
| 697 void ViEChannel::SetRtxReceivePayloadType(int payload_type, | 652 void ViEChannel::SetRtxReceivePayloadType(int payload_type, |
| 698 int associated_payload_type) { | 653 int associated_payload_type) { |
| 654 RTC_DCHECK(!sender_); | |
| 699 vie_receiver_.SetRtxPayloadType(payload_type, associated_payload_type); | 655 vie_receiver_.SetRtxPayloadType(payload_type, associated_payload_type); |
|
stefan-webrtc
2016/02/05 14:35:57
Move this out instead?
pbos-webrtc
2016/02/05 15:15:51
Done.
| |
| 700 } | 656 } |
| 701 | 657 |
| 702 void ViEChannel::SetUseRtxPayloadMappingOnRestore(bool val) { | 658 void ViEChannel::SetUseRtxPayloadMappingOnRestore(bool val) { |
| 703 vie_receiver_.SetUseRtxPayloadMappingOnRestore(val); | 659 vie_receiver_.SetUseRtxPayloadMappingOnRestore(val); |
|
stefan-webrtc
2016/02/05 14:35:56
Same here
pbos-webrtc
2016/02/05 15:15:51
Done.
| |
| 704 } | 660 } |
| 705 | 661 |
| 706 void ViEChannel::SetRtpStateForSsrc(uint32_t ssrc, const RtpState& rtp_state) { | 662 void ViEChannel::SetRtpStateForSsrc(uint32_t ssrc, const RtpState& rtp_state) { |
| 707 RTC_DCHECK(!rtp_rtcp_modules_[0]->Sending()); | 663 RTC_DCHECK(!rtp_rtcp_modules_[0]->Sending()); |
| 708 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { | 664 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) { |
| 709 if (rtp_rtcp->SetRtpStateForSsrc(ssrc, rtp_state)) | 665 if (rtp_rtcp->SetRtpStateForSsrc(ssrc, rtp_state)) |
| 710 return; | 666 return; |
| 711 } | 667 } |
| 712 } | 668 } |
| 713 | 669 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 831 } | 787 } |
| 832 | 788 |
| 833 void ViEChannel::RegisterSendChannelRtpStatisticsCallback( | 789 void ViEChannel::RegisterSendChannelRtpStatisticsCallback( |
| 834 StreamDataCountersCallback* callback) { | 790 StreamDataCountersCallback* callback) { |
| 835 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 791 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 836 rtp_rtcp->RegisterSendChannelRtpStatisticsCallback(callback); | 792 rtp_rtcp->RegisterSendChannelRtpStatisticsCallback(callback); |
| 837 } | 793 } |
| 838 | 794 |
| 839 void ViEChannel::RegisterReceiveChannelRtpStatisticsCallback( | 795 void ViEChannel::RegisterReceiveChannelRtpStatisticsCallback( |
| 840 StreamDataCountersCallback* callback) { | 796 StreamDataCountersCallback* callback) { |
| 841 vie_receiver_.GetReceiveStatistics()->RegisterRtpStatisticsCallback(callback); | 797 vie_receiver_.GetReceiveStatistics()->RegisterRtpStatisticsCallback(callback); |
|
stefan-webrtc
2016/02/05 14:35:57
Maybe move out too?
pbos-webrtc
2016/02/05 15:15:51
Done.
| |
| 842 } | 798 } |
| 843 | 799 |
| 844 void ViEChannel::GetSendRtcpPacketTypeCounter( | 800 void ViEChannel::GetSendRtcpPacketTypeCounter( |
| 845 RtcpPacketTypeCounter* packet_counter) const { | 801 RtcpPacketTypeCounter* packet_counter) const { |
| 846 std::map<uint32_t, RtcpPacketTypeCounter> counter_map = | 802 std::map<uint32_t, RtcpPacketTypeCounter> counter_map = |
| 847 rtcp_packet_type_counter_observer_.GetPacketTypeCounterMap(); | 803 rtcp_packet_type_counter_observer_.GetPacketTypeCounterMap(); |
| 848 | 804 |
| 849 RtcpPacketTypeCounter counter; | 805 RtcpPacketTypeCounter counter; |
| 850 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 806 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 851 counter.Add(counter_map[rtp_rtcp->SSRC()]); | 807 counter.Add(counter_map[rtp_rtcp->SSRC()]); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 910 return rtp_rtcp_modules_[0]->Sending(); | 866 return rtp_rtcp_modules_[0]->Sending(); |
| 911 } | 867 } |
| 912 | 868 |
| 913 void ViEChannel::StartReceive() { | 869 void ViEChannel::StartReceive() { |
| 914 if (!sender_) | 870 if (!sender_) |
| 915 StartDecodeThread(); | 871 StartDecodeThread(); |
| 916 vie_receiver_.StartReceive(); | 872 vie_receiver_.StartReceive(); |
| 917 } | 873 } |
| 918 | 874 |
| 919 void ViEChannel::StopReceive() { | 875 void ViEChannel::StopReceive() { |
| 920 vie_receiver_.StopReceive(); | 876 vie_receiver_.StopReceive(); |
|
stefan-webrtc
2016/02/05 14:35:56
Should we call these from outside?
pbos-webrtc
2016/02/05 15:15:51
Not until we've moved out the decoder thread (foll
| |
| 921 if (!sender_) | 877 if (!sender_) |
| 922 StopDecodeThread(); | 878 StopDecodeThread(); |
| 923 } | 879 } |
| 924 | 880 |
| 925 int32_t ViEChannel::ReceivedRTPPacket(const void* rtp_packet, | |
| 926 size_t rtp_packet_length, | |
| 927 const PacketTime& packet_time) { | |
| 928 return vie_receiver_.ReceivedRTPPacket( | |
| 929 rtp_packet, rtp_packet_length, packet_time); | |
| 930 } | |
| 931 | |
| 932 int32_t ViEChannel::ReceivedRTCPPacket(const void* rtcp_packet, | 881 int32_t ViEChannel::ReceivedRTCPPacket(const void* rtcp_packet, |
| 933 size_t rtcp_packet_length) { | 882 size_t rtcp_packet_length) { |
| 934 return vie_receiver_.ReceivedRTCPPacket(rtcp_packet, rtcp_packet_length); | 883 RTC_DCHECK(sender_); |
| 884 return vie_receiver_.DeliverRtcp( | |
| 885 reinterpret_cast<const uint8_t*>(rtcp_packet), rtcp_packet_length) | |
| 886 ? 0 | |
| 887 : -1; | |
| 935 } | 888 } |
| 936 | 889 |
| 937 int32_t ViEChannel::SetMTU(uint16_t mtu) { | 890 int32_t ViEChannel::SetMTU(uint16_t mtu) { |
| 891 RTC_DCHECK(sender_); | |
| 938 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 892 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
| 939 rtp_rtcp->SetMaxTransferUnit(mtu); | 893 rtp_rtcp->SetMaxTransferUnit(mtu); |
| 940 return 0; | 894 return 0; |
| 941 } | 895 } |
| 942 | 896 |
| 943 RtpRtcp* ViEChannel::rtp_rtcp() { | 897 RtpRtcp* ViEChannel::rtp_rtcp() { |
| 944 return rtp_rtcp_modules_[0]; | 898 return rtp_rtcp_modules_[0]; |
| 945 } | 899 } |
| 946 | 900 |
| 901 ViEReceiver* ViEChannel::vie_receiver() { | |
| 902 return &vie_receiver_; | |
| 903 } | |
| 904 | |
| 947 VCMProtectionCallback* ViEChannel::vcm_protection_callback() { | 905 VCMProtectionCallback* ViEChannel::vcm_protection_callback() { |
| 948 return vcm_protection_callback_.get(); | 906 return vcm_protection_callback_.get(); |
| 949 } | 907 } |
| 950 | 908 |
| 951 CallStatsObserver* ViEChannel::GetStatsObserver() { | 909 CallStatsObserver* ViEChannel::GetStatsObserver() { |
| 952 return stats_observer_.get(); | 910 return stats_observer_.get(); |
| 953 } | 911 } |
| 954 | 912 |
| 955 // Do not acquire the lock of |vcm_| in this function. Decode callback won't | 913 // Do not acquire the lock of |vcm_| in this function. Decode callback won't |
| 956 // necessarily be called from the decoding thread. The decoding thread may have | 914 // necessarily be called from the decoding thread. The decoding thread may have |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1153 vie_receiver_.GetRtpReceiver()); | 1111 vie_receiver_.GetRtpReceiver()); |
| 1154 } | 1112 } |
| 1155 | 1113 |
| 1156 int32_t ViEChannel::VoiceChannel() { | 1114 int32_t ViEChannel::VoiceChannel() { |
| 1157 RTC_DCHECK(!sender_); | 1115 RTC_DCHECK(!sender_); |
| 1158 return vie_sync_.VoiceChannel(); | 1116 return vie_sync_.VoiceChannel(); |
| 1159 } | 1117 } |
| 1160 | 1118 |
| 1161 void ViEChannel::RegisterPreRenderCallback( | 1119 void ViEChannel::RegisterPreRenderCallback( |
| 1162 I420FrameCallback* pre_render_callback) { | 1120 I420FrameCallback* pre_render_callback) { |
| 1121 RTC_DCHECK(!sender_); | |
| 1163 rtc::CritScope lock(&crit_); | 1122 rtc::CritScope lock(&crit_); |
| 1164 pre_render_callback_ = pre_render_callback; | 1123 pre_render_callback_ = pre_render_callback; |
| 1165 } | 1124 } |
| 1166 | 1125 |
| 1167 void ViEChannel::RegisterPreDecodeImageCallback( | |
| 1168 EncodedImageCallback* pre_decode_callback) { | |
| 1169 RTC_DCHECK(!sender_); | |
| 1170 vcm_->RegisterPreDecodeImageCallback(pre_decode_callback); | |
| 1171 } | |
| 1172 | |
| 1173 // TODO(pbos): Remove as soon as audio can handle a changing payload type | 1126 // TODO(pbos): Remove as soon as audio can handle a changing payload type |
| 1174 // without this callback. | 1127 // without this callback. |
| 1175 int32_t ViEChannel::OnInitializeDecoder( | 1128 int32_t ViEChannel::OnInitializeDecoder( |
| 1176 const int8_t payload_type, | 1129 const int8_t payload_type, |
| 1177 const char payload_name[RTP_PAYLOAD_NAME_SIZE], | 1130 const char payload_name[RTP_PAYLOAD_NAME_SIZE], |
| 1178 const int frequency, | 1131 const int frequency, |
| 1179 const size_t channels, | 1132 const size_t channels, |
| 1180 const uint32_t rate) { | 1133 const uint32_t rate) { |
| 1181 RTC_NOTREACHED(); | 1134 RTC_NOTREACHED(); |
| 1182 return 0; | 1135 return 0; |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 1198 rtc::CritScope lock(&crit_); | 1151 rtc::CritScope lock(&crit_); |
| 1199 receive_stats_callback_ = receive_statistics_proxy; | 1152 receive_stats_callback_ = receive_statistics_proxy; |
| 1200 } | 1153 } |
| 1201 | 1154 |
| 1202 void ViEChannel::SetIncomingVideoStream( | 1155 void ViEChannel::SetIncomingVideoStream( |
| 1203 IncomingVideoStream* incoming_video_stream) { | 1156 IncomingVideoStream* incoming_video_stream) { |
| 1204 rtc::CritScope lock(&crit_); | 1157 rtc::CritScope lock(&crit_); |
| 1205 incoming_video_stream_ = incoming_video_stream; | 1158 incoming_video_stream_ = incoming_video_stream; |
| 1206 } | 1159 } |
| 1207 } // namespace webrtc | 1160 } // namespace webrtc |
| OLD | NEW |