From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 700954BD8E for <ffmpegdev@gitmailbox.com>; Fri, 4 Apr 2025 16:18:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4C682689D65; Fri, 4 Apr 2025 19:18:15 +0300 (EEST) Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C2087687BFB for <ffmpeg-devel@ffmpeg.org>; Fri, 4 Apr 2025 19:18:08 +0300 (EEST) Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-ac28e66c0e1so338648566b.0 for <ffmpeg-devel@ffmpeg.org>; Fri, 04 Apr 2025 09:18:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1743783487; x=1744388287; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=MC2zZ4lxQnUqFxlxvieqmnY20zH8QX42I0ZfSk98vIQ=; b=Q5fTR96MiQBhPgHxjlYOXvJ6kPD7FX65hvLdZg0YHvEtHgDikKsfMHv3XnByC6loxG rytW1mg+yndNR2nVhRj7aggYHuF92UdxpvmgnOlNMhAa/ZMaDeUdEDzqyKugWJ/5XNOH Vq/C77uA+QaYgVvDfS6gYqM8wtfZYwzD2c2sGgxd4E4YgCVBwEVO5s+3Kg/kAFb/YU2J kJctXpDG2ekOf1KGcB7mTlS7/3MgDLCTfzm1zX2U9JXQS+l2CnL4aPWaO/dReinyqp/t 9DQssR89hM0vUg6rAdwWPRrXvKFnoKC3jss3ULqGZ1Np6BS3nxCnOogJtskta7CTRhH/ yBRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1743783487; x=1744388287; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=MC2zZ4lxQnUqFxlxvieqmnY20zH8QX42I0ZfSk98vIQ=; b=G0/vyRdsRYsl+inErtHGNl+A/zXaGbD4LISYYum996q3rFWrmVMBkRQKptS0FsorkN gctLSrKw+M/zkeAObxSxF0ZuxB/bgYEoZnlf560V2Wgdu6clrQ4X0+H1XjoRVm0jL0Sn ex2jiIw062J0YxrtpZpqGzUc7ntU2qmqK2scaUYameNeIAXG6kHO9WEoiOmkr1qglMhe RjPme63m5l4xxdJupymIAbRcVHJIpOVl6IhomFh1Azcn7iIuY2PQcOtivR5QZ5toxmQF Qgfgq4id6zpW9z3rYvkOB+PD2Kgu1cDzr/KpsiQmVDT/EYBFGZZyVElbXUMI8sfWVIqi /0ng== X-Gm-Message-State: AOJu0YxCFyU8UZoxls9U0XlqplbeyU72eZvWHGPF1k7SjlZo2PrUXoVx /wwe2IZpIBBq+bLSFDvIJoUrRK1W60/Upn46or3Le2jty0IgFOcUuAxS1624kaA= X-Gm-Gg: ASbGncsFV8DKcizHBuSwTtsaejHqB6DRydm1IaePQHJ2ypYma7LxgpRpx2zPAnmvDkh KiAIXeuisPSeklSaBUO+PdMFDHqbh53SQ49yoKJYtIiszAbTfr4OR2Vo67sGHXZXu7BFU+btjmm 2q4wjbR/Oy+gKJ/GsjKQC5oq8T62B3+bCPMBEf12F1s834PBk2gbgweI54om+Knvxzw5NUYdLtN dIhp/Jo3ZC7hxVTiWerny8t8PsK0lVeHr9i+rBDbDiTdn7qr08S+UhfTq03KFsXxzsDYVQ5hPUj 48aWiWXBzP2Vc6IXXIIkOQOglcEXYEKyuMdEMfRusHSdceeFolOkEaG0G2+K8hYtIsvgPpe1yqn JjVXa0woc/VyDptzw X-Google-Smtp-Source: AGHT+IFv3Q66nCf93pbHjl0ur4/YUJtPAEDbKuV+h1B6DmjPrwhwFaD8qcI6EwEp2eaJ60xZVuSj1w== X-Received: by 2002:a17:907:3e1b:b0:ac7:7d43:4535 with SMTP id a640c23a62f3a-ac7d6927509mr278262566b.0.1743783487013; Fri, 04 Apr 2025 09:18:07 -0700 (PDT) Received: from localhost.localdomain ([87.116.182.236]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ac7c0186250sm273150166b.155.2025.04.04.09.18.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Apr 2025 09:18:06 -0700 (PDT) From: Dmitrii Ovchinnikov <ovchinnikov.dmitrii@gmail.com> To: ffmpeg-devel@ffmpeg.org Date: Fri, 4 Apr 2025 18:17:52 +0200 Message-ID: <20250404161752.1244-1-ovchinnikov.dmitrii@gmail.com> X-Mailer: git-send-email 2.47.1.windows.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/amfenc_av1: Add B-frame QP control X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: Dmitrii Ovchinnikov <ovchinnikov.dmitrii@gmail.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250404161752.1244-1-ovchinnikov.dmitrii@gmail.com/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> --- libavcodec/amfenc.h | 2 ++ libavcodec/amfenc_av1.c | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/libavcodec/amfenc.h b/libavcodec/amfenc.h index aec3a3f9ec..d716215035 100644 --- a/libavcodec/amfenc.h +++ b/libavcodec/amfenc.h @@ -106,6 +106,8 @@ typedef struct AMFEncoderContext { int max_qp_i; int min_qp_p; int max_qp_p; + int min_qp_b; + int max_qp_b; int tier; // AV1 - specific options diff --git a/libavcodec/amfenc_av1.c b/libavcodec/amfenc_av1.c index 33215311cd..399c032158 100644 --- a/libavcodec/amfenc_av1.c +++ b/libavcodec/amfenc_av1.c @@ -113,13 +113,16 @@ static const AVOption options[] = { { "high_motion_quality_boost_enable", "Enable High motion quality boost mode", OFFSET(hw_high_motion_quality_boost), AV_OPT_TYPE_BOOL, {.i64 = -1 }, -1, 1, VE }, - // min_qp_i -> min_qp_intra, min_qp_p -> min_qp_inter + // min_qp_i -> min_qp_intra, min_qp_p -> min_qp_p min_qp_b -> min_qp_b { "min_qp_i", "min quantization parameter for I-frame", OFFSET(min_qp_i), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "max_qp_i", "max quantization parameter for I-frame", OFFSET(max_qp_i), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "min_qp_p", "min quantization parameter for P-frame", OFFSET(min_qp_p), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "max_qp_p", "max quantization parameter for P-frame", OFFSET(max_qp_p), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, + { "min_qp_b", "min quantization parameter for B-frame", OFFSET(min_qp_b), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, + { "max_qp_b", "max quantization parameter for B-frame", OFFSET(max_qp_b), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "qp_p", "quantization parameter for P-frame", OFFSET(qp_p), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "qp_i", "quantization parameter for I-frame", OFFSET(qp_i), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, + { "qp_b", "quantization parameter for B-frame", OFFSET(qp_b), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 255, VE }, { "skip_frame", "Rate Control Based Frame Skip", OFFSET(skip_frame), AV_OPT_TYPE_BOOL,{.i64 = -1 }, -1, 1, VE }, { "aq_mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, AMF_VIDEO_ENCODER_AV1_AQ_MODE_CAQ, VE , .unit = "adaptive_quantisation_mode" }, @@ -309,7 +312,8 @@ static av_cold int amf_encode_init_av1(AVCodecContext* avctx) if (ctx->rate_control_mode == AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_UNKNOWN) { if (ctx->min_qp_i != -1 || ctx->max_qp_i != -1 || ctx->min_qp_p != -1 || ctx->max_qp_p != -1 || - ctx->qp_i != -1 || ctx->qp_p != -1) { + ctx->min_qp_b != -1 || ctx->max_qp_b != -1 || + ctx->qp_i != -1 || ctx->qp_p != -1 || ctx->qp_b != -1) { ctx->rate_control_mode = AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_METHOD_CONSTANT_QP; av_log(ctx, AV_LOG_DEBUG, "Rate control turned to CQP\n"); } @@ -589,6 +593,13 @@ static av_cold int amf_encode_init_av1(AVCodecContext* avctx) int qval = avctx->qmin > 255 ? 255 : avctx->qmin; AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MIN_Q_INDEX_INTER, qval); } + if (ctx->min_qp_b != -1) { + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MIN_Q_INDEX_INTER_B, ctx->min_qp_b); + } + else if (avctx->qmin != -1) { + int qval = avctx->qmin > 255 ? 255 : avctx->qmin; + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MIN_Q_INDEX_INTER_B, qval); + } if (ctx->max_qp_p != -1) { AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTER, ctx->max_qp_p); } @@ -596,6 +607,13 @@ static av_cold int amf_encode_init_av1(AVCodecContext* avctx) int qval = avctx->qmax > 255 ? 255 : avctx->qmax; AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTER, qval); } + if (ctx->max_qp_b != -1) { + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTER_B, ctx->max_qp_b); + } + else if (avctx->qmax != -1) { + int qval = avctx->qmax > 255 ? 255 : avctx->qmax; + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_MAX_Q_INDEX_INTER_B, qval); + } if (ctx->qp_p != -1) { AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_Q_INDEX_INTER, ctx->qp_p); @@ -603,6 +621,9 @@ static av_cold int amf_encode_init_av1(AVCodecContext* avctx) if (ctx->qp_i != -1) { AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_Q_INDEX_INTRA, ctx->qp_i); } + if (ctx->qp_b != -1) { + AMF_ASSIGN_PROPERTY_INT64(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_Q_INDEX_INTER_B, ctx->qp_b); + } if (ctx->skip_frame != -1) { AMF_ASSIGN_PROPERTY_BOOL(res, ctx->encoder, AMF_VIDEO_ENCODER_AV1_RATE_CONTROL_SKIP_FRAME, ((ctx->skip_frame == 0) ? false : true)); -- 2.47.1.windows.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".