diff --git a/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java b/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java index 0be5081996..8f15b89ceb 100644 --- a/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java +++ b/demos/composition/src/main/java/androidx/media3/demo/composition/CompositionPreviewActivity.java @@ -79,6 +79,7 @@ public final class CompositionPreviewActivity extends AppCompatActivity { private AppCompatTextView exportInformationTextView; private Stopwatch exportStopwatch; private boolean includeBackgroundAudioTrack; + private boolean appliesVideoEffects; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -102,6 +103,10 @@ public final class CompositionPreviewActivity extends AppCompatActivity { backgroundAudioCheckBox.setOnCheckedChangeListener( (compoundButton, checked) -> includeBackgroundAudioTrack = checked); + AppCompatCheckBox applyVideoEffectsCheckBox = findViewById(R.id.apply_video_effects_checkbox); + applyVideoEffectsCheckBox.setOnCheckedChangeListener( + ((compoundButton, checked) -> appliesVideoEffects = checked)); + presetDescriptions = getResources().getStringArray(R.array.preset_descriptions); // Select two media items by default. selectedMediaItems = new boolean[presetDescriptions.length]; @@ -145,9 +150,12 @@ public final class CompositionPreviewActivity extends AppCompatActivity { String[] presetUris = getResources().getStringArray(/* id= */ R.array.preset_uris); int[] presetDurationsUs = getResources().getIntArray(/* id= */ R.array.preset_durations); List mediaItems = new ArrayList<>(); - ImmutableList effects = - ImmutableList.of( - MatrixTransformationFactory.createDizzyCropEffect(), RgbFilter.createGrayscaleFilter()); + ImmutableList videoEffects = + appliesVideoEffects + ? ImmutableList.of( + MatrixTransformationFactory.createDizzyCropEffect(), + RgbFilter.createGrayscaleFilter()) + : ImmutableList.of(); // Preview requires all sequences to be the same duration, so calculate main sequence duration // and limit background sequence duration to match. long videoSequenceDurationUs = 0; @@ -165,7 +173,7 @@ public final class CompositionPreviewActivity extends AppCompatActivity { .setEffects( new Effects( /* audioProcessors= */ ImmutableList.of(pitchChanger), - /* videoEffects= */ effects)) + /* videoEffects= */ videoEffects)) .setDurationUs(presetDurationsUs[i]); videoSequenceDurationUs += presetDurationsUs[i]; mediaItems.add(itemBuilder.build()); diff --git a/demos/composition/src/main/res/layout/composition_preview_activity.xml b/demos/composition/src/main/res/layout/composition_preview_activity.xml index 185565b2d9..600065ee83 100644 --- a/demos/composition/src/main/res/layout/composition_preview_activity.xml +++ b/demos/composition/src/main/res/layout/composition_preview_activity.xml @@ -43,7 +43,7 @@ android:layout_marginBottom="8dp" android:padding="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Medium" - android:text="@string/preview_single_sequence" /> + android:text="@string/preview_composition" /> @@ -75,8 +75,18 @@ android:layout_height="wrap_content" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:text="@string/edit" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@id/composition_preview_card_view"/> + app:layout_constraintStart_toEndOf="@id/sequence_header_text" + app:layout_constraintTop_toTopOf="@id/sequence_header_text" + app:layout_constraintBottom_toBottomOf="@id/sequence_header_text"/> + + Composition Demo Edit + Add effects Preview - Single sequence preview - Single sequence items: + Composition preview + Video sequence items: Choose preset input Export Export completed in %.3f seconds.\nOutput: %s