From cfc0eef24ec4a24bc00b0a657f3dad07e9c29ade Mon Sep 17 00:00:00 2001 From: leonwind Date: Thu, 22 Sep 2022 10:04:42 +0000 Subject: [PATCH] Add RGB Adjustments to transformer demo. PiperOrigin-RevId: 476049125 --- .../ConfigurationActivity.java | 39 +++++++++- .../transformerdemo/TransformerActivity.java | 17 ++++- .../res/layout/rgb_adjustment_options.xml | 76 +++++++++++++++++++ .../src/main/res/values/strings.xml | 4 + 4 files changed, 130 insertions(+), 6 deletions(-) create mode 100644 demos/transformer/src/main/res/layout/rgb_adjustment_options.xml 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 2b6c4c4b18..6336c55037 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,6 +69,9 @@ public final class ConfigurationActivity extends AppCompatActivity { public static final String PERIODIC_VIGNETTE_OUTER_RADIUS = "periodic_vignette_outer_radius"; public static final String COLOR_FILTER_SELECTION = "color_filter_selection"; public static final String CONTRAST_VALUE = "contrast_value"; + public static final String RGB_ADJUSTMENT_RED_SCALE = "rgb_adjustment_red_scale"; + public static final String RGB_ADJUSTMENT_GREEN_SCALE = "rgb_adjustment_green_scale"; + public static final String RGB_ADJUSTMENT_BLUE_SCALE = "rgb_adjustment_blue_scale"; public static final int COLOR_FILTER_GRAYSCALE = 0; public static final int COLOR_FILTER_INVERTED = 1; public static final int COLOR_FILTER_SEPIA = 2; @@ -106,6 +109,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "Dizzy crop", "Edge detector (Media Pipe)", "Color filters", + "RGB Adjustments", "Contrast", "Periodic vignette", "3D spin", @@ -113,8 +117,9 @@ public final class ConfigurationActivity extends AppCompatActivity { "Zoom in start", }; private static final int COLOR_FILTERS_INDEX = 2; - private static final int CONTRAST_INDEX = 3; - private static final int PERIODIC_VIGNETTE_INDEX = 4; + private static final int RGB_ADJUSTMENTS_INDEX = 3; + private static final int CONTRAST_INDEX = 4; + private static final int PERIODIC_VIGNETTE_INDEX = 5; private static final String SAME_AS_INPUT_OPTION = "same as input"; private static final float HALF_DIAGONAL = 1f / (float) Math.sqrt(2); @@ -139,6 +144,9 @@ public final class ConfigurationActivity extends AppCompatActivity { private long trimStartMs; private long trimEndMs; private int colorFilterSelection; + private float rgbAdjustmentRedScale; + private float rgbAdjustmentGreenScale; + private float rgbAdjustmentBlueScale; private float contrastValue; private float periodicVignetteCenterX; private float periodicVignetteCenterY; @@ -297,6 +305,9 @@ public final class ConfigurationActivity extends AppCompatActivity { bundle.putBooleanArray(DEMO_EFFECTS_SELECTIONS, demoEffectsSelections); bundle.putInt(COLOR_FILTER_SELECTION, colorFilterSelection); bundle.putFloat(CONTRAST_VALUE, contrastValue); + bundle.putFloat(RGB_ADJUSTMENT_RED_SCALE, rgbAdjustmentRedScale); + bundle.putFloat(RGB_ADJUSTMENT_GREEN_SCALE, rgbAdjustmentGreenScale); + bundle.putFloat(RGB_ADJUSTMENT_BLUE_SCALE, rgbAdjustmentBlueScale); bundle.putFloat(PERIODIC_VIGNETTE_CENTER_X, periodicVignetteCenterX); bundle.putFloat(PERIODIC_VIGNETTE_CENTER_Y, periodicVignetteCenterY); bundle.putFloat(PERIODIC_VIGNETTE_INNER_RADIUS, periodicVignetteInnerRadius); @@ -367,6 +378,9 @@ public final class ConfigurationActivity extends AppCompatActivity { case COLOR_FILTERS_INDEX: controlColorFiltersSettings(); break; + case RGB_ADJUSTMENTS_INDEX: + controlRgbAdjustmentsScale(); + break; case CONTRAST_INDEX: controlContrastSettings(); break; @@ -394,6 +408,27 @@ public final class ConfigurationActivity extends AppCompatActivity { .show(); } + private void controlRgbAdjustmentsScale() { + View dialogView = + getLayoutInflater().inflate(R.layout.rgb_adjustment_options, /* root= */ null); + Slider redScaleSlider = checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_red_scale)); + Slider greenScaleSlider = + checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_green_scale)); + Slider blueScaleSlider = checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_blue_scale)); + new AlertDialog.Builder(/* context= */ this) + .setTitle(R.string.rgb_adjustment_options) + .setView(dialogView) + .setPositiveButton( + android.R.string.ok, + (DialogInterface dialogInterface, int i) -> { + rgbAdjustmentRedScale = redScaleSlider.getValue(); + rgbAdjustmentGreenScale = greenScaleSlider.getValue(); + rgbAdjustmentBlueScale = blueScaleSlider.getValue(); + }) + .create() + .show(); + } + private void controlContrastSettings() { View dialogView = getLayoutInflater().inflate(R.layout.contrast_options, /* root= */ null); Slider contrastSlider = checkNotNull(dialogView.findViewById(R.id.contrast_slider)); 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 049984ee94..067b6955b2 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 @@ -40,6 +40,7 @@ import androidx.media3.common.Effect; import androidx.media3.effect.Contrast; import androidx.media3.effect.GlEffect; import androidx.media3.effect.GlTextureProcessor; +import androidx.media3.effect.RgbAdjustment; import androidx.media3.effect.RgbFilter; import androidx.media3.effect.RgbMatrix; import com.google.android.exoplayer2.C; @@ -336,9 +337,17 @@ public final class TransformerActivity extends AppCompatActivity { } } if (selectedEffects[3]) { - effects.add(new Contrast(bundle.getFloat(ConfigurationActivity.CONTRAST_VALUE))); + effects.add( + new RgbAdjustment.Builder() + .setRedScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_RED_SCALE)) + .setGreenScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_GREEN_SCALE)) + .setBlueScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_BLUE_SCALE)) + .build()); } if (selectedEffects[4]) { + effects.add(new Contrast(bundle.getFloat(ConfigurationActivity.CONTRAST_VALUE))); + } + if (selectedEffects[5]) { effects.add( (GlEffect) (Context context, boolean useHdr) -> @@ -353,13 +362,13 @@ public final class TransformerActivity extends AppCompatActivity { ConfigurationActivity.PERIODIC_VIGNETTE_OUTER_RADIUS), bundle.getFloat(ConfigurationActivity.PERIODIC_VIGNETTE_OUTER_RADIUS))); } - if (selectedEffects[5]) { + if (selectedEffects[6]) { effects.add(MatrixTransformationFactory.createSpin3dEffect()); } - if (selectedEffects[6]) { + if (selectedEffects[7]) { effects.add((GlEffect) BitmapOverlayProcessor::new); } - if (selectedEffects[7]) { + if (selectedEffects[8]) { effects.add(MatrixTransformationFactory.createZoomInTransition()); } transformerBuilder.setVideoEffects(effects.build()); diff --git a/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml b/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml new file mode 100644 index 0000000000..c87e8fad17 --- /dev/null +++ b/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + diff --git a/demos/transformer/src/main/res/values/strings.xml b/demos/transformer/src/main/res/values/strings.xml index 32eba87a73..db04cb5885 100644 --- a/demos/transformer/src/main/res/values/strings.xml +++ b/demos/transformer/src/main/res/values/strings.xml @@ -48,6 +48,10 @@ Sepia Contrast value + Scale RGB Channels individually + Scale Red + Scale Green + Scale Blue Center X Center Y Radius range