/* * Copyright (c) 2024 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 VIDEO_QUALITY_CONVERGENCE_CONTROLLER_H_ #define VIDEO_QUALITY_CONVERGENCE_CONTROLLER_H_ #include #include #include #include "api/field_trials_view.h" #include "api/sequence_checker.h" #include "api/video/video_codec_type.h" #include "video/quality_convergence_monitor.h" namespace webrtc { class QualityConvergenceController { public: void Initialize(int number_of_layers, std::optional static_qp_threshold, VideoCodecType codec, const FieldTrialsView& trials); // Add the supplied `qp` value to the detection window for specified layer. // `is_refresh_frame` must only be `true` if the corresponding // video frame is a refresh frame that is used to improve the visual quality. // Returns `true` if the algorithm has determined that the supplied QP values // have converged and reached the target quality for this layer. bool AddSampleAndCheckTargetQuality(int layer_index, int qp, bool is_refresh_frame); private: bool initialized_ = false; int number_of_layers_ = 0; std::vector> convergence_monitors_; SequenceChecker sequence_checker_{SequenceChecker::kDetached}; }; } // namespace webrtc #endif // VIDEO_QUALITY_CONVERGENCE_CONTROLLER_H_