diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/ExoPlayerPlaybackTest/first_frame.png b/libraries/test_data/src/test/assets/test-generated-goldens/ExoPlayerPlaybackTest/first_frame.png index ebf3cd16db..6ed19b3c37 100644 Binary files a/libraries/test_data/src/test/assets/test-generated-goldens/ExoPlayerPlaybackTest/first_frame.png and b/libraries/test_data/src/test/assets/test-generated-goldens/ExoPlayerPlaybackTest/first_frame.png differ diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/BitmapPixelTestUtil.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/BitmapPixelTestUtil.java index 250b682702..75a02bee73 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/BitmapPixelTestUtil.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/BitmapPixelTestUtil.java @@ -327,15 +327,15 @@ public class BitmapPixelTestUtil { } int alphaDifference = abs(Color.alpha(actualColor) - Color.alpha(expectedColor)); int redDifference = abs(Color.red(actualColor) - Color.red(expectedColor)); - int greenDifference = abs(Color.green(actualColor) - Color.green(expectedColor)); int blueDifference = abs(Color.blue(actualColor) - Color.blue(expectedColor)); - differencesBitmap.setPixel(x, y, Color.rgb(redDifference, greenDifference, blueDifference)); + int greenDifference = abs(Color.green(actualColor) - Color.green(expectedColor)); + differencesBitmap.setPixel(x, y, Color.rgb(redDifference, blueDifference, greenDifference)); int maximumAbsoluteDifference = 0; maximumAbsoluteDifference = max(maximumAbsoluteDifference, alphaDifference); maximumAbsoluteDifference = max(maximumAbsoluteDifference, redDifference); - maximumAbsoluteDifference = max(maximumAbsoluteDifference, greenDifference); maximumAbsoluteDifference = max(maximumAbsoluteDifference, blueDifference); + maximumAbsoluteDifference = max(maximumAbsoluteDifference, greenDifference); sumMaximumAbsoluteDifferences += maximumAbsoluteDifference; } 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 f101212238..256de9a93c 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -31,16 +31,10 @@ import static org.junit.Assume.assumeFalse; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; -import android.graphics.Color; import android.media.Image; import android.media.MediaFormat; import android.opengl.EGLContext; import android.opengl.EGLDisplay; -import android.text.Spannable; -import android.text.SpannableString; -import android.text.style.AbsoluteSizeSpan; -import android.text.style.ForegroundColorSpan; -import android.text.style.TypefaceSpan; import android.util.Pair; import androidx.annotation.Nullable; import androidx.media3.common.C; @@ -53,9 +47,7 @@ import androidx.media3.common.util.Log; import androidx.media3.common.util.MediaFormatUtil; import androidx.media3.common.util.Util; import androidx.media3.effect.DefaultGlObjectsProvider; -import androidx.media3.effect.OverlayEffect; import androidx.media3.effect.ScaleAndRotateTransformation; -import androidx.media3.effect.TextOverlay; import androidx.media3.exoplayer.mediacodec.MediaCodecUtil; import androidx.media3.test.utils.BitmapPixelTestUtil; import androidx.media3.test.utils.VideoDecodingWrapper; @@ -940,34 +932,6 @@ public final class AndroidTestUtil { return eglContext; } - /** Creates an {@link OverlayEffect} that draws the timestamp onto frames. */ - public static OverlayEffect createTimestampOverlay() { - return new OverlayEffect( - ImmutableList.of( - new TextOverlay() { - @Override - public SpannableString getText(long presentationTimeUs) { - SpannableString text = new SpannableString(String.valueOf(presentationTimeUs)); - text.setSpan( - new ForegroundColorSpan(Color.WHITE), - /* start= */ 0, - text.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - text.setSpan( - new AbsoluteSizeSpan(/* size= */ 96), - /* start= */ 0, - text.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - text.setSpan( - new TypefaceSpan(/* family= */ "sans-serif"), - /* start= */ 0, - text.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - return text; - } - })); - } - /** * Generates a {@linkplain android.opengl.GLES10#GL_TEXTURE_2D traditional GLES texture} from the * given bitmap. diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlaybackTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java similarity index 96% rename from libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlaybackTest.java rename to libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java index 2d6b233781..226a33d559 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/CompositionPlaybackTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/CompositionPlaybackTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package androidx.media3.transformer; +package androidx.media3.transformer.mh.performance; import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image; @@ -22,7 +22,7 @@ import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePix import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET; import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET; -import static androidx.media3.transformer.AndroidTestUtil.createTimestampOverlay; +import static androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; @@ -38,6 +38,13 @@ import androidx.media3.common.util.ConditionVariable; import androidx.media3.common.util.Size; import androidx.media3.common.util.Util; import androidx.media3.effect.GlEffect; +import androidx.media3.transformer.Composition; +import androidx.media3.transformer.CompositionPlayer; +import androidx.media3.transformer.EditedMediaItem; +import androidx.media3.transformer.EditedMediaItemSequence; +import androidx.media3.transformer.Effects; +import androidx.media3.transformer.InputTimestampRecordingShaderProgram; +import androidx.media3.transformer.PlayerTestListener; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EffectPlaybackTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/EffectPlaybackTest.java similarity index 99% rename from libraries/transformer/src/androidTest/java/androidx/media3/transformer/EffectPlaybackTest.java rename to libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/EffectPlaybackTest.java index e4ab300fb3..96e079cd00 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/EffectPlaybackTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/EffectPlaybackTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package androidx.media3.transformer; +package androidx.media3.transformer.mh.performance; import static androidx.media3.common.Player.STATE_ENDED; import static androidx.media3.common.util.Assertions.checkNotNull; @@ -25,7 +25,7 @@ import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888Bitma import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888; import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET; -import static androidx.media3.transformer.AndroidTestUtil.createTimestampOverlay; +import static androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assume.assumeTrue; diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/PlaybackTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/PlaybackTestUtil.java new file mode 100644 index 0000000000..dabce30ec5 --- /dev/null +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/performance/PlaybackTestUtil.java @@ -0,0 +1,61 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.media3.transformer.mh.performance; + +import android.graphics.Color; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.AbsoluteSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.text.style.TypefaceSpan; +import androidx.media3.effect.OverlayEffect; +import androidx.media3.effect.TextOverlay; +import com.google.common.collect.ImmutableList; + +/** Utilities for playback tests. */ +/* package */ final class PlaybackTestUtil { + + private PlaybackTestUtil() {} + + /** Creates an {@link OverlayEffect} that draws the timestamp onto frames. */ + public static OverlayEffect createTimestampOverlay() { + return new OverlayEffect( + ImmutableList.of( + new TextOverlay() { + @Override + public SpannableString getText(long presentationTimeUs) { + SpannableString text = new SpannableString(String.valueOf(presentationTimeUs)); + text.setSpan( + new ForegroundColorSpan(Color.WHITE), + /* start= */ 0, + text.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + text.setSpan( + new AbsoluteSizeSpan(/* size= */ 96), + /* start= */ 0, + text.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + text.setSpan( + new TypefaceSpan(/* family= */ "sans-serif"), + /* start= */ 0, + text.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + return text; + } + })); + } +}