Commit 3c8f5cf7 by tianyifeng Committed by microkatz

Add `release` method to Renderer and AudioSink

* Add `release` method to Renderer and AudioSink interfaces.
* Call the `release` method for renderers when the ExoPlayer is going to be released.

PiperOrigin-RevId: 517135677
parent d88dd74b
......@@ -193,6 +193,12 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
onReset();
}
@Override
public final void release() {
Assertions.checkState(state == STATE_DISABLED);
onRelease();
}
// RendererCapabilities implementation.
@Override
......@@ -299,6 +305,15 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
// Do nothing.
}
/**
* Called when the renderer is released.
*
* <p>The default implementation is a no-op.
*/
protected void onRelease() {
// Do nothing.
}
// Methods to be called by subclasses.
/**
......
......@@ -1402,6 +1402,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
/* resetPosition= */ false,
/* releaseMediaSourceList= */ true,
/* resetError= */ false);
releaseRenderers();
loadControl.onReleased();
setState(Player.STATE_IDLE);
if (internalPlaybackThread != null) {
......@@ -2538,6 +2539,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
}
}
private void releaseRenderers() {
for (Renderer renderer : renderers) {
renderer.release();
}
}
private void handleLoadingMediaPeriodChanged(boolean loadingTrackSelectionChanged) {
MediaPeriodHolder loadingMediaPeriodHolder = queue.getLoadingPeriod();
MediaPeriodId loadingMediaPeriodId =
......
......@@ -516,4 +516,11 @@ public interface Renderer extends PlayerMessage.Target {
* #STATE_DISABLED}.
*/
void reset();
/**
* Releases the renderer.
*
* <p>The renderer must not be used after calling this method.
*/
default void release() {}
}
......@@ -481,4 +481,7 @@ public interface AudioSink {
/** Resets the sink, releasing any resources that it currently holds. */
void reset();
/** Releases the audio sink. */
default void release() {}
}
......@@ -623,6 +623,11 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
}
@Override
protected void onRelease() {
audioSink.release();
}
@Override
public boolean isEnded() {
return super.isEnded() && audioSink.isEnded();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment