Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41af9d59 authored by Ruben Brunk's avatar Ruben Brunk Committed by android-build-merger
Browse files

Merge "camera2: Fix legacy scaling factor application." into lmp-mr1-dev

automerge: d2ccbd43

* commit 'd2ccbd43':
  camera2: Fix legacy scaling factor application.
parents b9f9408c d2ccbd43
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -269,21 +269,23 @@ public class SurfaceTextureRenderer {
            throw new IllegalStateException("Illegal intermediate texture with dimension of 0");
        }

        // Letterbox or pillerbox output dimensions into intermediate dimensions.
        // Letterbox or pillar-box output dimensions into intermediate dimensions.
        RectF intermediate = new RectF(/*left*/0, /*top*/0, /*right*/texWidth, /*bottom*/texHeight);
        RectF output = new RectF(/*left*/0, /*top*/0, /*right*/width, /*bottom*/height);
        android.graphics.Matrix boxingXform = new android.graphics.Matrix();
        boxingXform.setRectToRect(output, intermediate, android.graphics.Matrix.ScaleToFit.CENTER);
        boxingXform.mapRect(output);

        // Find scaling factor from pillerboxed/letterboxed output dimensions to intermediate
        // Find scaling factor from pillar-boxed/letter-boxed output dimensions to intermediate
        // buffer dimensions.
        float scaleX = intermediate.width() / output.width();
        float scaleY = intermediate.height() / output.height();

        // Scale opposite dimension in clip coordinates so output is letterboxed/pillerboxed into
        // the intermediate dimensions (rather than vice-versa).
        Matrix.scaleM(mMVPMatrix, /*offset*/0, /*x*/scaleY, /*y*/scaleX, /*z*/1);
        // Intermediate texture is implicitly scaled to 'fill' the output dimensions in clip space
        // coordinates in the shader.  To avoid stretching, we need to scale the larger dimension
        // of the intermediate buffer so that the output buffer is actually letter-boxed
        // or pillar-boxed into the intermediate buffer after clipping.
        Matrix.scaleM(mMVPMatrix, /*offset*/0, /*x*/scaleX, /*y*/scaleY, /*z*/1);

        if (DEBUG) {
            Log.d(TAG, "Scaling factors (S_x = " + scaleX + ",S_y = " + scaleY + ") used for " +