On 27/11/2023 00:58, fei.w.wang-at-intel....@ffmpeg.org wrote:
From: Fei Wang <fei.w.w...@intel.com>
Keep same way with librav1e/libsvtav1/qsv_av1.. to make it more
acceptable instead of using global option "-global_quality".
Fix #10615
Signed-off-by: Fei Wang <fei.w.w...@intel.com>
---
doc/encoders.texi | 1 +
libavcodec/vaapi_encode_av1.c | 6 ++++++
2 files changed, 7 insertions(+)
diff --git a/doc/encoders.texi b/doc/encoders.texi
index 27a9acf076..2cffc32daf 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -4079,6 +4079,7 @@ Each encoder also has its own specific options:
@table @option
@item av1_vaapi
+@option{qp} sets the value of @emph{base_q_index}.
@option{profile} sets the value of @emph{seq_profile}.
@option{tier} sets the value of @emph{seq_tier}.
@option{level} sets the value of @emph{seq_level_idx}.
diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c
index 5a9ff0f798..2e327fec5a 100644
--- a/libavcodec/vaapi_encode_av1.c
+++ b/libavcodec/vaapi_encode_av1.c
@@ -79,6 +79,7 @@ typedef struct VAAPIEncodeAV1Context {
int cdef_param_size;
/** user options */
+ int qp;
int profile;
int level;
int tier;
@@ -786,6 +787,9 @@ static av_cold int vaapi_encode_av1_init(AVCodecContext
*avctx)
return AVERROR(EINVAL);
}
+ if (priv->qp > 0)
+ ctx->explicit_qp = priv->qp;
+
ret = ff_vaapi_encode_init(avctx);
if (ret < 0)
return ret;
@@ -864,6 +868,8 @@ static av_cold int vaapi_encode_av1_close(AVCodecContext
*avctx)
static const AVOption vaapi_encode_av1_options[] = {
VAAPI_ENCODE_COMMON_OPTIONS,
VAAPI_ENCODE_RC_OPTIONS,
+ { "qp", "Base q index (for P-frames; scaled by qfactor/qoffset for I/B)",
+ OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 255, FLAGS },
{ "profile", "Set profile (seq_profile)",
OFFSET(profile), AV_OPT_TYPE_INT,
{ .i64 = AV_PROFILE_UNKNOWN }, AV_PROFILE_UNKNOWN, 0xff, FLAGS,
"profile" },
Disagree; QP is not a concept in AV1. Further, your examples from other
encoders do not have a consistent view of what it should mean.
librav1e.c:
{ "qp", "use constant quantizer mode", OFFSET(quantizer), AV_OPT_TYPE_INT,
{ .i64 = -1 }, -1, 255, VE },
0-255 is presumably the base_q_idx scale.
libsvtav1.c:
{ "qp", "Initial Quantizer level value", OFFSET(qp), AV_OPT_TYPE_INT,
{ .i64 = 0 }, 0, 63, VE },
0-63 is presumably the H.26x-qp-ish scale used by some VP9/AV1 encoders which
maps nonlinearly to the internal scale.
qsv_av1 doesn't seem to have such an option.
Thanks,
- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".