
The overshoot detector uses a simple pacer model to determine an estimate of how much the encoder is overusing the target bitrate. This utilization factor can then be adjuster for when configuring the actual target bitrate. Spatial layers (simulcast streams) are adjusted separately. Temporal layers are measured separately, but are combined into a single utilization factor per spatial layer. Bug: webrtc:10155 Change-Id: I8ea58dc6c4871e880553d7c22202f11cb2feb216 Reviewed-on: https://webrtc-review.googlesource.com/c/114886 Commit-Queue: Erik Språng <sprang@webrtc.org> Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26573}
77 lines
2.8 KiB
C++
77 lines
2.8 KiB
C++
/*
|
|
* Copyright (c) 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.
|
|
*/
|
|
|
|
#ifndef RTC_BASE_EXPERIMENTS_RATE_CONTROL_SETTINGS_H_
|
|
#define RTC_BASE_EXPERIMENTS_RATE_CONTROL_SETTINGS_H_
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "api/transport/webrtc_key_value_config.h"
|
|
#include "api/video_codecs/video_codec.h"
|
|
#include "api/video_codecs/video_encoder_config.h"
|
|
#include "rtc_base/experiments/field_trial_parser.h"
|
|
#include "rtc_base/experiments/field_trial_units.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class RateControlSettings final {
|
|
public:
|
|
~RateControlSettings();
|
|
RateControlSettings(RateControlSettings&&);
|
|
|
|
static RateControlSettings ParseFromFieldTrials();
|
|
static RateControlSettings ParseFromKeyValueConfig(
|
|
const WebRtcKeyValueConfig* const key_value_config);
|
|
|
|
// When CongestionWindowPushback is enabled, the pacer is oblivious to
|
|
// the congestion window. The relation between outstanding data and
|
|
// the congestion window affects encoder allocations directly.
|
|
bool UseCongestionWindow() const;
|
|
int64_t GetCongestionWindowAdditionalTimeMs() const;
|
|
bool UseCongestionWindowPushback() const;
|
|
uint32_t CongestionWindowMinPushbackTargetBitrateBps() const;
|
|
|
|
absl::optional<double> GetPacingFactor() const;
|
|
bool UseAlrProbing() const;
|
|
|
|
bool LibvpxVp8TrustedRateController() const;
|
|
bool LibvpxVp9TrustedRateController() const;
|
|
|
|
// TODO(bugs.webrtc.org/10272): Remove one of these when we have merged
|
|
// VideoCodecMode and VideoEncoderConfig::ContentType.
|
|
double GetSimulcastHysteresisFactor(VideoCodecMode mode) const;
|
|
double GetSimulcastHysteresisFactor(
|
|
VideoEncoderConfig::ContentType content_type) const;
|
|
|
|
bool TriggerProbeOnMaxAllocatedBitrateChange() const;
|
|
bool UseEncoderBitrateAdjuster() const;
|
|
|
|
private:
|
|
explicit RateControlSettings(
|
|
const WebRtcKeyValueConfig* const key_value_config);
|
|
|
|
double GetSimulcastVideoHysteresisFactor() const;
|
|
double GetSimulcastScreenshareHysteresisFactor() const;
|
|
|
|
FieldTrialOptional<int> congestion_window_;
|
|
FieldTrialOptional<int> congestion_window_pushback_;
|
|
FieldTrialOptional<double> pacing_factor_;
|
|
FieldTrialParameter<bool> alr_probing_;
|
|
FieldTrialParameter<bool> trust_vp8_;
|
|
FieldTrialParameter<bool> trust_vp9_;
|
|
FieldTrialParameter<double> video_hysteresis_;
|
|
FieldTrialParameter<double> screenshare_hysteresis_;
|
|
FieldTrialParameter<bool> probe_max_allocation_;
|
|
FieldTrialParameter<bool> bitrate_adjuster_;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // RTC_BASE_EXPERIMENTS_RATE_CONTROL_SETTINGS_H_
|