diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 7f864cfed3..15f3fe7072 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -26,6 +26,9 @@ created after the playlist is cleared. * Transformer: * Parse EXIF rotation data for image inputs. + * Remove `TransformationRequest.HdrMode` annotation type and its + associated constants. Use `Composition.HdrMode` and its associated + constants instead. * Track Selection: * Extractors: * MPEG-TS: Ensure the last frame is rendered by passing the last access diff --git a/demos/transformer/src/main/java/androidx/media3/demo/transformer/ConfigurationActivity.java b/demos/transformer/src/main/java/androidx/media3/demo/transformer/ConfigurationActivity.java index 9feed60806..bf731b6ab4 100644 --- a/demos/transformer/src/main/java/androidx/media3/demo/transformer/ConfigurationActivity.java +++ b/demos/transformer/src/main/java/androidx/media3/demo/transformer/ConfigurationActivity.java @@ -20,6 +20,10 @@ import static android.Manifest.permission.READ_MEDIA_VIDEO; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Util.SDK_INT; +import static androidx.media3.transformer.Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR; +import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR; +import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; +import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; import android.app.Activity; import android.content.DialogInterface; @@ -45,7 +49,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.media3.common.C; import androidx.media3.common.MimeTypes; -import androidx.media3.transformer.TransformationRequest; +import androidx.media3.transformer.Composition; import com.google.android.material.slider.RangeSlider; import com.google.android.material.slider.Slider; import com.google.common.collect.ImmutableMap; @@ -177,20 +181,13 @@ public final class ConfigurationActivity extends AppCompatActivity { "Custom Bitmap Overlay", "Custom Text Overlay", }; - private static final ImmutableMap - HDR_MODE_DESCRIPTIONS = - new ImmutableMap.Builder() - .put("Keep HDR", TransformationRequest.HDR_MODE_KEEP_HDR) - .put( - "MediaCodec tone-map HDR to SDR", - TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) - .put( - "OpenGL tone-map HDR to SDR", - TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) - .put( - "Force Interpret HDR as SDR", - TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR) - .build(); + private static final ImmutableMap HDR_MODE_DESCRIPTIONS = + new ImmutableMap.Builder() + .put("Keep HDR", HDR_MODE_KEEP_HDR) + .put("MediaCodec tone-map HDR to SDR", HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) + .put("OpenGL tone-map HDR to SDR", HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) + .put("Force Interpret HDR as SDR", HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR) + .build(); private static final ImmutableMap OVERLAY_COLORS = new ImmutableMap.Builder() .put("BLACK", Color.BLACK) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FallbackDetails.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FallbackDetails.java index 00b6db1d81..212abb985b 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FallbackDetails.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/FallbackDetails.java @@ -17,7 +17,7 @@ package androidx.media3.transformer; import androidx.annotation.Nullable; import androidx.media3.common.C; -import androidx.media3.transformer.TransformationRequest.HdrMode; +import androidx.media3.transformer.Composition.HdrMode; import java.util.Objects; import org.json.JSONException; import org.json.JSONObject; diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/HdrEditingTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/HdrEditingTest.java index 8df7721c9a..0b2230a3e7 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/HdrEditingTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/HdrEditingTest.java @@ -24,6 +24,8 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECON import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR_FORMAT; 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_MEDIACODEC; import static androidx.media3.transformer.mh.FileUtil.assertFileHasColorTransfer; import static com.google.common.truth.Truth.assertThat; @@ -34,6 +36,7 @@ import androidx.media3.common.ColorInfo; 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; @@ -50,7 +53,7 @@ import org.junit.runner.RunWith; /** * {@link Transformer} instrumentation test for applying an {@linkplain - * TransformationRequest#HDR_MODE_KEEP_HDR HDR frame edit}. + * Composition#HDR_MODE_KEEP_HDR HDR frame edit}. */ @RunWith(AndroidJUnit4.class) public final class HdrEditingTest { @@ -246,11 +249,10 @@ public final class HdrEditingTest { TransformationRequest originalTransformationRequest, TransformationRequest fallbackTransformationRequest) { isFallbackListenerInvoked.set(true); - assertThat(originalTransformationRequest.hdrMode) - .isEqualTo(TransformationRequest.HDR_MODE_KEEP_HDR); + assertThat(originalTransformationRequest.hdrMode).isEqualTo(HDR_MODE_KEEP_HDR); isToneMappingFallbackApplied.set( fallbackTransformationRequest.hdrMode - == TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC); + == HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC); } }) .build(); @@ -313,11 +315,10 @@ public final class HdrEditingTest { TransformationRequest originalTransformationRequest, TransformationRequest fallbackTransformationRequest) { isFallbackListenerInvoked.set(true); - assertThat(originalTransformationRequest.hdrMode) - .isEqualTo(TransformationRequest.HDR_MODE_KEEP_HDR); + assertThat(originalTransformationRequest.hdrMode).isEqualTo(HDR_MODE_KEEP_HDR); isToneMappingFallbackApplied.set( fallbackTransformationRequest.hdrMode - == TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC); + == HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC); } }) .build(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java index 0930c1cbf3..36242a95d9 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java @@ -50,7 +50,7 @@ public final class DefaultAssetLoaderFactory implements AssetLoader.Factory { * @param decoderFactory The {@link Codec.DecoderFactory} to use to decode the samples (if * necessary). * @param forceInterpretHdrAsSdr Whether to apply {@link - * TransformationRequest#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. + * Composition#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. * @param clock The {@link Clock} to use. It should always be {@link Clock#DEFAULT}, except for * testing. */ @@ -73,7 +73,7 @@ public final class DefaultAssetLoaderFactory implements AssetLoader.Factory { * @param decoderFactory The {@link Codec.DecoderFactory} to use to decode the samples (if * necessary). * @param forceInterpretHdrAsSdr Whether to apply {@link - * TransformationRequest#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. + * Composition#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. * @param clock The {@link Clock} to use. It should always be {@link Clock#DEFAULT}, except for * testing. * @param mediaSourceFactory The {@link MediaSource.Factory} to use to retrieve the samples to diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java index f1db374f21..e49d76e8c4 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoPlayerAssetLoader.java @@ -75,7 +75,7 @@ public final class ExoPlayerAssetLoader implements AssetLoader { * @param decoderFactory The {@link Codec.DecoderFactory} to use to decode the samples (if * necessary). * @param forceInterpretHdrAsSdr Whether to apply {@link - * TransformationRequest#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. + * Composition#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. * @param clock The {@link Clock} to use. It should always be {@link Clock#DEFAULT}, except for * testing. */ @@ -98,7 +98,7 @@ public final class ExoPlayerAssetLoader implements AssetLoader { * @param decoderFactory The {@link Codec.DecoderFactory} to use to decode the samples (if * necessary). * @param forceInterpretHdrAsSdr Whether to apply {@link - * TransformationRequest#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. + * Composition#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. * @param clock The {@link Clock} to use. It should always be {@link Clock#DEFAULT}, except for * testing. * @param mediaSourceFactory The {@link MediaSource.Factory} to use to retrieve the samples to diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java index 801b4adb84..a91c5178b0 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java @@ -17,58 +17,25 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkArgument; -import static java.lang.annotation.ElementType.TYPE_USE; -import static java.lang.annotation.RetentionPolicy.SOURCE; -import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; /** A media transformation request. */ @UnstableApi public final class TransformationRequest { - /** See {@link Composition.HdrMode}. */ - @Documented - @Retention(SOURCE) - @Target(TYPE_USE) - @IntDef({ - HDR_MODE_KEEP_HDR, - HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC, - HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL, - HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR, - }) - public @interface HdrMode {} - - /** See {@link Composition#HDR_MODE_KEEP_HDR}. */ - public static final int HDR_MODE_KEEP_HDR = Composition.HDR_MODE_KEEP_HDR; - - /** See {@link Composition#HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC}. */ - public static final int HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC = - Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; - - /** See {@link Composition#HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL}. */ - public static final int HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL = - Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; - - /** See {@link Composition#HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR}. */ - public static final int HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR = - Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR; - /** A builder for {@link TransformationRequest} instances. */ public static final class Builder { private int outputHeight; @Nullable private String audioMimeType; @Nullable private String videoMimeType; - private @HdrMode int hdrMode; + private @Composition.HdrMode int hdrMode; /** * Creates a new instance with default values. @@ -141,15 +108,15 @@ public final class TransformationRequest { } /** - * Sets the {@link HdrMode} for HDR video input. + * Sets the {@link Composition.HdrMode} for HDR video input. * - *

The default value is {@link #HDR_MODE_KEEP_HDR}. + *

The default value is {@link Composition#HDR_MODE_KEEP_HDR}. * - * @param hdrMode The {@link HdrMode} used. + * @param hdrMode The {@link Composition.HdrMode} used. * @return This builder. */ @CanIgnoreReturnValue - public Builder setHdrMode(@HdrMode int hdrMode) { + public Builder setHdrMode(@Composition.HdrMode int hdrMode) { this.hdrMode = hdrMode; return this; } @@ -200,17 +167,17 @@ public final class TransformationRequest { @Nullable public final String videoMimeType; /** - * The {@link HdrMode} specifying how to handle HDR input video. + * The {@link Composition.HdrMode} specifying how to handle HDR input video. * * @see Builder#setHdrMode(int) */ - public final @HdrMode int hdrMode; + public final @Composition.HdrMode int hdrMode; private TransformationRequest( int outputHeight, @Nullable String audioMimeType, @Nullable String videoMimeType, - @HdrMode int hdrMode) { + @Composition.HdrMode int hdrMode) { this.outputHeight = outputHeight; this.audioMimeType = audioMimeType; this.videoMimeType = videoMimeType; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index f06315c0a9..41661ce101 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -18,6 +18,7 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkState; +import static androidx.media3.transformer.Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR; import static java.lang.annotation.ElementType.TYPE_USE; import android.content.Context; @@ -795,7 +796,7 @@ public final class Transformer { context, new DefaultDecoderFactory(context), /* forceInterpretHdrAsSdr= */ transformationRequest.hdrMode - == TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR, + == HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR, clock); } DebugTraceUtil.reset(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java index 4e2344981a..e0a8de8d74 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java @@ -21,6 +21,7 @@ import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Assertions.checkStateNotNull; import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_DECODED; import static androidx.media3.transformer.AssetLoader.SUPPORTED_OUTPUT_TYPE_ENCODED; +import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR; import static androidx.media3.transformer.ExportException.ERROR_CODE_FAILED_RUNTIME_CHECK; import static androidx.media3.transformer.ExportException.ERROR_CODE_MUXING_FAILED; import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE; @@ -699,7 +700,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; if (encoderFactory.videoNeedsEncoding()) { return true; } - if (transformationRequest.hdrMode != TransformationRequest.HDR_MODE_KEEP_HDR) { + if (transformationRequest.hdrMode != HDR_MODE_KEEP_HDR) { return true; } if (transformationRequest.videoMimeType != null diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java index 4b52db679d..575b9130af 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java @@ -24,10 +24,10 @@ import static androidx.media3.common.VideoFrameProcessor.INPUT_TYPE_SURFACE; import static androidx.media3.common.VideoFrameProcessor.INPUT_TYPE_TEXTURE_ID; import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkNotNull; +import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR; +import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; +import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; import static androidx.media3.transformer.EncoderUtil.getSupportedEncodersForHdrEditing; -import static androidx.media3.transformer.TransformationRequest.HDR_MODE_KEEP_HDR; -import static androidx.media3.transformer.TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; -import static androidx.media3.transformer.TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; import android.content.Context; import android.graphics.Bitmap; @@ -361,7 +361,7 @@ import org.checkerframework.dataflow.qual.Pure; private final TransformationRequest transformationRequest; private final FallbackListener fallbackListener; private final String requestedOutputMimeType; - private final @TransformationRequest.HdrMode int hdrModeAfterFallback; + private final @Composition.HdrMode int hdrModeAfterFallback; private @MonotonicNonNull SurfaceInfo encoderSurfaceInfo; @@ -401,7 +401,7 @@ import org.checkerframework.dataflow.qual.Pure; // HdrMode fallback is only supported from HDR_MODE_KEEP_HDR to // HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC. - @TransformationRequest.HdrMode int hdrMode = transformationRequest.hdrMode; + @Composition.HdrMode int hdrMode = transformationRequest.hdrMode; if (hdrMode == HDR_MODE_KEEP_HDR && isTransferHdr(inputFormat.colorInfo)) { ImmutableList hdrEncoders = getSupportedEncodersForHdrEditing(requestedOutputMimeType, inputFormat.colorInfo); @@ -422,7 +422,7 @@ import org.checkerframework.dataflow.qual.Pure; return Pair.create(requestedOutputMimeType, hdrMode); } - public @TransformationRequest.HdrMode int getHdrModeAfterFallback() { + public @Composition.HdrMode int getHdrModeAfterFallback() { return hdrModeAfterFallback; } @@ -513,7 +513,7 @@ import org.checkerframework.dataflow.qual.Pure; * processing, with {@link Format#rotationDegrees} of 90 added to the output format. * @param requestedFormat The requested format. * @param supportedFormat A format supported by the device. - * @param supportedHdrMode A {@link TransformationRequest.HdrMode} supported by the device. + * @param supportedHdrMode A {@link Composition.HdrMode} supported by the device. * @return The created instance. */ @Pure @@ -522,7 +522,7 @@ import org.checkerframework.dataflow.qual.Pure; boolean hasOutputFormatRotation, Format requestedFormat, Format supportedFormat, - @TransformationRequest.HdrMode int supportedHdrMode) { + @Composition.HdrMode int supportedHdrMode) { // TODO(b/259570024): Consider including bitrate in the revised fallback design. TransformationRequest.Builder supportedRequestBuilder = transformationRequest.buildUpon(); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/TransformationRequestTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/TransformationRequestTest.java index 0501e187a3..5d1b2823a2 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TransformationRequestTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TransformationRequestTest.java @@ -16,7 +16,7 @@ package androidx.media3.transformer; -import static androidx.media3.transformer.TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; +import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL; import static com.google.common.truth.Truth.assertThat; import androidx.media3.common.MimeTypes;