mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 22:00:47 +01:00

Include dropped frames by the encoder in the frame drop percentage. To react faster at low framerates: - Use ExpFilter instead of MovingAverage to filter QP values. - Reduce sampling interval while waiting for minimum number of needed frames (when not in fast rampup mode). A separate slower ExpFilter is used for upscaling. Bug: webrtc:9169 Change-Id: If7ff6c3bd4201fda2da67125889838fe96ce7061 Reviewed-on: https://webrtc-review.googlesource.com/70761 Commit-Queue: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23014}
59 lines
2.1 KiB
C++
59 lines
2.1 KiB
C++
/*
|
|
* Copyright 2018 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_QUALITY_SCALING_EXPERIMENT_H_
|
|
#define RTC_BASE_EXPERIMENTS_QUALITY_SCALING_EXPERIMENT_H_
|
|
|
|
#include "api/optional.h"
|
|
#include "api/video_codecs/video_encoder.h"
|
|
#include "common_types.h" // NOLINT(build/include)
|
|
|
|
namespace webrtc {
|
|
class QualityScalingExperiment {
|
|
public:
|
|
struct Settings {
|
|
int vp8_low; // VP8: low QP threshold.
|
|
int vp8_high; // VP8: high QP threshold.
|
|
int vp9_low; // VP9: low QP threshold.
|
|
int vp9_high; // VP9: high QP threshold.
|
|
int h264_low; // H264: low QP threshold.
|
|
int h264_high; // H264: high QP threshold.
|
|
int generic_low; // Generic: low QP threshold.
|
|
int generic_high; // Generic: high QP threshold.
|
|
float alpha_high; // |alpha_| for ExpFilter used when checking high QP.
|
|
float alpha_low; // |alpha_| for ExpFilter used when checking low QP.
|
|
int drop; // >0 sets |use_all_drop_reasons| to true.
|
|
};
|
|
|
|
// Used by QualityScaler.
|
|
struct Config {
|
|
float alpha_high = 0.9995f;
|
|
float alpha_low = 0.9999f;
|
|
// If set, all type of dropped frames are used.
|
|
// Otherwise only dropped frames by MediaOptimization are used.
|
|
bool use_all_drop_reasons = false;
|
|
};
|
|
|
|
// Returns true if the experiment is enabled.
|
|
static bool Enabled();
|
|
|
|
// Returns settings from field trial.
|
|
static rtc::Optional<Settings> ParseSettings();
|
|
|
|
// Returns QpThresholds for the |codec_type|.
|
|
static rtc::Optional<VideoEncoder::QpThresholds> GetQpThresholds(
|
|
VideoCodecType codec_type);
|
|
|
|
// Returns parsed values. If the parsing fails, default values are returned.
|
|
static Config GetConfig();
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // RTC_BASE_EXPERIMENTS_QUALITY_SCALING_EXPERIMENT_H_
|