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 362d96a3f3..07238b6fae 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 @@ -29,6 +29,7 @@ import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; +import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; @@ -86,6 +87,8 @@ public final class ConfigurationActivity extends AppCompatActivity { 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 String BITMAP_OVERLAY_URI = "bitmap_overlay_uri"; + public static final String BITMAP_OVERLAY_ALPHA = "bitmap_overlay_alpha"; public static final int COLOR_FILTER_GRAYSCALE = 0; public static final int COLOR_FILTER_INVERTED = 1; public static final int COLOR_FILTER_SEPIA = 2; @@ -139,6 +142,7 @@ public final class ConfigurationActivity extends AppCompatActivity { "3D spin", "Overlay logo & timer", "Zoom in start", + "Custom Bitmap Overlay", }; private static final ImmutableMap HDR_MODE_DESCRIPTIONS = @@ -155,6 +159,7 @@ public final class ConfigurationActivity extends AppCompatActivity { private static final int HSL_ADJUSTMENT_INDEX = 5; private static final int CONTRAST_INDEX = 6; private static final int PERIODIC_VIGNETTE_INDEX = 7; + private static final int BITMAP_OVERLAY_INDEX = 11; private static final float HALF_DIAGONAL = 1f / (float) Math.sqrt(2); private @MonotonicNonNull ActivityResultLauncher localFilePickerLauncher; @@ -195,6 +200,8 @@ public final class ConfigurationActivity extends AppCompatActivity { private float periodicVignetteCenterY; private float periodicVignetteInnerRadius; private float periodicVignetteOuterRadius; + private @MonotonicNonNull String bitmapOverlayUri; + private float bitmapOverlayAlpha; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -398,6 +405,8 @@ public final class ConfigurationActivity extends AppCompatActivity { bundle.putFloat(PERIODIC_VIGNETTE_CENTER_Y, periodicVignetteCenterY); bundle.putFloat(PERIODIC_VIGNETTE_INNER_RADIUS, periodicVignetteInnerRadius); bundle.putFloat(PERIODIC_VIGNETTE_OUTER_RADIUS, periodicVignetteOuterRadius); + bundle.putString(BITMAP_OVERLAY_URI, bitmapOverlayUri); + bundle.putFloat(BITMAP_OVERLAY_ALPHA, bitmapOverlayAlpha); transformerIntent.putExtras(bundle); @Nullable Uri intentUri; @@ -527,6 +536,9 @@ public final class ConfigurationActivity extends AppCompatActivity { case PERIODIC_VIGNETTE_INDEX: controlPeriodicVignetteSettings(); break; + case BITMAP_OVERLAY_INDEX: + controlBitmapOverlaySettings(); + break; } } @@ -629,6 +641,24 @@ public final class ConfigurationActivity extends AppCompatActivity { .show(); } + private void controlBitmapOverlaySettings() { + View dialogView = + getLayoutInflater().inflate(R.layout.bitmap_overlay_options, /* root= */ null); + EditText uriEditText = checkNotNull(dialogView.findViewById(R.id.bitmap_overlay_uri)); + Slider alphaSlider = checkNotNull(dialogView.findViewById(R.id.bitmap_overlay_alpha_slider)); + new AlertDialog.Builder(/* context= */ this) + .setTitle(R.string.bitmap_overlay_settings) + .setView(dialogView) + .setPositiveButton( + android.R.string.ok, + (DialogInterface dialogInterface, int i) -> { + bitmapOverlayUri = uriEditText.getText().toString(); + bitmapOverlayAlpha = alphaSlider.getValue(); + }) + .create() + .show(); + } + @RequiresNonNull({ "removeVideoCheckbox", "forceSilentAudioCheckbox", 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 5a8c88b734..32a6444fe0 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,10 +44,13 @@ import androidx.media3.common.MediaItem; import androidx.media3.common.audio.AudioProcessor; import androidx.media3.common.util.Log; import androidx.media3.common.util.Util; +import androidx.media3.effect.BitmapOverlay; import androidx.media3.effect.Contrast; import androidx.media3.effect.GlEffect; import androidx.media3.effect.GlTextureProcessor; import androidx.media3.effect.HslAdjustment; +import androidx.media3.effect.OverlayEffect; +import androidx.media3.effect.OverlaySettings; import androidx.media3.effect.RgbAdjustment; import androidx.media3.effect.RgbFilter; import androidx.media3.effect.RgbMatrix; @@ -491,6 +494,20 @@ public final class TransformerActivity extends AppCompatActivity { if (selectedEffects[10]) { effects.add(MatrixTransformationFactory.createZoomInTransition()); } + if (selectedEffects[11]) { + OverlaySettings overlaySettings = + new OverlaySettings.Builder() + .setAlpha( + bundle.getFloat( + ConfigurationActivity.BITMAP_OVERLAY_ALPHA, /* defaultValue= */ 1)) + .build(); + + BitmapOverlay bitmapOverlay = + BitmapOverlay.createStaticBitmapOverlay( + Uri.parse(checkNotNull(bundle.getString(ConfigurationActivity.BITMAP_OVERLAY_URI))), + overlaySettings); + effects.add(new OverlayEffect(ImmutableList.of(bitmapOverlay))); + } return effects.build(); } diff --git a/demos/transformer/src/main/res/layout/bitmap_overlay_options.xml b/demos/transformer/src/main/res/layout/bitmap_overlay_options.xml new file mode 100644 index 0000000000..3213dcdfc3 --- /dev/null +++ b/demos/transformer/src/main/res/layout/bitmap_overlay_options.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + diff --git a/demos/transformer/src/main/res/values/strings.xml b/demos/transformer/src/main/res/values/strings.xml index a598b5523e..fc5d3c93f9 100644 --- a/demos/transformer/src/main/res/values/strings.xml +++ b/demos/transformer/src/main/res/values/strings.xml @@ -67,4 +67,7 @@ Hide input video Show input video Force silent audio + Alpha + Uri + Specify bitmap overlay settings