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

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

Issue 2060403002: Add task queue to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@move_getpadding
Patch Set: Rebased Created 4 years, 5 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 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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(&parameters_.config.rtp.ssrcs); 1569 sp.GetPrimarySsrcs(&parameters_.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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698