[PATCH] lavc/vaapi_encode_av1: Fix ref_order_hint value for second slot
We always use two slots, even when only one L0 reference is supported by the driver. However we still need to set the correct value for the ref_order_hint of the second slot. Fixes bf9f921ef7 ("avcodec/hw_base_encode: restrict size of next_prev") --- libavcodec/vaapi_encode_av1.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 1b350cd936..cf0ff53edc 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -476,6 +476,7 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, AV1RawFrameHeader *fh = &fh_obu->obu.frame.header; VAEncPictureParameterBufferAV1 *vpic = vaapi_pic->codec_picture_params; CodedBitstreamFragment *obu = &priv->current_obu; + CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data; FFHWBaseEncodePicture *ref; VAAPIEncodeAV1Picture *href; int slot, i; @@ -523,6 +524,8 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, fh->ref_frame_idx[3] = href->slot; fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame; vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN; + } else { + fh->ref_order_hint[!href->slot] = cbctx->ref[!href->slot].order_hint; } break; case FF_HW_PICTURE_TYPE_B: -- 2.49.0
On Mon, Apr 14, 2025 at 4:00 PM David Rosca <nowrep@gmail.com> wrote:
We always use two slots, even when only one L0 reference is supported by the driver. However we still need to set the correct value for the ref_order_hint of the second slot.
Fixes bf9f921ef7 ("avcodec/hw_base_encode: restrict size of next_prev")
Ping
--- libavcodec/vaapi_encode_av1.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 1b350cd936..cf0ff53edc 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -476,6 +476,7 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, AV1RawFrameHeader *fh = &fh_obu->obu.frame.header; VAEncPictureParameterBufferAV1 *vpic = vaapi_pic->codec_picture_params; CodedBitstreamFragment *obu = &priv->current_obu; + CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data; FFHWBaseEncodePicture *ref; VAAPIEncodeAV1Picture *href; int slot, i; @@ -523,6 +524,8 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, fh->ref_frame_idx[3] = href->slot; fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame; vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN; + } else { + fh->ref_order_hint[!href->slot] = cbctx->ref[!href->slot].order_hint; } break; case FF_HW_PICTURE_TYPE_B: -- 2.49.0
On Thu, Jun 5, 2025 at 2:17 PM David Rosca <nowrep@gmail.com> wrote:
On Mon, Apr 14, 2025 at 4:00 PM David Rosca <nowrep@gmail.com> wrote:
We always use two slots, even when only one L0 reference is supported by the driver. However we still need to set the correct value for the ref_order_hint of the second slot.
Fixes bf9f921ef7 ("avcodec/hw_base_encode: restrict size of next_prev")
Ping
Ping again, this should go in before 8.0 release to fix the regression. Thanks, David
--- libavcodec/vaapi_encode_av1.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 1b350cd936..cf0ff53edc 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -476,6 +476,7 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, AV1RawFrameHeader *fh = &fh_obu->obu.frame.header; VAEncPictureParameterBufferAV1 *vpic = vaapi_pic->codec_picture_params; CodedBitstreamFragment *obu = &priv->current_obu; + CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data; FFHWBaseEncodePicture *ref; VAAPIEncodeAV1Picture *href; int slot, i; @@ -523,6 +524,8 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, fh->ref_frame_idx[3] = href->slot; fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame; vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN; + } else { + fh->ref_order_hint[!href->slot] = cbctx->ref[!href->slot].order_hint; } break; case FF_HW_PICTURE_TYPE_B: -- 2.49.0
[AMD Official Use Only - AMD Internal Distribution Only] Without this fix, av1 vaapi encoding on navi3x (vcn4) is broken. Thanks, Ruijing -----Original Message----- From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of David Rosca Sent: Thursday, July 24, 2025 6:04 AM To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_encode_av1: Fix ref_order_hint value for second slot On Thu, Jun 5, 2025 at 2:17 PM David Rosca <nowrep@gmail.com> wrote:
On Mon, Apr 14, 2025 at 4:00 PM David Rosca <nowrep@gmail.com> wrote:
We always use two slots, even when only one L0 reference is supported by the driver. However we still need to set the correct value for the ref_order_hint of the second slot.
Fixes bf9f921ef7 ("avcodec/hw_base_encode: restrict size of next_prev")
Ping
Ping again, this should go in before 8.0 release to fix the regression. Thanks, David
--- libavcodec/vaapi_encode_av1.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 1b350cd936..cf0ff53edc 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -476,6 +476,7 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, AV1RawFrameHeader *fh = &fh_obu->obu.frame.header; VAEncPictureParameterBufferAV1 *vpic = vaapi_pic->codec_picture_params; CodedBitstreamFragment *obu = &priv->current_obu; + CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data; FFHWBaseEncodePicture *ref; VAAPIEncodeAV1Picture *href; int slot, i; @@ -523,6 +524,8 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, fh->ref_frame_idx[3] = href->slot; fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame; vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN; + } else { + fh->ref_order_hint[!href->slot] = + cbctx->ref[!href->slot].order_hint; } break; case FF_HW_PICTURE_TYPE_B: -- 2.49.0
_______________________________________________ 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".
Hi Ruijing, David it seems theres no active maintainer for this To move this patch forward, maybe you know someone who wants to help with maintaince. Or maybe AMD might be interrested in having one of their employees officially maintain AMD related hw accelleration in ffmpeg ? thx On Wed, Jul 30, 2025 at 08:01:36PM +0000, Dong, Ruijing via ffmpeg-devel wrote:
[AMD Official Use Only - AMD Internal Distribution Only]
Without this fix, av1 vaapi encoding on navi3x (vcn4) is broken.
Thanks, Ruijing
-----Original Message----- From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of David Rosca Sent: Thursday, July 24, 2025 6:04 AM To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_encode_av1: Fix ref_order_hint value for second slot
On Thu, Jun 5, 2025 at 2:17 PM David Rosca <nowrep@gmail.com> wrote:
On Mon, Apr 14, 2025 at 4:00 PM David Rosca <nowrep@gmail.com> wrote:
We always use two slots, even when only one L0 reference is supported by the driver. However we still need to set the correct value for the ref_order_hint of the second slot.
Fixes bf9f921ef7 ("avcodec/hw_base_encode: restrict size of next_prev")
Ping
Ping again, this should go in before 8.0 release to fix the regression.
Thanks, David
--- libavcodec/vaapi_encode_av1.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 1b350cd936..cf0ff53edc 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -476,6 +476,7 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, AV1RawFrameHeader *fh = &fh_obu->obu.frame.header; VAEncPictureParameterBufferAV1 *vpic = vaapi_pic->codec_picture_params; CodedBitstreamFragment *obu = &priv->current_obu; + CodedBitstreamAV1Context *cbctx = priv->cbc->priv_data; FFHWBaseEncodePicture *ref; VAAPIEncodeAV1Picture *href; int slot, i; @@ -523,6 +524,8 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, fh->ref_frame_idx[3] = href->slot; fh->ref_order_hint[href->slot] = ref->display_order - href->last_idr_frame; vpic->ref_frame_ctrl_l0.fields.search_idx1 = AV1_REF_FRAME_GOLDEN; + } else { + fh->ref_order_hint[!href->slot] = + cbctx->ref[!href->slot].order_hint; } break; case FF_HW_PICTURE_TYPE_B: -- 2.49.0
_______________________________________________ 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". _______________________________________________ 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".
-- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB it is not once nor twice but times without number that the same ideas make their appearance in the world. -- Aristotle
participants (3)
-
David Rosca -
Dong, Ruijing -
Michael Niedermayer