Test: Use AssumptionViolatedException for HDR capability check.

Also, use a common util method

PiperOrigin-RevId: 616815502
This commit is contained in:
huangdarwin 2024-03-18 07:03:27 -07:00 committed by Copybara-Service
parent e8612a0c02
commit 2fa38d15dd
4 changed files with 55 additions and 68 deletions

View File

@ -26,7 +26,7 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECO
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
import static androidx.media3.transformer.EncoderUtil.getSupportedEncodersForHdrEditing;
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
import static androidx.media3.transformer.mh.UnoptimizedGlEffect.NO_OP_EFFECT;
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import static com.google.common.truth.Truth.assertThat;
@ -230,7 +230,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noEffects_hlg10Input_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -258,7 +258,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noEffects_hlg10TextureInput_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -288,7 +288,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
@Test
public void noEffects_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
assumeDeviceSupportsHdrEditing(MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
assumeDeviceSupportsHdrEditing(
testId,
MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.sampleMimeType,
MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.colorInfo);
assumeDeviceSupportsUltraHdrEditing();
ColorInfo outputColorInfo =
new ColorInfo.Builder()
@ -323,7 +326,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noEffects_hdr10Input_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -351,7 +354,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noEffects_hdr10TextureInput_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -381,7 +384,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
@Test
public void noEffects_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
assumeDeviceSupportsHdrEditing(
testId,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
assumeDeviceSupportsUltraHdrEditing();
ColorInfo outputColorInfo =
new ColorInfo.Builder()
@ -416,7 +422,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noOpEffect_hlg10Input_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -445,7 +451,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noOpEffect_hlg10TextureInput_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -475,7 +481,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
@Test
public void noOpEffect_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
assumeDeviceSupportsHdrEditing(
testId,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
assumeDeviceSupportsUltraHdrEditing();
ColorInfo outputColorInfo =
new ColorInfo.Builder()
@ -511,7 +520,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noOpEffect_hdr10Input_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -540,7 +549,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
public void noOpEffect_hdr10TextureInput_matchesGoldenFile() throws Exception {
Context context = getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
assumeDeviceSupportsHdrEditing(format);
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
return;
@ -570,7 +579,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
@Test
public void noOpEffect_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
assumeDeviceSupportsHdrEditing(
testId,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
assumeDeviceSupportsUltraHdrEditing();
ColorInfo outputColorInfo =
new ColorInfo.Builder()
@ -694,17 +706,6 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
.setBitmapReader(textureBitmapReader);
}
private void assumeDeviceSupportsHdrEditing(Format format) throws JSONException, IOException {
if (getSupportedEncodersForHdrEditing(format.sampleMimeType, format.colorInfo).isEmpty()) {
String skipReason =
format.colorInfo.colorTransfer == C.COLOR_TRANSFER_HLG
? "No HLG editing support."
: "No PQ editing support.";
recordTestSkipped(getApplicationContext(), testId, skipReason);
throw new AssumptionViolatedException(skipReason);
}
}
private void assumeDeviceSupportsUltraHdrEditing() throws JSONException, IOException {
if (Util.SDK_INT < 34) {
recordTestSkipped(

View File

@ -15,17 +15,21 @@
*/
package androidx.media3.transformer.mh;
import static androidx.media3.common.util.Assertions.checkState;
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
import static androidx.media3.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported;
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
import android.content.Context;
import androidx.media3.common.ColorInfo;
import androidx.media3.common.Format;
import androidx.media3.common.util.GlUtil;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.mediacodec.MediaCodecUtil;
import androidx.media3.transformer.EncoderUtil;
import java.io.IOException;
import org.json.JSONException;
import org.junit.AssumptionViolatedException;
/** Utility class for checking HDR capabilities. */
public final class HdrCapabilitiesUtil {
@ -56,5 +60,20 @@ public final class HdrCapabilitiesUtil {
return false;
}
/**
* Assumes that the device supports HDR editing for the given {@code colorInfo}.
*
* @throws AssumptionViolatedException if the device does not support HDR editing.
*/
public static void assumeDeviceSupportsHdrEditing(
String testId, String mimeType, ColorInfo colorInfo) throws JSONException, IOException {
checkState(ColorInfo.isTransferHdr(colorInfo));
if (EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty()) {
String skipReason = "No HDR editing support for " + colorInfo;
recordTestSkipped(getApplicationContext(), testId, skipReason);
throw new AssumptionViolatedException(skipReason);
}
}
private HdrCapabilitiesUtil() {}
}

View File

@ -15,8 +15,6 @@
*/
package androidx.media3.transformer.mh;
import static androidx.media3.common.MimeTypes.VIDEO_H265;
import static androidx.media3.common.util.Assertions.checkState;
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
@ -28,19 +26,18 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR;
import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.net.Uri;
import androidx.media3.common.C;
import androidx.media3.common.ColorInfo;
import androidx.media3.common.Format;
import androidx.media3.common.MediaItem;
import androidx.media3.common.util.Util;
import androidx.media3.transformer.AndroidTestUtil;
import androidx.media3.transformer.Composition;
import androidx.media3.transformer.EditedMediaItem;
import androidx.media3.transformer.EncoderUtil;
import androidx.media3.transformer.ExportException;
import androidx.media3.transformer.ExportTestResult;
import androidx.media3.transformer.TransformationRequest;
@ -143,10 +140,7 @@ public final class HdrEditingTest {
public void exportAndTranscode_hdr10File_whenHdrEditingIsSupported() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
recordTestSkipped(context, testId, /* reason= */ "Device lacks HDR10 editing support.");
return;
}
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
@ -174,10 +168,7 @@ public final class HdrEditingTest {
public void exportAndTranscode_hlg10File_whenHdrEditingIsSupported() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
recordTestSkipped(context, testId, /* reason= */ "Device lacks HLG10 editing support.");
return;
}
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
@ -205,10 +196,7 @@ public final class HdrEditingTest {
public void exportAndTranscode_dolbyVisionFile_whenHdrEditingIsSupported() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
Format format = MP4_ASSET_DOLBY_VISION_HDR_FORMAT;
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
recordTestSkipped(context, testId, /* reason= */ "Device lacks HLG10 editing support.");
return;
}
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
@ -237,10 +225,7 @@ public final class HdrEditingTest {
throws Exception {
Context context = ApplicationProvider.getApplicationContext();
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
if (deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
recordTestSkipped(context, testId, /* reason= */ "Device supports HDR10 editing.");
return;
}
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
@ -302,10 +287,7 @@ public final class HdrEditingTest {
throws Exception {
Context context = ApplicationProvider.getApplicationContext();
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
if (deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
recordTestSkipped(context, testId, /* reason= */ "Device supports HLG10 editing.");
return;
}
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
@ -359,9 +341,4 @@ public final class HdrEditingTest {
throw exception;
}
}
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {
checkState(ColorInfo.isTransferHdr(colorInfo));
return !EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty();
}
}

View File

@ -28,14 +28,13 @@ import static androidx.media3.transformer.SequenceEffectTestUtil.SINGLE_30_FPS_V
import static androidx.media3.transformer.SequenceEffectTestUtil.assertBitmapsMatchExpectedAndSave;
import static androidx.media3.transformer.SequenceEffectTestUtil.clippedVideo;
import static androidx.media3.transformer.SequenceEffectTestUtil.createComposition;
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.skipAndLogIfOpenGlToneMappingUnsupported;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
import android.content.Context;
import androidx.annotation.Nullable;
import androidx.media3.common.ColorInfo;
import androidx.media3.common.Effect;
import androidx.media3.common.MediaItem;
import androidx.media3.effect.Presentation;
@ -43,7 +42,6 @@ import androidx.media3.effect.RgbFilter;
import androidx.media3.effect.ScaleAndRotateTransformation;
import androidx.media3.transformer.Composition;
import androidx.media3.transformer.EditedMediaItemSequence;
import androidx.media3.transformer.EncoderUtil;
import androidx.media3.transformer.ExportException;
import androidx.media3.transformer.ExportTestResult;
import androidx.media3.transformer.Transformer;
@ -119,10 +117,8 @@ public final class TransformerSequenceEffectTestWithHdr {
@Test
@RequiresNonNull("testId")
public void export_withHdrThenSdr_throws_whenHdrEditingSupported() throws Exception {
assumeTrue(
"Device does not support HDR10 editing.",
deviceSupportsHdrEditing(
VIDEO_H265, checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo)));
assumeDeviceSupportsHdrEditing(
testId, VIDEO_H265, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
assumeFalse(
skipAndLogIfFormatsUnsupported(
context,
@ -162,10 +158,8 @@ public final class TransformerSequenceEffectTestWithHdr {
@Test
@RequiresNonNull("testId")
public void export_withHdrThenSdr_whenHdrEditingUnsupported() throws Exception {
assumeFalse(
"Device supports HDR10 editing.",
deviceSupportsHdrEditing(
VIDEO_H265, checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo)));
assumeDeviceSupportsHdrEditing(
testId, VIDEO_H265, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
assumeFalse(
skipAndLogIfOpenGlToneMappingUnsupported(
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT));
@ -199,8 +193,4 @@ public final class TransformerSequenceEffectTestWithHdr {
assertBitmapsMatchExpectedAndSave(
extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId);
}
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {
return !EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty();
}
}