diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/ConfigurationActivity.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/ConfigurationActivity.java index a07795de3fa..864dc72cc21 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/ConfigurationActivity.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/ConfigurationActivity.java @@ -69,7 +69,6 @@ public final class ConfigurationActivity extends AppCompatActivity { public static final String ENABLE_DEBUG_PREVIEW = "enable_debug_preview"; public static final String ENABLE_REQUEST_SDR_TONE_MAPPING = "enable_request_sdr_tone_mapping"; public static final String FORCE_INTERPRET_HDR_VIDEO_AS_SDR = "force_interpret_hdr_video_as_sdr"; - public static final String ENABLE_HDR_EDITING = "enable_hdr_editing"; public static final String DEMO_EFFECTS_SELECTIONS = "demo_effects_selections"; public static final String PERIODIC_VIGNETTE_CENTER_X = "periodic_vignette_center_x"; public static final String PERIODIC_VIGNETTE_CENTER_Y = "periodic_vignette_center_y"; @@ -157,7 +156,6 @@ public final class ConfigurationActivity extends AppCompatActivity { private @MonotonicNonNull CheckBox enableDebugPreviewCheckBox; private @MonotonicNonNull CheckBox enableRequestSdrToneMappingCheckBox; private @MonotonicNonNull CheckBox forceInterpretHdrVideoAsSdrCheckBox; - private @MonotonicNonNull CheckBox enableHdrEditingCheckBox; private @MonotonicNonNull Button selectDemoEffectsButton; private boolean @MonotonicNonNull [] demoEffectsSelections; private @Nullable Uri localFileUri; @@ -254,7 +252,6 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { findViewById(R.id.request_sdr_tone_mapping).setEnabled(isRequestSdrToneMappingSupported()); forceInterpretHdrVideoAsSdrCheckBox = findViewById(R.id.force_interpret_hdr_video_as_sdr_checkbox); - enableHdrEditingCheckBox = findViewById(R.id.hdr_editing_checkbox); demoEffectsSelections = new boolean[DEMO_EFFECTS.length]; selectDemoEffectsButton = findViewById(R.id.select_demo_effects_button); @@ -313,7 +310,6 @@ protected void onNewIntent(Intent intent) { "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", "forceInterpretHdrVideoAsSdrCheckBox", - "enableHdrEditingCheckBox", "demoEffectsSelections" }) private void startTransformation(View view) { @@ -355,7 +351,6 @@ private void startTransformation(View view) { ENABLE_REQUEST_SDR_TONE_MAPPING, enableRequestSdrToneMappingCheckBox.isChecked()); bundle.putBoolean( FORCE_INTERPRET_HDR_VIDEO_AS_SDR, forceInterpretHdrVideoAsSdrCheckBox.isChecked()); - bundle.putBoolean(ENABLE_HDR_EDITING, enableHdrEditingCheckBox.isChecked()); bundle.putBooleanArray(DEMO_EFFECTS_SELECTIONS, demoEffectsSelections); bundle.putInt(COLOR_FILTER_SELECTION, colorFilterSelection); bundle.putFloat(CONTRAST_VALUE, contrastValue); @@ -595,7 +590,6 @@ private void controlPeriodicVignetteSettings() { "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", "forceInterpretHdrVideoAsSdrCheckBox", - "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) private void onRemoveAudio(View view) { @@ -617,7 +611,6 @@ private void onRemoveAudio(View view) { "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", "forceInterpretHdrVideoAsSdrCheckBox", - "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) private void onRemoveVideo(View view) { @@ -638,7 +631,6 @@ private void onRemoveVideo(View view) { "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", "forceInterpretHdrVideoAsSdrCheckBox", - "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) private void enableTrackSpecificOptions(boolean isAudioEnabled, boolean isVideoEnabled) { @@ -651,7 +643,6 @@ private void enableTrackSpecificOptions(boolean isAudioEnabled, boolean isVideoE enableRequestSdrToneMappingCheckBox.setEnabled( isRequestSdrToneMappingSupported() && isVideoEnabled); forceInterpretHdrVideoAsSdrCheckBox.setEnabled(isVideoEnabled); - enableHdrEditingCheckBox.setEnabled(isVideoEnabled); selectDemoEffectsButton.setEnabled(isVideoEnabled); findViewById(R.id.audio_mime_text_view).setEnabled(isAudioEnabled); @@ -662,7 +653,6 @@ private void enableTrackSpecificOptions(boolean isAudioEnabled, boolean isVideoE findViewById(R.id.request_sdr_tone_mapping) .setEnabled(isRequestSdrToneMappingSupported() && isVideoEnabled); findViewById(R.id.force_interpret_hdr_video_as_sdr).setEnabled(isVideoEnabled); - findViewById(R.id.hdr_editing).setEnabled(isVideoEnabled); } private static boolean isRequestSdrToneMappingSupported() { diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java index a742c66aaaf..88c07218b6a 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java @@ -274,8 +274,6 @@ private Transformer createTransformer(@Nullable Bundle bundle, String filePath) bundle.getBoolean(ConfigurationActivity.ENABLE_REQUEST_SDR_TONE_MAPPING)); requestBuilder.experimental_setForceInterpretHdrVideoAsSdr( bundle.getBoolean(ConfigurationActivity.FORCE_INTERPRET_HDR_VIDEO_AS_SDR)); - requestBuilder.experimental_setEnableHdrEditing( - bundle.getBoolean(ConfigurationActivity.ENABLE_HDR_EDITING)); transformerBuilder .setTransformationRequest(requestBuilder.build()) .setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO)) diff --git a/demos/transformer/src/main/res/layout/configuration_activity.xml b/demos/transformer/src/main/res/layout/configuration_activity.xml index 2a481bea698..bd2feb4484c 100644 --- a/demos/transformer/src/main/res/layout/configuration_activity.xml +++ b/demos/transformer/src/main/res/layout/configuration_activity.xml @@ -207,16 +207,6 @@ android:id="@+id/request_sdr_tone_mapping_checkbox" android:layout_gravity="end" /> - - - - Trim Request SDR tone-mapping (API 31+) [Experimental] Force interpret HDR video as SDR (API 29+) - [Experimental] HDR editing (API 31+) Add demo effects Periodic vignette options Failed to load MediaPipe processor. Check the README for instructions. diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/SetHdrEditingTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/SetHdrEditingTest.java index 4104e5a4a6c..03a7605da23 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/SetHdrEditingTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/SetHdrEditingTest.java @@ -43,10 +43,7 @@ import org.junit.Test; import org.junit.runner.RunWith; -/** - * {@link Transformer} instrumentation test for applying an {@linkplain - * TransformationRequest.Builder#experimental_setEnableHdrEditing HDR frame edit}. - */ +/** {@link Transformer} instrumentation test for applying an HDR frame edit. */ @RunWith(AndroidJUnit4.class) public class SetHdrEditingTest { public static final String TAG = "SetHdrEditingTest"; @@ -68,11 +65,7 @@ public void transform_noRequestedTranscode_hdr10File_transformsOrThrows() throws String testId = "transform_noRequestedTranscode_hdr10File_transformsOrThrows"; Context context = ApplicationProvider.getApplicationContext(); - Transformer transformer = - new Transformer.Builder(context) - .setTransformationRequest( - new TransformationRequest.Builder().experimental_setEnableHdrEditing(true).build()) - .build(); + Transformer transformer = new Transformer.Builder(context).build(); try { TransformationTestResult transformationTestResult = @@ -95,11 +88,7 @@ public void transform_noRequestedTranscode_hlg10File_transformsOrThrows() throws String testId = "transform_noRequestedTranscode_hlg10File_transformsOrThrows"; Context context = ApplicationProvider.getApplicationContext(); - Transformer transformer = - new Transformer.Builder(context) - .setTransformationRequest( - new TransformationRequest.Builder().experimental_setEnableHdrEditing(true).build()) - .build(); + Transformer transformer = new Transformer.Builder(context).build(); try { TransformationTestResult transformationTestResult = @@ -130,10 +119,7 @@ public void transformAndTranscode_hdr10File_whenHdrEditingIsSupported_transforms Transformer transformer = new Transformer.Builder(context) .setTransformationRequest( - new TransformationRequest.Builder() - .experimental_setEnableHdrEditing(true) - .setRotationDegrees(180) - .build()) + new TransformationRequest.Builder().setRotationDegrees(180).build()) .build(); TransformationTestResult transformationTestResult = @@ -156,10 +142,7 @@ public void transformAndTranscode_hlg10File_whenHdrEditingIsSupported_transforms Transformer transformer = new Transformer.Builder(context) .setTransformationRequest( - new TransformationRequest.Builder() - .experimental_setEnableHdrEditing(true) - .setRotationDegrees(180) - .build()) + new TransformationRequest.Builder().setRotationDegrees(180).build()) .build(); TransformationTestResult transformationTestResult = @@ -184,10 +167,7 @@ public void transformAndTranscode_hdr10File_whenHdrEditingUnsupported_toneMapsOr Transformer transformer = new Transformer.Builder(context) .setTransformationRequest( - new TransformationRequest.Builder() - .experimental_setEnableHdrEditing(true) - .setRotationDegrees(180) - .build()) + new TransformationRequest.Builder().setRotationDegrees(180).build()) .addListener( new Transformer.Listener() { @Override @@ -238,10 +218,7 @@ public void transformAndTranscode_hlg10File_whenHdrEditingUnsupported_toneMapsOr Transformer transformer = new Transformer.Builder(context) .setTransformationRequest( - new TransformationRequest.Builder() - .experimental_setEnableHdrEditing(true) - .setRotationDegrees(180) - .build()) + new TransformationRequest.Builder().setRotationDegrees(180).build()) .addListener( new Transformer.Listener() { @Override @@ -289,11 +266,7 @@ public void transformUnexpectedColorInfo() throws Exception { return; } - Transformer transformer = - new Transformer.Builder(context) - .setTransformationRequest( - new TransformationRequest.Builder().experimental_setEnableHdrEditing(true).build()) - .build(); + Transformer transformer = new Transformer.Builder(context).build(); new TransformerAndroidTestRunner.Builder(context, transformer) .build() .run( diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FallbackListener.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FallbackListener.java index 69063d990a4..3ad9943b2a7 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FallbackListener.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FallbackListener.java @@ -95,10 +95,6 @@ public void onTransformationRequestFinalized(TransformationRequest transformatio if (transformationRequest.outputHeight != originalTransformationRequest.outputHeight) { fallbackRequestBuilder.setResolution(transformationRequest.outputHeight); } - if (transformationRequest.enableHdrEditing != originalTransformationRequest.enableHdrEditing) { - fallbackRequestBuilder.experimental_setEnableHdrEditing( - transformationRequest.enableHdrEditing); - } if (transformationRequest.enableRequestSdrToneMapping != originalTransformationRequest.enableRequestSdrToneMapping) { fallbackRequestBuilder.setEnableRequestSdrToneMapping( diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationRequest.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationRequest.java index d6fd7968fa2..4a2308745dd 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationRequest.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationRequest.java @@ -53,6 +53,7 @@ public Builder() { scaleX = 1; scaleY = 1; outputHeight = C.LENGTH_UNSET; + enableHdrEditing = true; } private Builder(TransformationRequest transformationRequest) { @@ -218,13 +219,14 @@ public Builder setAudioMimeType(@Nullable String audioMimeType) { * supported, high dynamic range (HDR) input will be tone-mapped into an SDR opto-electrical * transfer function before processing. * - *

The default value is {@code true}, which corresponds to tone-mapping output if possible. + *

The default value is {@code false}, which corresponds to editing and outputting HDR video + * if possible, and falling back to tone-mapping if not. * *

The setting has no effect if the input is already in SDR, or if tone-mapping is not * supported. Currently tone-mapping is only guaranteed to be supported from Android T onwards. * - *

Setting this as {@code true} will set {@linkplain #experimental_setEnableHdrEditing} and - * {@linkplain #forceInterpretHdrVideoAsSdr} to {@code false}. + *

Setting this as {@code true} will set {@linkplain #enableHdrEditing} and {@linkplain + * #forceInterpretHdrVideoAsSdr} to {@code false}. * * @param enableRequestSdrToneMapping Whether to request tone-mapping down to SDR. * @return This builder. @@ -233,8 +235,8 @@ public Builder setAudioMimeType(@Nullable String audioMimeType) { public Builder setEnableRequestSdrToneMapping(boolean enableRequestSdrToneMapping) { this.enableRequestSdrToneMapping = enableRequestSdrToneMapping; if (enableRequestSdrToneMapping) { - forceInterpretHdrVideoAsSdr = false; enableHdrEditing = false; + forceInterpretHdrVideoAsSdr = false; } return this; } @@ -242,8 +244,8 @@ public Builder setEnableRequestSdrToneMapping(boolean enableRequestSdrToneMappin /** * Sets whether to interpret HDR video as SDR, resulting in washed out video. * - *

The default value is {@code false}, with {@link #setEnableRequestSdrToneMapping} being - * applied. + *

The default value is {@code false}, which corresponds to editing and outputting HDR video + * if possible, and falling back to tone-mapping if not. * *

Use of this flag may result in {@code * TransformationException.ERROR_CODE_HDR_DECODING_UNSUPPORTED} or {@code @@ -257,8 +259,8 @@ public Builder setEnableRequestSdrToneMapping(boolean enableRequestSdrToneMappin * *

The setting has no effect if the input is already in SDR. * - *

Setting this as {@code true} will set {@linkplain #experimental_setEnableHdrEditing} and - * {@linkplain #forceInterpretHdrVideoAsSdr} to {@code false}. + *

Setting this as {@code true} will set {@linkplain #enableHdrEditing} and {@linkplain + * #forceInterpretHdrVideoAsSdr} to {@code false}. * * @param forceInterpretHdrVideoAsSdr Whether to interpret HDR contents as SDR. * @return This builder. @@ -276,32 +278,12 @@ public Builder experimental_setForceInterpretHdrVideoAsSdr( } /** - * Sets whether to allow processing high dynamic range (HDR) input video streams as HDR. - * - *

The default value is {@code false}, with {@link #setEnableRequestSdrToneMapping} being - * applied. - * - *

This method is experimental, and will be renamed or removed in a future release. The HDR - * editing feature is under development and is intended for developing/testing HDR support. - * - *

Setting this as {@code true} will set {@linkplain #experimental_setEnableHdrEditing} and - * {@linkplain #forceInterpretHdrVideoAsSdr} to {@code false}. - * - *

With this flag enabled, HDR streams will correctly edit in HDR, convert via tone-mapping - * to SDR, or throw an error, based on the device's HDR support. SDR streams will be interpreted - * the same way regardless of this flag's state. - * - * @param enableHdrEditing Whether to attempt to process any input video stream as a high - * dynamic range (HDR) signal. - * @return This builder. + * @deprecated This method is now a no-op. (@code experimental_setEnableHdrEditing(true)} is now + * the default behavior. */ + @Deprecated @CanIgnoreReturnValue public Builder experimental_setEnableHdrEditing(boolean enableHdrEditing) { - this.enableHdrEditing = enableHdrEditing; - if (enableHdrEditing) { - enableRequestSdrToneMapping = false; - forceInterpretHdrVideoAsSdr = false; - } return this; } @@ -373,11 +355,7 @@ public TransformationRequest build() { /** Whether to force interpreting HDR video as SDR. */ public final boolean forceInterpretHdrVideoAsSdr; - /** - * Whether to attempt to process any input video stream as a high dynamic range (HDR) signal. - * - * @see Builder#experimental_setEnableHdrEditing(boolean) - */ + /** Whether to attempt to process any input video stream as a high dynamic range (HDR) signal. */ public final boolean enableHdrEditing; private TransformationRequest( diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java index dca25904297..635a50c7723 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java @@ -303,9 +303,7 @@ private static TransformationRequest createSupportedTransformationRequest( TransformationRequest.Builder transformationRequestBuilder = transformationRequest.buildUpon(); if (transformationRequest.enableRequestSdrToneMapping != isToneMappedToSdr) { checkState(isToneMappedToSdr); - transformationRequestBuilder - .setEnableRequestSdrToneMapping(true) - .experimental_setEnableHdrEditing(false); + transformationRequestBuilder.setEnableRequestSdrToneMapping(true); } return transformationRequestBuilder .setVideoMimeType(supportedFormat.sampleMimeType)