#ifndef MEDIA_GPU_H264_RATECTRL_RTC_H_
#define MEDIA_GPU_H264_RATECTRL_RTC_H_
#include <memory>
#include "media/gpu/h264_rate_controller.h"
#include "media/gpu/media_gpu_export.h"
namespace media {
typedef H264RateControllerSettings H264RateControlConfigRTC;
struct MEDIA_GPU_EXPORT H264FrameParamsRTC {
bool keyframe;
int temporal_layer_id;
base::TimeDelta timestamp;
};
class MEDIA_GPU_EXPORT H264RateCtrlRTC {
public:
enum class FrameDropDecision {
kOk,
kDrop,
};
~H264RateCtrlRTC();
H264RateCtrlRTC(const H264RateCtrlRTC& other) = delete;
H264RateCtrlRTC& operator=(const H264RateCtrlRTC& other) = delete;
static std::unique_ptr<H264RateCtrlRTC> Create(
const H264RateControlConfigRTC& config);
void UpdateRateControl(const H264RateControlConfigRTC& config);
int GetQP();
int GetLoopfilterLevel() const;
FrameDropDecision ComputeQP(const H264FrameParamsRTC& frame_params);
void PostEncodeUpdate(uint64_t encoded_frame_size,
const H264FrameParamsRTC& frame_params);
void GetBufferFullness(base::span<int> buffer_fullness,
base::TimeDelta timestamp);
private:
explicit H264RateCtrlRTC(const H264RateControlConfigRTC& config);
bool config_changed_ = false;
H264RateControlConfigRTC config_;
H264RateControlConfigRTC new_config_;
int frame_qp_ = 0;
H264RateController rate_controller_;
};
}
#endif