gallium: update abs_delta segementation parameter
authorSureshGuttula <suresh.guttula@amd.com>
Fri, 23 Oct 2020 10:25:02 +0000 (15:55 +0530)
committerMarge Bot <eric+marge@anholt.net>
Sat, 24 Oct 2020 14:34:53 +0000 (14:34 +0000)
This patch updates segmentation_abs_or_delta_update value based on
VP9 bitstream header info.

Netflix videos are showing corrupted output when codec is HW vp9
and segemantion enabled.This change will fix the corruption issue.

Signed-off-by: SureshGuttula <suresh.guttula@amd.com>
Reviewed-by: Leo Liu <leo.liu@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7290>

src/gallium/drivers/radeon/radeon_vcn_dec.c
src/gallium/frontends/va/picture_vp9.c
src/gallium/include/pipe/p_video_state.h

index 265f3bf..d33e835 100644 (file)
@@ -397,7 +397,7 @@ static rvcn_dec_message_vp9_t get_vp9_msg(struct radeon_decoder *dec,
       for (i = 0; i < 3; ++i)
          prbs->seg.pred_probs[i] = pic->picture_parameter.segment_pred_probs[i];
 
-      prbs->seg.abs_delta = 0;
+      prbs->seg.abs_delta = pic->picture_parameter.abs_delta;
    } else
       memset(&prbs->seg, 0, 256);
 
index 8ee7f01..f7b52dd 100644 (file)
@@ -339,7 +339,7 @@ void vlVaDecoderVP9BitstreamHeader(vlVaContext *context, vlVaBuffer *buf)
    /* update_data */
    if (vp9_u(&vlc, 1)) {
       /* abs_delta */
-      vp9_u(&vlc, 1);
+      context->desc.vp9.picture_parameter.abs_delta = vp9_u(&vlc, 1);
       for (i = 0; i < 8; ++i) {
          /* Use alternate quantizer */
          if ((context->desc.vp9.slice_parameter.seg_param[i].alt_quant_enabled = vp9_u(&vlc, 1)))
index 58dc69d..9b10acd 100644 (file)
@@ -769,6 +769,7 @@ struct pipe_vp9_picture_desc
       int8_t y_dc_delta_q;
       int8_t uv_ac_delta_q;
       int8_t uv_dc_delta_q;
+      uint8_t abs_delta;
    } picture_parameter;
 
    struct {