From a1b89561c18bd341f70e5c9e84c98e15c7374d7a Mon Sep 17 00:00:00 2001 From: samrobinson Date: Fri, 27 May 2022 17:40:45 +0000 Subject: [PATCH] Treat pixels as unsigned and correct pixel count division. PiperOrigin-RevId: 451428202 --- .../java/androidx/media3/transformer/SsimHelper.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java index 369078cf36..eb08e43261 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SsimHelper.java @@ -454,10 +454,10 @@ public final class SsimHelper { double total = 0; for (int y = 0; y < windowHeight; y++) { for (int x = 0; x < windowWidth; x++) { - total += pixelBuffer[get1dIndex(x, y, stride, bufferIndexOffset)]; + total += pixelBuffer[get1dIndex(x, y, stride, bufferIndexOffset)] & 0xFF; } } - return total / windowWidth * windowHeight; + return total / (windowWidth * windowHeight); } /** Calculates the variances and covariance of the pixels in the window for both buffers. */ @@ -476,8 +476,8 @@ public final class SsimHelper { for (int y = 0; y < windowHeight; y++) { for (int x = 0; x < windowWidth; x++) { int index = get1dIndex(x, y, stride, bufferIndexOffset); - double referencePixelDeviation = referenceBuffer[index] - referenceMean; - double distortedPixelDeviation = distortedBuffer[index] - distortedMean; + double referencePixelDeviation = (referenceBuffer[index] & 0xFF) - referenceMean; + double distortedPixelDeviation = (distortedBuffer[index] & 0xFF) - distortedMean; referenceVariance += referencePixelDeviation * referencePixelDeviation; distortedVariance += distortedPixelDeviation * distortedPixelDeviation; referenceDistortedCovariance += referencePixelDeviation * distortedPixelDeviation;