diff --git a/src/gallium/frontends/va/picture_vp9.c b/src/gallium/frontends/va/picture_vp9.c index 09392bb4276..4a19f778bec 100644 --- a/src/gallium/frontends/va/picture_vp9.c +++ b/src/gallium/frontends/va/picture_vp9.c @@ -67,6 +67,11 @@ void vlVaHandlePictureParameterBufferVP9(vlVaDriver *drv, vlVaContext *context, context->desc.vp9.picture_parameter.pic_fields.alt_ref_frame = vp9->pic_fields.bits.alt_ref_frame; context->desc.vp9.picture_parameter.pic_fields.alt_ref_frame_sign_bias = vp9->pic_fields.bits.alt_ref_frame_sign_bias; context->desc.vp9.picture_parameter.pic_fields.lossless_flag = vp9->pic_fields.bits.lossless_flag; + context->desc.vp9.picture_parameter.pic_fields.use_prev_frame_mvs = + context->desc.vp9.picture_parameter.pic_fields.prev_show_frame && + !context->desc.vp9.picture_parameter.pic_fields.error_resilient_mode && + context->desc.vp9.picture_parameter.prev_frame_width == context->desc.vp9.picture_parameter.frame_width && + context->desc.vp9.picture_parameter.prev_frame_height == context->desc.vp9.picture_parameter.frame_height; context->desc.vp9.picture_parameter.filter_level = vp9->filter_level; context->desc.vp9.picture_parameter.sharpness_level = vp9->sharpness_level; @@ -399,8 +404,10 @@ void vlVaDecoderVP9BitstreamHeader(vlVaContext *context, vlVaBuffer *buf) } } + context->desc.vp9.picture_parameter.pic_fields.segmentation_update_data = vp9_u(&vlc, 1); + /* update_data */ - if (vp9_u(&vlc, 1)) { + if (context->desc.vp9.picture_parameter.pic_fields.segmentation_update_data) { /* abs_delta */ context->desc.vp9.picture_parameter.abs_delta = vp9_u(&vlc, 1); for (i = 0; i < 8; ++i) { diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index 27d1e82dd8d..e35725fb408 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -1931,6 +1931,7 @@ struct pipe_vp9_picture_desc uint32_t segmentation_enabled:1; uint32_t segmentation_temporal_update:1; uint32_t segmentation_update_map:1; + uint32_t segmentation_update_data:1; uint32_t last_ref_frame:3; uint32_t last_ref_frame_sign_bias:1; uint32_t golden_ref_frame:3; @@ -1938,6 +1939,7 @@ struct pipe_vp9_picture_desc uint32_t alt_ref_frame:3; uint32_t alt_ref_frame_sign_bias:1; uint32_t lossless_flag:1; + uint32_t use_prev_frame_mvs:1; } pic_fields; uint8_t filter_level;