From 5d35698d8faa8a62ec22351f8d801691e05b0f5b Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Mon, 8 Sep 2014 11:21:18 +0100 Subject: [PATCH] Make MediaCodecTrackRenderer discard non-keyframes after seek. This means that after a decoder flush, the renderer will avoid feeding non-keyframes into the decoder until it has received and fed the first keyframe. The decoder has no way of correctly decoding non-keyframes that arrive before a keyframe. --- .../google/android/exoplayer/MediaCodecTrackRenderer.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java index d990d369b8..a23f5edf49 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java @@ -283,9 +283,9 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { } codecHotswapTimeMs = getState() == TrackRenderer.STATE_STARTED ? SystemClock.elapsedRealtime() : -1; - inputIndex = -1; - outputIndex = -1; - waitingForFirstSyncFrame = true; + inputIndex = -1; + outputIndex = -1; + waitingForFirstSyncFrame = true; codecCounters.codecInitCount++; } @@ -449,6 +449,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { codecHotswapTimeMs = -1; inputIndex = -1; outputIndex = -1; + waitingForFirstSyncFrame = true; decodeOnlyPresentationTimestamps.clear(); // Workaround for framework bugs. // See [redacted], [redacted], [redacted].