mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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)).
|
([#10847](https://github.com/google/ExoPlayer/issues/10847)).
|
||||||
* Encapsulate Opus frames in Ogg packets in direct playbacks (offload).
|
* Encapsulate Opus frames in Ogg packets in direct playbacks (offload).
|
||||||
* Extrapolate current position during sleep with offload scheduling.
|
* 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:
|
* DRM:
|
||||||
* Reduce the visibility of several internal-only methods on
|
* Reduce the visibility of several internal-only methods on
|
||||||
`DefaultDrmSession` that aren't expected to be called from outside the
|
`DefaultDrmSession` that aren't expected to be called from outside the
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,12 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
||||||
onReset();
|
onReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void release() {
|
||||||
|
Assertions.checkState(state == STATE_DISABLED);
|
||||||
|
onRelease();
|
||||||
|
}
|
||||||
|
|
||||||
// RendererCapabilities implementation.
|
// RendererCapabilities implementation.
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -303,6 +309,15 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
|
||||||
// Do nothing.
|
// 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.
|
// Methods to be called by subclasses.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1410,6 +1410,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
/* resetPosition= */ false,
|
/* resetPosition= */ false,
|
||||||
/* releaseMediaSourceList= */ true,
|
/* releaseMediaSourceList= */ true,
|
||||||
/* resetError= */ false);
|
/* resetError= */ false);
|
||||||
|
releaseRenderers();
|
||||||
loadControl.onReleased();
|
loadControl.onReleased();
|
||||||
setState(Player.STATE_IDLE);
|
setState(Player.STATE_IDLE);
|
||||||
if (internalPlaybackThread != null) {
|
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) {
|
private void handleLoadingMediaPeriodChanged(boolean loadingTrackSelectionChanged) {
|
||||||
MediaPeriodHolder loadingMediaPeriodHolder = queue.getLoadingPeriod();
|
MediaPeriodHolder loadingMediaPeriodHolder = queue.getLoadingPeriod();
|
||||||
MediaPeriodId loadingMediaPeriodId =
|
MediaPeriodId loadingMediaPeriodId =
|
||||||
|
|
|
||||||
|
|
@ -520,4 +520,11 @@ public interface Renderer extends PlayerMessage.Target {
|
||||||
* #STATE_DISABLED}.
|
* #STATE_DISABLED}.
|
||||||
*/
|
*/
|
||||||
void reset();
|
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. */
|
/** Resets the sink, releasing any resources that it currently holds. */
|
||||||
void reset();
|
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
|
@Override
|
||||||
public boolean isEnded() {
|
public boolean isEnded() {
|
||||||
return super.isEnded() && audioSink.isEnded();
|
return super.isEnded() && audioSink.isEnded();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue