From 7af95230cb8b9230e6d55905ba75a86aa589d95a Mon Sep 17 00:00:00 2001 From: christosts Date: Mon, 26 Apr 2021 18:02:37 +0100 Subject: [PATCH] DebugMediaCodecVideoRenderer: expect output format change after flush The DebugMediaCodecVideoRenderer expects the MediaCodec to return an output format change after the MediaCodecRenderer detects an input format change, but the DebugMediaCodecVideoRenderer resets its state after flushing MediaCodec. This does not cover the following case: an input format change is detected when queueing sample with timestamp X and before the respective output buffer is dequeued, the player seeks back to X. After seeking back to X, the MCR does not trigger an input format change for X again, and MediaCodec (correctly) returns an output format change before dequeueing output X. This commit is changing DebugMediaCodecVideoRenderer to keep expecting an output format change after a flush, is one a format pending output. Such an an edge-case is addressed already in MediaCodecRenderer. PiperOrigin-RevId: 370482506 --- .../exoplayer2/playbacktests/gts/DebugRenderersFactory.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java index 17b422d30c..01b6ebb190 100644 --- a/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java +++ b/playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DebugRenderersFactory.java @@ -140,10 +140,11 @@ import java.util.ArrayList; protected void resetCodecStateForFlush() { super.resetCodecStateForFlush(); clearTimestamps(); + // Check if there is a format change on the input side still pending propagation to the + // output. + inputFormatChanged = !inputFormatChangeTimesUs.isEmpty(); inputFormatChangeTimesUs.clear(); - inputFormatChanged = false; outputMediaFormatChanged = false; - currentMediaFormat = null; } @Override