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 d68050b966..1e633f1425 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
@@ -72,6 +72,9 @@ public final class ConfigurationActivity extends AppCompatActivity {
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 String HSL_ADJUSTMENTS_HUE = "hsl_adjustments_hue";
+ public static final String HSL_ADJUSTMENTS_SATURATION = "hsl_adjustments_saturation";
+ public static final String HSL_ADJUSTMENTS_LIGHTNESS = "hsl_adjustments_lightness";
public static final int COLOR_FILTER_GRAYSCALE = 0;
public static final int COLOR_FILTER_INVERTED = 1;
public static final int COLOR_FILTER_SEPIA = 2;
@@ -110,6 +113,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
"Edge detector (Media Pipe)",
"Color filters",
"RGB Adjustments",
+ "HSL Adjustments",
"Contrast",
"Periodic vignette",
"3D spin",
@@ -118,8 +122,9 @@ public final class ConfigurationActivity extends AppCompatActivity {
};
private static final int COLOR_FILTERS_INDEX = 2;
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 int HSL_ADJUSTMENT_INDEX = 4;
+ private static final int CONTRAST_INDEX = 5;
+ private static final int PERIODIC_VIGNETTE_INDEX = 6;
private static final String SAME_AS_INPUT_OPTION = "same as input";
private static final float HALF_DIAGONAL = 1f / (float) Math.sqrt(2);
@@ -148,6 +153,9 @@ public final class ConfigurationActivity extends AppCompatActivity {
private float rgbAdjustmentGreenScale;
private float rgbAdjustmentBlueScale;
private float contrastValue;
+ private float hueAdjustment;
+ private float saturationAdjustment;
+ private float lightnessAdjustment;
private float periodicVignetteCenterX;
private float periodicVignetteCenterY;
private float periodicVignetteInnerRadius;
@@ -308,6 +316,9 @@ public final class ConfigurationActivity extends AppCompatActivity {
bundle.putFloat(RGB_ADJUSTMENT_RED_SCALE, rgbAdjustmentRedScale);
bundle.putFloat(RGB_ADJUSTMENT_GREEN_SCALE, rgbAdjustmentGreenScale);
bundle.putFloat(RGB_ADJUSTMENT_BLUE_SCALE, rgbAdjustmentBlueScale);
+ bundle.putFloat(HSL_ADJUSTMENTS_HUE, hueAdjustment);
+ bundle.putFloat(HSL_ADJUSTMENTS_SATURATION, saturationAdjustment);
+ bundle.putFloat(HSL_ADJUSTMENTS_LIGHTNESS, lightnessAdjustment);
bundle.putFloat(PERIODIC_VIGNETTE_CENTER_X, periodicVignetteCenterX);
bundle.putFloat(PERIODIC_VIGNETTE_CENTER_Y, periodicVignetteCenterY);
bundle.putFloat(PERIODIC_VIGNETTE_INNER_RADIUS, periodicVignetteInnerRadius);
@@ -384,6 +395,9 @@ public final class ConfigurationActivity extends AppCompatActivity {
case CONTRAST_INDEX:
controlContrastSettings();
break;
+ case HSL_ADJUSTMENT_INDEX:
+ controlHslAdjustmentSettings();
+ break;
case PERIODIC_VIGNETTE_INDEX:
controlPeriodicVignetteSettings();
break;
@@ -441,6 +455,28 @@ public final class ConfigurationActivity extends AppCompatActivity {
.show();
}
+ private void controlHslAdjustmentSettings() {
+ View dialogView =
+ getLayoutInflater().inflate(R.layout.hsl_adjustment_options, /* root= */ null);
+ Slider hueAdjustmentSlider = checkNotNull(dialogView.findViewById(R.id.hsl_adjustments_hue));
+ Slider saturationAdjustmentSlider =
+ checkNotNull(dialogView.findViewById(R.id.hsl_adjustments_saturation));
+ Slider lightnessAdjustmentSlider =
+ checkNotNull(dialogView.findViewById(R.id.hsl_adjustment_lightness));
+ new AlertDialog.Builder(/* context= */ this)
+ .setTitle(R.string.hsl_adjustment_options)
+ .setView(dialogView)
+ .setPositiveButton(
+ android.R.string.ok,
+ (DialogInterface dialogInterface, int i) -> {
+ hueAdjustment = hueAdjustmentSlider.getValue();
+ saturationAdjustment = saturationAdjustmentSlider.getValue();
+ lightnessAdjustment = lightnessAdjustmentSlider.getValue();
+ })
+ .create()
+ .show();
+ }
+
private void controlPeriodicVignetteSettings() {
View dialogView =
getLayoutInflater().inflate(R.layout.periodic_vignette_options, /* root= */ null);
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 eb0dde452f..0428d301af 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
@@ -44,6 +44,7 @@ import androidx.media3.common.util.Util;
import androidx.media3.effect.Contrast;
import androidx.media3.effect.GlEffect;
import androidx.media3.effect.GlTextureProcessor;
+import androidx.media3.effect.HslAdjustment;
import androidx.media3.effect.RgbAdjustment;
import androidx.media3.effect.RgbFilter;
import androidx.media3.effect.RgbMatrix;
@@ -344,9 +345,18 @@ public final class TransformerActivity extends AppCompatActivity {
.build());
}
if (selectedEffects[4]) {
- effects.add(new Contrast(bundle.getFloat(ConfigurationActivity.CONTRAST_VALUE)));
+ effects.add(
+ new HslAdjustment.Builder()
+ .adjustHue(bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_HUE))
+ .adjustSaturation(
+ bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_SATURATION))
+ .adjustLightness(bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_LIGHTNESS))
+ .build());
}
if (selectedEffects[5]) {
+ effects.add(new Contrast(bundle.getFloat(ConfigurationActivity.CONTRAST_VALUE)));
+ }
+ if (selectedEffects[6]) {
effects.add(
(GlEffect)
(Context context, boolean useHdr) ->
diff --git a/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml b/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml
new file mode 100644
index 0000000000..7b847ad871
--- /dev/null
+++ b/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/transformer/src/main/res/values/strings.xml b/demos/transformer/src/main/res/values/strings.xml
index db04cb5885..8f94de797c 100644
--- a/demos/transformer/src/main/res/values/strings.xml
+++ b/demos/transformer/src/main/res/values/strings.xml
@@ -55,4 +55,8 @@
Center X
Center Y
Radius range
+ HSL Adjustment Options
+ Hue Adjustment
+ Saturation Adjustment
+ Lightness Adjustment