diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index 6aac30e68c..0906548e2a 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -218,33 +218,46 @@ public final class AndroidTestUtil { writeTestSummaryToFile(context, testId, testJson); } - /** - * A {@link Codec.EncoderFactory} that forces encoding, wrapping {@link DefaultEncoderFactory}. - */ - public static final Codec.EncoderFactory FORCE_ENCODE_ENCODER_FACTORY = - new Codec.EncoderFactory() { - @Override - public Codec createForAudioEncoding(Format format, List allowedMimeTypes) - throws TransformationException { - return Codec.EncoderFactory.DEFAULT.createForAudioEncoding(format, allowedMimeTypes); - } + /** A customizable forwarding {@link Codec.EncoderFactory} that forces encoding. */ + public static final class ForceEncodeEncoderFactory implements Codec.EncoderFactory { - @Override - public Codec createForVideoEncoding(Format format, List allowedMimeTypes) - throws TransformationException { - return Codec.EncoderFactory.DEFAULT.createForVideoEncoding(format, allowedMimeTypes); - } + private final Codec.EncoderFactory encoderFactory; - @Override - public boolean audioNeedsEncoding() { - return true; - } + /** Creates an instance that wraps {@link DefaultEncoderFactory}. */ + public ForceEncodeEncoderFactory() { + encoderFactory = Codec.EncoderFactory.DEFAULT; + } - @Override - public boolean videoNeedsEncoding() { - return true; - } - }; + /** + * Creates an instance that wraps {@link DefaultEncoderFactory} that wraps another {@link + * Codec.EncoderFactory}. + */ + public ForceEncodeEncoderFactory(Codec.EncoderFactory wrappedEncoderFactory) { + this.encoderFactory = wrappedEncoderFactory; + } + + @Override + public Codec createForAudioEncoding(Format format, List allowedMimeTypes) + throws TransformationException { + return encoderFactory.createForAudioEncoding(format, allowedMimeTypes); + } + + @Override + public Codec createForVideoEncoding(Format format, List allowedMimeTypes) + throws TransformationException { + return encoderFactory.createForVideoEncoding(format, allowedMimeTypes); + } + + @Override + public boolean audioNeedsEncoding() { + return true; + } + + @Override + public boolean videoNeedsEncoding() { + return true; + } + } /** * Returns a {@link JSONObject} containing device specific details from {@link Build}, including diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/RepeatedTranscodeTransformationTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/RepeatedTranscodeTransformationTest.java index e3a12b5b8c..19b80a8aac 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/RepeatedTranscodeTransformationTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/RepeatedTranscodeTransformationTest.java @@ -48,7 +48,7 @@ public final class RepeatedTranscodeTransformationTest { new Transformer.Builder(context) .setTransformationRequest( new TransformationRequest.Builder().setRotationDegrees(45).build()) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory()) .build()) .build(); @@ -78,7 +78,7 @@ public final class RepeatedTranscodeTransformationTest { .setRemoveAudio(true) .setTransformationRequest( new TransformationRequest.Builder().setRotationDegrees(45).build()) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory()) .build()) .build(); @@ -107,7 +107,7 @@ public final class RepeatedTranscodeTransformationTest { new Transformer.Builder(context) .setRemoveVideo(true) .setTransformationRequest(new TransformationRequest.Builder().build()) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory()) .build()) .build(); diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeQualityTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeQualityTest.java index 2b381d17fa..9906cf98b1 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeQualityTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeQualityTest.java @@ -52,7 +52,7 @@ public final class TranscodeQualityTest { new Transformer.Builder(context) .setTransformationRequest( new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H264).build()) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory()) .setRemoveAudio(true) .build(); @@ -119,7 +119,7 @@ public final class TranscodeQualityTest { new Transformer.Builder(context) .setTransformationRequest( new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H264).build()) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory()) .setRemoveAudio(true) .build(); diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformationTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformationTest.java index 8a4bcf2faf..5a82a7c0cc 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformationTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformationTest.java @@ -15,7 +15,6 @@ */ package androidx.media3.transformer.mh; -import static androidx.media3.transformer.AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING; @@ -30,6 +29,7 @@ import android.net.Uri; import androidx.media3.common.MediaItem; import androidx.media3.common.util.Util; import androidx.media3.transformer.AndroidTestUtil; +import androidx.media3.transformer.AndroidTestUtil.ForceEncodeEncoderFactory; import androidx.media3.transformer.DefaultEncoderFactory; import androidx.media3.transformer.EncoderSelector; import androidx.media3.transformer.TransformationRequest; @@ -52,9 +52,7 @@ public class TransformationTest { String testId = TAG + "_transform"; Context context = ApplicationProvider.getApplicationContext(); Transformer transformer = - new Transformer.Builder(context) - .setEncoderFactory(AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY) - .build(); + new Transformer.Builder(context).setEncoderFactory(new ForceEncodeEncoderFactory()).build(); new TransformerAndroidTestRunner.Builder(context, transformer) .setMaybeCalculateSsim(true) .build() @@ -80,10 +78,11 @@ public class TransformationTest { new Transformer.Builder(context) .setRemoveAudio(true) .setEncoderFactory( - new DefaultEncoderFactory( - EncoderSelector.DEFAULT, - new VideoEncoderSettings.Builder().setBitrate(5_000_000).build(), - /* enableFallback= */ true)) + new ForceEncodeEncoderFactory( + /* wrappedEncoderFactory= */ new DefaultEncoderFactory( + EncoderSelector.DEFAULT, + new VideoEncoderSettings.Builder().setBitrate(5_000_000).build(), + /* enableFallback= */ true))) .build(); new TransformerAndroidTestRunner.Builder(context, transformer) .setMaybeCalculateSsim(true) @@ -105,7 +104,7 @@ public class TransformationTest { } Transformer transformer = - new Transformer.Builder(context).setEncoderFactory(FORCE_ENCODE_ENCODER_FACTORY).build(); + new Transformer.Builder(context).setEncoderFactory(new ForceEncodeEncoderFactory()).build(); new TransformerAndroidTestRunner.Builder(context, transformer) .setMaybeCalculateSsim(true) .setTimeoutSeconds(180) @@ -126,7 +125,7 @@ public class TransformationTest { return; } Transformer transformer = - new Transformer.Builder(context).setEncoderFactory(FORCE_ENCODE_ENCODER_FACTORY).build(); + new Transformer.Builder(context).setEncoderFactory(new ForceEncodeEncoderFactory()).build(); new TransformerAndroidTestRunner.Builder(context, transformer) .setMaybeCalculateSsim(true) .setTimeoutSeconds(180) @@ -140,7 +139,7 @@ public class TransformationTest { Context context = ApplicationProvider.getApplicationContext(); Transformer transformer = new Transformer.Builder(context) - .setEncoderFactory(FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new ForceEncodeEncoderFactory()) .setRemoveAudio(true) .build(); new TransformerAndroidTestRunner.Builder(context, transformer) @@ -155,7 +154,7 @@ public class TransformationTest { Context context = ApplicationProvider.getApplicationContext(); Transformer transformer = new Transformer.Builder(context) - .setEncoderFactory(FORCE_ENCODE_ENCODER_FACTORY) + .setEncoderFactory(new ForceEncodeEncoderFactory()) .setRemoveVideo(true) .build(); new TransformerAndroidTestRunner.Builder(context, transformer) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/BitrateAnalysisTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/BitrateAnalysisTest.java index 8215b74b11..efd973f5ff 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/BitrateAnalysisTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/BitrateAnalysisTest.java @@ -116,13 +116,14 @@ public class BitrateAnalysisTest { new Transformer.Builder(context) .setRemoveAudio(true) .setEncoderFactory( - new DefaultEncoderFactory( - EncoderSelector.DEFAULT, - new VideoEncoderSettings.Builder() - .setBitrate(bitrate) - .setBitrateMode(bitrateMode) - .build(), - /* enableFallback= */ false)) + new AndroidTestUtil.ForceEncodeEncoderFactory( + /* wrappedEncoderFactory= */ new DefaultEncoderFactory( + EncoderSelector.DEFAULT, + new VideoEncoderSettings.Builder() + .setBitrate(bitrate) + .setBitrateMode(bitrateMode) + .build(), + /* enableFallback= */ false))) .build(); new TransformerAndroidTestRunner.Builder(context, transformer) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java index 1f379e6653..0692bc45c5 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java @@ -126,12 +126,13 @@ public class EncoderPerformanceAnalysisTest { new Transformer.Builder(context) .setRemoveAudio(true) .setEncoderFactory( - new DefaultEncoderFactory( - EncoderSelector.DEFAULT, - new VideoEncoderSettings.Builder() - .setEncoderPerformanceParameters(operatingRate, priority) - .build(), - /* enableFallback= */ false)) + new AndroidTestUtil.ForceEncodeEncoderFactory( + /* wrappedEncoderFactory= */ new DefaultEncoderFactory( + EncoderSelector.DEFAULT, + new VideoEncoderSettings.Builder() + .setEncoderPerformanceParameters(operatingRate, priority) + .build(), + /* enableFallback= */ false))) .build(); new TransformerAndroidTestRunner.Builder(context, transformer)