From fa22efb7058816444a20cd11a2a423e99e8e4837 Mon Sep 17 00:00:00 2001 From: claincly Date: Thu, 9 Jun 2022 15:41:09 +0000 Subject: [PATCH] Ensure re-encode on performance tests PiperOrigin-RevId: 453933854 --- .../transformer/AndroidTestUtil.java | 61 +++++++++++-------- .../RepeatedTranscodeTransformationTest.java | 6 +- .../transformer/mh/TranscodeQualityTest.java | 4 +- .../transformer/mh/TransformationTest.java | 23 ++++--- .../mh/analysis/BitrateAnalysisTest.java | 15 ++--- .../EncoderPerformanceAnalysisTest.java | 13 ++-- 6 files changed, 68 insertions(+), 54 deletions(-) diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java index 348a2115bc..6666e532d0 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/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/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/RepeatedTranscodeTransformationTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/RepeatedTranscodeTransformationTest.java index 17baef3302..4443279bec 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/RepeatedTranscodeTransformationTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/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/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java index 8f8472f583..79b1882c13 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/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/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java index 478a40de78..4937565d5e 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.transformer.mh; -import static com.google.android.exoplayer2.transformer.AndroidTestUtil.FORCE_ENCODE_ENCODER_FACTORY; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_ASSET_SEF_URI_STRING; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING; @@ -31,6 +30,7 @@ import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.transformer.AndroidTestUtil; +import com.google.android.exoplayer2.transformer.AndroidTestUtil.ForceEncodeEncoderFactory; import com.google.android.exoplayer2.transformer.DefaultEncoderFactory; import com.google.android.exoplayer2.transformer.EncoderSelector; import com.google.android.exoplayer2.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/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java index 7f4f5f39a5..7613a57c5c 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/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/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java index 142b0340b7..3bfcce5740 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/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)