cbs_vp9: Always update loop filter and segmentation from current frame

Fixes decoding vp90-2-09-aq2, vp90-2-15-segkey_adpq, vp90-2-15-segkey
and vp90-2-22-svc_1280x720_1 with Vulkan hwaccel.

Fixes: 26a2a76346 ("cbs_vp9: Fix VP9 passthrough")

(cherry picked from commit a0a16f2ea4)
This commit is contained in:
David Rosca
2025-08-29 10:58:00 +02:00
committed by Kacper Michajłow
parent bfa334de42
commit a6a220ed33

View File

@@ -392,39 +392,37 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
memset(vp9->feature_enabled, 0, sizeof(vp9->feature_enabled));
memset(vp9->feature_value, 0, sizeof(vp9->feature_value));
memset(vp9->feature_sign, 0, sizeof(vp9->feature_sign));
}
} else {
// Modify previous state based on updates in this frame.
if (current->loop_filter_delta_update) {
for (i = 0; i < 4; i++) {
if (current->update_ref_delta[i])
vp9->loop_filter_ref_deltas[i] =
current->loop_filter_ref_deltas[i];
}
for (i = 0; i < 2; i++) {
if (current->update_mode_delta[i])
vp9->loop_filter_mode_deltas[i] =
current->loop_filter_mode_deltas[i];
}
// Modify previous state based on updates in this frame.
if (current->loop_filter_delta_update) {
for (i = 0; i < 4; i++) {
if (current->update_ref_delta[i])
vp9->loop_filter_ref_deltas[i] =
current->loop_filter_ref_deltas[i];
}
for (i = 0; i < 2; i++) {
if (current->update_mode_delta[i])
vp9->loop_filter_mode_deltas[i] =
current->loop_filter_mode_deltas[i];
}
}
if (current->segmentation_update_data) {
memcpy(vp9->feature_enabled, current->feature_enabled,
sizeof(vp9->feature_enabled));
memcpy(vp9->feature_value, current->feature_value,
sizeof(vp9->feature_value));
memcpy(vp9->feature_sign, current->feature_sign,
sizeof(vp9->feature_sign));
if (current->segmentation_update_data) {
memcpy(vp9->feature_enabled, current->feature_enabled,
sizeof(vp9->feature_enabled));
memcpy(vp9->feature_value, current->feature_value,
sizeof(vp9->feature_value));
memcpy(vp9->feature_sign, current->feature_sign,
sizeof(vp9->feature_sign));
if (current->segmentation_update_map) {
memcpy(vp9->segmentation_tree_probs,
current->segmentation_tree_probs,
sizeof(vp9->segmentation_tree_probs));
memcpy(vp9->segmentation_pred_prob,
current->segmentation_pred_prob,
sizeof(vp9->segmentation_pred_prob));
}
if (current->segmentation_update_map) {
memcpy(vp9->segmentation_tree_probs,
current->segmentation_tree_probs,
sizeof(vp9->segmentation_tree_probs));
memcpy(vp9->segmentation_pred_prob,
current->segmentation_pred_prob,
sizeof(vp9->segmentation_pred_prob));
}
}