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 1126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1137 | 1137 |
1138 if (!ValidateSendSsrcAvailability(sp)) | 1138 if (!ValidateSendSsrcAvailability(sp)) |
1139 return false; | 1139 return false; |
1140 | 1140 |
1141 for (uint32_t used_ssrc : sp.ssrcs) | 1141 for (uint32_t used_ssrc : sp.ssrcs) |
1142 send_ssrcs_.insert(used_ssrc); | 1142 send_ssrcs_.insert(used_ssrc); |
1143 | 1143 |
1144 webrtc::VideoSendStream::Config config(this); | 1144 webrtc::VideoSendStream::Config config(this); |
1145 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; | 1145 config.suspend_below_min_bitrate = video_config_.suspend_below_min_bitrate; |
1146 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( | 1146 WebRtcVideoSendStream* stream = new WebRtcVideoSendStream( |
1147 call_, sp, config, default_send_options_, external_encoder_factory_, | 1147 call_, sp, std::move(config), default_send_options_, |
1148 video_config_.enable_cpu_overuse_detection, | 1148 external_encoder_factory_, video_config_.enable_cpu_overuse_detection, |
1149 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, | 1149 bitrate_config_.max_bitrate_bps, send_codec_, send_rtp_extensions_, |
1150 send_params_); | 1150 send_params_); |
1151 | 1151 |
1152 uint32_t ssrc = sp.first_ssrc(); | 1152 uint32_t ssrc = sp.first_ssrc(); |
1153 RTC_DCHECK(ssrc != 0); | 1153 RTC_DCHECK(ssrc != 0); |
1154 send_streams_[ssrc] = stream; | 1154 send_streams_[ssrc] = stream; |
1155 | 1155 |
1156 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { | 1156 if (rtcp_receiver_report_ssrc_ == kDefaultRtcpReceiverReportSsrc) { |
1157 rtcp_receiver_report_ssrc_ = ssrc; | 1157 rtcp_receiver_report_ssrc_ = ssrc; |
1158 LOG(LS_INFO) << "SetLocalSsrc on all the receive streams because we added " | 1158 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... |
1527 return MediaChannel::SendPacket(&packet, rtc_options); | 1527 return MediaChannel::SendPacket(&packet, rtc_options); |
1528 } | 1528 } |
1529 | 1529 |
1530 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { | 1530 bool WebRtcVideoChannel2::SendRtcp(const uint8_t* data, size_t len) { |
1531 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); | 1531 rtc::CopyOnWriteBuffer packet(data, len, kMaxRtpPacketLen); |
1532 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); | 1532 return MediaChannel::SendRtcp(&packet, rtc::PacketOptions()); |
1533 } | 1533 } |
1534 | 1534 |
1535 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: | 1535 WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters:: |
1536 VideoSendStreamParameters( | 1536 VideoSendStreamParameters( |
1537 const webrtc::VideoSendStream::Config& config, | 1537 webrtc::VideoSendStream::Config config, |
1538 const VideoOptions& options, | 1538 const VideoOptions& options, |
1539 int max_bitrate_bps, | 1539 int max_bitrate_bps, |
1540 const rtc::Optional<VideoCodecSettings>& codec_settings) | 1540 const rtc::Optional<VideoCodecSettings>& codec_settings) |
1541 : config(config), | 1541 : config(std::move(config)), |
1542 options(options), | 1542 options(options), |
1543 max_bitrate_bps(max_bitrate_bps), | 1543 max_bitrate_bps(max_bitrate_bps), |
1544 codec_settings(codec_settings) {} | 1544 codec_settings(codec_settings) {} |
1545 | 1545 |
1546 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( | 1546 WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder( |
1547 webrtc::VideoEncoder* encoder, | 1547 webrtc::VideoEncoder* encoder, |
1548 webrtc::VideoCodecType type, | 1548 webrtc::VideoCodecType type, |
1549 bool external) | 1549 bool external) |
1550 : encoder(encoder), | 1550 : encoder(encoder), |
1551 external_encoder(nullptr), | 1551 external_encoder(nullptr), |
1552 type(type), | 1552 type(type), |
1553 external(external) { | 1553 external(external) { |
1554 if (external) { | 1554 if (external) { |
1555 external_encoder = encoder; | 1555 external_encoder = encoder; |
1556 this->encoder = | 1556 this->encoder = |
1557 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); | 1557 new webrtc::VideoEncoderSoftwareFallbackWrapper(type, encoder); |
1558 } | 1558 } |
1559 } | 1559 } |
1560 | 1560 |
1561 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( | 1561 WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream( |
1562 webrtc::Call* call, | 1562 webrtc::Call* call, |
1563 const StreamParams& sp, | 1563 const StreamParams& sp, |
1564 const webrtc::VideoSendStream::Config& config, | 1564 webrtc::VideoSendStream::Config config, |
1565 const VideoOptions& options, | 1565 const VideoOptions& options, |
1566 WebRtcVideoEncoderFactory* external_encoder_factory, | 1566 WebRtcVideoEncoderFactory* external_encoder_factory, |
1567 bool enable_cpu_overuse_detection, | 1567 bool enable_cpu_overuse_detection, |
1568 int max_bitrate_bps, | 1568 int max_bitrate_bps, |
1569 const rtc::Optional<VideoCodecSettings>& codec_settings, | 1569 const rtc::Optional<VideoCodecSettings>& codec_settings, |
1570 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, | 1570 const rtc::Optional<std::vector<webrtc::RtpExtension>>& rtp_extensions, |
1571 // TODO(deadbeef): Don't duplicate information between send_params, | 1571 // TODO(deadbeef): Don't duplicate information between send_params, |
1572 // rtp_extensions, options, etc. | 1572 // rtp_extensions, options, etc. |
1573 const VideoSendParameters& send_params) | 1573 const VideoSendParameters& send_params) |
1574 : worker_thread_(rtc::Thread::Current()), | 1574 : worker_thread_(rtc::Thread::Current()), |
1575 ssrcs_(sp.ssrcs), | 1575 ssrcs_(sp.ssrcs), |
1576 ssrc_groups_(sp.ssrc_groups), | 1576 ssrc_groups_(sp.ssrc_groups), |
1577 call_(call), | 1577 call_(call), |
1578 cpu_restricted_counter_(0), | 1578 cpu_restricted_counter_(0), |
1579 number_of_cpu_adapt_changes_(0), | 1579 number_of_cpu_adapt_changes_(0), |
1580 frame_count_(0), | 1580 frame_count_(0), |
1581 cpu_restricted_frame_count_(0), | 1581 cpu_restricted_frame_count_(0), |
1582 source_(nullptr), | 1582 source_(nullptr), |
1583 external_encoder_factory_(external_encoder_factory), | 1583 external_encoder_factory_(external_encoder_factory), |
1584 stream_(nullptr), | 1584 stream_(nullptr), |
1585 parameters_(config, options, max_bitrate_bps, codec_settings), | 1585 parameters_(std::move(config), options, max_bitrate_bps, codec_settings), |
1586 rtp_parameters_(CreateRtpParametersWithOneEncoding()), | 1586 rtp_parameters_(CreateRtpParametersWithOneEncoding()), |
1587 pending_encoder_reconfiguration_(false), | 1587 pending_encoder_reconfiguration_(false), |
1588 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), | 1588 allocated_encoder_(nullptr, webrtc::kVideoCodecUnknown, false), |
1589 sending_(false), | 1589 sending_(false), |
1590 last_frame_timestamp_ms_(0) { | 1590 last_frame_timestamp_ms_(0) { |
1591 parameters_.config.rtp.max_packet_size = kVideoMtu; | 1591 parameters_.config.rtp.max_packet_size = kVideoMtu; |
1592 parameters_.conference_mode = send_params.conference_mode; | 1592 parameters_.conference_mode = send_params.conference_mode; |
1593 | 1593 |
1594 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); | 1594 sp.GetPrimarySsrcs(¶meters_.config.rtp.ssrcs); |
1595 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, | 1595 sp.GetFidSsrcs(parameters_.config.rtp.ssrcs, |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2045 | 2045 |
2046 RTC_CHECK(parameters_.codec_settings); | 2046 RTC_CHECK(parameters_.codec_settings); |
2047 VideoCodecSettings codec_settings = *parameters_.codec_settings; | 2047 VideoCodecSettings codec_settings = *parameters_.codec_settings; |
2048 | 2048 |
2049 webrtc::VideoEncoderConfig encoder_config = | 2049 webrtc::VideoEncoderConfig encoder_config = |
2050 CreateVideoEncoderConfig(codec_settings.codec); | 2050 CreateVideoEncoderConfig(codec_settings.codec); |
2051 | 2051 |
2052 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( | 2052 encoder_config.encoder_specific_settings = ConfigureVideoEncoderSettings( |
2053 codec_settings.codec); | 2053 codec_settings.codec); |
2054 | 2054 |
2055 stream_->ReconfigureVideoEncoder(encoder_config); | 2055 stream_->ReconfigureVideoEncoder(encoder_config.Copy()); |
2056 | 2056 |
2057 encoder_config.encoder_specific_settings = NULL; | 2057 encoder_config.encoder_specific_settings = NULL; |
2058 | 2058 |
2059 parameters_.encoder_config = encoder_config; | 2059 parameters_.encoder_config = std::move(encoder_config); |
2060 } | 2060 } |
2061 | 2061 |
2062 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { | 2062 void WebRtcVideoChannel2::WebRtcVideoSendStream::SetSend(bool send) { |
2063 rtc::CritScope cs(&lock_); | 2063 rtc::CritScope cs(&lock_); |
2064 sending_ = send; | 2064 sending_ = send; |
2065 UpdateSendState(); | 2065 UpdateSendState(); |
2066 } | 2066 } |
2067 | 2067 |
2068 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { | 2068 void WebRtcVideoChannel2::WebRtcVideoSendStream::OnLoadUpdate(Load load) { |
2069 if (worker_thread_ != rtc::Thread::Current()) { | 2069 if (worker_thread_ != rtc::Thread::Current()) { |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2242 } | 2242 } |
2243 | 2243 |
2244 RTC_CHECK(parameters_.codec_settings); | 2244 RTC_CHECK(parameters_.codec_settings); |
2245 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == | 2245 RTC_DCHECK_EQ((parameters_.encoder_config.content_type == |
2246 webrtc::VideoEncoderConfig::ContentType::kScreen), | 2246 webrtc::VideoEncoderConfig::ContentType::kScreen), |
2247 parameters_.options.is_screencast.value_or(false)) | 2247 parameters_.options.is_screencast.value_or(false)) |
2248 << "encoder content type inconsistent with screencast option"; | 2248 << "encoder content type inconsistent with screencast option"; |
2249 parameters_.encoder_config.encoder_specific_settings = | 2249 parameters_.encoder_config.encoder_specific_settings = |
2250 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); | 2250 ConfigureVideoEncoderSettings(parameters_.codec_settings->codec); |
2251 | 2251 |
2252 webrtc::VideoSendStream::Config config = parameters_.config; | 2252 webrtc::VideoSendStream::Config config = parameters_.config.Copy(); |
2253 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { | 2253 if (!config.rtp.rtx.ssrcs.empty() && config.rtp.rtx.payload_type == -1) { |
2254 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " | 2254 LOG(LS_WARNING) << "RTX SSRCs configured but there's no configured RTX " |
2255 "payload type the set codec. Ignoring RTX."; | 2255 "payload type the set codec. Ignoring RTX."; |
2256 config.rtp.rtx.ssrcs.clear(); | 2256 config.rtp.rtx.ssrcs.clear(); |
2257 } | 2257 } |
2258 stream_ = call_->CreateVideoSendStream(config, parameters_.encoder_config); | 2258 stream_ = call_->CreateVideoSendStream(std::move(config), |
| 2259 parameters_.encoder_config.Copy()); |
2259 | 2260 |
2260 parameters_.encoder_config.encoder_specific_settings = NULL; | 2261 parameters_.encoder_config.encoder_specific_settings = NULL; |
2261 pending_encoder_reconfiguration_ = false; | 2262 pending_encoder_reconfiguration_ = false; |
2262 | 2263 |
2263 if (sending_) { | 2264 if (sending_) { |
2264 stream_->Start(); | 2265 stream_->Start(); |
2265 } | 2266 } |
2266 } | 2267 } |
2267 | 2268 |
2268 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( | 2269 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2708 rtx_mapping[video_codecs[i].codec.id] != | 2709 rtx_mapping[video_codecs[i].codec.id] != |
2709 fec_settings.red_payload_type) { | 2710 fec_settings.red_payload_type) { |
2710 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2711 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2711 } | 2712 } |
2712 } | 2713 } |
2713 | 2714 |
2714 return video_codecs; | 2715 return video_codecs; |
2715 } | 2716 } |
2716 | 2717 |
2717 } // namespace cricket | 2718 } // namespace cricket |
OLD | NEW |