diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 17f9002087..b37dcdc5c3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -102,6 +102,11 @@ * Add support for EGL_GL_COLORSPACE_BT2020_HLG_EXT, which improves HLG surface output in ExoPlayer.setVideoEffect and Transformer's Debug SurfaceView. + * Update Overlay matrix implementation to make it consistent with the + documentation by flipping the x and y values applied in + `setOverlayFrameAnchor()`. If using + `OverlaySettings.Builder.setOverlayFrameAnchor()`, please flip their x + and y values by multiplying them by `-1`. * Muxers: * IMA extension: * Session: diff --git a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TimerOverlay.java b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TimerOverlay.java index 17cdbf4eac..bb47f76e65 100644 --- a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TimerOverlay.java +++ b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TimerOverlay.java @@ -38,7 +38,7 @@ import java.util.Locale; new OverlaySettings.Builder() // Place the timer in the bottom left corner of the screen with some padding from the // edges. - .setOverlayFrameAnchor(/* x= */ 1f, /* y= */ 1f) + .setOverlayFrameAnchor(/* x= */ -1f, /* y= */ -1f) .setBackgroundFrameAnchor(/* x= */ -0.7f, /* y= */ -0.95f) .build(); } diff --git a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java index a794256f8d..44b5650445 100644 --- a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java +++ b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java @@ -623,7 +623,7 @@ public final class TransformerActivity extends AppCompatActivity { new OverlaySettings.Builder() // Place the logo in the bottom left corner of the screen with some padding from the // edges. - .setOverlayFrameAnchor(/* x= */ 1f, /* y= */ 1f) + .setOverlayFrameAnchor(/* x= */ -1f, /* y= */ -1f) .setBackgroundFrameAnchor(/* x= */ -0.95f, /* y= */ -0.95f) .build(); Drawable logo; diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/OverlayShaderProgramPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/OverlayShaderProgramPixelTest.java index 2fea08dfe7..2e85d2fb45 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/OverlayShaderProgramPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/OverlayShaderProgramPixelTest.java @@ -171,7 +171,7 @@ public class OverlayShaderProgramPixelTest { Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH); OverlaySettings overlaySettings = new OverlaySettings.Builder() - .setOverlayFrameAnchor(/* x= */ 1f, /* y= */ -1f) + .setOverlayFrameAnchor(/* x= */ -1f, /* y= */ 1f) .setBackgroundFrameAnchor(/* x= */ -1f, /* y= */ 1f) .build(); BitmapOverlay staticBitmapOverlay = @@ -199,7 +199,7 @@ public class OverlayShaderProgramPixelTest { throws Exception { Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH); OverlaySettings overlaySettings = - new OverlaySettings.Builder().setOverlayFrameAnchor(/* x= */ 1f, /* y= */ -1f).build(); + new OverlaySettings.Builder().setOverlayFrameAnchor(/* x= */ -1f, /* y= */ 1f).build(); BitmapOverlay staticBitmapOverlay = BitmapOverlay.createStaticBitmapOverlay(overlayBitmap, overlaySettings); overlayShaderProgram = diff --git a/libraries/effect/src/main/java/androidx/media3/effect/SamplerOverlayMatrixProvider.java b/libraries/effect/src/main/java/androidx/media3/effect/SamplerOverlayMatrixProvider.java index 73935a4b61..7ed8bfcb54 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/SamplerOverlayMatrixProvider.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/SamplerOverlayMatrixProvider.java @@ -33,23 +33,13 @@ import androidx.media3.common.util.Size; @Override public float[] getTransformationMatrix(Size overlaySize, OverlaySettings overlaySettings) { - // When sampling from a (for example, texture) sampler, the overlay anchor's x and y coordinates - // are flipped. - OverlaySettings samplerOverlaySettings = - overlaySettings - .buildUpon() - .setOverlayFrameAnchor( - /* x= */ -1 * overlaySettings.overlayFrameAnchor.first, - /* y= */ -1 * overlaySettings.overlayFrameAnchor.second) - .build(); - // When sampling from a (for example, texture) sampler, the transformation matrix applied to a // sampler's coordinate should be the inverse of the transformation matrix that would otherwise // be applied to a vertex. Matrix.invertM( transformationMatrixInv, MATRIX_OFFSET, - super.getTransformationMatrix(overlaySize, samplerOverlaySettings), + super.getTransformationMatrix(overlaySize, overlaySettings), MATRIX_OFFSET); return transformationMatrixInv; }