From 29e32540dec09e75f3e56957ae37a63b81f9568c Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Wed, 13 Apr 2022 16:17:13 +0100 Subject: [PATCH] FrameProcessor: Move test bitmaps to a separate directory. * Group what's now many related test PNGs by moving them to their own directory. * Move bitmap references to files where they're used, as each bitmap is only used once each, except the original bitmap. PiperOrigin-RevId: 441485489 --- .../bitmap/sample_mp4_first_frame/README.md | 32 +++++++++++ .../aspect_ratio_scale_to_fit_narrow.png} | Bin .../aspect_ratio_scale_to_fit_wide.png} | Bin ...t_ratio_scale_to_fit_with_crop_narrow.png} | Bin ...ect_ratio_scale_to_fit_with_crop_wide.png} | Bin .../aspect_ratio_stretch_to_fit_narrow.png} | Bin .../aspect_ratio_stretch_to_fit_wide.png} | Bin .../crop_larger.png} | Bin .../crop_smaller.png} | Bin .../original.png} | Bin .../request_output_height.png} | Bin .../rotate90.png} | Bin .../rotate_45_scale_to_fit.png} | Bin .../rotate_then_translate.png} | Bin .../scale_narrow.png} | Bin .../translate_right.png} | Bin .../translate_then_rotate.png} | Bin .../AdvancedFrameProcessorPixelTest.java | 24 ++++---- .../media3/transformer/BitmapTestUtil.java | 36 ------------ .../FrameProcessorChainPixelTest.java | 35 ++++++------ .../PresentationFrameProcessorPixelTest.java | 53 +++++++++--------- 21 files changed, 91 insertions(+), 89 deletions(-) create mode 100644 libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/README.md rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_scale_to_fit_narrow.png => sample_mp4_first_frame/aspect_ratio_scale_to_fit_narrow.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_scale_to_fit_wide.png => sample_mp4_first_frame/aspect_ratio_scale_to_fit_wide.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_narrow.png => sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_narrow.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_wide.png => sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_wide.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_stretch_to_fit_narrow.png => sample_mp4_first_frame/aspect_ratio_stretch_to_fit_narrow.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_aspect_ratio_stretch_to_fit_wide.png => sample_mp4_first_frame/aspect_ratio_stretch_to_fit_wide.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_crop_larger.png => sample_mp4_first_frame/crop_larger.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_crop_smaller.png => sample_mp4_first_frame/crop_smaller.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame.png => sample_mp4_first_frame/original.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_request_output_height.png => sample_mp4_first_frame/request_output_height.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_rotate90.png => sample_mp4_first_frame/rotate90.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_rotate_45_scale_to_fit.png => sample_mp4_first_frame/rotate_45_scale_to_fit.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_rotate_then_translate.png => sample_mp4_first_frame/rotate_then_translate.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_scale_narrow.png => sample_mp4_first_frame/scale_narrow.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_translate_right.png => sample_mp4_first_frame/translate_right.png} (100%) rename libraries/test_data/src/test/assets/media/bitmap/{sample_mp4_first_frame_translate_then_rotate.png => sample_mp4_first_frame/translate_then_rotate.png} (100%) diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/README.md b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/README.md new file mode 100644 index 0000000000..78edfebd86 --- /dev/null +++ b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/README.md @@ -0,0 +1,32 @@ +Expected first frame of +[sample.mp4](https://github.com/androidx/media/blob/main/libraries/test_data/src/test/assets/media/mp4/sample.mp4) +after a +[Transformer](https://github.com/androidx/media/tree/main/libraries/transformer) +transformation. Used to validate that frame operations produce expected output +in +[pixel tests](https://github.com/androidx/media/tree/main/libraries/transformer/src/androidTest/java/androidx/media3/transformer). + + + +To generate new "expected" assets: + +1. Start an emulator with the same configuration as on presubmit. The emulator + is given + [here](cs/target_device%20f:media/libraries/transformer/src/androidTest/BUILD) + and can be run locally, using go/crow: + + ```shell + crow --device generic_phone --api_level 30 --arch x86 + ``` + +2. Run the test. + +3. Copy the file from the device to the assets directory, e.g., + + ```shell + adb pull \ + /sdcard/Android/data/androidx.media3.transformer.test/cache/drawFrame_rotate90_actual.png \ + third_party/java_src/android_libs/media/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate90.png + ``` + + diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_narrow.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_narrow.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_narrow.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_narrow.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_wide.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_wide.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_wide.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_wide.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_narrow.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_narrow.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_narrow.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_narrow.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_wide.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_wide.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_wide.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_wide.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_narrow.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_narrow.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_narrow.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_narrow.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_wide.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_wide.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_wide.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_wide.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_crop_larger.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_larger.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_crop_larger.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_larger.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_crop_smaller.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_smaller.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_crop_smaller.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_smaller.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/original.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/original.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_request_output_height.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/request_output_height.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_request_output_height.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/request_output_height.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate90.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate90.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate90.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate90.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate_45_scale_to_fit.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate_45_scale_to_fit.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate_45_scale_to_fit.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate_45_scale_to_fit.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate_then_translate.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate_then_translate.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_rotate_then_translate.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate_then_translate.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_scale_narrow.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/scale_narrow.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_scale_narrow.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/scale_narrow.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_translate_right.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/translate_right.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_translate_right.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/translate_right.png diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_translate_then_rotate.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/translate_then_rotate.png similarity index 100% rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame_translate_then_rotate.png rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/translate_then_rotate.png diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AdvancedFrameProcessorPixelTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AdvancedFrameProcessorPixelTest.java index 1b2b0332ea..382b2de562 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AdvancedFrameProcessorPixelTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AdvancedFrameProcessorPixelTest.java @@ -15,11 +15,7 @@ */ package androidx.media3.transformer; -import static androidx.media3.transformer.BitmapTestUtil.FIRST_FRAME_PNG_ASSET_STRING; import static androidx.media3.transformer.BitmapTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; -import static androidx.media3.transformer.BitmapTestUtil.ROTATE_90_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.SCALE_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.TRANSLATE_RIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; @@ -48,6 +44,14 @@ import org.junit.runner.RunWith; */ @RunWith(AndroidJUnit4.class) public final class AdvancedFrameProcessorPixelTest { + public static final String ORIGINAL_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/original.png"; + public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/translate_right.png"; + public static final String SCALE_NARROW_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/scale_narrow.png"; + public static final String ROTATE_90_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/rotate90.png"; static { GlUtil.glAssertionsEnabled = true; @@ -63,7 +67,7 @@ public final class AdvancedFrameProcessorPixelTest { @Before public void createTextures() throws IOException { - Bitmap inputBitmap = BitmapTestUtil.readBitmap(FIRST_FRAME_PNG_ASSET_STRING); + Bitmap inputBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); width = inputBitmap.getWidth(); height = inputBitmap.getHeight(); // This surface is needed for focussing a render target, but the tests don't write output to it. @@ -91,7 +95,7 @@ public final class AdvancedFrameProcessorPixelTest { Matrix identityMatrix = new Matrix(); advancedFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), identityMatrix); advancedFrameProcessor.initialize(inputTexId, width, height); - Bitmap expectedBitmap = BitmapTestUtil.readBitmap(FIRST_FRAME_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); advancedFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -114,8 +118,7 @@ public final class AdvancedFrameProcessorPixelTest { advancedFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), translateRightMatrix); advancedFrameProcessor.initialize(inputTexId, width, height); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_PNG_ASSET_PATH); advancedFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -137,8 +140,7 @@ public final class AdvancedFrameProcessorPixelTest { scaleNarrowMatrix.postScale(.5f, 1.2f); advancedFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), scaleNarrowMatrix); advancedFrameProcessor.initialize(inputTexId, width, height); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(SCALE_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(SCALE_NARROW_PNG_ASSET_PATH); advancedFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -160,7 +162,7 @@ public final class AdvancedFrameProcessorPixelTest { rotate90Matrix.postRotate(/* degrees= */ 90); advancedFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), rotate90Matrix); advancedFrameProcessor.initialize(inputTexId, width, height); - Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE_90_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE_90_PNG_ASSET_PATH); advancedFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/BitmapTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/BitmapTestUtil.java index e02cbd290c..3d8b90d371 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/BitmapTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/BitmapTestUtil.java @@ -46,42 +46,6 @@ public class BitmapTestUtil { private static final String TAG = "BitmapTestUtil"; - /* Expected first frames after transformation. */ - public static final String FIRST_FRAME_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame.png"; - public static final String TRANSLATE_RIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_translate_right.png"; - public static final String SCALE_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_scale_narrow.png"; - public static final String ROTATE_THEN_TRANSLATE_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_rotate_then_translate.png"; - public static final String TRANSLATE_THEN_ROTATE_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_translate_then_rotate.png"; - public static final String ROTATE_90_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_rotate90.png"; - public static final String REQUEST_OUTPUT_HEIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_request_output_height.png"; - public static final String ROTATE45_SCALE_TO_FIT_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_rotate_45_scale_to_fit.png"; - public static final String CROP_SMALLER_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_crop_smaller.png"; - public static final String CROP_LARGER_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_crop_larger.png"; - public static final String ASPECT_RATIO_SCALE_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_narrow.png"; - public static final String ASPECT_RATIO_SCALE_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_wide.png"; - public static final String - ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_narrow.png"; - public static final String - ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_scale_to_fit_with_crop_wide.png"; - public static final String ASPECT_RATIO_STRETCH_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_narrow.png"; - public static final String ASPECT_RATIO_STRETCH_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING = - "media/bitmap/sample_mp4_first_frame_aspect_ratio_stretch_to_fit_wide.png"; - /** * Maximum allowed average pixel difference between the expected and actual edited images in pixel * difference-based tests. The value is chosen so that differences in decoder behavior across diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FrameProcessorChainPixelTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FrameProcessorChainPixelTest.java index 85edc94f3f..872ed26235 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FrameProcessorChainPixelTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FrameProcessorChainPixelTest.java @@ -16,13 +16,7 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkNotNull; -import static androidx.media3.transformer.BitmapTestUtil.FIRST_FRAME_PNG_ASSET_STRING; import static androidx.media3.transformer.BitmapTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; -import static androidx.media3.transformer.BitmapTestUtil.REQUEST_OUTPUT_HEIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ROTATE45_SCALE_TO_FIT_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ROTATE_THEN_TRANSLATE_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.TRANSLATE_RIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.TRANSLATE_THEN_ROTATE_EXPECTED_OUTPUT_PNG_ASSET_STRING; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; import static java.util.Arrays.asList; @@ -57,6 +51,18 @@ import org.junit.runner.RunWith; */ @RunWith(AndroidJUnit4.class) public final class FrameProcessorChainPixelTest { + public static final String ORIGINAL_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/original.png"; + public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/translate_right.png"; + public static final String ROTATE_THEN_TRANSLATE_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/rotate_then_translate.png"; + public static final String TRANSLATE_THEN_ROTATE_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/translate_then_rotate.png"; + public static final String REQUEST_OUTPUT_HEIGHT_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/request_output_height.png"; + public static final String ROTATE45_SCALE_TO_FIT_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/rotate_45_scale_to_fit.png"; /** Input video of which we only use the first frame. */ private static final String INPUT_MP4_ASSET_STRING = "media/mp4/sample.mp4"; @@ -85,7 +91,7 @@ public final class FrameProcessorChainPixelTest { public void processData_noEdits_producesExpectedOutput() throws Exception { String testId = "processData_noEdits"; setUpAndPrepareFirstFrame(); - Bitmap expectedBitmap = BitmapTestUtil.readBitmap(FIRST_FRAME_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); @@ -107,8 +113,7 @@ public final class FrameProcessorChainPixelTest { GlFrameProcessor glFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), translateRightMatrix); setUpAndPrepareFirstFrame(glFrameProcessor); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(TRANSLATE_RIGHT_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); @@ -134,8 +139,7 @@ public final class FrameProcessorChainPixelTest { .setRotationDegrees(45) .build(); setUpAndPrepareFirstFrame(translateRightFrameProcessor, rotate45FrameProcessor); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(TRANSLATE_THEN_ROTATE_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(TRANSLATE_THEN_ROTATE_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); @@ -161,8 +165,7 @@ public final class FrameProcessorChainPixelTest { GlFrameProcessor translateRightFrameProcessor = new AdvancedFrameProcessor(getApplicationContext(), translateRightMatrix); setUpAndPrepareFirstFrame(rotate45FrameProcessor, translateRightFrameProcessor); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(ROTATE_THEN_TRANSLATE_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE_THEN_TRANSLATE_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); @@ -182,8 +185,7 @@ public final class FrameProcessorChainPixelTest { GlFrameProcessor glFrameProcessor = new PresentationFrameProcessor.Builder(getApplicationContext()).setResolution(480).build(); setUpAndPrepareFirstFrame(glFrameProcessor); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(REQUEST_OUTPUT_HEIGHT_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(REQUEST_OUTPUT_HEIGHT_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); @@ -205,8 +207,7 @@ public final class FrameProcessorChainPixelTest { .setRotationDegrees(45) .build(); setUpAndPrepareFirstFrame(glFrameProcessor); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(ROTATE45_SCALE_TO_FIT_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ROTATE45_SCALE_TO_FIT_PNG_ASSET_PATH); Bitmap actualBitmap = processFirstFrameAndEnd(); diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PresentationFrameProcessorPixelTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PresentationFrameProcessorPixelTest.java index 745f32befa..d9ab76077c 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PresentationFrameProcessorPixelTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PresentationFrameProcessorPixelTest.java @@ -15,15 +15,6 @@ */ package androidx.media3.transformer; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_SCALE_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_SCALE_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_STRETCH_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.ASPECT_RATIO_STRETCH_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.CROP_LARGER_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.CROP_SMALLER_EXPECTED_OUTPUT_PNG_ASSET_STRING; -import static androidx.media3.transformer.BitmapTestUtil.FIRST_FRAME_PNG_ASSET_STRING; import static androidx.media3.transformer.BitmapTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; @@ -54,6 +45,24 @@ import org.junit.runner.RunWith; */ @RunWith(AndroidJUnit4.class) public final class PresentationFrameProcessorPixelTest { + public static final String ORIGINAL_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/original.png"; + public static final String CROP_SMALLER_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/crop_smaller.png"; + public static final String CROP_LARGER_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/crop_larger.png"; + public static final String ASPECT_RATIO_SCALE_TO_FIT_NARROW_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_narrow.png"; + public static final String ASPECT_RATIO_SCALE_TO_FIT_WIDE_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_wide.png"; + public static final String ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_NARROW_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_narrow.png"; + public static final String ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_WIDE_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_scale_to_fit_with_crop_wide.png"; + public static final String ASPECT_RATIO_STRETCH_TO_FIT_NARROW_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_narrow.png"; + public static final String ASPECT_RATIO_STRETCH_TO_FIT_WIDE_PNG_ASSET_PATH = + "media/bitmap/sample_mp4_first_frame/aspect_ratio_stretch_to_fit_wide.png"; static { GlUtil.glAssertionsEnabled = true; @@ -70,7 +79,7 @@ public final class PresentationFrameProcessorPixelTest { @Before public void createTextures() throws IOException { - Bitmap inputBitmap = BitmapTestUtil.readBitmap(FIRST_FRAME_PNG_ASSET_STRING); + Bitmap inputBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); inputWidth = inputBitmap.getWidth(); inputHeight = inputBitmap.getHeight(); // This surface is needed for focussing a render target, but the tests don't write output to it. @@ -97,7 +106,7 @@ public final class PresentationFrameProcessorPixelTest { presentationFrameProcessor.initialize(inputTexId, inputWidth, inputHeight); Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); - Bitmap expectedBitmap = BitmapTestUtil.readBitmap(FIRST_FRAME_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -123,8 +132,7 @@ public final class PresentationFrameProcessorPixelTest { presentationFrameProcessor.initialize(inputTexId, inputWidth, inputHeight); Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); - Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(CROP_SMALLER_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(CROP_SMALLER_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -150,7 +158,7 @@ public final class PresentationFrameProcessorPixelTest { presentationFrameProcessor.initialize(inputTexId, inputWidth, inputHeight); Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); - Bitmap expectedBitmap = BitmapTestUtil.readBitmap(CROP_LARGER_EXPECTED_OUTPUT_PNG_ASSET_STRING); + Bitmap expectedBitmap = BitmapTestUtil.readBitmap(CROP_LARGER_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -178,8 +186,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap( - ASPECT_RATIO_SCALE_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_SCALE_TO_FIT_NARROW_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -207,7 +214,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap(ASPECT_RATIO_SCALE_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_SCALE_TO_FIT_WIDE_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -235,8 +242,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap( - ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_NARROW_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -264,8 +270,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap( - ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_SCALE_TO_FIT_WITH_CROP_WIDE_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -293,8 +298,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap( - ASPECT_RATIO_STRETCH_TO_FIT_NARROW_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_STRETCH_TO_FIT_NARROW_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap = @@ -322,8 +326,7 @@ public final class PresentationFrameProcessorPixelTest { Size outputSize = presentationFrameProcessor.getOutputSize(); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); Bitmap expectedBitmap = - BitmapTestUtil.readBitmap( - ASPECT_RATIO_STRETCH_TO_FIT_WIDE_EXPECTED_OUTPUT_PNG_ASSET_STRING); + BitmapTestUtil.readBitmap(ASPECT_RATIO_STRETCH_TO_FIT_WIDE_PNG_ASSET_PATH); presentationFrameProcessor.drawFrame(/* presentationTimeUs= */ 0); Bitmap actualBitmap =