diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Codec.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Codec.java index 5711888e88..976a4d63ab 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Codec.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Codec.java @@ -18,6 +18,7 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; +import static androidx.media3.common.util.Assertions.checkStateNotNull; import android.media.MediaCodec; import android.media.MediaCodec.BufferInfo; @@ -27,6 +28,7 @@ import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; +import androidx.media3.common.util.Assertions; import androidx.media3.common.util.UnstableApi; import androidx.media3.decoder.DecoderInputBuffer; import com.google.common.collect.ImmutableList; @@ -314,7 +316,13 @@ public final class Codec { public void releaseOutputBuffer(boolean render) throws TransformationException { outputBuffer = null; try { - mediaCodec.releaseOutputBuffer(outputBufferIndex, render); + if (render) { + mediaCodec.releaseOutputBuffer( + outputBufferIndex, + /* renderTimestampNs= */ checkStateNotNull(outputBufferInfo).presentationTimeUs * 1000); + } else { + mediaCodec.releaseOutputBuffer(outputBufferIndex, /* render= */ false); + } } catch (RuntimeException e) { throw createTransformationException(e); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java index ff201364a0..244ba3ba75 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameEditor.java @@ -325,8 +325,8 @@ import java.util.concurrent.atomic.AtomicInteger; glProgram.bindAttributesAndUniforms(); focusAndDrawQuad(eglSurface, outputWidth, outputHeight); - long surfaceTextureTimestampNs = inputSurfaceTexture.getTimestamp(); - EGLExt.eglPresentationTimeANDROID(eglDisplay, eglSurface, surfaceTextureTimestampNs); + long presentationTimeNs = inputSurfaceTexture.getTimestamp(); + EGLExt.eglPresentationTimeANDROID(eglDisplay, eglSurface, presentationTimeNs); EGL14.eglSwapBuffers(eglDisplay, eglSurface); if (debugPreviewEglSurface != null) {