From 038238430b0a70eb1dcf669d337a6a8d6530423c Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 29 Oct 2018 08:19:54 -0700 Subject: [PATCH] Re-enable codec re-use Issue: #2826 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=219130576 --- .../mediacodec/MediaCodecRenderer.java | 16 +++++++++++++--- .../video/MediaCodecVideoRenderer.java | 4 ++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index 74c575c1ef..efe8959908 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -536,6 +536,16 @@ public abstract class MediaCodecRenderer extends BaseRenderer { @Override protected void onDisabled() { inputFormat = null; + if (drmSession != null || pendingDrmSession != null) { + // TODO: Do something better with this case. + onReset(); + } else { + flushOrReleaseCodec(); + } + } + + @Override + protected void onReset() { try { releaseCodec(); } finally { @@ -559,14 +569,14 @@ public abstract class MediaCodecRenderer extends BaseRenderer { protected void releaseCodec() { availableCodecInfos = null; if (codec != null) { + codecInfo = null; + codecFormat = null; resetInputBuffer(); resetOutputBuffer(); resetCodecBuffers(); - codecHotswapDeadlineMs = C.TIME_UNSET; waitingForKeys = false; + codecHotswapDeadlineMs = C.TIME_UNSET; decodeOnlyPresentationTimestamps.clear(); - codecInfo = null; - codecFormat = null; decoderCounters.decoderReleaseCount++; try { codec.stop(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index a896bc2322..0b17cd6338 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -283,8 +283,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { super.onEnabled(joining); + int oldTunnelingAudioSessionId = tunnelingAudioSessionId; tunnelingAudioSessionId = getConfiguration().tunnelingAudioSessionId; tunneling = tunnelingAudioSessionId != C.AUDIO_SESSION_ID_UNSET; + if (tunnelingAudioSessionId != oldTunnelingAudioSessionId) { + releaseCodec(); + } eventDispatcher.enabled(decoderCounters); frameReleaseTimeHelper.enable(); }