69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  *  Copyright 2019 The WebRTC project authors. All Rights Reserved.
 | |
|  *
 | |
|  *  Use of this source code is governed by a BSD-style license
 | |
|  *  that can be found in the LICENSE file in the root of the source
 | |
|  *  tree. An additional intellectual property rights grant can be found
 | |
|  *  in the file PATENTS.  All contributing project authors may
 | |
|  *  be found in the AUTHORS file in the root of the source tree.
 | |
|  */
 | |
| 
 | |
| #include "rtc_base/experiments/stable_target_rate_experiment.h"
 | |
| 
 | |
| #include "api/transport/field_trial_based_config.h"
 | |
| #include "rtc_base/experiments/rate_control_settings.h"
 | |
| 
 | |
| namespace webrtc {
 | |
| namespace {
 | |
| constexpr char kFieldTrialName[] = "WebRTC-StableTargetRate";
 | |
| }  // namespace
 | |
| 
 | |
| StableTargetRateExperiment::StableTargetRateExperiment(
 | |
|     const WebRtcKeyValueConfig* const key_value_config,
 | |
|     double default_video_hysteresis,
 | |
|     double default_screenshare_hysteresis)
 | |
|     : enabled_("enabled", false),
 | |
|       video_hysteresis_factor_("video_hysteresis_factor",
 | |
|                                default_video_hysteresis),
 | |
|       screenshare_hysteresis_factor_("screenshare_hysteresis_factor",
 | |
|                                      default_screenshare_hysteresis) {
 | |
|   ParseFieldTrial(
 | |
|       {&enabled_, &video_hysteresis_factor_, &screenshare_hysteresis_factor_},
 | |
|       key_value_config->Lookup(kFieldTrialName));
 | |
| }
 | |
| 
 | |
| StableTargetRateExperiment::StableTargetRateExperiment(
 | |
|     const StableTargetRateExperiment&) = default;
 | |
| StableTargetRateExperiment::StableTargetRateExperiment(
 | |
|     StableTargetRateExperiment&&) = default;
 | |
| 
 | |
| StableTargetRateExperiment StableTargetRateExperiment::ParseFromFieldTrials() {
 | |
|   FieldTrialBasedConfig config;
 | |
|   return ParseFromKeyValueConfig(&config);
 | |
| }
 | |
| 
 | |
| StableTargetRateExperiment StableTargetRateExperiment::ParseFromKeyValueConfig(
 | |
|     const WebRtcKeyValueConfig* const key_value_config) {
 | |
|   RateControlSettings rate_control =
 | |
|       RateControlSettings::ParseFromKeyValueConfig(key_value_config);
 | |
|   return StableTargetRateExperiment(
 | |
|       key_value_config,
 | |
|       rate_control.GetSimulcastHysteresisFactor(VideoCodecMode::kRealtimeVideo),
 | |
|       rate_control.GetSimulcastHysteresisFactor(
 | |
|           VideoCodecMode::kScreensharing));
 | |
| }
 | |
| 
 | |
| bool StableTargetRateExperiment::IsEnabled() const {
 | |
|   return enabled_.Get();
 | |
| }
 | |
| 
 | |
| double StableTargetRateExperiment::GetVideoHysteresisFactor() const {
 | |
|   return video_hysteresis_factor_.Get();
 | |
| }
 | |
| 
 | |
| double StableTargetRateExperiment::GetScreenshareHysteresisFactor() const {
 | |
|   return screenshare_hysteresis_factor_.Get();
 | |
| }
 | |
| 
 | |
| }  // namespace webrtc
 |