| 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 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 | 1136 |
| 1137 if (!ValidateSendSsrcAvailability(sp)) | 1137 if (!ValidateSendSsrcAvailability(sp)) |
| 1138 return false; | 1138 return false; |
| 1139 | 1139 |
| 1140 for (uint32_t used_ssrc : sp.ssrcs) | 1140 for (uint32_t used_ssrc : sp.ssrcs) |
| 1141 send_ssrcs_.insert(used_ssrc); | 1141 send_ssrcs_.insert(used_ssrc); |
| 1142 | 1142 |
| 1143 webrtc::VideoSendStream::Config config(this); | 1143 webrtc::VideoSendStream::Config config(this); |
| 1144 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; | 1144 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
| 1145 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( | 1145 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
| 1146 call_, sp, config, default_send_options_, external_encoder_factory_, | 1146 call_, sp, std::move(config), default_send_options_, |
| 1147 video_config_.enable_cpu_overuse_detection, | 1147 external_encoder_factory_, video_config_.enable_cpu_overuse_detection, |
| 1148 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, | 1148 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
| 1149 send_params_); | 1149 send_params_); |
| 1150 | 1150 |
| 1151 uint32_t ssrc = sp.first_ssrc(); | 1151 uint32_t ssrc = sp.first_ssrc(); |
| 1152 RTC_DCHECK(ssrc != 0); | 1152 RTC_DCHECK(ssrc != 0); |
| 1153 send_streams_[ssrc] = stream; | 1153 send_streams_[ssrc] = stream; |
| 1154 | 1154 |
| 1155 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { | 1155 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { |
| 1156 rtcp_receiver_report_ssrc_ = ssrc; | 1156 rtcp_receiver_report_ssrc_ = ssrc; |
| 1157 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " | 1157 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " |
| (...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1526 return MediaChannel::SendPacket(&packet, rtc_options); | 1526 return MediaChannel::SendPacket(&packet, rtc_options); |
| 1527 } | 1527 } |
| 1528 | 1528 |
| 1529 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { | 1529 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { |
| 1530 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); | 1530 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); |
| 1531 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); | 1531 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); |
| 1532 } | 1532 } |
| 1533 | 1533 |
| 1534 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: | 1534 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: |
| 1535 VideoSendStreamParameters( | 1535 VideoSendStreamParameters( |
| 1536 const webrtc::VideoSendStream::Config& config, | 1536 webrtc::VideoSendStream::Config config, |
| 1537 const VideoOptions& options, | 1537 const VideoOptions& options, |
| 1538 int max_bitrate_bps, | 1538 int max_bitrate_bps, |
| 1539 const rtc::Optional<VideoCodecSettings>& codec_settings) | 1539 const rtc::Optional<VideoCodecSettings>& codec_settings) |
| 1540 : config(config), | 1540 : config(std::move(config)), |
| 1541 options(options), | 1541 options(options), |
| 1542 max_bitrate_bps(max_bitrate_bps), | 1542 max_bitrate_bps(max_bitrate_bps), |
| 1543 codec_settings(codec_settings) {} | 1543 codec_settings(codec_settings) {} |
| 1544 | 1544 |
| 1545 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( | 1545 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( |
| 1546 webrtc::VideoEncoder* encoder, | 1546 webrtc::VideoEncoder* encoder, |
| 1547 webrtc::VideoCodecType type, | 1547 webrtc::VideoCodecType type, |
| 1548 bool external) | 1548 bool external) |
| 1549 : encoder(encoder), | 1549 : encoder(encoder), |
| 1550 external_encoder(nullptr), | 1550 external_encoder(nullptr), |
| 1551 type(type), | 1551 type(type), |
| 1552 external(external) { | 1552 external(external) { |
| 1553 if (external) { | 1553 if (external) { |
| 1554 external_encoder = encoder; | 1554 external_encoder = encoder; |
| 1555 this->encoder = | 1555 this->encoder = |
| 1556 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); | 1556 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); |
| 1557 } | 1557 } |
| 1558 } | 1558 } |
| 1559 | 1559 |
| 1560 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( | 1560 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
| 1561 webrtc::Call* call, | 1561 webrtc::Call* call, |
| 1562 const StreamParams& sp, | 1562 const StreamParams& sp, |
| 1563 const webrtc::VideoSendStream::Config& config, | 1563 webrtc::VideoSendStream::Config config, |
| 1564 const VideoOptions& options, | 1564 const VideoOptions& options, |
| 1565 WebRtcVideoEncoderFactory* external_encoder_factory, | 1565 WebRtcVideoEncoderFactory* external_encoder_factory, |
| 1566 bool enable_cpu_overuse_detection, | 1566 bool enable_cpu_overuse_detection, |
| 1567 int max_bitrate_bps, | 1567 int max_bitrate_bps, |
| 1568 const rtc::Optional<VideoCodecSettings>& codec_settings, | 1568 const rtc::Optional<VideoCodecSettings>& codec_settings, |
| 1569 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, | 1569 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, |
| 1570 // TODO(deadbeef): Don't duplicate information between send_params, | 1570 // TODO(deadbeef): Don't duplicate information between send_params, |
| 1571 // rtp_extensions, options, etc. | 1571 // rtp_extensions, options, etc. |
| 1572 const VideoSendParameters& send_params) | 1572 const VideoSendParameters& send_params) |
| 1573 : worker_thread_(rtc::Thread::Current()), | 1573 : worker_thread_(rtc::Thread::Current()), |
| 1574 ssrcs_(sp.ssrcs), | 1574 ssrcs_(sp.ssrcs), |
| 1575 ssrc_groups_(sp.ssrc_groups), | 1575 ssrc_groups_(sp.ssrc_groups), |
| 1576 call_(call), | 1576 call_(call), |
| 1577 cpu_restricted_counter_(0), | 1577 cpu_restricted_counter_(0), |
| 1578 number_of_cpu_adapt_changes_(0), | 1578 number_of_cpu_adapt_changes_(0), |
| 1579 source_(nullptr), | 1579 source_(nullptr), |
| 1580 external_encoder_factory_(external_encoder_factory), | 1580 external_encoder_factory_(external_encoder_factory), |
| 1581 stream_(nullptr), | 1581 stream_(nullptr), |
| 1582 parameters_(config, options, max_bitrate_bps, codec_settings), | 1582 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
| 1583 rtp_parameters_(CreateRtpParametersWithOneEncoding()), | 1583 rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
| 1584 pending_encoder_reconfiguration_(false), | 1584 pending_encoder_reconfiguration_(false), |
| 1585 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), | 1585 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), |
| 1586 sending_(false), | 1586 sending_(false), |
| 1587 last_frame_timestamp_ms_(0) { | 1587 last_frame_timestamp_ms_(0) { |
| 1588 parameters_.config.rtp.max_packet_size = kVideoMtu; | 1588 parameters_.config.rtp.max_packet_size = kVideoMtu; |
| 1589 parameters_.conference_mode = send_params.conference_mode; | 1589 parameters_.conference_mode = send_params.conference_mode; |
| 1590 | 1590 |
| 1591 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); | 1591 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); |
| 1592 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, | 1592 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2028 | 2028 |
| 2029 RTC_CHECK(parameters_.codec_settings); | 2029 RTC_CHECK(parameters_.codec_settings); |
| 2030 VideoCodecSettings codec_settings = *parameters_.codec_settings; | 2030 VideoCodecSettings codec_settings = *parameters_.codec_settings; |
| 2031 | 2031 |
| 2032 webrtc::VideoEncoderConfig encoder_config = | 2032 webrtc::VideoEncoderConfig encoder_config = |
| 2033 CreateVideoEncoderConfig(codec_settings.codec); | 2033 CreateVideoEncoderConfig(codec_settings.codec); |
| 2034 | 2034 |
| 2035 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( | 2035 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( |
| 2036 codec_settings.codec); | 2036 codec_settings.codec); |
| 2037 | 2037 |
| 2038 stream_->ReconfigureVideoEncoder(encoder_config); | 2038 stream_->ReconfigureVideoEncoder(encoder_config.Copy()); |
| 2039 | 2039 |
| 2040 encoder_config.encoder_specific_settings = NULL; | 2040 encoder_config.encoder_specific_settings = NULL; |
| 2041 | 2041 |
| 2042 parameters_.encoder_config = encoder_config; | 2042 parameters_.encoder_config = std::move(encoder_config); |
| 2043 } | 2043 } |
| 2044 | 2044 |
| 2045 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { | 2045 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { |
| 2046 rtc::CritScope cs(&lock_); | 2046 rtc::CritScope cs(&lock_); |
| 2047 sending_ = send; | 2047 sending_ = send; |
| 2048 UpdateSendState(); | 2048 UpdateSendState(); |
| 2049 } | 2049 } |
| 2050 | 2050 |
| 2051 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { | 2051 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { |
| 2052 if (worker_thread_ != rtc::Thread::Current()) { | 2052 if (worker_thread_ != rtc::Thread::Current()) { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2225 } | 2225 } |
| 2226 | 2226 |
| 2227 RTC_CHECK(parameters_.codec_settings); | 2227 RTC_CHECK(parameters_.codec_settings); |
| 2228 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == | 2228 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == |
| 2229 webrtc::VideoEncoderConfig::ContentType::kScreen), | 2229 webrtc::VideoEncoderConfig::ContentType::kScreen), |
| 2230 parameters_.options.is_screencast.value_or(false)) | 2230 parameters_.options.is_screencast.value_or(false)) |
| 2231 << "encoder content type inconsistent with screencast option"; | 2231 << "encoder content type inconsistent with screencast option"; |
| 2232 parameters_.encoder_config.encoder_specific_settings = | 2232 parameters_.encoder_config.encoder_specific_settings = |
| 2233 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); | 2233 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); |
| 2234 | 2234 |
| 2235 webrtc::VideoSendStream::Config config = parameters_.config; | 2235 webrtc::VideoSendStream::Config config = parameters_.config.Copy(); |
| 2236 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { | 2236 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { |
| 2237 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " | 2237 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " |
| 2238 "payload type the set codec. Ignoring RTX."; | 2238 "payload type the set codec. Ignoring RTX."; |
| 2239 config.rtp.rtx.ssrcs.clear(); | 2239 config.rtp.rtx.ssrcs.clear(); |
| 2240 } | 2240 } |
| 2241 stream_ = call_->CreateVideoSendStream(config, parameters_.encoder_config); | 2241 stream_ = call_->CreateVideoSendStream(std::move(config), |
| 2242 parameters_.encoder_config.Copy()); |
| 2242 | 2243 |
| 2243 parameters_.encoder_config.encoder_specific_settings = NULL; | 2244 parameters_.encoder_config.encoder_specific_settings = NULL; |
| 2244 pending_encoder_reconfiguration_ = false; | 2245 pending_encoder_reconfiguration_ = false; |
| 2245 | 2246 |
| 2246 if (sending_) { | 2247 if (sending_) { |
| 2247 stream_->Start(); | 2248 stream_->Start(); |
| 2248 } | 2249 } |
| 2249 } | 2250 } |
| 2250 | 2251 |
| 2251 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( | 2252 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2696 rtx_mapping[video_codecs[i].codec.id] != | 2697 rtx_mapping[video_codecs[i].codec.id] != |
| 2697 fec_settings.red_payload_type) { | 2698 fec_settings.red_payload_type) { |
| 2698 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2699 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
| 2699 } | 2700 } |
| 2700 } | 2701 } |
| 2701 | 2702 |
| 2702 return video_codecs; | 2703 return video_codecs; |
| 2703 } | 2704 } |
| 2704 | 2705 |
| 2705 } // namespace cricket | 2706 } // namespace cricket |
| OLD | NEW |