From 7d6f02dc50a403410dbea96dd91aa62d8dd99c59 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 7 Aug 2023 20:41:33 +0000 Subject: [PATCH] Only set hadKeyframe flag to true if we end up muxing the frame. If we throw away the first keyframe (because it does not contain any bytes to read), we shouldn't behave as if we had written a keyframe to our track. We should instead continue waiting for the first (valid) keyframe. PiperOrigin-RevId: 554579146 --- .../java/androidx/media3/muxer/Mp4Writer.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java index e4a78b983b..933581c8ba 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java @@ -364,6 +364,12 @@ import java.util.concurrent.atomic.AtomicBoolean; } public void writeSampleData(ByteBuffer byteBuffer, BufferInfo bufferInfo) throws IOException { + // TODO: b/279931840 - Confirm whether muxer should throw when writing empty samples. + // Skip empty samples. + if (bufferInfo.size == 0 || byteBuffer.remaining() == 0) { + return; + } + if ((bufferInfo.flags & MediaCodec.BUFFER_FLAG_KEY_FRAME) > 0) { hadKeyframe = true; } @@ -372,16 +378,8 @@ import java.util.concurrent.atomic.AtomicBoolean; return; } - if (bufferInfo.size == 0) { - return; - } - - // Skip empty samples. - // TODO: b/279931840 - Confirm whether muxer should throw when writing empty samples. - if (byteBuffer.remaining() > 0) { - pendingSamples.addLast(Pair.create(bufferInfo, byteBuffer)); - doInterleave(); - } + pendingSamples.addLast(Pair.create(bufferInfo, byteBuffer)); + doInterleave(); } @Override