OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 const MediaConfig& config, | 606 const MediaConfig& config, |
607 const VideoOptions& options, | 607 const VideoOptions& options, |
608 const std::vector<VideoCodec>& recv_codecs, | 608 const std::vector<VideoCodec>& recv_codecs, |
609 WebRtcVideoEncoderFactory* external_encoder_factory, | 609 WebRtcVideoEncoderFactory* external_encoder_factory, |
610 WebRtcVideoDecoderFactory* external_decoder_factory) | 610 WebRtcVideoDecoderFactory* external_decoder_factory) |
611 : VideoMediaChannel(config), | 611 : VideoMediaChannel(config), |
612 call_(call), | 612 call_(call), |
613 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), | 613 unsignalled_ssrc_handler_(&default_unsignalled_ssrc_handler_), |
614 video_config_(config.video), | 614 video_config_(config.video), |
615 external_encoder_factory_(external_encoder_factory), | 615 external_encoder_factory_(external_encoder_factory), |
616 external_decoder_factory_(external_decoder_factory) { | 616 external_decoder_factory_(external_decoder_factory), |
| 617 default_send_options_(options) { |
617 RTC_DCHECK(thread_checker_.CalledOnValidThread()); | 618 RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
618 | 619 |
619 send_params_.options = options; | |
620 | |
621 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; | 620 rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc; |
622 sending_ = false; | 621 sending_ = false; |
623 default_send_ssrc_ = 0; | 622 default_send_ssrc_ = 0; |
624 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); | 623 RTC_DCHECK(ValidateCodecFormats(recv_codecs)); |
625 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); | 624 recv_codecs_ = FilterSupportedCodecs(MapCodecs(recv_codecs)); |
626 } | 625 } |
627 | 626 |
628 WebRtcVideoChannel2::~WebRtcVideoChannel2() { | 627 WebRtcVideoChannel2::~WebRtcVideoChannel2() { |
629 for (auto& kv : send_streams_) | 628 for (auto& kv : send_streams_) |
630 delete kv.second; | 629 delete kv.second; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 changed_params->max_bandwidth_bps = rtc::Optional<int>( | 732 changed_params->max_bandwidth_bps = rtc::Optional<int>( |
734 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps); | 733 params.max_bandwidth_bps == 0 ? -1 : params.max_bandwidth_bps); |
735 } | 734 } |
736 | 735 |
737 // Handle conference mode. | 736 // Handle conference mode. |
738 if (params.conference_mode != send_params_.conference_mode) { | 737 if (params.conference_mode != send_params_.conference_mode) { |
739 changed_params->conference_mode = | 738 changed_params->conference_mode = |
740 rtc::Optional<bool>(params.conference_mode); | 739 rtc::Optional<bool>(params.conference_mode); |
741 } | 740 } |
742 | 741 |
743 // Handle options. | |
744 // TODO(pbos): Require VideoSendParameters to contain a full set of options | |
745 // and check if params.options != options_ instead of applying a delta. | |
746 VideoOptions new_options = send_params_.options; | |
747 new_options.SetAll(params.options); | |
748 if (!(new_options == send_params_.options)) { | |
749 changed_params->options = rtc::Optional<VideoOptions>(new_options); | |
750 } | |
751 | |
752 // Handle RTCP mode. | 742 // Handle RTCP mode. |
753 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { | 743 if (params.rtcp.reduced_size != send_params_.rtcp.reduced_size) { |
754 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( | 744 changed_params->rtcp_mode = rtc::Optional<webrtc::RtcpMode>( |
755 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize | 745 params.rtcp.reduced_size ? webrtc::RtcpMode::kReducedSize |
756 : webrtc::RtcpMode::kCompound); | 746 : webrtc::RtcpMode::kCompound); |
757 } | 747 } |
758 | 748 |
759 return true; | 749 return true; |
760 } | 750 } |
761 | 751 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 bitrate_config_.min_bitrate_bps > max_bitrate_bps) { | 790 bitrate_config_.min_bitrate_bps > max_bitrate_bps) { |
801 bitrate_config_.min_bitrate_bps = max_bitrate_bps; | 791 bitrate_config_.min_bitrate_bps = max_bitrate_bps; |
802 } | 792 } |
803 bitrate_config_changed = true; | 793 bitrate_config_changed = true; |
804 } | 794 } |
805 | 795 |
806 if (bitrate_config_changed) { | 796 if (bitrate_config_changed) { |
807 call_->SetBitrateConfig(bitrate_config_); | 797 call_->SetBitrateConfig(bitrate_config_); |
808 } | 798 } |
809 | 799 |
810 if (changed_params.options) | |
811 send_params_.options.SetAll(*changed_params.options); | |
812 | |
813 { | 800 { |
814 rtc::CritScope stream_lock(&stream_crit_); | 801 rtc::CritScope stream_lock(&stream_crit_); |
815 for (auto& kv : send_streams_) { | 802 for (auto& kv : send_streams_) { |
816 kv.second->SetSendParameters(changed_params); | 803 kv.second->SetSendParameters(changed_params); |
817 } | 804 } |
818 if (changed_params.codec) { | 805 if (changed_params.codec) { |
819 // Update receive feedback parameters from new codec. | 806 // Update receive feedback parameters from new codec. |
820 LOG(LS_INFO) | 807 LOG(LS_INFO) |
821 << "SetFeedbackOptions on all the receive streams because the send " | 808 << "SetFeedbackOptions on all the receive streams because the send " |
822 "codec has changed."; | 809 "codec has changed."; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 rtc::CritScope stream_lock(&stream_crit_); | 980 rtc::CritScope stream_lock(&stream_crit_); |
994 | 981 |
995 if (!ValidateSendSsrcAvailability(sp)) | 982 if (!ValidateSendSsrcAvailability(sp)) |
996 return false; | 983 return false; |
997 | 984 |
998 for (uint32_t used_ssrc : sp.ssrcs) | 985 for (uint32_t used_ssrc : sp.ssrcs) |
999 send_ssrcs_.insert(used_ssrc); | 986 send_ssrcs_.insert(used_ssrc); |
1000 | 987 |
1001 webrtc::VideoSendStream::Config config(this); | 988 webrtc::VideoSendStream::Config config(this); |
1002 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; | 989 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
1003 WebRtcVideoSendStream* stream = | 990 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
1004 new WebRtcVideoSendStream(call_, sp, config, external_encoder_factory_, | 991 call_, sp, config, default_send_options_, external_encoder_factory_, |
1005 video_config_.enable_cpu_overuse_detection, | 992 video_config_.enable_cpu_overuse_detection, |
1006 bitrate_config_.max_bitrate_bps, send_codec_, | 993 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
1007 send_rtp_extensions_, send_params_); | 994 send_params_); |
1008 | 995 |
1009 uint32_t ssrc = sp.first_ssrc(); | 996 uint32_t ssrc = sp.first_ssrc(); |
1010 RTC_DCHECK(ssrc != 0); | 997 RTC_DCHECK(ssrc != 0); |
1011 send_streams_[ssrc] = stream; | 998 send_streams_[ssrc] = stream; |
1012 | 999 |
1013 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { | 1000 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { |
1014 rtcp_receiver_report_ssrc_ = ssrc; | 1001 rtcp_receiver_report_ssrc_ = ssrc; |
1015 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " | 1002 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " |
1016 "a send stream."; | 1003 "a send stream."; |
1017 for (auto& kv : receive_streams_) | 1004 for (auto& kv : receive_streams_) |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1463 external_encoder = encoder; | 1450 external_encoder = encoder; |
1464 this->encoder = | 1451 this->encoder = |
1465 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); | 1452 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); |
1466 } | 1453 } |
1467 } | 1454 } |
1468 | 1455 |
1469 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( | 1456 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
1470 webrtc::Call* call, | 1457 webrtc::Call* call, |
1471 const StreamParams& sp, | 1458 const StreamParams& sp, |
1472 const webrtc::VideoSendStream::Config& config, | 1459 const webrtc::VideoSendStream::Config& config, |
| 1460 const VideoOptions& options, |
1473 WebRtcVideoEncoderFactory* external_encoder_factory, | 1461 WebRtcVideoEncoderFactory* external_encoder_factory, |
1474 bool enable_cpu_overuse_detection, | 1462 bool enable_cpu_overuse_detection, |
1475 int max_bitrate_bps, | 1463 int max_bitrate_bps, |
1476 const rtc::Optional<VideoCodecSettings>& codec_settings, | 1464 const rtc::Optional<VideoCodecSettings>& codec_settings, |
1477 const std::vector<webrtc::RtpExtension>& rtp_extensions, | 1465 const std::vector<webrtc::RtpExtension>& rtp_extensions, |
1478 // TODO(deadbeef): Don't duplicate information between send_params, | 1466 // TODO(deadbeef): Don't duplicate information between send_params, |
1479 // rtp_extensions, options, etc. | 1467 // rtp_extensions, options, etc. |
1480 const VideoSendParameters& send_params) | 1468 const VideoSendParameters& send_params) |
1481 : worker_thread_(rtc::Thread::Current()), | 1469 : worker_thread_(rtc::Thread::Current()), |
1482 ssrcs_(sp.ssrcs), | 1470 ssrcs_(sp.ssrcs), |
1483 ssrc_groups_(sp.ssrc_groups), | 1471 ssrc_groups_(sp.ssrc_groups), |
1484 call_(call), | 1472 call_(call), |
1485 cpu_restricted_counter_(0), | 1473 cpu_restricted_counter_(0), |
1486 number_of_cpu_adapt_changes_(0), | 1474 number_of_cpu_adapt_changes_(0), |
1487 capturer_(nullptr), | 1475 capturer_(nullptr), |
1488 external_encoder_factory_(external_encoder_factory), | 1476 external_encoder_factory_(external_encoder_factory), |
1489 stream_(nullptr), | 1477 stream_(nullptr), |
1490 parameters_(config, send_params.options, max_bitrate_bps, codec_settings), | 1478 parameters_(config, options, max_bitrate_bps, codec_settings), |
1491 pending_encoder_reconfiguration_(false), | 1479 pending_encoder_reconfiguration_(false), |
1492 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), | 1480 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), |
1493 sending_(false), | 1481 sending_(false), |
1494 muted_(false), | 1482 muted_(false), |
1495 first_frame_timestamp_ms_(0), | 1483 first_frame_timestamp_ms_(0), |
1496 last_frame_timestamp_ms_(0) { | 1484 last_frame_timestamp_ms_(0) { |
1497 parameters_.config.rtp.max_packet_size = kVideoMtu; | 1485 parameters_.config.rtp.max_packet_size = kVideoMtu; |
1498 parameters_.conference_mode = send_params.conference_mode; | 1486 parameters_.conference_mode = send_params.conference_mode; |
1499 | 1487 |
1500 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); | 1488 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1776 } | 1764 } |
1777 if (params.max_bandwidth_bps) { | 1765 if (params.max_bandwidth_bps) { |
1778 // Max bitrate has changed, reconfigure encoder settings on the next frame | 1766 // Max bitrate has changed, reconfigure encoder settings on the next frame |
1779 // or stream recreation. | 1767 // or stream recreation. |
1780 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; | 1768 parameters_.max_bitrate_bps = *params.max_bandwidth_bps; |
1781 pending_encoder_reconfiguration_ = true; | 1769 pending_encoder_reconfiguration_ = true; |
1782 } | 1770 } |
1783 if (params.conference_mode) { | 1771 if (params.conference_mode) { |
1784 parameters_.conference_mode = *params.conference_mode; | 1772 parameters_.conference_mode = *params.conference_mode; |
1785 } | 1773 } |
1786 if (params.options) | |
1787 SetOptions(*params.options); | |
1788 | 1774 |
1789 // Set codecs and options. | 1775 // Set codecs and options. |
1790 if (params.codec) { | 1776 if (params.codec) { |
1791 SetCodec(*params.codec); | 1777 SetCodec(*params.codec); |
1792 return; | 1778 return; |
1793 } else if (params.conference_mode && parameters_.codec_settings) { | 1779 } else if (params.conference_mode && parameters_.codec_settings) { |
1794 SetCodec(*parameters_.codec_settings); | 1780 SetCodec(*parameters_.codec_settings); |
1795 return; | 1781 return; |
1796 } | 1782 } |
1797 if (recreate_stream) { | 1783 if (recreate_stream) { |
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2531 rtx_mapping[video_codecs[i].codec.id] != | 2517 rtx_mapping[video_codecs[i].codec.id] != |
2532 fec_settings.red_payload_type) { | 2518 fec_settings.red_payload_type) { |
2533 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2519 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2534 } | 2520 } |
2535 } | 2521 } |
2536 | 2522 |
2537 return video_codecs; | 2523 return video_codecs; |
2538 } | 2524 } |
2539 | 2525 |
2540 } // namespace cricket | 2526 } // namespace cricket |
OLD | NEW |