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, std::move(config), default_send_options_, | 1146 call_, sp, config, default_send_options_, external_encoder_factory_, |
1147 external_encoder_factory_, video_config_.enable_cpu_overuse_detection, | 1147 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 webrtc::VideoSendStream::Config config, | 1536 const 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(std::move(config)), | 1540 : config(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 webrtc::VideoSendStream::Config config, | 1563 const 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_(std::move(config), options, max_bitrate_bps, codec_settings), | 1582 parameters_(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.Copy()); | 2038 stream_->ReconfigureVideoEncoder(encoder_config); |
2039 | 2039 |
2040 encoder_config.encoder_specific_settings = NULL; | 2040 encoder_config.encoder_specific_settings = NULL; |
2041 | 2041 |
2042 parameters_.encoder_config = std::move(encoder_config); | 2042 parameters_.encoder_config = 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.Copy(); | 2235 webrtc::VideoSendStream::Config config = parameters_.config; |
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(std::move(config), | 2241 stream_ = call_->CreateVideoSendStream(config, parameters_.encoder_config); |
2242 parameters_.encoder_config.Copy()); | |
2243 | 2242 |
2244 parameters_.encoder_config.encoder_specific_settings = NULL; | 2243 parameters_.encoder_config.encoder_specific_settings = NULL; |
2245 pending_encoder_reconfiguration_ = false; | 2244 pending_encoder_reconfiguration_ = false; |
2246 | 2245 |
2247 if (sending_) { | 2246 if (sending_) { |
2248 stream_->Start(); | 2247 stream_->Start(); |
2249 } | 2248 } |
2250 } | 2249 } |
2251 | 2250 |
2252 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( | 2251 WebRtcVideoChannel2::WebRtcVideoReceiveStream::WebRtcVideoReceiveStream( |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2697 rtx_mapping[video_codecs[i].codec.id] != | 2696 rtx_mapping[video_codecs[i].codec.id] != |
2698 fec_settings.red_payload_type) { | 2697 fec_settings.red_payload_type) { |
2699 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; | 2698 video_codecs[i].rtx_payload_type = rtx_mapping[video_codecs[i].codec.id]; |
2700 } | 2699 } |
2701 } | 2700 } |
2702 | 2701 |
2703 return video_codecs; | 2702 return video_codecs; |
2704 } | 2703 } |
2705 | 2704 |
2706 } // namespace cricket | 2705 } // namespace cricket |
OLD | NEW |