diff --git a/mpp/codec/dec/av1/av1d_cbs.c b/mpp/codec/dec/av1/av1d_cbs.c index 2452d976..0e8e0b5f 100644 --- a/mpp/codec/dec/av1/av1d_cbs.c +++ b/mpp/codec/dec/av1/av1d_cbs.c @@ -1158,11 +1158,15 @@ static RK_S32 mpp_av1_segmentation_params(AV1Context *ctx, BitReadCtx_t *gb, for (j = 0; j < AV1_SEG_LVL_MAX; j++) { if (current->segmentation_update_data) { flags(feature_enabled[i][j], 2, i, j); - if (current->feature_enabled[i][j] && bits[j] > 0) { - if (sign[j]) - sus(1 + bits[j], feature_value[i][j], 2, i, j); - else + if (sign[j]) { + RK_S32 sign_, data; + + READ_ONEBIT(gb, &sign_); + READ_BITS(gb, bits[j], &data); + if (sign_) data -= (1 << bits[j]); + current->feature_value[i][j] = data; + } else fbs(bits[j], feature_value[i][j], 2, i, j); } else { infer(feature_value[i][j], 0); @@ -1183,6 +1187,8 @@ static RK_S32 mpp_av1_segmentation_params(AV1Context *ctx, BitReadCtx_t *gb, } return 0; +__BITREAD_ERR: + return MPP_ERR_STREAM; } static RK_S32 mpp_av1_delta_q_params(AV1Context *ctx, BitReadCtx_t *gb, diff --git a/mpp/hal/vpu/av1d/hal_av1d_vdpu.c b/mpp/hal/vpu/av1d/hal_av1d_vdpu.c index 41781e1f..97b4392c 100644 --- a/mpp/hal/vpu/av1d/hal_av1d_vdpu.c +++ b/mpp/hal/vpu/av1d/hal_av1d_vdpu.c @@ -1225,7 +1225,7 @@ void vdpu_av1d_set_segmentation(VdpuAv1dRegCtx *ctx, DXVA_PicParams_AV1 *dxva) RK_U8 preskip_segid = 0; RK_U8 last_active_seg = 0; /* Segmentation */ - regs->swreg13.sw_segment_temp_upd_e = dxva->segmentation.update_data; + regs->swreg13.sw_segment_temp_upd_e = dxva->segmentation.temporal_update; regs->swreg13.sw_segment_upd_e = dxva->segmentation.update_map; regs->swreg13.sw_segment_e = dxva->segmentation.enabled;