From 8105394ac21221be1d25fe34410db72ae64903b5 Mon Sep 17 00:00:00 2001 From: hschlueter Date: Tue, 30 Nov 2021 16:28:34 +0000 Subject: [PATCH] Flip input buffer even if the end of stream is reached. Sometimes the empty end of stream buffer has a non-zero data limit. Calling flip first, resets the limit to the position which is zero in these cases. PiperOrigin-RevId: 413156455 --- .../transformerdumps/mp4/sample_sef_slow_motion.mp4.dump | 6 ------ .../media3/transformer/TransformerBaseRenderer.java | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump index d5db3513de..816e26e384 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_sef_slow_motion.mp4.dump @@ -298,12 +298,6 @@ sample: size = 1193 isKeyFrame = false presentationTimeUs = 734083 -sample: - trackIndex = 0 - dataHashCode = 820561200 - size = 1252 - isKeyFrame = true - presentationTimeUs = 201521 sample: trackIndex = 1 dataHashCode = -1554795381 diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java index 1b918a5e8d..8703e29007 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerBaseRenderer.java @@ -197,13 +197,13 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; int result = readSource(getFormatHolder(), samplePipelineInputBuffer, /* readFlags= */ 0); switch (result) { case C.RESULT_BUFFER_READ: + samplePipelineInputBuffer.flip(); if (samplePipelineInputBuffer.isEndOfStream()) { samplePipeline.queueInputBuffer(); return false; } mediaClock.updateTimeForTrackType(getTrackType(), samplePipelineInputBuffer.timeUs); samplePipelineInputBuffer.timeUs -= streamOffsetUs; - samplePipelineInputBuffer.flip(); checkStateNotNull(samplePipelineInputBuffer.data); maybeQueueSampleToPipeline(samplePipelineInputBuffer); return true;