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 36ece26254..8f8d600f93 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 @@ -372,6 +372,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer { private boolean waitingForKeys; private boolean waitingForFirstSyncSample; private boolean waitingForFirstSampleInFormat; + private boolean skipMediaCodecStopOnRelease; protected DecoderCounters decoderCounters; @@ -433,6 +434,22 @@ public abstract class MediaCodecRenderer extends BaseRenderer { this.renderTimeLimitMs = renderTimeLimitMs; } + /** + * Skip calling {@link MediaCodec#stop()} when the underlying MediaCodec is going to be released. + * + *
By default, when the MediaCodecRenderer is releasing the underlying {@link MediaCodec}, it + * first calls {@link MediaCodec#stop()} and then calls {@link MediaCodec#release()}. If this + * feature is enabled, the MediaCodecRenderer will skip the call to {@link MediaCodec#stop()}. + * + *
This method is experimental, and will be renamed or removed in a future release. It should + * only be called before the renderer is used. + * + * @param enabled enable or disable the feature. + */ + public void experimental_setSkipMediaCodecStopOnRelease(boolean enabled) { + skipMediaCodecStopOnRelease = enabled; + } + @Override public final int supportsMixedMimeTypeAdaptation() { return ADAPTIVE_NOT_SEAMLESS; @@ -636,7 +653,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer { if (codec != null) { decoderCounters.decoderReleaseCount++; try { - codec.stop(); + if (!skipMediaCodecStopOnRelease) { + codec.stop(); + } } finally { codec.release(); }