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

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: Fix audio thread check when adding audio to bitrateallocator. Created 4 years, 4 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 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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(&parameters_.config.rtp.ssrcs); 1591 sp.GetPrimarySsrcs(&parameters_.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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698