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 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1132 | 1132 |
1133 if (!ValidateSendSsrcAvailability(sp)) | 1133 if (!ValidateSendSsrcAvailability(sp)) |
1134 return false; | 1134 return false; |
1135 | 1135 |
1136 for (uint32_t used_ssrc : sp.ssrcs) | 1136 for (uint32_t used_ssrc : sp.ssrcs) |
1137 send_ssrcs_.insert(used_ssrc); | 1137 send_ssrcs_.insert(used_ssrc); |
1138 | 1138 |
1139 webrtc::VideoSendStream::Config config(this); | 1139 webrtc::VideoSendStream::Config config(this); |
1140 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; | 1140 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
1141 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( | 1141 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
1142 call_, sp, config, default_send_options_, external_encoder_factory_, | 1142 call_, sp, std::move(config), default_send_options_, |
1143 video_config_.enable_cpu_overuse_detection, | 1143 external_encoder_factory_, video_config_.enable_cpu_overuse_detection, |
1144 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, | 1144 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
1145 send_params_); | 1145 send_params_); |
1146 | 1146 |
1147 uint32_t ssrc = sp.first_ssrc(); | 1147 uint32_t ssrc = sp.first_ssrc(); |
1148 RTC_DCHECK(ssrc != 0); | 1148 RTC_DCHECK(ssrc != 0); |
1149 send_streams_[ssrc] = stream; | 1149 send_streams_[ssrc] = stream; |
1150 | 1150 |
1151 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { | 1151 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { |
1152 rtcp_receiver_report_ssrc_ = ssrc; | 1152 rtcp_receiver_report_ssrc_ = ssrc; |
1153 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " | 1153 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " |
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 return MediaChannel::SendPacket(&packet, rtc_options); | 1504 return MediaChannel::SendPacket(&packet, rtc_options); |
1505 } | 1505 } |
1506 | 1506 |
1507 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { | 1507 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { |
1508 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); | 1508 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); |
1509 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); | 1509 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); |
1510 } | 1510 } |
1511 | 1511 |
1512 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: | 1512 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: |
1513 VideoSendStreamParameters( | 1513 VideoSendStreamParameters( |
1514 const webrtc::VideoSendStream::Config& config, | 1514 webrtc::VideoSendStream::Config config, |
1515 const VideoOptions& options, | 1515 const VideoOptions& options, |
1516 int max_bitrate_bps, | 1516 int max_bitrate_bps, |
1517 const rtc::Optional<VideoCodecSettings>& codec_settings) | 1517 const rtc::Optional<VideoCodecSettings>& codec_settings) |
1518 : config(config), | 1518 : config(std::move(config)), |
1519 options(options), | 1519 options(options), |
1520 max_bitrate_bps(max_bitrate_bps), | 1520 max_bitrate_bps(max_bitrate_bps), |
1521 codec_settings(codec_settings) {} | 1521 codec_settings(codec_settings) {} |
1522 | 1522 |
1523 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( | 1523 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( |
1524 webrtc::VideoEncoder* encoder, | 1524 webrtc::VideoEncoder* encoder, |
1525 webrtc::VideoCodecType type, | 1525 webrtc::VideoCodecType type, |
1526 bool external) | 1526 bool external) |
1527 : encoder(encoder), | 1527 : encoder(encoder), |
1528 external_encoder(nullptr), | 1528 external_encoder(nullptr), |
1529 type(type), | 1529 type(type), |
1530 external(external) { | 1530 external(external) { |
1531 if (external) { | 1531 if (external) { |
1532 external_encoder = encoder; | 1532 external_encoder = encoder; |
1533 this->encoder = | 1533 this->encoder = |
1534 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); | 1534 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); |
1535 } | 1535 } |
1536 } | 1536 } |
1537 | 1537 |
1538 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( | 1538 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
1539 webrtc::Call* call, | 1539 webrtc::Call* call, |
1540 const StreamParams& sp, | 1540 const StreamParams& sp, |
1541 const webrtc::VideoSendStream::Config& config, | 1541 webrtc::VideoSendStream::Config config, |
1542 const VideoOptions& options, | 1542 const VideoOptions& options, |
1543 WebRtcVideoEncoderFactory* external_encoder_factory, | 1543 WebRtcVideoEncoderFactory* external_encoder_factory, |
1544 bool enable_cpu_overuse_detection, | 1544 bool enable_cpu_overuse_detection, |
1545 int max_bitrate_bps, | 1545 int max_bitrate_bps, |
1546 const rtc::Optional<VideoCodecSettings>& codec_settings, | 1546 const rtc::Optional<VideoCodecSettings>& codec_settings, |
1547 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, | 1547 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, |
1548 // TODO(deadbeef): Don't duplicate information between send_params, | 1548 // TODO(deadbeef): Don't duplicate information between send_params, |
1549 // rtp_extensions, options, etc. | 1549 // rtp_extensions, options, etc. |
1550 const VideoSendParameters& send_params) | 1550 const VideoSendParameters& send_params) |
1551 : worker_thread_(rtc::Thread::Current()), | 1551 : worker_thread_(rtc::Thread::Current()), |
1552 ssrcs_(sp.ssrcs), | 1552 ssrcs_(sp.ssrcs), |
1553 ssrc_groups_(sp.ssrc_groups), | 1553 ssrc_groups_(sp.ssrc_groups), |
1554 call_(call), | 1554 call_(call), |
1555 cpu_restricted_counter_(0), | 1555 cpu_restricted_counter_(0), |
1556 number_of_cpu_adapt_changes_(0), | 1556 number_of_cpu_adapt_changes_(0), |
1557 source_(nullptr), | 1557 source_(nullptr), |
1558 external_encoder_factory_(external_encoder_factory), | 1558 external_encoder_factory_(external_encoder_factory), |
1559 stream_(nullptr), | 1559 stream_(nullptr), |
1560 parameters_(config, options, max_bitrate_bps, codec_settings), | 1560 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
1561 rtp_parameters_(CreateRtpParametersWithOneEncoding()), | 1561 rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
1562 pending_encoder_reconfiguration_(false), | 1562 pending_encoder_reconfiguration_(false), |
1563 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), | 1563 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), |
1564 sending_(false), | 1564 sending_(false), |
1565 last_frame_timestamp_ms_(0) { | 1565 last_frame_timestamp_ms_(0) { |
1566 parameters_.config.rtp.max_packet_size = kVideoMtu; | 1566 parameters_.config.rtp.max_packet_size = kVideoMtu; |
1567 parameters_.conference_mode = send_params.conference_mode; | 1567 parameters_.conference_mode = send_params.conference_mode; |
1568 | 1568 |
1569 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); | 1569 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); |
1570 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, | 1570 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2006 | 2006 |
2007 RTC_CHECK(parameters_.codec_settings); | 2007 RTC_CHECK(parameters_.codec_settings); |
2008 VideoCodecSettings codec_settings = *parameters_.codec_settings; | 2008 VideoCodecSettings codec_settings = *parameters_.codec_settings; |
2009 | 2009 |
2010 webrtc::VideoEncoderConfig encoder_config = | 2010 webrtc::VideoEncoderConfig encoder_config = |
2011 CreateVideoEncoderConfig(codec_settings.codec); | 2011 CreateVideoEncoderConfig(codec_settings.codec); |
2012 | 2012 |
2013 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( | 2013 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( |
2014 codec_settings.codec); | 2014 codec_settings.codec); |
2015 | 2015 |
2016 stream_->ReconfigureVideoEncoder(encoder_config); | 2016 stream_->ReconfigureVideoEncoder(encoder_config.Copy()); |
2017 | 2017 |
2018 encoder_config.encoder_specific_settings = NULL; | 2018 encoder_config.encoder_specific_settings = NULL; |
2019 | 2019 |
2020 parameters_.encoder_config = encoder_config; | 2020 parameters_.encoder_config = std::move(encoder_config); |
2021 } | 2021 } |
2022 | 2022 |
2023 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { | 2023 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { |
2024 rtc::CritScope cs(&lock_); | 2024 rtc::CritScope cs(&lock_); |
2025 sending_ = send; | 2025 sending_ = send; |
2026 UpdateSendState(); | 2026 UpdateSendState(); |
2027 } | 2027 } |
2028 | 2028 |
2029 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { | 2029 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { |
2030 if (worker_thread_ != rtc::Thread::Current()) { | 2030 if (worker_thread_ != rtc::Thread::Current()) { |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2199 } | 2199 } |
2200 | 2200 |
2201 RTC_CHECK(parameters_.codec_settings); | 2201 RTC_CHECK(parameters_.codec_settings); |
2202 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == | 2202 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == |
2203 webrtc::VideoEncoderConfig::ContentType::kScreen), | 2203 webrtc::VideoEncoderConfig::ContentType::kScreen), |
2204 parameters_.options.is_screencast.value_or(false)) | 2204 parameters_.options.is_screencast.value_or(false)) |
2205 << "encoder content type inconsistent with screencast option"; | 2205 << "encoder content type inconsistent with screencast option"; |
2206 parameters_.encoder_config.encoder_specific_settings = | 2206 parameters_.encoder_config.encoder_specific_settings = |
2207 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); | 2207 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); |
2208 | 2208 |
2209 webrtc::VideoSendStream::Config config = parameters_.config; | 2209 webrtc::VideoSendStream::Config config = parameters_.config.Copy(); |
2210 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { | 2210 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { |
2211 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " | 2211 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " |
2212 "payload type the set codec. Ignoring RTX."; | 2212 "payload type the set codec. Ignoring RTX."; |
2213 config.rtp.rtx.ssrcs.clear(); | 2213 config.rtp.rtx.ssrcs.clear(); |
2214 } | 2214 } |
2215 stream_ = call_->CreateVideoSendStream(config, parameters_.encoder_config); | 2215 stream_ = call_->CreateVideoSendStream(std::move(config), |
| 2216 parameters_.encoder_config.Copy()); |
2216 | 2217 |
2217 parameters_.encoder_config.encoder_specific_settings = NULL; | 2218 parameters_.encoder_config.encoder_specific_settings = NULL; |
2218 pending_encoder_reconfiguration_ = false; | 2219 pending_encoder_reconfiguration_ = false; |
2219 | 2220 |
2220 if (sending_) { | 2221 if (sending_) { |
2221 stream_->Start(); | 2222 stream_->Start(); |
2222 } | 2223 } |
2223 } | 2224 } |
2224 | 2225 |
2225 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( | 2226 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2651 rtx_mapping[video_codecs[i].codec.id] != | 2652 rtx_mapping[video_codecs[i].codec.id] != |
2652 fec_settings.red_payload_type) { | 2653 fec_settings.red_payload_type) { |
2653 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2654 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2654 } | 2655 } |
2655 } | 2656 } |
2656 | 2657 |
2657 return video_codecs; | 2658 return video_codecs; |
2658 } | 2659 } |
2659 | 2660 |
2660 } // namespace cricket | 2661 } // namespace cricket |
OLD | NEW |