diff --git a/RELEASENOTES.md b/RELEASENOTES.md index bf7d64220a..ad213b61a1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -60,6 +60,10 @@ ([#3757](https://github.com/google/ExoPlayer/issues/3757)). * DRM: * Effect: + * Add `DefaultVideoFrameProcessor` workaround for minor `SurfaceTexture` + 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. * 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 9c539b7c5f..bdc164c4bf 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java @@ -159,6 +159,7 @@ public final class DefaultVideoFrameProcessor implements VideoFrameProcessor { public Builder() { sdrWorkingColorSpace = WORKING_COLOR_SPACE_DEFAULT; requireRegisteringAllInputFrames = true; + experimentalAdjustSurfaceTextureTransformationMatrix = true; } private Builder(Factory factory) { @@ -287,8 +288,13 @@ public final class DefaultVideoFrameProcessor implements VideoFrameProcessor { * *
When set, programs sampling GL_TEXTURE_EXTERNAL_OES from {@link SurfaceTexture} must not * attempt to access data in any cropped region, including via GL_LINEAR resampling filter. + * + *
Defaults to {@code true}. + * + * @deprecated This experimental method will be removed in a future release. */ @CanIgnoreReturnValue + @Deprecated public Builder setExperimentalAdjustSurfaceTextureTransformationMatrix( boolean experimentalAdjustSurfaceTextureTransformationMatrix) { this.experimentalAdjustSurfaceTextureTransformationMatrix = diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SequenceEffectTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SequenceEffectTestUtil.java index fe9834423c..38e8d04fb0 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SequenceEffectTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/SequenceEffectTestUtil.java @@ -31,7 +31,6 @@ import androidx.media3.common.Effect; import androidx.media3.common.MediaItem; import androidx.media3.common.util.Clock; import androidx.media3.common.util.Util; -import androidx.media3.effect.DefaultVideoFrameProcessor; import androidx.media3.effect.Presentation; import androidx.media3.exoplayer.mediacodec.MediaCodecInfo; import com.google.common.collect.ImmutableList; @@ -209,9 +208,8 @@ public final class SequenceEffectTestUtil { /** * Creates a high quality {@link Transformer} instance. * - *
The {@link Transformer} is configured to select a specific decoder, use experimental - * high-quality {@link DefaultVideoFrameProcessor} configuration, and a large value for {@link - * VideoEncoderSettings#bitrate}. + *
The {@link Transformer} is configured to select a specific decoder and a large value for + * {@link VideoEncoderSettings#bitrate}. */ public static Transformer createHqTransformer( Context context, MediaCodecInfo decoderMediaCodecInfo) { @@ -223,10 +221,6 @@ public final class SequenceEffectTestUtil { .build(); AssetLoader.Factory assetLoaderFactory = new DefaultAssetLoaderFactory(context, decoderFactory, Clock.DEFAULT); - DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory = - new DefaultVideoFrameProcessor.Factory.Builder() - .setExperimentalAdjustSurfaceTextureTransformationMatrix(true) - .build(); Codec.EncoderFactory encoderFactory = new DefaultEncoderFactory.Builder(context) .setRequestedVideoEncoderSettings( @@ -234,7 +228,6 @@ public final class SequenceEffectTestUtil { .build(); return new Transformer.Builder(context) .setAssetLoaderFactory(assetLoaderFactory) - .setVideoFrameProcessorFactory(videoFrameProcessorFactory) .setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(encoderFactory)) .build(); }