diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java index 82b0f6321e..419ac03e44 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java @@ -67,7 +67,7 @@ import com.google.android.exoplayer2.effect.Presentation; import com.google.android.exoplayer2.effect.RgbAdjustment; import com.google.android.exoplayer2.effect.RgbFilter; import com.google.android.exoplayer2.effect.RgbMatrix; -import com.google.android.exoplayer2.effect.ScaleToFitTransformation; +import com.google.android.exoplayer2.effect.ScaleAndRotateTransformation; import com.google.android.exoplayer2.effect.SimpleBitmapLoader; import com.google.android.exoplayer2.effect.SingleColorLut; import com.google.android.exoplayer2.effect.TextOverlay; @@ -548,7 +548,7 @@ public final class TransformerActivity extends AppCompatActivity { bundle.getFloat(ConfigurationActivity.ROTATE_DEGREES, /* defaultValue= */ 0); if (scaleX != 1f || scaleY != 1f || rotateDegrees != 0f) { effects.add( - new ScaleToFitTransformation.Builder() + new ScaleAndRotateTransformation.Builder() .setScale(scaleX, scaleY) .setRotationDegrees(rotateDegrees) .build()); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index 75bb7dcbbc..4d47d7918e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -2284,16 +2284,17 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { private static final class VideoFrameProcessorAccessor { - private static @MonotonicNonNull Constructor> scaleToFitTransformationBuilderConstructor; + private static @MonotonicNonNull Constructor> + scaleAndRotateTransformationBuilderConstructor; private static @MonotonicNonNull Method setRotationMethod; - private static @MonotonicNonNull Method buildScaleToFitTransformationMethod; + private static @MonotonicNonNull Method buildScaleAndRotateTransformationMethod; private static @MonotonicNonNull Constructor> videoFrameProcessorFactoryConstructor; public static Effect createRotationEffect(float rotationDegrees) throws Exception { prepare(); - Object builder = scaleToFitTransformationBuilderConstructor.newInstance(); + Object builder = scaleAndRotateTransformationBuilderConstructor.newInstance(); setRotationMethod.invoke(builder, rotationDegrees); - return (Effect) checkNotNull(buildScaleToFitTransformationMethod.invoke(builder)); + return (Effect) checkNotNull(buildScaleAndRotateTransformationMethod.invoke(builder)); } public static VideoFrameProcessor.Factory getFrameProcessorFactory() throws Exception { @@ -2302,24 +2303,24 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { } @EnsuresNonNull({ - "ScaleToFitEffectBuilder", + "ScaleAndRotateEffectBuilder", "SetRotationMethod", "SetRotationMethod", "VideoFrameProcessorFactoryClass" }) private static void prepare() throws Exception { - if (scaleToFitTransformationBuilderConstructor == null + if (scaleAndRotateTransformationBuilderConstructor == null || setRotationMethod == null - || buildScaleToFitTransformationMethod == null) { - Class> scaleToFitTransformationBuilderClass = + || buildScaleAndRotateTransformationMethod == null) { + Class> scaleAndRotateTransformationBuilderClass = Class.forName( - "com.google.android.exoplayer2.effect.ScaleToFitTransformation$Builder"); - scaleToFitTransformationBuilderConstructor = - scaleToFitTransformationBuilderClass.getConstructor(); + "com.google.android.exoplayer2.effect.ScaleAndRotateTransformation$Builder"); + scaleAndRotateTransformationBuilderConstructor = + scaleAndRotateTransformationBuilderClass.getConstructor(); setRotationMethod = - scaleToFitTransformationBuilderClass.getMethod("setRotationDegrees", float.class); - buildScaleToFitTransformationMethod = - scaleToFitTransformationBuilderClass.getMethod("build"); + scaleAndRotateTransformationBuilderClass.getMethod("setRotationDegrees", float.class); + buildScaleAndRotateTransformationMethod = + scaleAndRotateTransformationBuilderClass.getMethod("build"); } if (videoFrameProcessorFactoryConstructor == null) { videoFrameProcessorFactoryConstructor = diff --git a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/DefaultVideoFrameProcessorPixelTest.java b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/DefaultVideoFrameProcessorPixelTest.java index 34f502ce92..6324b95365 100644 --- a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/DefaultVideoFrameProcessorPixelTest.java +++ b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/DefaultVideoFrameProcessorPixelTest.java @@ -199,15 +199,15 @@ public final class DefaultVideoFrameProcessorPixelTest { } @Test - public void matrixAndScaleToFitTransformation_matchesGoldenFile() throws Exception { - String testId = "matrixAndScaleToFitTransformation_matchesGoldenFile"; + public void matrixAndScaleAndRotateTransformation_matchesGoldenFile() throws Exception { + String testId = "matrixAndScaleAndRotateTransformation_matchesGoldenFile"; Matrix translateRightMatrix = new Matrix(); translateRightMatrix.postTranslate(/* dx= */ 1, /* dy= */ 0); videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) .setEffects( (MatrixTransformation) (long presentationTimeUs) -> translateRightMatrix, - new ScaleToFitTransformation.Builder().setRotationDegrees(45).build()) + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()) .build(); Bitmap expectedBitmap = readBitmap(TRANSLATE_THEN_ROTATE_PNG_ASSET_PATH); @@ -239,14 +239,14 @@ public final class DefaultVideoFrameProcessorPixelTest { } @Test - public void scaleToFitAndMatrixTransformation_matchesGoldenFile() throws Exception { - String testId = "scaleToFitAndMatrixTransformation_matchesGoldenFile"; + public void scaleAndRotateAndMatrixTransformation_matchesGoldenFile() throws Exception { + String testId = "scaleAndRotateAndMatrixTransformation_matchesGoldenFile"; Matrix translateRightMatrix = new Matrix(); translateRightMatrix.postTranslate(/* dx= */ 1, /* dy= */ 0); videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) .setEffects( - new ScaleToFitTransformation.Builder().setRotationDegrees(45).build(), + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build(), (MatrixTransformation) (long presentationTimeUs) -> translateRightMatrix) .build(); Bitmap expectedBitmap = readBitmap(ROTATE_THEN_TRANSLATE_PNG_ASSET_PATH); @@ -298,11 +298,11 @@ public final class DefaultVideoFrameProcessorPixelTest { } @Test - public void scaleToFitTransformation_rotate45_matchesGoldenFile() throws Exception { - String testId = "scaleToFitTransformation_rotate45_matchesGoldenFile"; + public void scaleAndRotateTransformation_rotate45_matchesGoldenFile() throws Exception { + String testId = "scaleAndRotateTransformation_rotate45_matchesGoldenFile"; videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) - .setEffects(new ScaleToFitTransformation.Builder().setRotationDegrees(45).build()) + .setEffects(new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()) .build(); Bitmap expectedBitmap = readBitmap(ROTATE45_SCALE_TO_FIT_PNG_ASSET_PATH); @@ -315,15 +315,15 @@ public final class DefaultVideoFrameProcessorPixelTest { } @Test - public void twoWrappedScaleToFitTransformations_matchesGoldenFile() throws Exception { - String testId = "twoWrappedScaleToFitTransformations_matchesGoldenFile"; + public void twoWrappedScaleAndRotateTransformations_matchesGoldenFile() throws Exception { + String testId = "twoWrappedScaleAndRotateTransformations_matchesGoldenFile"; videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) .setEffects( new GlEffectWrapper( - new ScaleToFitTransformation.Builder().setRotationDegrees(45).build()), + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), new GlEffectWrapper( - new ScaleToFitTransformation.Builder() + new ScaleAndRotateTransformation.Builder() .setScale(/* scaleX= */ 2, /* scaleY= */ 1) .build())) .build(); @@ -510,8 +510,8 @@ public final class DefaultVideoFrameProcessorPixelTest { * Specifies a counter-clockwise rotation while accounting for the aspect ratio difference between * the input frame in pixel coordinates and NDC. * - *
Unlike {@link ScaleToFitTransformation}, this does not adjust the output size or scale to - * preserve input pixels. Pixels rotated out of the frame are clipped. + *
Unlike {@link ScaleAndRotateTransformation}, this does not adjust the output size or scale
+ * to preserve input pixels. Pixels rotated out of the frame are clipped.
*/
private static final class Rotation implements MatrixTransformation {
diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java
index 9db75ebb6b..fac8c1a738 100644
--- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java
+++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java
@@ -393,7 +393,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
new ImmutableList.Builder The background color of the output frame will be black, with alpha = 0 if applicable.
*/
-public final class ScaleToFitTransformation implements MatrixTransformation {
+public final class ScaleAndRotateTransformation implements MatrixTransformation {
- /** A builder for {@link ScaleToFitTransformation} instances. */
+ /** A builder for {@link ScaleAndRotateTransformation} instances. */
public static final class Builder {
// Optional fields.
@@ -85,8 +85,8 @@ public final class ScaleToFitTransformation implements MatrixTransformation {
return this;
}
- public ScaleToFitTransformation build() {
- return new ScaleToFitTransformation(scaleX, scaleY, rotationDegrees);
+ public ScaleAndRotateTransformation build() {
+ return new ScaleAndRotateTransformation(scaleX, scaleY, rotationDegrees);
}
}
@@ -100,7 +100,7 @@ public final class ScaleToFitTransformation implements MatrixTransformation {
* @param scaleY The multiplier by which the frame will scale vertically, along the y-axis.
* @param rotationDegrees How much to rotate the frame counterclockwise, in degrees.
*/
- private ScaleToFitTransformation(float scaleX, float scaleY, float rotationDegrees) {
+ private ScaleAndRotateTransformation(float scaleX, float scaleY, float rotationDegrees) {
transformationMatrix = new Matrix();
transformationMatrix.postScale(scaleX, scaleY);
transformationMatrix.postRotate(rotationDegrees);
diff --git a/library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleToFitTransformationTest.java b/library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleAndRotateTransformationTest.java
similarity index 60%
rename from library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleToFitTransformationTest.java
rename to library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleAndRotateTransformationTest.java
index 945a40a659..3d9a6df1eb 100644
--- a/library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleToFitTransformationTest.java
+++ b/library/effect/src/test/java/com/google/android/exoplayer2/effect/ScaleAndRotateTransformationTest.java
@@ -23,23 +23,23 @@ import org.junit.Test;
import org.junit.runner.RunWith;
/**
- * Unit tests for {@link ScaleToFitTransformation}.
+ * Unit tests for {@link ScaleAndRotateTransformation}.
*
* See {@code MatrixShaderProgramPixelTest} for pixel tests testing {@link MatrixShaderProgram}
* given a transformation matrix.
*/
@RunWith(AndroidJUnit4.class)
-public final class ScaleToFitTransformationTest {
+public final class ScaleAndRotateTransformationTest {
@Test
public void configure_noEdits_leavesFramesUnchanged() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder().build();
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder().build();
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isTrue();
assertThat(outputSize.getWidth()).isEqualTo(inputWidth);
@@ -50,13 +50,13 @@ public final class ScaleToFitTransformationTest {
public void configure_scaleNarrow_decreasesWidth() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder()
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder()
.setScale(/* scaleX= */ 0.5f, /* scaleY= */ 1f)
.build();
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isFalse();
assertThat(outputSize.getWidth()).isEqualTo(Math.round(inputWidth * 0.5f));
@@ -67,11 +67,13 @@ public final class ScaleToFitTransformationTest {
public void configure_scaleWide_increasesWidth() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder().setScale(/* scaleX= */ 2f, /* scaleY= */ 1f).build();
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder()
+ .setScale(/* scaleX= */ 2f, /* scaleY= */ 1f)
+ .build();
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isFalse();
assertThat(outputSize.getWidth()).isEqualTo(inputWidth * 2);
@@ -82,11 +84,13 @@ public final class ScaleToFitTransformationTest {
public void configure_scaleTall_increasesHeight() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder().setScale(/* scaleX= */ 1f, /* scaleY= */ 2f).build();
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder()
+ .setScale(/* scaleX= */ 1f, /* scaleY= */ 2f)
+ .build();
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isFalse();
assertThat(outputSize.getWidth()).isEqualTo(inputWidth);
@@ -97,11 +101,11 @@ public final class ScaleToFitTransformationTest {
public void configure_rotate90_swapsDimensions() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder().setRotationDegrees(90).build();
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder().setRotationDegrees(90).build();
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isFalse();
assertThat(outputSize.getWidth()).isEqualTo(inputHeight);
@@ -112,12 +116,12 @@ public final class ScaleToFitTransformationTest {
public void configure_rotate45_changesDimensions() {
int inputWidth = 200;
int inputHeight = 150;
- ScaleToFitTransformation scaleToFitTransformation =
- new ScaleToFitTransformation.Builder().setRotationDegrees(45).build();
+ ScaleAndRotateTransformation scaleAndRotateTransformation =
+ new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build();
long expectedOutputWidthHeight = 247;
- Size outputSize = scaleToFitTransformation.configure(inputWidth, inputHeight);
- boolean isNoOp = scaleToFitTransformation.isNoOp(inputWidth, inputHeight);
+ Size outputSize = scaleAndRotateTransformation.configure(inputWidth, inputHeight);
+ boolean isNoOp = scaleAndRotateTransformation.isNoOp(inputWidth, inputHeight);
assertThat(isNoOp).isFalse();
assertThat(outputSize.getWidth()).isEqualTo(expectedOutputWidthHeight);
diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ExportTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ExportTest.java
index e5af726dc2..f4345cbd8f 100644
--- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ExportTest.java
+++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ExportTest.java
@@ -30,7 +30,7 @@ import android.net.Uri;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.MediaItem;
-import com.google.android.exoplayer2.effect.ScaleToFitTransformation;
+import com.google.android.exoplayer2.effect.ScaleAndRotateTransformation;
import com.google.android.exoplayer2.transformer.AndroidTestUtil;
import com.google.android.exoplayer2.transformer.AndroidTestUtil.ForceEncodeEncoderFactory;
import com.google.android.exoplayer2.transformer.DefaultEncoderFactory;
@@ -244,7 +244,7 @@ public class ExportTest {
MediaItem mediaItem =
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
ImmutableList