From 6f0f7dd1be40c81cb056d82215ceabdd5a8a2a1a Mon Sep 17 00:00:00 2001 From: hschlueter Date: Thu, 18 Nov 2021 15:25:38 +0000 Subject: [PATCH] Adjust timestamp even if frame is dropped. The `SefSlowMotionVideoSampleTransformer` drops frames by setting `buffer.data = null` and updates the timestamps of the frames it keeps. However, these buffers with dropped frames are still used in the pipeline as they may contain other useful information, specifically whether the end of the input has been reached. So, the timestamps should also be updated for the buffers where frames are dropped. PiperOrigin-RevId: 410797678 --- .../transformer/SefSlowMotionVideoSampleTransformer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SefSlowMotionVideoSampleTransformer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SefSlowMotionVideoSampleTransformer.java index db90f38094..27626ca764 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SefSlowMotionVideoSampleTransformer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SefSlowMotionVideoSampleTransformer.java @@ -148,8 +148,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; "Missing SVC extension prefix NAL unit."); int layer = (scratch[3] & 0xFF) >> 5; boolean shouldKeepFrame = processCurrentFrame(layer, buffer.timeUs); + // Update buffer timestamp regardless of whether the frame is dropped because the buffer might + // still be passed to a decoder if it contains an end of stream flag. + buffer.timeUs = getCurrentFrameOutputTimeUs(/* inputTimeUs= */ buffer.timeUs); if (shouldKeepFrame) { - buffer.timeUs = getCurrentFrameOutputTimeUs(/* inputTimeUs= */ buffer.timeUs); skipToNextNalUnit(data); // Skip over prefix_nal_unit_svc. } else { buffer.data = null;