From c7b4ec4d6514b18bec2e8d1fd29957b52eba4fa2 Mon Sep 17 00:00:00 2001 From: claincly Date: Fri, 24 Feb 2023 16:56:42 +0000 Subject: [PATCH] Allow video format change. Uses the first mediaItem's format as the output format. If there is `Presentation` supplied in the `Composition.effects`, add it as the last effect of the first EditedMediaItem. PiperOrigin-RevId: 512082659 --- .../effect/FinalShaderProgramWrapper.java | 4 +- .../media3/transformer/Transformer.java | 16 +++++-- .../transformer/TransformerInternal.java | 15 ++++++- .../transformer/VideoSamplePipeline.java | 43 +++++++++++-------- 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java b/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java index a02b9016b3..d714d0d953 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java @@ -321,6 +321,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private synchronized boolean ensureConfigured(int inputWidth, int inputHeight) throws VideoFrameProcessingException, GlUtil.GlException { + boolean inputSizeChanged = false; if (this.inputWidth != inputWidth || this.inputHeight != inputHeight || this.outputSizeBeforeSurfaceTransformation == null) { @@ -337,6 +338,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; outputSizeBeforeSurfaceTransformation.getWidth(), outputSizeBeforeSurfaceTransformation.getHeight())); } + inputSizeChanged = true; } if (outputSurfaceInfo == null) { @@ -372,7 +374,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; this.debugSurfaceView = debugSurfaceView; } - if (defaultShaderProgram != null && outputSizeOrRotationChanged) { + if (defaultShaderProgram != null && (outputSizeOrRotationChanged || inputSizeChanged)) { defaultShaderProgram.release(); defaultShaderProgram = null; outputSizeOrRotationChanged = false; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index eb0a8fa377..b7e8baee75 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -39,6 +39,7 @@ import androidx.media3.common.util.ListenerSet; import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; import androidx.media3.effect.DefaultVideoFrameProcessor; +import androidx.media3.effect.Presentation; import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -653,8 +654,12 @@ public final class Transformer { * *