working INTER frame decoding

This commit is contained in:
minjaesong
2025-08-19 22:54:18 +09:00
parent 8bb111760b
commit 66e0d1f5bc
2 changed files with 9 additions and 5 deletions

View File

@@ -1933,8 +1933,9 @@ class GraphicsJSR223Delegate(private val vm: VM) {
mcY = 128
}
// Add Y residual
finalY[pixelIdx] = (mcY + yResidual[pixelIdx]).coerceIn(0, 255)
// Add Y residual (subtract 128 bias added by IDCT)
val residual = yResidual[pixelIdx] - 128
finalY[pixelIdx] = (mcY + residual).coerceIn(0, 255)
}
}
}

View File

@@ -613,13 +613,16 @@ static void compute_motion_residual(tev_encoder_t *enc, int block_x, int block_y
ref_y, ref_co, ref_cg);
// Compute residuals: current - motion_compensated_reference
// Both current and reference Y should be centered around 0 for proper residual DCT
for (int i = 0; i < 256; i++) {
enc->y_workspace[i] = (int)enc->y_workspace[i] - (int)ref_y[i];
float ref_y_centered = (float)ref_y[i] - 128.0f; // Convert ref to centered like current
enc->y_workspace[i] = enc->y_workspace[i] - ref_y_centered;
}
// Chroma residuals (already centered in both current and reference)
for (int i = 0; i < 64; i++) {
enc->co_workspace[i] = (int)enc->co_workspace[i] - (int)ref_co[i];
enc->cg_workspace[i] = (int)enc->cg_workspace[i] - (int)ref_cg[i];
enc->co_workspace[i] = enc->co_workspace[i] - (float)ref_co[i];
enc->cg_workspace[i] = enc->cg_workspace[i] - (float)ref_cg[i];
}
}