From 2ff5dab0039c44d767dc831fec92724254e5e0aa Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Wed, 9 Nov 2022 20:05:24 +0000 Subject: [PATCH] HDR: Implement ForceInterpretHdrVideoAsSdr Also, document that we tone map when no HDR features are explicitly set PiperOrigin-RevId: 487310971 --- .../transformer/ConfigurationActivity.java | 12 +++ .../demo/transformer/TransformerActivity.java | 2 + .../res/layout/configuration_activity.xml | 10 +++ .../src/main/res/values/strings.xml | 3 +- .../media3/transformer/AndroidTestUtil.java | 15 ++++ .../SetForceInterpretHdrVideoAsSdrTest.java | 80 +++++++++++++++++++ .../transformer/mh/SetHdrEditingTest.java | 4 +- .../mh/SetHdrToSdrToneMapTest.java | 4 +- .../transformer/TransformationException.java | 9 ++- .../transformer/TransformationRequest.java | 78 ++++++++++++++++-- .../transformer/TransformerVideoRenderer.java | 3 + .../VideoTranscodingSamplePipeline.java | 30 ++++--- 12 files changed, 226 insertions(+), 24 deletions(-) create mode 100644 libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/SetForceInterpretHdrVideoAsSdrTest.java 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 235b66e799..eac602c80e 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 @@ -68,6 +68,7 @@ public final class ConfigurationActivity extends AppCompatActivity { public static final String ENABLE_FALLBACK = "enable_fallback"; 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"; @@ -153,6 +154,7 @@ public final class ConfigurationActivity extends AppCompatActivity { private @MonotonicNonNull CheckBox enableFallbackCheckBox; private @MonotonicNonNull CheckBox enableDebugPreviewCheckBox; private @MonotonicNonNull CheckBox enableRequestSdrToneMappingCheckBox; + private @MonotonicNonNull CheckBox forceInterpretHdrVideoAsSdrCheckBox; private @MonotonicNonNull CheckBox enableHdrEditingCheckBox; private @MonotonicNonNull Button selectDemoEffectsButton; private boolean @MonotonicNonNull [] demoEffectsSelections; @@ -248,6 +250,8 @@ public final class ConfigurationActivity extends AppCompatActivity { enableRequestSdrToneMappingCheckBox = findViewById(R.id.request_sdr_tone_mapping_checkbox); enableRequestSdrToneMappingCheckBox.setEnabled(isRequestSdrToneMappingSupported()); 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]; @@ -306,6 +310,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "enableFallbackCheckBox", "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", + "forceInterpretHdrVideoAsSdrCheckBox", "enableHdrEditingCheckBox", "demoEffectsSelections" }) @@ -346,6 +351,8 @@ public final class ConfigurationActivity extends AppCompatActivity { bundle.putBoolean(ENABLE_DEBUG_PREVIEW, enableDebugPreviewCheckBox.isChecked()); bundle.putBoolean( 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); @@ -585,6 +592,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "rotateSpinner", "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", + "forceInterpretHdrVideoAsSdrCheckBox", "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) @@ -606,6 +614,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "rotateSpinner", "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", + "forceInterpretHdrVideoAsSdrCheckBox", "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) @@ -626,6 +635,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "rotateSpinner", "enableDebugPreviewCheckBox", "enableRequestSdrToneMappingCheckBox", + "forceInterpretHdrVideoAsSdrCheckBox", "enableHdrEditingCheckBox", "selectDemoEffectsButton" }) @@ -638,6 +648,7 @@ public final class ConfigurationActivity extends AppCompatActivity { enableDebugPreviewCheckBox.setEnabled(isVideoEnabled); enableRequestSdrToneMappingCheckBox.setEnabled( isRequestSdrToneMappingSupported() && isVideoEnabled); + forceInterpretHdrVideoAsSdrCheckBox.setEnabled(isVideoEnabled); enableHdrEditingCheckBox.setEnabled(isVideoEnabled); selectDemoEffectsButton.setEnabled(isVideoEnabled); @@ -648,6 +659,7 @@ public final class ConfigurationActivity extends AppCompatActivity { findViewById(R.id.rotate).setEnabled(isVideoEnabled); 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); } diff --git a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java index b995287cb8..1ace6bfb65 100644 --- a/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java +++ b/demos/transformer/src/main/java/androidx/media3/demo/transformer/TransformerActivity.java @@ -272,6 +272,8 @@ public final class TransformerActivity extends AppCompatActivity { requestBuilder.setEnableRequestSdrToneMapping( 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 diff --git a/demos/transformer/src/main/res/layout/configuration_activity.xml b/demos/transformer/src/main/res/layout/configuration_activity.xml index e090eb55f2..2a481bea69 100644 --- a/demos/transformer/src/main/res/layout/configuration_activity.xml +++ b/demos/transformer/src/main/res/layout/configuration_activity.xml @@ -217,6 +217,16 @@ android:id="@+id/hdr_editing_checkbox" android:layout_gravity="end" /> + + + +