From e7244292ce732f88858c9c3b26c2c32eb3c63f26 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 27 Feb 2024 10:41:49 +0100 Subject: [PATCH] frontends/va: Only set VP9 segmentation fields when segmentation is enabled Workaround for ffmpeg setting segmentation_update_map to 1 with segmentation_enabled == 0. Fixes decoding sample from https://github.com/mpv-player/mpv/issues/13533 Cc: mesa-stable Reviewed-by: Leo Liu Part-of: (cherry picked from commit 82ff9204abab5267f82a9ce73f9dca1541ef5ee6) --- .pick_status.json | 2 +- src/gallium/frontends/va/picture_vp9.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index efdd5849fbd..7cd88c93b22 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4,7 +4,7 @@ "description": "frontends/va: Only set VP9 segmentation fields when segmentation is enabled", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/frontends/va/picture_vp9.c b/src/gallium/frontends/va/picture_vp9.c index ff3da929f0b..f08b019fac1 100644 --- a/src/gallium/frontends/va/picture_vp9.c +++ b/src/gallium/frontends/va/picture_vp9.c @@ -56,8 +56,10 @@ void vlVaHandlePictureParameterBufferVP9(vlVaDriver *drv, vlVaContext *context, context->desc.vp9.picture_parameter.pic_fields.refresh_frame_context = vp9->pic_fields.bits.refresh_frame_context; context->desc.vp9.picture_parameter.pic_fields.frame_context_idx = vp9->pic_fields.bits.frame_context_idx; context->desc.vp9.picture_parameter.pic_fields.segmentation_enabled = vp9->pic_fields.bits.segmentation_enabled; - context->desc.vp9.picture_parameter.pic_fields.segmentation_temporal_update = vp9->pic_fields.bits.segmentation_temporal_update; - context->desc.vp9.picture_parameter.pic_fields.segmentation_update_map = vp9->pic_fields.bits.segmentation_update_map; + context->desc.vp9.picture_parameter.pic_fields.segmentation_temporal_update = + vp9->pic_fields.bits.segmentation_enabled && vp9->pic_fields.bits.segmentation_temporal_update; + context->desc.vp9.picture_parameter.pic_fields.segmentation_update_map = + vp9->pic_fields.bits.segmentation_enabled && vp9->pic_fields.bits.segmentation_update_map; context->desc.vp9.picture_parameter.pic_fields.last_ref_frame = vp9->pic_fields.bits.last_ref_frame; context->desc.vp9.picture_parameter.pic_fields.last_ref_frame_sign_bias = vp9->pic_fields.bits.last_ref_frame_sign_bias; context->desc.vp9.picture_parameter.pic_fields.golden_ref_frame = vp9->pic_fields.bits.golden_ref_frame;