| Index: talk/media/webrtc/webrtcvideoengine2.cc
|
| diff --git a/talk/media/webrtc/webrtcvideoengine2.cc b/talk/media/webrtc/webrtcvideoengine2.cc
|
| index bcd513ee2dac2c7d55c8b891fbf75a4a7c76852b..c0c9a8f6b00e9a9192c9f99c91eb7ee26145e2cb 100644
|
| --- a/talk/media/webrtc/webrtcvideoengine2.cc
|
| +++ b/talk/media/webrtc/webrtcvideoengine2.cc
|
| @@ -489,7 +489,8 @@ void* WebRtcVideoChannel2::WebRtcVideoSendStream::ConfigureVideoEncoderSettings(
|
| denoising = false;
|
| } else {
|
| // Use codec default if video_noise_reduction is unset.
|
| - codec_default_denoising = !options.video_noise_reduction.Get(&denoising);
|
| + codec_default_denoising = !options.video_noise_reduction;
|
| + denoising = options.video_noise_reduction.value_or(false);
|
| }
|
|
|
| if (CodecNamesEq(codec.name, kVp8CodecName)) {
|
| @@ -777,7 +778,8 @@ WebRtcVideoChannel2::WebRtcVideoChannel2(
|
| RTC_DCHECK(thread_checker_.CalledOnValidThread());
|
| SetDefaultOptions();
|
| options_.SetAll(options);
|
| - options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_);
|
| + if (options_.cpu_overuse_detection)
|
| + signal_cpu_adaptation_ = *options_.cpu_overuse_detection;
|
| rtcp_receiver_report_ssrc_ = kDefaultRtcpReceiverReportSsrc;
|
| sending_ = false;
|
| default_send_ssrc_ = 0;
|
| @@ -785,10 +787,10 @@ WebRtcVideoChannel2::WebRtcVideoChannel2(
|
| }
|
|
|
| void WebRtcVideoChannel2::SetDefaultOptions() {
|
| - options_.cpu_overuse_detection.Set(true);
|
| - options_.dscp.Set(false);
|
| - options_.suspend_below_min_bitrate.Set(false);
|
| - options_.screencast_min_bitrate.Set(0);
|
| + options_.cpu_overuse_detection = rtc::Maybe<bool>(true);
|
| + options_.dscp = rtc::Maybe<bool>(false);
|
| + options_.suspend_below_min_bitrate = rtc::Maybe<bool>(false);
|
| + options_.screencast_min_bitrate = rtc::Maybe<int>(0);
|
| }
|
|
|
| WebRtcVideoChannel2::~WebRtcVideoChannel2() {
|
| @@ -952,15 +954,15 @@ bool WebRtcVideoChannel2::SetSendCodecs(const std::vector<VideoCodec>& codecs) {
|
|
|
| LOG(LS_INFO) << "Using codec: " << supported_codecs.front().codec.ToString();
|
|
|
| - VideoCodecSettings old_codec;
|
| - if (send_codec_.Get(&old_codec) && supported_codecs.front() == old_codec) {
|
| + if (send_codec_ && supported_codecs.front() == *send_codec_) {
|
| LOG(LS_INFO) << "Ignore call to SetSendCodecs because first supported "
|
| "codec hasn't changed.";
|
| // Using same codec, avoid reconfiguring.
|
| return true;
|
| }
|
|
|
| - send_codec_.Set(supported_codecs.front());
|
| + send_codec_ = rtc::Maybe<WebRtcVideoChannel2::VideoCodecSettings>(
|
| + supported_codecs.front());
|
|
|
| rtc::CritScope stream_lock(&stream_crit_);
|
| LOG(LS_INFO) << "Change the send codec because SetSendCodecs has a different "
|
| @@ -1006,12 +1008,11 @@ bool WebRtcVideoChannel2::SetSendCodecs(const std::vector<VideoCodec>& codecs) {
|
| }
|
|
|
| bool WebRtcVideoChannel2::GetSendCodec(VideoCodec* codec) {
|
| - VideoCodecSettings codec_settings;
|
| - if (!send_codec_.Get(&codec_settings)) {
|
| + if (!send_codec_) {
|
| LOG(LS_VERBOSE) << "GetSendCodec: No send codec set.";
|
| return false;
|
| }
|
| - *codec = codec_settings.codec;
|
| + *codec = send_codec_->codec;
|
| return true;
|
| }
|
|
|
| @@ -1028,7 +1029,7 @@ bool WebRtcVideoChannel2::SetSendStreamFormat(uint32_t ssrc,
|
|
|
| bool WebRtcVideoChannel2::SetSend(bool send) {
|
| LOG(LS_VERBOSE) << "SetSend: " << (send ? "true" : "false");
|
| - if (send && !send_codec_.IsSet()) {
|
| + if (send && !send_codec_) {
|
| LOG(LS_ERROR) << "SetSend(true) called before setting codec.";
|
| return false;
|
| }
|
| @@ -1224,11 +1225,7 @@ bool WebRtcVideoChannel2::AddRecvStream(const StreamParams& sp,
|
| // Set up A/V sync group based on sync label.
|
| config.sync_group = sp.sync_label;
|
|
|
| - config.rtp.remb = false;
|
| - VideoCodecSettings send_codec;
|
| - if (send_codec_.Get(&send_codec)) {
|
| - config.rtp.remb = HasRemb(send_codec.codec);
|
| - }
|
| + config.rtp.remb = send_codec_ ? HasRemb(send_codec_->codec) : false;
|
|
|
| receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
|
| call_, sp, config, external_decoder_factory_, default_stream,
|
| @@ -1612,11 +1609,11 @@ bool WebRtcVideoChannel2::SetOptions(const VideoOptions& options) {
|
| }
|
| {
|
| rtc::CritScope lock(&capturer_crit_);
|
| - options_.cpu_overuse_detection.Get(&signal_cpu_adaptation_);
|
| + if (options_.cpu_overuse_detection)
|
| + signal_cpu_adaptation_ = *options_.cpu_overuse_detection;
|
| }
|
| - rtc::DiffServCodePoint dscp = options_.dscp.GetWithDefaultIfUnset(false)
|
| - ? rtc::DSCP_AF41
|
| - : rtc::DSCP_DEFAULT;
|
| + rtc::DiffServCodePoint dscp =
|
| + options_.dscp.value_or(false) ? rtc::DSCP_AF41 : rtc::DSCP_DEFAULT;
|
| MediaChannel::SetDscp(dscp);
|
| rtc::CritScope stream_lock(&stream_crit_);
|
| for (std::map<uint32_t, WebRtcVideoSendStream*>::iterator it =
|
| @@ -1708,12 +1705,11 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::VideoSendStreamParameters::
|
| const webrtc::VideoSendStream::Config& config,
|
| const VideoOptions& options,
|
| int max_bitrate_bps,
|
| - const Settable<VideoCodecSettings>& codec_settings)
|
| + const rtc::Maybe<VideoCodecSettings>& codec_settings)
|
| : config(config),
|
| options(options),
|
| max_bitrate_bps(max_bitrate_bps),
|
| - codec_settings(codec_settings) {
|
| -}
|
| + codec_settings(codec_settings) {}
|
|
|
| WebRtcVideoChannel2::WebRtcVideoSendStream::AllocatedEncoder::AllocatedEncoder(
|
| webrtc::VideoEncoder* encoder,
|
| @@ -1737,7 +1733,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
| WebRtcVideoEncoderFactory* external_encoder_factory,
|
| const VideoOptions& options,
|
| int max_bitrate_bps,
|
| - const Settable<VideoCodecSettings>& codec_settings,
|
| + const rtc::Maybe<VideoCodecSettings>& codec_settings,
|
| const std::vector<webrtc::RtpExtension>& rtp_extensions)
|
| : ssrcs_(sp.ssrcs),
|
| ssrc_groups_(sp.ssrc_groups),
|
| @@ -1760,9 +1756,8 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::WebRtcVideoSendStream(
|
| parameters_.config.rtp.c_name = sp.cname;
|
| parameters_.config.rtp.extensions = rtp_extensions;
|
|
|
| - VideoCodecSettings params;
|
| - if (codec_settings.Get(¶ms)) {
|
| - SetCodec(params);
|
| + if (codec_settings) {
|
| + SetCodec(*codec_settings);
|
| }
|
| }
|
|
|
| @@ -1940,11 +1935,10 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetApplyRotation(
|
| void WebRtcVideoChannel2::WebRtcVideoSendStream::SetOptions(
|
| const VideoOptions& options) {
|
| rtc::CritScope cs(&lock_);
|
| - VideoCodecSettings codec_settings;
|
| - if (parameters_.codec_settings.Get(&codec_settings)) {
|
| + if (parameters_.codec_settings) {
|
| LOG(LS_INFO) << "SetCodecAndOptions because of SetOptions; options="
|
| << options.ToString();
|
| - SetCodecAndOptions(codec_settings, options);
|
| + SetCodecAndOptions(*parameters_.codec_settings, options);
|
| } else {
|
| parameters_.options = options;
|
| }
|
| @@ -2049,10 +2043,12 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetCodecAndOptions(
|
| parameters_.config.rtp.nack.rtp_history_ms =
|
| HasNack(codec_settings.codec) ? kNackHistoryMs : 0;
|
|
|
| - options.suspend_below_min_bitrate.Get(
|
| - ¶meters_.config.suspend_below_min_bitrate);
|
| + RTC_CHECK(options.suspend_below_min_bitrate);
|
| + parameters_.config.suspend_below_min_bitrate =
|
| + *options.suspend_below_min_bitrate;
|
|
|
| - parameters_.codec_settings.Set(codec_settings);
|
| + parameters_.codec_settings =
|
| + rtc::Maybe<WebRtcVideoChannel2::VideoCodecSettings>(codec_settings);
|
| parameters_.options = options;
|
|
|
| LOG(LS_INFO)
|
| @@ -2081,11 +2077,9 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
|
| const VideoCodec& codec) const {
|
| webrtc::VideoEncoderConfig encoder_config;
|
| if (dimensions.is_screencast) {
|
| - int screencast_min_bitrate_kbps;
|
| - parameters_.options.screencast_min_bitrate.Get(
|
| - &screencast_min_bitrate_kbps);
|
| + RTC_CHECK(parameters_.options.screencast_min_bitrate);
|
| encoder_config.min_transmit_bitrate_bps =
|
| - screencast_min_bitrate_kbps * 1000;
|
| + *parameters_.options.screencast_min_bitrate * 1000;
|
| encoder_config.content_type =
|
| webrtc::VideoEncoderConfig::ContentType::kScreen;
|
| } else {
|
| @@ -2121,7 +2115,7 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::CreateVideoEncoderConfig(
|
| parameters_.max_bitrate_bps, stream_count);
|
|
|
| // Conference mode screencast uses 2 temporal layers split at 100kbit.
|
| - if (parameters_.options.conference_mode.GetWithDefaultIfUnset(false) &&
|
| + if (parameters_.options.conference_mode.value_or(false) &&
|
| dimensions.is_screencast && encoder_config.streams.size() == 1) {
|
| ScreenshareLayerConfig config = ScreenshareLayerConfig::GetDefault();
|
|
|
| @@ -2156,8 +2150,8 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::SetDimensions(
|
|
|
| RTC_DCHECK(!parameters_.encoder_config.streams.empty());
|
|
|
| - VideoCodecSettings codec_settings;
|
| - parameters_.codec_settings.Get(&codec_settings);
|
| + RTC_CHECK(parameters_.codec_settings);
|
| + VideoCodecSettings codec_settings = *parameters_.codec_settings;
|
|
|
| webrtc::VideoEncoderConfig encoder_config =
|
| CreateVideoEncoderConfig(last_dimensions_, codec_settings.codec);
|
| @@ -2202,9 +2196,8 @@ WebRtcVideoChannel2::WebRtcVideoSendStream::GetVideoSenderInfo() {
|
| for (uint32_t ssrc : parameters_.config.rtp.ssrcs)
|
| info.add_ssrc(ssrc);
|
|
|
| - VideoCodecSettings codec_settings;
|
| - if (parameters_.codec_settings.Get(&codec_settings))
|
| - info.codec_name = codec_settings.codec.name;
|
| + if (parameters_.codec_settings)
|
| + info.codec_name = parameters_.codec_settings->codec.name;
|
| for (size_t i = 0; i < parameters_.encoder_config.streams.size(); ++i) {
|
| if (i == parameters_.encoder_config.streams.size() - 1) {
|
| info.preferred_bitrate +=
|
| @@ -2316,11 +2309,10 @@ void WebRtcVideoChannel2::WebRtcVideoSendStream::RecreateWebRtcStream() {
|
| call_->DestroyVideoSendStream(stream_);
|
| }
|
|
|
| - VideoCodecSettings codec_settings;
|
| - parameters_.codec_settings.Get(&codec_settings);
|
| + RTC_CHECK(parameters_.codec_settings);
|
| parameters_.encoder_config.encoder_specific_settings =
|
| ConfigureVideoEncoderSettings(
|
| - codec_settings.codec, parameters_.options,
|
| + parameters_.codec_settings->codec, parameters_.options,
|
| parameters_.encoder_config.content_type ==
|
| webrtc::VideoEncoderConfig::ContentType::kScreen);
|
|
|
|
|