From 6f9731ce7e5a212b291438d02ad912cf20f33f0c Mon Sep 17 00:00:00 2001 From: tofunmi Date: Fri, 30 Jun 2023 16:04:49 +0000 Subject: [PATCH] TextureInput: Advise client to delete syncObject after use PiperOrigin-RevId: 544670927 --- .../common/OnInputFrameProcessedListener.java | 3 ++- .../media3/effect/TexIdTextureManager.java | 15 ++++----------- .../test/utils/VideoFrameProcessorTestRunner.java | 3 ++- .../transformer/TransformerEndToEndTest.java | 3 ++- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/OnInputFrameProcessedListener.java b/libraries/common/src/main/java/androidx/media3/common/OnInputFrameProcessedListener.java index d2d2635c09..7e82f58174 100644 --- a/libraries/common/src/main/java/androidx/media3/common/OnInputFrameProcessedListener.java +++ b/libraries/common/src/main/java/androidx/media3/common/OnInputFrameProcessedListener.java @@ -27,7 +27,8 @@ public interface OnInputFrameProcessedListener { * @param textureId The identifier of the processed texture. * @param syncObject A GL sync object that has been inserted into the GL command stream after the * last write of texture. Value is 0 if and only if the {@code GLES30#glFenceSync} failed or - * the EGL context version is less than openGL 3.0. + * the EGL context version is less than openGL 3.0. The sync object must be {@link + * androidx.media3.common.util.GlUtil#deleteSyncObject deleted} after use. */ void onInputFrameProcessed(int textureId, long syncObject) throws VideoFrameProcessingException; } diff --git a/libraries/effect/src/main/java/androidx/media3/effect/TexIdTextureManager.java b/libraries/effect/src/main/java/androidx/media3/effect/TexIdTextureManager.java index 0a87ba18af..17e474f68f 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/TexIdTextureManager.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/TexIdTextureManager.java @@ -40,7 +40,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private @MonotonicNonNull OnInputFrameProcessedListener frameProcessedListener; private @MonotonicNonNull FrameInfo inputFrameInfo; - private long glSyncObject; /** * Creates a new instance. @@ -68,11 +67,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @Override public void onInputFrameProcessed(GlTextureInfo inputTexture) { videoFrameProcessingTaskExecutor.submit( - () -> { - glSyncObject = GlUtil.createGlSyncFence(); - checkNotNull(frameProcessedListener) - .onInputFrameProcessed(inputTexture.getTexId(), glSyncObject); - }); + () -> + checkNotNull(frameProcessedListener) + .onInputFrameProcessed(inputTexture.getTexId(), GlUtil.createGlSyncFence())); } @Override @@ -128,10 +125,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @Override public void release() throws VideoFrameProcessingException { - try { - GlUtil.deleteSyncObject(glSyncObject); - } catch (GlUtil.GlException e) { - throw new VideoFrameProcessingException(e); - } + // Do nothing. } } diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/VideoFrameProcessorTestRunner.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/VideoFrameProcessorTestRunner.java index 8b939d9550..44219e7383 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/VideoFrameProcessorTestRunner.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/VideoFrameProcessorTestRunner.java @@ -354,9 +354,10 @@ public final class VideoFrameProcessorTestRunner { .setPixelWidthHeightRatio(pixelWidthHeightRatio) .build()); videoFrameProcessor.setOnInputFrameProcessedListener( - (texId, unused) -> { + (texId, syncObject) -> { try { GlUtil.deleteTexture(texId); + GlUtil.deleteSyncObject(syncObject); } catch (GlUtil.GlException e) { throw new VideoFrameProcessingException(e); } diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java index 3e4e4451fd..65f6d61bf2 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerEndToEndTest.java @@ -503,9 +503,10 @@ public class TransformerEndToEndTest { EditedMediaItem editedMediaItem, Looper looper, AssetLoader.Listener listener) { Format format = new Format.Builder().setWidth(width).setHeight(height).build(); OnInputFrameProcessedListener frameProcessedListener = - (texId, unused) -> { + (texId, syncObject) -> { try { GlUtil.deleteTexture(texId); + GlUtil.deleteSyncObject(syncObject); } catch (GlUtil.GlException e) { throw new VideoFrameProcessingException(e); }