// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_GPU_H264_RATE_CONTROLLER_H_ #define MEDIA_GPU_H264_RATE_CONTROLLER_H_ #include <vector> #include "base/moving_window.h" #include "media/gpu/frame_size_estimator.h" #include "media/gpu/hrd_buffer.h" #include "media/gpu/media_gpu_export.h" #include "media/video/video_encode_accelerator.h" namespace media { struct MEDIA_GPU_EXPORT H264RateControllerLayerSettings { … }; struct MEDIA_GPU_EXPORT H264RateControllerSettings { … }; // H264RateController class implements a rate control algorithm for H.264 video // encoder. The algorithm adjusts the QP for each frame, aiming to keep the // video stream bitrate close to the target bitrate. The controller supports // up to two temporal layers, each with its own HRD buffer. The HRD buffer // stores the encoded frames from the current layer and all the lower layers // that it depens on. // // The prediction of the QP parameter for intra encoded frames is based on the // R-D model, using the expected size of the encoded frame as an input. // For inter encoded frames, the QP is calculated based on the long-term and // short-term statistics of the estamated QP and frame size, the prediction // error of the frame size prediction for the previously encoded frames, // and the HRD buffer fullness. // // The QP values used for encoding the inter predicted frames (P frames) are // estimated from the statistics of the previous frames and the expected frame // size. The estimation engine holds the short-term and long-term statistics for // each temporal layer. The QP is further modified according to the HRD buffer // fullness and the limits of the QP range. If rate controller is configured for // the fixed delta QP between layers (Fixed Delta QP mode), the QP for the // current layer is calculated by adding a constant value to the previous // layer's QP. class MEDIA_GPU_EXPORT H264RateController { … }; } // namespace media #endif // MEDIA_GPU_H264_RATE_CONTROLLER_H_