Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2.cc

Issue 2250123002: Reland of Add task queue to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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(&parameters_.config.rtp.ssrcs); 1594 sp.GetPrimarySsrcs(&parameters_.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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2.h ('k') | webrtc/media/engine/webrtcvideoengine2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698