| /* |
| * 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 <memory> |
| #include <optional> |
| #include <vector> |
| |
| #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<int> 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<std::unique_ptr<QualityConvergenceMonitor>> convergence_monitors_; |
| SequenceChecker sequence_checker_{SequenceChecker::kDetached}; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // VIDEO_QUALITY_CONVERGENCE_CONTROLLER_H_ |