mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Test: Move duplicated GL tone mapping logic into helper methods.
PiperOrigin-RevId: 538491957
(cherry picked from commit 9dad207603)
This commit is contained in:
parent
71c2d7ba92
commit
797ee99baf
2 changed files with 39 additions and 59 deletions
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
package androidx.media3.transformer.mh;
|
package androidx.media3.transformer.mh;
|
||||||
|
|
||||||
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||||
|
|
@ -24,10 +25,12 @@ import static androidx.media3.transformer.AndroidTestUtil.skipAndLogIfFormatsUns
|
||||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.ColorInfo;
|
import androidx.media3.common.ColorInfo;
|
||||||
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.util.GlUtil;
|
import androidx.media3.common.util.GlUtil;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.effect.DefaultVideoFrameProcessor;
|
import androidx.media3.effect.DefaultVideoFrameProcessor;
|
||||||
|
|
@ -75,6 +78,13 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest {
|
||||||
"OpenGL-based HDR to SDR tone mapping is unsupported below API 29.";
|
"OpenGL-based HDR to SDR tone mapping is unsupported below API 29.";
|
||||||
private static final String SKIP_REASON_NO_YUV = "Device lacks YUV extension support.";
|
private static final String SKIP_REASON_NO_YUV = "Device lacks YUV extension support.";
|
||||||
|
|
||||||
|
private static final ColorInfo TONE_MAP_SDR_COLOR =
|
||||||
|
new ColorInfo.Builder()
|
||||||
|
.setColorSpace(C.COLOR_SPACE_BT709)
|
||||||
|
.setColorRange(C.COLOR_RANGE_LIMITED)
|
||||||
|
.setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2)
|
||||||
|
.build();
|
||||||
|
|
||||||
private @MonotonicNonNull VideoFrameProcessorTestRunner videoFrameProcessorTestRunner;
|
private @MonotonicNonNull VideoFrameProcessorTestRunner videoFrameProcessorTestRunner;
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
|
@ -87,38 +97,14 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest {
|
||||||
@Test
|
@Test
|
||||||
public void toneMap_hlgFrame_matchesGoldenFile() throws Exception {
|
public void toneMap_hlgFrame_matchesGoldenFile() throws Exception {
|
||||||
String testId = "toneMap_hlgFrame_matchesGoldenFile";
|
String testId = "toneMap_hlgFrame_matchesGoldenFile";
|
||||||
if (Util.SDK_INT < 29) {
|
if (!deviceSupportsOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT)) {
|
||||||
recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_OPENGL_UNDER_API_29);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!GlUtil.isYuvTargetExtensionSupported()) {
|
|
||||||
recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (skipAndLogIfFormatsUnsupported(
|
|
||||||
getApplicationContext(),
|
|
||||||
testId,
|
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
|
||||||
/* outputFormat= */ null)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ColorInfo hlgColor =
|
|
||||||
new ColorInfo.Builder()
|
|
||||||
.setColorSpace(C.COLOR_SPACE_BT2020)
|
|
||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
|
||||||
.setColorTransfer(C.COLOR_TRANSFER_HLG)
|
|
||||||
.build();
|
|
||||||
ColorInfo toneMapSdrColor =
|
|
||||||
new ColorInfo.Builder()
|
|
||||||
.setColorSpace(C.COLOR_SPACE_BT709)
|
|
||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
|
||||||
.setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2)
|
|
||||||
.build();
|
|
||||||
videoFrameProcessorTestRunner =
|
videoFrameProcessorTestRunner =
|
||||||
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
||||||
.setVideoAssetPath(INPUT_HLG_MP4_ASSET_STRING)
|
.setVideoAssetPath(INPUT_HLG_MP4_ASSET_STRING)
|
||||||
.setInputColorInfo(hlgColor)
|
.setInputColorInfo(checkNotNull(MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.colorInfo))
|
||||||
.setOutputColorInfo(toneMapSdrColor)
|
.setOutputColorInfo(TONE_MAP_SDR_COLOR)
|
||||||
.build();
|
.build();
|
||||||
Bitmap expectedBitmap = readBitmap(TONE_MAP_HLG_TO_SDR_PNG_ASSET_PATH);
|
Bitmap expectedBitmap = readBitmap(TONE_MAP_HLG_TO_SDR_PNG_ASSET_PATH);
|
||||||
|
|
||||||
|
|
@ -151,38 +137,15 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest {
|
||||||
public void toneMap_pqFrame_matchesGoldenFile() throws Exception {
|
public void toneMap_pqFrame_matchesGoldenFile() throws Exception {
|
||||||
// TODO(b/239735341): Move this test to mobileharness testing.
|
// TODO(b/239735341): Move this test to mobileharness testing.
|
||||||
String testId = "toneMap_pqFrame_matchesGoldenFile";
|
String testId = "toneMap_pqFrame_matchesGoldenFile";
|
||||||
if (Util.SDK_INT < 29) {
|
if (!deviceSupportsOpenGlToneMapping(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT)) {
|
||||||
recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_OPENGL_UNDER_API_29);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!GlUtil.isYuvTargetExtensionSupported()) {
|
|
||||||
recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (skipAndLogIfFormatsUnsupported(
|
|
||||||
getApplicationContext(),
|
|
||||||
testId,
|
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
|
||||||
/* outputFormat= */ null)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ColorInfo pqColor =
|
|
||||||
new ColorInfo.Builder()
|
|
||||||
.setColorSpace(C.COLOR_SPACE_BT2020)
|
|
||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
|
||||||
.setColorTransfer(C.COLOR_TRANSFER_ST2084)
|
|
||||||
.build();
|
|
||||||
ColorInfo toneMapSdrColor =
|
|
||||||
new ColorInfo.Builder()
|
|
||||||
.setColorSpace(C.COLOR_SPACE_BT709)
|
|
||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
|
||||||
.setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2)
|
|
||||||
.build();
|
|
||||||
videoFrameProcessorTestRunner =
|
videoFrameProcessorTestRunner =
|
||||||
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
||||||
.setVideoAssetPath(INPUT_PQ_MP4_ASSET_STRING)
|
.setVideoAssetPath(INPUT_PQ_MP4_ASSET_STRING)
|
||||||
.setInputColorInfo(pqColor)
|
.setInputColorInfo(checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo))
|
||||||
.setOutputColorInfo(toneMapSdrColor)
|
.setOutputColorInfo(TONE_MAP_SDR_COLOR)
|
||||||
.build();
|
.build();
|
||||||
Bitmap expectedBitmap = readBitmap(TONE_MAP_PQ_TO_SDR_PNG_ASSET_PATH);
|
Bitmap expectedBitmap = readBitmap(TONE_MAP_PQ_TO_SDR_PNG_ASSET_PATH);
|
||||||
|
|
||||||
|
|
@ -211,7 +174,24 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest {
|
||||||
.isAtMost(MAXIMUM_DEVICE_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE);
|
.isAtMost(MAXIMUM_DEVICE_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private VideoFrameProcessorTestRunner.Builder getDefaultFrameProcessorTestRunnerBuilder(
|
private static boolean deviceSupportsOpenGlToneMapping(String testId, Format inputFormat)
|
||||||
|
throws Exception {
|
||||||
|
Context context = getApplicationContext();
|
||||||
|
if (Util.SDK_INT < 29) {
|
||||||
|
recordTestSkipped(context, testId, SKIP_REASON_NO_OPENGL_UNDER_API_29);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!GlUtil.isYuvTargetExtensionSupported()) {
|
||||||
|
recordTestSkipped(context, testId, SKIP_REASON_NO_YUV);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (skipAndLogIfFormatsUnsupported(context, testId, inputFormat, /* outputFormat= */ null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static VideoFrameProcessorTestRunner.Builder getDefaultFrameProcessorTestRunnerBuilder(
|
||||||
String testId) {
|
String testId) {
|
||||||
return new VideoFrameProcessorTestRunner.Builder()
|
return new VideoFrameProcessorTestRunner.Builder()
|
||||||
.setTestId(testId)
|
.setTestId(testId)
|
||||||
|
|
|
||||||
|
|
@ -104,22 +104,22 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
|
||||||
|
|
||||||
private static boolean deviceSupportsOpenGlToneMapping(String testId, Format inputFormat)
|
private static boolean deviceSupportsOpenGlToneMapping(String testId, Format inputFormat)
|
||||||
throws JSONException, IOException, MediaCodecUtil.DecoderQueryException {
|
throws JSONException, IOException, MediaCodecUtil.DecoderQueryException {
|
||||||
|
Context context = getApplicationContext();
|
||||||
if (Util.SDK_INT < 29) {
|
if (Util.SDK_INT < 29) {
|
||||||
recordTestSkipped(
|
recordTestSkipped(
|
||||||
ApplicationProvider.getApplicationContext(),
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* reason= */ "OpenGL-based HDR to SDR tone mapping is only supported on API 29+.");
|
/* reason= */ "OpenGL-based HDR to SDR tone mapping is only supported on API 29+.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GlUtil.isYuvTargetExtensionSupported()) {
|
if (!GlUtil.isYuvTargetExtensionSupported()) {
|
||||||
recordTestSkipped(
|
recordTestSkipped(context, testId, /* reason= */ "Device lacks YUV extension support.");
|
||||||
getApplicationContext(), testId, /* reason= */ "Device lacks YUV extension support.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
return !AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||||
getApplicationContext(),
|
context,
|
||||||
testId,
|
testId,
|
||||||
inputFormat,
|
inputFormat,
|
||||||
/* outputFormat= */ inputFormat
|
/* outputFormat= */ inputFormat
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue