From 6e678e511b15590a92906c13ac921b31bfe38a7f Mon Sep 17 00:00:00 2001 From: dancho Date: Wed, 31 Jul 2024 04:38:05 -0700 Subject: [PATCH] Enable experimentalRepeatInputBitmapWithoutResampling Speed up image to video export by default. PiperOrigin-RevId: 657958037 --- RELEASENOTES.md | 2 ++ .../media3/effect/DefaultVideoFrameProcessor.java | 6 +++++- .../media3/transformer/mh/TranscodeSpeedTest.java | 10 +--------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9c5142fc06..dfd8f73fdf 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -66,6 +66,8 @@ scaling. `SurfaceTexture` may include a small scaling that cuts off a 1-texel border around the edge of a cropped buffer. This is now handled such that output is closer to expected. + * Speed up `DefaultVideoFrameProcessor.queueInputBitmap()`. As a result, + exporting images to videos with `Transformer` is faster. * Muxers: * IMA extension: * Fix bug where clearing the playlist may cause an diff --git a/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java b/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java index bdc164c4bf..89e3d3765e 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java @@ -160,6 +160,7 @@ public final class DefaultVideoFrameProcessor implements VideoFrameProcessor { sdrWorkingColorSpace = WORKING_COLOR_SPACE_DEFAULT; requireRegisteringAllInputFrames = true; experimentalAdjustSurfaceTextureTransformationMatrix = true; + experimentalRepeatInputBitmapWithoutResampling = true; } private Builder(Factory factory) { @@ -306,10 +307,13 @@ public final class DefaultVideoFrameProcessor implements VideoFrameProcessor { * Sets whether {@link BitmapTextureManager} will sample from the input bitmap only once for a * sequence of output frames. * - *

Defaults to {@code false}. That is, each output frame will sample from the full + *

Defaults to {@code true}. That is, each output frame will sample from the full * resolution input bitmap. + * + * @deprecated This experimental method will be removed in a future release. */ @CanIgnoreReturnValue + @Deprecated public Builder setExperimentalRepeatInputBitmapWithoutResampling( boolean experimentalRepeatInputBitmapWithoutResampling) { this.experimentalRepeatInputBitmapWithoutResampling = diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeSpeedTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeSpeedTest.java index 66d2ab44b9..28f87f0237 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeSpeedTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TranscodeSpeedTest.java @@ -27,7 +27,6 @@ import androidx.media3.common.Format; import androidx.media3.common.MediaItem; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Util; -import androidx.media3.effect.DefaultVideoFrameProcessor; import androidx.media3.effect.Presentation; import androidx.media3.transformer.AndroidTestUtil; import androidx.media3.transformer.EditedMediaItem; @@ -103,15 +102,8 @@ public class TranscodeSpeedTest { testId, /* inputFormat= */ MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat, outputFormat); - DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory = - new DefaultVideoFrameProcessor.Factory.Builder() - .setExperimentalRepeatInputBitmapWithoutResampling(true) - .build(); Transformer transformer = - new Transformer.Builder(context) - .setVideoMimeType(MimeTypes.VIDEO_H264) - .setVideoFrameProcessorFactory(videoFrameProcessorFactory) - .build(); + new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_H264).build(); boolean isHighPerformance = Ascii.toLowerCase(Util.MODEL).contains("pixel") && (Ascii.toLowerCase(Util.MODEL).contains("6")