OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 LOG(LS_INFO) << "WebRtcVideoEngine2::~WebRtcVideoEngine2"; | 513 LOG(LS_INFO) << "WebRtcVideoEngine2::~WebRtcVideoEngine2"; |
514 } | 514 } |
515 | 515 |
516 void WebRtcVideoEngine2::Init() { | 516 void WebRtcVideoEngine2::Init() { |
517 LOG(LS_INFO) << "WebRtcVideoEngine2::Init"; | 517 LOG(LS_INFO) << "WebRtcVideoEngine2::Init"; |
518 initialized_ = true; | 518 initialized_ = true; |
519 } | 519 } |
520 | 520 |
521 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel( | 521 WebRtcVideoChannel2* WebRtcVideoEngine2::CreateChannel( |
522 webrtc::Call* call, | 522 webrtc::Call* call, |
523 const VideoOptions& options) { | 523 const MediaChannelOptions& options, |
| 524 const VideoOptions& video_options) { |
524 RTC_DCHECK(initialized_); | 525 RTC_DCHECK(initialized_); |
525 LOG(LS_INFO) << "CreateChannel. Options: " << options.ToString(); | 526 LOG(LS_INFO) << "CreateChannel. Options: " << video_options.ToString(); |
526 return new WebRtcVideoChannel2(call, options, video_codecs_, | 527 return new WebRtcVideoChannel2(call, options, video_options, video_codecs_, |
527 external_encoder_factory_, external_decoder_factory_); | 528 external_encoder_factory_, |
| 529 external_decoder_factory_); |
528 } | 530 } |
529 | 531 |
530 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { | 532 const std::vector<VideoCodec>& WebRtcVideoEngine2::codecs() const { |
531 return video_codecs_; | 533 return video_codecs_; |
532 } | 534 } |
533 | 535 |
534 RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const { | 536 RtpCapabilities WebRtcVideoEngine2::GetCapabilities() const { |
535 RtpCapabilities capabilities; | 537 RtpCapabilities capabilities; |
536 capabilities.header_extensions.push_back( | 538 capabilities.header_extensions.push_back( |
537 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, | 539 RtpHeaderExtension(kRtpTimestampOffsetHeaderExtension, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 0); | 634 0); |
633 | 635 |
634 AddDefaultFeedbackParams(&codec); | 636 AddDefaultFeedbackParams(&codec); |
635 supported_codecs.push_back(codec); | 637 supported_codecs.push_back(codec); |
636 } | 638 } |
637 return supported_codecs; | 639 return supported_codecs; |
638 } | 640 } |
639 | 641 |
640 WebRtcVideoChannel2::WebRtcVideoChannel2( | 642 WebRtcVideoChannel2::WebRtcVideoChannel2( |
641 webrtc::Call* call, | 643 webrtc::Call* call, |
642 const VideoOptions& options, | 644 const MediaChannelOptions& options, |
| 645 const VideoOptions& video_options, |
643 const std::vector<VideoCodec>& recv_codecs, | 646 const std::vector<VideoCodec>& recv_codecs, |
644 WebRtcVideoEncoderFactory* external_encoder_factory, | 647 WebRtcVideoEncoderFactory* external_encoder_factory, |
645 WebRtcVideoDecoderFactory* external_decoder_factory) | 648 WebRtcVideoDecoderFactory* external_decoder_factory) |
646 : call_(call), | 649 : VideoMediaChannel(options), |
| 650 call_(call), |
647 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), | 651 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), |
648 external_encoder_factory_(external_encoder_factory), | 652 external_encoder_factory_(external_encoder_factory), |
649 external_decoder_factory_(external_decoder_factory) { | 653 external_decoder_factory_(external_decoder_factory) { |
650 RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 654 RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
651 SetDefaultOptions(); | 655 SetDefaultOptions(); |
652 options_.SetAll(options); | 656 options_.SetAll(video_options); |
653 if (options_.cpu_overuse_detection) | 657 if (options_.cpu_overuse_detection) |
654 signal_cpu_adaptation_ = *options_.cpu_overuse_detection; | 658 signal_cpu_adaptation_ = *options_.cpu_overuse_detection; |
655 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; | 659 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; |
656 sending_ = false; | 660 sending_ = false; |
657 default_send_ssrc_ = 0; | 661 default_send_ssrc_ = 0; |
658 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); | 662 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); |
659 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); | 663 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); |
660 } | 664 } |
661 | 665 |
662 void WebRtcVideoChannel2::SetDefaultOptions() { | 666 void WebRtcVideoChannel2::SetDefaultOptions() { |
663 options_.cpu_overuse_detection = rtc::Optional<bool>(true); | 667 options_.cpu_overuse_detection = rtc::Optional<bool>(true); |
664 options_.dscp = rtc::Optional<bool>(false); | |
665 options_.suspend_below_min_bitrate = rtc::Optional<bool>(false); | 668 options_.suspend_below_min_bitrate = rtc::Optional<bool>(false); |
666 options_.screencast_min_bitrate_kbps = rtc::Optional<int>(0); | 669 options_.screencast_min_bitrate_kbps = rtc::Optional<int>(0); |
667 } | 670 } |
668 | 671 |
669 WebRtcVideoChannel2::~WebRtcVideoChannel2() { | 672 WebRtcVideoChannel2::~WebRtcVideoChannel2() { |
670 for (auto& kv : send_streams_) | 673 for (auto& kv : send_streams_) |
671 delete kv.second; | 674 delete kv.second; |
672 for (auto& kv : receive_streams_) | 675 for (auto& kv : receive_streams_) |
673 delete kv.second; | 676 delete kv.second; |
674 } | 677 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 // Handle RTCP mode. | 790 // Handle RTCP mode. |
788 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { | 791 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { |
789 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( | 792 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( |
790 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize | 793 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize |
791 : webrtc::RtcpMode::kCompound); | 794 : webrtc::RtcpMode::kCompound); |
792 } | 795 } |
793 | 796 |
794 return true; | 797 return true; |
795 } | 798 } |
796 | 799 |
| 800 rtc::DiffServCodePoint WebRtcVideoChannel2::MediaTypeDscpValue() const { |
| 801 return rtc::DSCP_AF41; |
| 802 } |
| 803 |
797 bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) { | 804 bool WebRtcVideoChannel2::SetSendParameters(const VideoSendParameters& params) { |
798 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendParameters"); | 805 TRACE_EVENT0("webrtc", "WebRtcVideoChannel2::SetSendParameters"); |
799 LOG(LS_INFO) << "SetSendParameters: " << params.ToString(); | 806 LOG(LS_INFO) << "SetSendParameters: " << params.ToString(); |
800 ChangedSendParameters changed_params; | 807 ChangedSendParameters changed_params; |
801 if (!GetChangedSendParameters(params, &changed_params)) { | 808 if (!GetChangedSendParameters(params, &changed_params)) { |
802 return false; | 809 return false; |
803 } | 810 } |
804 | 811 |
805 bool bitrate_config_changed = false; | 812 bool bitrate_config_changed = false; |
806 | 813 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 } | 846 } |
840 | 847 |
841 if (changed_params.options) { | 848 if (changed_params.options) { |
842 options_.SetAll(*changed_params.options); | 849 options_.SetAll(*changed_params.options); |
843 { | 850 { |
844 rtc::CritScope lock(&capturer_crit_); | 851 rtc::CritScope lock(&capturer_crit_); |
845 if (options_.cpu_overuse_detection) { | 852 if (options_.cpu_overuse_detection) { |
846 signal_cpu_adaptation_ = *options_.cpu_overuse_detection; | 853 signal_cpu_adaptation_ = *options_.cpu_overuse_detection; |
847 } | 854 } |
848 } | 855 } |
849 rtc::DiffServCodePoint dscp = | |
850 options_.dscp.value_or(false) ? rtc::DSCP_AF41 : rtc::DSCP_DEFAULT; | |
851 MediaChannel::SetDscp(dscp); | |
852 } | 856 } |
853 | 857 |
854 { | 858 { |
855 rtc::CritScope stream_lock(&stream_crit_); | 859 rtc::CritScope stream_lock(&stream_crit_); |
856 for (auto& kv : send_streams_) { | 860 for (auto& kv : send_streams_) { |
857 kv.second->SetSendParameters(changed_params); | 861 kv.second->SetSendParameters(changed_params); |
858 } | 862 } |
859 if (changed_params.codec) { | 863 if (changed_params.codec) { |
860 // Update receive feedback parameters from new codec. | 864 // Update receive feedback parameters from new codec. |
861 LOG(LS_INFO) | 865 LOG(LS_INFO) |
(...skipping 1743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2605 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2609 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2606 } | 2610 } |
2607 } | 2611 } |
2608 | 2612 |
2609 return video_codecs; | 2613 return video_codecs; |
2610 } | 2614 } |
2611 | 2615 |
2612 } // namespace cricket | 2616 } // namespace cricket |
2613 | 2617 |
2614 #endif // HAVE_WEBRTC_VIDEO | 2618 #endif // HAVE_WEBRTC_VIDEO |
OLD | NEW |