mirror of
https://github.com/samsonjs/media.git
synced 2026-04-14 12:45:47 +00:00
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
This commit is contained in:
parent
0e3f407e0e
commit
841c5477d1
6 changed files with 39 additions and 0 deletions
|
|
@ -17,6 +17,8 @@
|
|||
([#10847](https://github.com/google/ExoPlayer/issues/10847)).
|
||||
* Encapsulate Opus frames in Ogg packets in direct playbacks (offload).
|
||||
* Extrapolate current position during sleep with offload scheduling.
|
||||
* Add `Renderer.release()` and `AudioSink.release()` for releasing the
|
||||
resources at the end of player's lifecycle.
|
||||
* DRM:
|
||||
* Reduce the visibility of several internal-only methods on
|
||||
`DefaultDrmSession` that aren't expected to be called from outside the
|
||||
|
|
|
|||
|
|
@ -197,6 +197,12 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
|||
onReset();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void release() {
|
||||
Assertions.checkState(state == STATE_DISABLED);
|
||||
onRelease();
|
||||
}
|
||||
|
||||
// RendererCapabilities implementation.
|
||||
|
||||
@Override
|
||||
|
|
@ -303,6 +309,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.
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1410,6 +1410,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||
/* resetPosition= */ false,
|
||||
/* releaseMediaSourceList= */ true,
|
||||
/* resetError= */ false);
|
||||
releaseRenderers();
|
||||
loadControl.onReleased();
|
||||
setState(Player.STATE_IDLE);
|
||||
if (internalPlaybackThread != null) {
|
||||
|
|
@ -2546,6 +2547,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 =
|
||||
|
|
|
|||
|
|
@ -520,4 +520,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() {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -485,4 +485,7 @@ public interface AudioSink {
|
|||
|
||||
/** Resets the sink, releasing any resources that it currently holds. */
|
||||
void reset();
|
||||
|
||||
/** Releases the audio sink. */
|
||||
default void release() {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -627,6 +627,11 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onRelease() {
|
||||
audioSink.release();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnded() {
|
||||
return super.isEnded() && audioSink.isEnded();
|
||||
|
|
|
|||
Loading…
Reference in a new issue