diff --git a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java index bb01a2bf58..1aaac4ebcf 100644 --- a/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java @@ -491,21 +491,9 @@ import java.util.List; return; } for (int i = 0; i < renderers.length; i++) { - try { - TrackRenderer renderer = renderers[i]; - ensureStopped(renderer); - if (renderer.getState() == TrackRenderer.STATE_ENABLED) { - renderer.disable(); - } - renderer.release(); - } catch (ExoPlaybackException e) { - // There's nothing we can do. Catch the exception here so that other renderers still have - // a chance of being cleaned up correctly. - Log.e(TAG, "Stop failed.", e); - } catch (RuntimeException e) { - // Ditto. - Log.e(TAG, "Stop failed.", e); - } + TrackRenderer renderer = renderers[i]; + stopAndDisable(renderer); + release(renderer); } renderers = null; timeSourceTrackRenderer = null; @@ -513,6 +501,33 @@ import java.util.List; setState(ExoPlayer.STATE_IDLE); } + private void stopAndDisable(TrackRenderer renderer) { + try { + ensureStopped(renderer); + if (renderer.getState() == TrackRenderer.STATE_ENABLED) { + renderer.disable(); + } + } catch (ExoPlaybackException e) { + // There's nothing we can do. + Log.e(TAG, "Stop failed.", e); + } catch (RuntimeException e) { + // Ditto. + Log.e(TAG, "Stop failed.", e); + } + } + + private void release(TrackRenderer renderer) { + try { + renderer.release(); + } catch (ExoPlaybackException e) { + // There's nothing we can do. + Log.e(TAG, "Release failed.", e); + } catch (RuntimeException e) { + // Ditto. + Log.e(TAG, "Release failed.", e); + } + } + private void sendMessageInternal(int what, Object obj) throws ExoPlaybackException { try {