mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-03-11 06:58:18 +00:00
nvenc: Allow different const qps for I, P and B frames
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
parent
ca960161f0
commit
3df77b58e3
@ -511,10 +511,26 @@ static int nvenc_map_preset(NVENCContext *ctx)
|
||||
|
||||
static void set_constqp(AVCodecContext *avctx, NV_ENC_RC_PARAMS *rc)
|
||||
{
|
||||
NVENCContext *ctx = avctx->priv_data;
|
||||
rc->rateControlMode = NV_ENC_PARAMS_RC_CONSTQP;
|
||||
rc->constQP.qpInterB = avctx->global_quality;
|
||||
rc->constQP.qpInterP = avctx->global_quality;
|
||||
rc->constQP.qpIntra = avctx->global_quality;
|
||||
|
||||
if (ctx->init_qp_p >= 0) {
|
||||
rc->constQP.qpInterP = ctx->init_qp_p;
|
||||
if (ctx->init_qp_i >= 0 && ctx->init_qp_b >= 0) {
|
||||
rc->constQP.qpIntra = ctx->init_qp_i;
|
||||
rc->constQP.qpInterB = ctx->init_qp_b;
|
||||
} else if (avctx->i_quant_factor != 0.0 && avctx->b_quant_factor != 0.0) {
|
||||
rc->constQP.qpIntra = av_clip(rc->constQP.qpInterP * fabs(avctx->i_quant_factor) + avctx->i_quant_offset + 0.5, 0, 51);
|
||||
rc->constQP.qpInterB = av_clip(rc->constQP.qpInterP * fabs(avctx->b_quant_factor) + avctx->b_quant_offset + 0.5, 0, 51);
|
||||
} else {
|
||||
rc->constQP.qpIntra = rc->constQP.qpInterP;
|
||||
rc->constQP.qpInterB = rc->constQP.qpInterP;
|
||||
}
|
||||
} else if (avctx->global_quality >= 0) {
|
||||
rc->constQP.qpInterP = avctx->global_quality;
|
||||
rc->constQP.qpInterB = avctx->global_quality;
|
||||
rc->constQP.qpIntra = avctx->global_quality;
|
||||
}
|
||||
}
|
||||
|
||||
static void set_vbr(AVCodecContext *avctx, NV_ENC_RC_PARAMS *rc)
|
||||
@ -575,12 +591,6 @@ static void nvenc_override_rate_control(AVCodecContext *avctx,
|
||||
|
||||
switch (ctx->rc) {
|
||||
case NV_ENC_PARAMS_RC_CONSTQP:
|
||||
if (avctx->global_quality < 0) {
|
||||
av_log(avctx, AV_LOG_WARNING,
|
||||
"The constant quality rate-control requires "
|
||||
"the 'global_quality' option set.\n");
|
||||
return;
|
||||
}
|
||||
set_constqp(avctx, rc);
|
||||
return;
|
||||
case NV_ENC_PARAMS_RC_2_PASS_VBR:
|
||||
|
Loading…
Reference in New Issue
Block a user