diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/ContrastPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/ContrastPixelTest.java index 8edf973da0..e6135fe159 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/ContrastPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/ContrastPixelTest.java @@ -48,13 +48,13 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class ContrastPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/original.png"; public static final String INCREASE_CONTRAST_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/increase_contrast.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/increase_contrast.png"; public static final String DECREASE_CONTRAST_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/decrease_contrast.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/decrease_contrast.png"; public static final String MAXIMUM_CONTRAST_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/maximum_contrast.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/maximum_contrast.png"; // OpenGL uses floats in [0, 1] and maps 0.5f to 128 = 256 / 2. private static final int OPENGL_NEUTRAL_RGB_VALUE = 128; diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/CropPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/CropPixelTest.java index 80a3a4b78d..f9191be598 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/CropPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/CropPixelTest.java @@ -47,11 +47,11 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class CropPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/original.png"; public static final String CROP_SMALLER_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/crop_smaller.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/crop_smaller.png"; public static final String CROP_LARGER_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/crop_larger.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/crop_larger.png"; private final Context context = getApplicationContext(); diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/GlEffectsFrameProcessorPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/GlEffectsFrameProcessorPixelTest.java index b77c1c71bf..af3bc33fb8 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/GlEffectsFrameProcessorPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/GlEffectsFrameProcessorPixelTest.java @@ -58,27 +58,27 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class GlEffectsFrameProcessorPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/original.png"; public static final String SCALE_WIDE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/scale_wide.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/scale_wide.png"; public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/translate_right.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/translate_right.png"; public static final String ROTATE_THEN_TRANSLATE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/rotate_then_translate.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/rotate_then_translate.png"; public static final String ROTATE_THEN_SCALE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/rotate45_then_scale2w.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/rotate45_then_scale2w.png"; public static final String TRANSLATE_THEN_ROTATE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/translate_then_rotate.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/translate_then_rotate.png"; public static final String REQUEST_OUTPUT_HEIGHT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/request_output_height.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/request_output_height.png"; public static final String CROP_THEN_ASPECT_RATIO_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/crop_then_aspect_ratio.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/crop_then_aspect_ratio.png"; public static final String ROTATE45_SCALE_TO_FIT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/rotate_45_scale_to_fit.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/rotate_45_scale_to_fit.png"; public static final String INCREASE_BRIGHTNESS_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/increase_brightness.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/increase_brightness.png"; public static final String GRAYSCALE_THEN_INCREASE_RED_CHANNEL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/grayscale_then_increase_red_channel.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/grayscale_then_increase_red_channel.png"; /** Input video of which we only use the first frame. */ private static final String INPUT_MP4_ASSET_STRING = "media/mp4/sample.mp4"; diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/MatrixTextureProcessorPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/MatrixTextureProcessorPixelTest.java index 8fbab1d6d3..38c3312ed2 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/MatrixTextureProcessorPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/MatrixTextureProcessorPixelTest.java @@ -46,13 +46,13 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class MatrixTextureProcessorPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/original.png"; public static final String TRANSLATE_RIGHT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/translate_right.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/translate_right.png"; public static final String SCALE_NARROW_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/scale_narrow.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/scale_narrow.png"; public static final String ROTATE_90_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/rotate90.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/rotate90.png"; private final Context context = getApplicationContext(); diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/PresentationPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/PresentationPixelTest.java index a44b087d76..cb955bee5a 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/PresentationPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/PresentationPixelTest.java @@ -48,19 +48,19 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class PresentationPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/original.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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/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"; + "media/bitmap/sample_mp4_first_frame/electrical_colors/aspect_ratio_stretch_to_fit_wide.png"; private final Context context = getApplicationContext(); diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbAdjustmentPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbAdjustmentPixelTest.java index 4acd53a3d9..d97d0da75a 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbAdjustmentPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbAdjustmentPixelTest.java @@ -50,13 +50,13 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class RgbAdjustmentPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/original.png"; public static final String ONLY_RED_CHANNEL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/only_red_channel.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/only_red_channel.png"; public static final String INCREASE_RED_CHANNEL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/increase_red_channel.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/increase_red_channel.png"; public static final String INCREASE_BRIGHTNESS_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/increase_brightness.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png"; private final Context context = getApplicationContext(); diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbFilterPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbFilterPixelTest.java index 75e453b6df..a4c66501a6 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbFilterPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/RgbFilterPixelTest.java @@ -48,11 +48,11 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public final class RgbFilterPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/original.png"; public static final String GRAYSCALE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/grayscale.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/grayscale.png"; public static final String INVERT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/invert.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/invert.png"; private final Context context = getApplicationContext(); diff --git a/libraries/effect/src/androidTest/java/androidx/media3/effect/SingleColorLutPixelTest.java b/libraries/effect/src/androidTest/java/androidx/media3/effect/SingleColorLutPixelTest.java index a459ade723..eb2aad0a8d 100644 --- a/libraries/effect/src/androidTest/java/androidx/media3/effect/SingleColorLutPixelTest.java +++ b/libraries/effect/src/androidTest/java/androidx/media3/effect/SingleColorLutPixelTest.java @@ -48,13 +48,13 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class SingleColorLutPixelTest { public static final String ORIGINAL_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/original.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/original.png"; public static final String LUT_MAP_WHITE_TO_GREEN_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/lut_map_white_to_green.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/lut_map_white_to_green.png"; public static final String GRAYSCALE_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/grayscale.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/grayscale.png"; public static final String INVERT_PNG_ASSET_PATH = - "media/bitmap/sample_mp4_first_frame/invert.png"; + "media/bitmap/sample_mp4_first_frame/linear_colors/invert.png"; public static final String VERTICAL_HALD_IDENTITY_LUT = "media/bitmap/lut/identity.png"; public static final String VERTICAL_HALD_GRAYSCALE_LUT = "media/bitmap/lut/grayscale.png"; public static final String VERTICAL_HALD_INVERTED_LUT = "media/bitmap/lut/inverted.png"; diff --git a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_es2.glsl b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_es2.glsl deleted file mode 100644 index 4948d15c40..0000000000 --- a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_es2.glsl +++ /dev/null @@ -1,30 +0,0 @@ -#version 100 -// Copyright 2021 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 -// -// http://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. - -// ES 2 fragment shader that samples from an external texture with uTexSampler, -// copying from this texture to the current output while applying a 4x4 RGB -// color matrix to change the pixel colors. - -#extension GL_OES_EGL_image_external : require -precision mediump float; -uniform samplerExternalOES uTexSampler; -uniform mat4 uRgbMatrix; -varying vec2 vTexSamplingCoord; - -void main() { - vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord); - gl_FragColor = uRgbMatrix * vec4(inputColor.rgb, 1); - gl_FragColor.a = inputColor.a; -} diff --git a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_yuv_es3.glsl b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_yuv_es3.glsl index 27cbb571bd..aa238028fc 100644 --- a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_yuv_es3.glsl +++ b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_external_yuv_es3.glsl @@ -104,4 +104,5 @@ void main() { vec3 srcYuv = texture(uTexSampler, vTexSamplingCoord).xyz; vec3 rgb = yuvToRgb(srcYuv); outColor = uRgbMatrix * vec4(getOpticalColor(rgb), 1.0); + // TODO(b/241902517): Transform optical to electrical colors. } diff --git a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_external_es2.glsl b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_external_es2.glsl new file mode 100644 index 0000000000..6f8dc5489b --- /dev/null +++ b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_external_es2.glsl @@ -0,0 +1,79 @@ +#version 100 +// Copyright 2021 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 +// +// http://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. + + +// ES 2 fragment shader that: +// 1. Samples from an external texture with uTexSampler copying from this +// texture to the current output. +// 2. Transforms the electrical colors to optical colors using the SMPTE 170M +// EOTF. +// 3. Applies a 4x4 RGB color matrix to change the pixel colors. +// 4. Transforms the optical colors back to electrical ones if uApplyOetf == 1 +// using the SMPTE 170M OETF. + +#extension GL_OES_EGL_image_external : require +precision mediump float; +uniform samplerExternalOES uTexSampler; +uniform mat4 uRgbMatrix; +varying vec2 vTexSamplingCoord; +uniform int uApplyOetf; + +const float inverseGamma = 0.4500; +const float gamma = 1.0 / inverseGamma; + +// Transforms a single channel from electrical to optical SDR. +float sdrEotfSingleChannel(float electricalChannel) { + // Specification: + // https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en + return electricalChannel < 0.0812 + ? electricalChannel / 4.500 + : pow((electricalChannel + 0.099) / 1.099, gamma); +} + +// Transforms electronical to optical SDR using the SMPTE 170M EOTF. +vec3 sdrEotf(vec3 electricalColor) { + return vec3( + sdrEotfSingleChannel(electricalColor.r), + sdrEotfSingleChannel(electricalColor.g), + sdrEotfSingleChannel(electricalColor.b)); +} + +// Transforms a single channel from optical to electrical SDR. +float sdrOetfSingleChannel(float opticalChannel) { + // Specification: + // https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en + return opticalChannel < 0.018 + ? opticalChannel * 4.500 + : 1.099 * pow(opticalChannel, inverseGamma) - 0.099; +} + +// Transforms optical SDR colors to electrical SDR using the SMPTE 170M OETF. +vec3 sdrOetf(vec3 opticalColor) { + return uApplyOetf == 1 + ? vec3( + sdrOetfSingleChannel(opticalColor.r), + sdrOetfSingleChannel(opticalColor.g), + sdrOetfSingleChannel(opticalColor.b)) + : opticalColor; +} + +void main() { + vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord); + vec3 linearInputColor = sdrEotf(inputColor.rgb); + + vec4 transformedColors = uRgbMatrix * vec4(linearInputColor, 1); + + gl_FragColor = vec4(sdrOetf(transformedColors.rgb), inputColor.a); +} diff --git a/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_oetf_es2.glsl b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_oetf_es2.glsl new file mode 100644 index 0000000000..03e75083c3 --- /dev/null +++ b/libraries/effect/src/main/assets/shaders/fragment_shader_transformation_sdr_oetf_es2.glsl @@ -0,0 +1,52 @@ +#version 100 +// Copyright 2022 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 +// +// http://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. + +// ES 2 fragment shader that: +// 1. Samples from uTexSampler, copying from this texture to the current +// output. +// 2. Applies a 4x4 RGB color matrix to change the pixel colors. +// 3. Transforms the optical colors to electrical colors using the SMPTE +// 170M OETF. + +precision mediump float; +uniform sampler2D uTexSampler; +uniform mat4 uRgbMatrix; +varying vec2 vTexSamplingCoord; + +const float inverseGamma = 0.4500; + +// Transforms a single channel from optical to electrical SDR. +float sdrOetfSingleChannel(float opticalChannel) { + // Specification: + // https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en + return opticalChannel < 0.018 + ? opticalChannel * 4.500 + : 1.099 * pow(opticalChannel, inverseGamma) - 0.099; +} + +// Transforms optical SDR colors to electrical SDR using the SMPTE 170M OETF. +vec3 sdrOetf(vec3 opticalColor) { + return vec3( + sdrOetfSingleChannel(opticalColor.r), + sdrOetfSingleChannel(opticalColor.g), + sdrOetfSingleChannel(opticalColor.b)); +} + +void main() { + vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord); + vec4 transformedColors = uRgbMatrix * vec4(inputColor.rgb, 1); + + gl_FragColor = vec4(sdrOetf(transformedColors.rgb), inputColor.a); +} diff --git a/libraries/effect/src/main/java/androidx/media3/effect/MatrixTextureProcessor.java b/libraries/effect/src/main/java/androidx/media3/effect/MatrixTextureProcessor.java index d967e104e5..2d9c49cb48 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/MatrixTextureProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/MatrixTextureProcessor.java @@ -50,6 +50,7 @@ import java.util.List; * *
Can copy frames from an external texture and apply color transformations for HDR if needed.
*/
+// TODO(b/241902517): Fix Gamma references since intermediate color space is now linear.
@UnstableApi
@SuppressWarnings("FunctionalInterfaceClash") // b/228192298
/* package */ final class MatrixTextureProcessor extends SingleFrameGlTextureProcessor
@@ -63,10 +64,12 @@ import java.util.List;
"shaders/fragment_shader_transformation_es2.glsl";
private static final String FRAGMENT_SHADER_OETF_ES3_PATH =
"shaders/fragment_shader_oetf_es3.glsl";
- private static final String FRAGMENT_SHADER_TRANSFORMATION_EXTERNAL_PATH =
- "shaders/fragment_shader_transformation_external_es2.glsl";
+ private static final String FRAGMENT_SHADER_TRANSFORMATION_SDR_OETF_ES2_PATH =
+ "shaders/fragment_shader_transformation_sdr_oetf_es2.glsl";
private static final String FRAGMENT_SHADER_TRANSFORMATION_EXTERNAL_YUV_ES3_PATH =
"shaders/fragment_shader_transformation_external_yuv_es3.glsl";
+ private static final String FRAGMENT_SHADER_TRANSFORMATION_SDR_EXTERNAL_PATH =
+ "shaders/fragment_shader_transformation_sdr_external_es2.glsl";
private static final ImmutableList Applies the OETF, {@code matrixTransformations}, {@code rgbMatrices}, then the EOTF, to
+ * Applies the EOTF, {@code matrixTransformations}, {@code rgbMatrices}, then the OETF, to
* convert from and to input and output electrical colors.
*
* @param context The {@link Context}.
@@ -301,10 +305,9 @@ import java.util.List;
String fragmentShaderFilePath =
useHdr
? FRAGMENT_SHADER_TRANSFORMATION_EXTERNAL_YUV_ES3_PATH
- : FRAGMENT_SHADER_TRANSFORMATION_EXTERNAL_PATH;
+ : FRAGMENT_SHADER_TRANSFORMATION_SDR_EXTERNAL_PATH;
GlProgram glProgram = createGlProgram(context, vertexShaderFilePath, fragmentShaderFilePath);
- // TODO(b/241902517): Implement gamma transfer functions.
if (useHdr) {
// In HDR editing mode the decoder output is sampled in YUV.
if (!GlUtil.isYuvTargetExtensionSupported()) {
@@ -319,6 +322,8 @@ import java.util.List;
// No transfer functions needed, because the EOTF and OETF cancel out.
glProgram.setIntUniform("uEotfColorTransfer", Format.NO_VALUE);
+ } else {
+ glProgram.setIntUniform("uApplyOetf", 1);
}
return new MatrixTextureProcessor(
diff --git a/libraries/test_data/src/test/assets/media/bitmap/README.md b/libraries/test_data/src/test/assets/media/bitmap/README.md
index f5593aa648..5552c40d5c 100644
--- a/libraries/test_data/src/test/assets/media/bitmap/README.md
+++ b/libraries/test_data/src/test/assets/media/bitmap/README.md
@@ -24,7 +24,7 @@ To generate new "expected" assets:
```shell
adb pull \
/sdcard/Android/data/androidx.media3.effect.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
+ third_party/java_src/android_libs/media/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/rotate90.png
```
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/decrease_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/decrease_contrast.png
deleted file mode 100644
index fdd8d4550f..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/decrease_contrast.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/README.md b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/README.md
new file mode 100644
index 0000000000..c8b773446d
--- /dev/null
+++ b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/README.md
@@ -0,0 +1,3 @@
+All the files are in *SMPTE 170M colors* following the
+[ITU Spec](https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en) per the
+[Android MediaFormat documentation](https://developer.android.com/reference/android/media/MediaFormat#COLOR_TRANSFER_SDR_VIDEO).
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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/crop_smaller.png
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_then_aspect_ratio.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/crop_then_aspect_ratio.png
similarity index 100%
rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/crop_then_aspect_ratio.png
rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/crop_then_aspect_ratio.png
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/grayscale_then_increase_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/grayscale_then_increase_red_channel.png
new file mode 100644
index 0000000000..7b132ff585
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/grayscale_then_increase_red_channel.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/increase_brightness.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/increase_brightness.png
new file mode 100644
index 0000000000..51abe66541
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/increase_brightness.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/original.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/original.png
similarity index 100%
rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/original.png
rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/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/electrical_colors/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/electrical_colors/request_output_height.png
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate45_then_scale2w.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/rotate45_then_scale2w.png
similarity index 100%
rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/rotate45_then_scale2w.png
rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/rotate45_then_scale2w.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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/scale_narrow.png
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/scale_wide.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/scale_wide.png
similarity index 100%
rename from libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/scale_wide.png
rename to libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/electrical_colors/scale_wide.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/electrical_colors/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/electrical_colors/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/electrical_colors/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/electrical_colors/translate_then_rotate.png
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale.png
deleted file mode 100644
index 11b83d2320..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale_then_increase_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale_then_increase_red_channel.png
deleted file mode 100644
index 07dc4f149c..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/grayscale_then_increase_red_channel.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_brightness.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_brightness.png
deleted file mode 100644
index 2d65aaa29f..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_brightness.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_contrast.png
deleted file mode 100644
index 5a98d00de0..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_contrast.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_red_channel.png
deleted file mode 100644
index 3c45b94b52..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/increase_red_channel.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/invert.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/invert.png
deleted file mode 100644
index e909fe6084..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/invert.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/README.md b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/README.md
new file mode 100644
index 0000000000..c7245c7d38
--- /dev/null
+++ b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/README.md
@@ -0,0 +1,2 @@
+All the files are in *Linear RGB* per the
+[Android MediaFormat documentation](https://developer.android.com/reference/android/media/MediaFormat#COLOR_TRANSFER_LINEAR).
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/decrease_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/decrease_contrast.png
new file mode 100644
index 0000000000..cc44e01858
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/decrease_contrast.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/grayscale.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/grayscale.png
new file mode 100644
index 0000000000..a5bfddd2cc
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/grayscale.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png
new file mode 100644
index 0000000000..c988cc467a
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_contrast.png
new file mode 100644
index 0000000000..32d100368a
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_contrast.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_red_channel.png
new file mode 100644
index 0000000000..133bb847ef
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/increase_red_channel.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/invert.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/invert.png
new file mode 100644
index 0000000000..aac7c87fb5
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/invert.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/lut_map_white_to_green.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/lut_map_white_to_green.png
new file mode 100644
index 0000000000..022a38c263
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/lut_map_white_to_green.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/maximum_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/maximum_contrast.png
new file mode 100644
index 0000000000..68e86dad45
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/maximum_contrast.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/only_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/only_red_channel.png
new file mode 100644
index 0000000000..d3b303bd1b
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/only_red_channel.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/original.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/original.png
new file mode 100644
index 0000000000..dd8fc4a990
Binary files /dev/null and b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/linear_colors/original.png differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/lut_map_white_to_green.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/lut_map_white_to_green.png
deleted file mode 100644
index bcd6322354..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/lut_map_white_to_green.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/maximum_contrast.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/maximum_contrast.png
deleted file mode 100644
index f794369afc..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/maximum_contrast.png and /dev/null differ
diff --git a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/only_red_channel.png b/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/only_red_channel.png
deleted file mode 100644
index 56d38b4e21..0000000000
Binary files a/libraries/test_data/src/test/assets/media/bitmap/sample_mp4_first_frame/only_red_channel.png and /dev/null differ
diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/MssimCalculatorTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/MssimCalculatorTest.java
index 25b73734c4..0807c08408 100644
--- a/libraries/transformer/src/test/java/androidx/media3/transformer/MssimCalculatorTest.java
+++ b/libraries/transformer/src/test/java/androidx/media3/transformer/MssimCalculatorTest.java
@@ -34,7 +34,7 @@ public class MssimCalculatorTest {
@Test
public void calculateSsim_sameImage() throws Exception {
- Bitmap bitmap = readBitmap("media/bitmap/sample_mp4_first_frame/original.png");
+ Bitmap bitmap = readBitmap("media/bitmap/sample_mp4_first_frame/linear_colors/original.png");
byte[] imageLuminosities = bitmapToLuminosityArray(bitmap);
// SSIM equals 1 if the two images match.
@@ -46,10 +46,11 @@ public class MssimCalculatorTest {
@Test
public void calculateSsim_increasedBrightness() throws Exception {
- Bitmap refBitmap = readBitmap("media/bitmap/sample_mp4_first_frame/original.png");
- Bitmap distBitmap = readBitmap("media/bitmap/sample_mp4_first_frame/increase_brightness.png");
+ Bitmap refBitmap = readBitmap("media/bitmap/sample_mp4_first_frame/linear_colors/original.png");
+ Bitmap distBitmap =
+ readBitmap("media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png");
- // SSIM as calculated by ffmpeg: 0.634326 = 63%
+ // SSIM as calculated by ffmpeg: 0.526821 = 52%
assertThat(
(int)
@@ -59,14 +60,15 @@ public class MssimCalculatorTest {
refBitmap.getWidth(),
refBitmap.getHeight())
* 100))
- .isEqualTo(63);
+ .isEqualTo(52);
}
@Test
public void calculateSsim_withWindowSkipping_similarToWithout() throws Exception {
- Bitmap referenceBitmap = readBitmap("media/bitmap/sample_mp4_first_frame/original.png");
+ Bitmap referenceBitmap =
+ readBitmap("media/bitmap/sample_mp4_first_frame/linear_colors/original.png");
Bitmap distortedBitmap =
- readBitmap("media/bitmap/sample_mp4_first_frame/increase_brightness.png");
+ readBitmap("media/bitmap/sample_mp4_first_frame/linear_colors/increase_brightness.png");
byte[] referenceLuminosity = bitmapToLuminosityArray(referenceBitmap);
byte[] distortedLuminosity = bitmapToLuminosityArray(distortedBitmap);