diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0b4d419d8c..6e726ee8ef 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -53,6 +53,9 @@ * Add option to `MergingMediaSource` to adjust the time offsets between the merged sources ([#6103](https://github.com/google/ExoPlayer/issues/6103)). + * `SimpleDecoderVideoRenderer` and `SimpleDecoderAudioRenderer` renamed to + `DecoderVideoRenderer` and `DecoderAudioRenderer` respectively, and + generalized to work with `Decoder` rather than `SimpleDecoder`. * Text: * Parse `` and `` tags in WebVTT subtitles (rendering is coming later). diff --git a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java index b75c4fdf3d..c3a936a10f 100644 --- a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java +++ b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java @@ -31,7 +31,7 @@ import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer; +import com.google.android.exoplayer2.video.DecoderVideoRenderer; import com.google.android.exoplayer2.video.VideoDecoderException; import com.google.android.exoplayer2.video.VideoDecoderInputBuffer; import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; @@ -52,7 +52,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; * VideoDecoderOutputBufferRenderer}, or null. * */ -public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer { +public class Libgav1VideoRenderer extends DecoderVideoRenderer { private static final int DEFAULT_NUM_OF_INPUT_BUFFERS = 4; private static final int DEFAULT_NUM_OF_OUTPUT_BUFFERS = 4; diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java index daf4a8a16c..01e20f05b1 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java @@ -22,17 +22,15 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AudioSink; +import com.google.android.exoplayer2.audio.DecoderAudioRenderer; import com.google.android.exoplayer2.audio.DefaultAudioSink; -import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; -/** - * Decodes and renders audio using FFmpeg. - */ -public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer { +/** Decodes and renders audio using FFmpeg. */ +public final class FfmpegAudioRenderer extends DecoderAudioRenderer { /** The number of input and output buffers. */ private static final int NUM_BUFFERS = 16; diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder.java index 6fa3d888db..ceef86d0cc 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder.java @@ -88,7 +88,7 @@ import java.util.List; @Override protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this); + return new SimpleOutputBuffer(this::releaseOutputBuffer); } @Override diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java index c3eab1dfbc..84cb081b29 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java @@ -85,7 +85,7 @@ import java.util.List; @Override protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this); + return new SimpleOutputBuffer(this::releaseOutputBuffer); } @Override diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java index 1c04cb00fd..f1f6bb3e1e 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java @@ -22,7 +22,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; import com.google.android.exoplayer2.audio.AudioSink; -import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; +import com.google.android.exoplayer2.audio.DecoderAudioRenderer; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.extractor.FlacStreamMetadata; import com.google.android.exoplayer2.util.Assertions; @@ -32,7 +32,7 @@ import com.google.android.exoplayer2.util.Util; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** Decodes and renders audio using the native Flac decoder. */ -public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer { +public final class LibflacAudioRenderer extends DecoderAudioRenderer { private static final int NUM_BUFFERS = 16; diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java index 394afd31e4..45723179f8 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java @@ -21,12 +21,12 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioProcessor; import com.google.android.exoplayer2.audio.AudioRendererEventListener; -import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer; +import com.google.android.exoplayer2.audio.DecoderAudioRenderer; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.MimeTypes; /** Decodes and renders audio using the native Opus decoder. */ -public class LibopusAudioRenderer extends SimpleDecoderAudioRenderer { +public class LibopusAudioRenderer extends DecoderAudioRenderer { /** The number of input and output buffers. */ private static final int NUM_BUFFERS = 16; diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java index f0e993e3b9..fb7ed99909 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java @@ -148,7 +148,7 @@ import java.util.List; @Override protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this); + return new SimpleOutputBuffer(this::releaseOutputBuffer); } @Override diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java index a39f76ea8e..0863f512bb 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java @@ -30,7 +30,7 @@ import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; -import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer; +import com.google.android.exoplayer2.video.DecoderVideoRenderer; import com.google.android.exoplayer2.video.VideoDecoderException; import com.google.android.exoplayer2.video.VideoDecoderInputBuffer; import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; @@ -52,7 +52,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; * VideoDecoderOutputBufferRenderer}, or null. * */ -public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer { +public class LibvpxVideoRenderer extends DecoderVideoRenderer { /** The number of input buffers. */ private final int numInputBuffers; diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxOutputBuffer.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxOutputBuffer.java index 1c434032d0..99f35217fc 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxOutputBuffer.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxOutputBuffer.java @@ -32,7 +32,7 @@ public final class VpxOutputBuffer extends VideoDecoderOutputBuffer { * * @param owner Buffer owner. */ - public VpxOutputBuffer(VideoDecoderOutputBuffer.Owner owner) { + public VpxOutputBuffer(Owner owner) { super(owner); } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java b/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java index 4ae0c0e111..287e3b30c0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Renderer.java @@ -24,7 +24,7 @@ import com.google.android.exoplayer2.audio.AuxEffectInfo; import com.google.android.exoplayer2.source.SampleStream; import com.google.android.exoplayer2.util.MediaClock; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer; +import com.google.android.exoplayer2.video.DecoderVideoRenderer; import com.google.android.exoplayer2.video.VideoDecoderOutputBufferRenderer; import com.google.android.exoplayer2.video.VideoFrameMetadataListener; import com.google.android.exoplayer2.video.spherical.CameraMotionListener; @@ -115,7 +115,7 @@ public interface Renderer extends PlayerMessage.Target { @SuppressWarnings("deprecation") int MSG_SET_CAMERA_MOTION_LISTENER = C.MSG_SET_CAMERA_MOTION_LISTENER; /** - * The type of a message that can be passed to a {@link SimpleDecoderVideoRenderer} via {@link + * The type of a message that can be passed to a {@link DecoderVideoRenderer} via {@link * ExoPlayer#createMessage(Target)}. The message payload should be the target {@link * VideoDecoderOutputBufferRenderer}, or null. * diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java similarity index 97% rename from library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java rename to library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java index 94de29ed06..b4bf67528b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java @@ -29,9 +29,9 @@ import com.google.android.exoplayer2.FormatHolder; import com.google.android.exoplayer2.PlayerMessage.Target; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.audio.AudioRendererEventListener.EventDispatcher; +import com.google.android.exoplayer2.decoder.Decoder; import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; -import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.decoder.SimpleOutputBuffer; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; @@ -47,7 +47,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** - * Decodes and renders audio using a {@link SimpleDecoder}. + * Decodes and renders audio using a {@link Decoder}. * *

This renderer accepts the following messages sent via {@link ExoPlayer#createMessage(Target)} * on the playback thread: @@ -68,7 +68,7 @@ import java.lang.annotation.RetentionPolicy; * underlying audio track. * */ -public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements MediaClock { +public abstract class DecoderAudioRenderer extends BaseRenderer implements MediaClock { @Documented @Retention(RetentionPolicy.SOURCE) @@ -105,8 +105,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements private int encoderPadding; @Nullable - private SimpleDecoder< - DecoderInputBuffer, ? extends SimpleOutputBuffer, ? extends AudioDecoderException> + private Decoder decoder; @Nullable private DecoderInputBuffer inputBuffer; @@ -125,7 +124,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements private boolean outputStreamEnded; private boolean waitingForKeys; - public SimpleDecoderAudioRenderer() { + public DecoderAudioRenderer() { this(/* eventHandler= */ null, /* eventListener= */ null); } @@ -135,7 +134,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements * @param eventListener A listener of events. May be null if delivery of events is not required. * @param audioProcessors Optional {@link AudioProcessor}s that will process audio before output. */ - public SimpleDecoderAudioRenderer( + public DecoderAudioRenderer( @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, AudioProcessor... audioProcessors) { @@ -154,7 +153,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements * default capabilities (no encoded audio passthrough support) should be assumed. * @param audioProcessors Optional {@link AudioProcessor}s that will process audio before output. */ - public SimpleDecoderAudioRenderer( + public DecoderAudioRenderer( @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, @Nullable AudioCapabilities audioCapabilities, @@ -168,7 +167,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements * @param eventListener A listener of events. May be null if delivery of events is not required. * @param audioSink The sink to which audio will be output. */ - public SimpleDecoderAudioRenderer( + public DecoderAudioRenderer( @Nullable Handler eventHandler, @Nullable AudioRendererEventListener eventListener, AudioSink audioSink) { @@ -306,7 +305,7 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements * @return The decoder. * @throws AudioDecoderException If an error occurred creating a suitable decoder. */ - protected abstract SimpleDecoder< + protected abstract Decoder< DecoderInputBuffer, ? extends SimpleOutputBuffer, ? extends AudioDecoderException> createDecoder(Format format, @Nullable ExoMediaCrypto mediaCrypto) throws AudioDecoderException; @@ -689,14 +688,14 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements @Override public void onAudioSessionId(int audioSessionId) { eventDispatcher.audioSessionId(audioSessionId); - SimpleDecoderAudioRenderer.this.onAudioSessionId(audioSessionId); + DecoderAudioRenderer.this.onAudioSessionId(audioSessionId); } @Override public void onPositionDiscontinuity() { onAudioTrackPositionDiscontinuity(); // We are out of sync so allow currentPositionUs to jump backwards. - SimpleDecoderAudioRenderer.this.allowPositionDiscontinuity = true; + DecoderAudioRenderer.this.allowPositionDiscontinuity = true; } @Override diff --git a/library/core/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java index 730ce15ed4..ca431bf77e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java @@ -20,6 +20,17 @@ package com.google.android.exoplayer2.decoder; */ public abstract class OutputBuffer extends Buffer { + /** Buffer owner. */ + public interface Owner { + + /** + * Releases the buffer. + * + * @param outputBuffer Output buffer. + */ + void releaseOutputBuffer(S outputBuffer); + } + /** * The presentation timestamp for the buffer, in microseconds. */ @@ -34,5 +45,4 @@ public abstract class OutputBuffer extends Buffer { * Releases the output buffer for reuse. Must be called when the buffer is no longer needed. */ public abstract void release(); - } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java index 94d4fd11f0..538cc10344 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java @@ -21,7 +21,10 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.util.Assertions; import java.util.ArrayDeque; -/** Base class for {@link Decoder}s that use their own decode thread. */ +/** + * Base class for {@link Decoder}s that use their own decode thread and decode each input buffer + * immediately into a corresponding output buffer. + */ @SuppressWarnings("UngroupedOverloads") public abstract class SimpleDecoder< I extends DecoderInputBuffer, O extends OutputBuffer, E extends Exception> diff --git a/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java index 84cffc1145..22cff021de 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java @@ -24,11 +24,11 @@ import java.nio.ByteOrder; */ public class SimpleOutputBuffer extends OutputBuffer { - private final SimpleDecoder owner; + private final Owner owner; @Nullable public ByteBuffer data; - public SimpleOutputBuffer(SimpleDecoder owner) { + public SimpleOutputBuffer(Owner owner) { this.owner = owner; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleDecoder.java index 8a1aea179a..c9ddc9dd7e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleDecoder.java @@ -55,7 +55,7 @@ public abstract class SimpleSubtitleDecoder extends @Override protected final SubtitleOutputBuffer createOutputBuffer() { - return new SimpleSubtitleOutputBuffer(this); + return new SimpleSubtitleOutputBuffer(this::releaseOutputBuffer); } @Override @@ -63,11 +63,6 @@ public abstract class SimpleSubtitleDecoder extends return new SubtitleDecoderException("Unexpected decode error", error); } - @Override - protected final void releaseOutputBuffer(SubtitleOutputBuffer buffer) { - super.releaseOutputBuffer(buffer); - } - @SuppressWarnings("ByteBufferBackingArray") @Override @Nullable diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleOutputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleOutputBuffer.java index b2c25631f4..6807661c84 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleOutputBuffer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/SimpleSubtitleOutputBuffer.java @@ -20,12 +20,10 @@ package com.google.android.exoplayer2.text; */ /* package */ final class SimpleSubtitleOutputBuffer extends SubtitleOutputBuffer { - private final SimpleSubtitleDecoder owner; + private final Owner owner; - /** - * @param owner The decoder that owns this buffer. - */ - public SimpleSubtitleOutputBuffer(SimpleSubtitleDecoder owner) { + /** @param owner The decoder that owns this buffer. */ + public SimpleSubtitleOutputBuffer(Owner owner) { super(); this.owner = owner; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java index 1dcdecf95f..63b997a613 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java @@ -65,9 +65,6 @@ public abstract class SubtitleOutputBuffer extends OutputBuffer implements Subti return Assertions.checkNotNull(subtitle).getCues(timeUs - subsampleOffsetUs); } - @Override - public abstract void release(); - @Override public void clear() { super.clear(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/cea/CeaDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/cea/CeaDecoder.java index 2281ee25a1..03a7255538 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/cea/CeaDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/cea/CeaDecoder.java @@ -44,6 +44,7 @@ import java.util.PriorityQueue; private long playbackPositionUs; private long queuedInputBufferCount; + @SuppressWarnings("nullness:methodref.receiver.bound.invalid") public CeaDecoder() { availableInputBuffers = new ArrayDeque<>(); for (int i = 0; i < NUM_INPUT_BUFFERS; i++) { @@ -51,7 +52,7 @@ import java.util.PriorityQueue; } availableOutputBuffers = new ArrayDeque<>(); for (int i = 0; i < NUM_OUTPUT_BUFFERS; i++) { - availableOutputBuffers.add(new CeaOutputBuffer()); + availableOutputBuffers.add(new CeaOutputBuffer(this::releaseOutputBuffer)); } queuedInputBuffers = new PriorityQueue<>(); } @@ -199,11 +200,17 @@ import java.util.PriorityQueue; } } - private final class CeaOutputBuffer extends SubtitleOutputBuffer { + private static final class CeaOutputBuffer extends SubtitleOutputBuffer { + + private Owner owner; + + public CeaOutputBuffer(Owner owner) { + this.owner = owner; + } @Override public final void release() { - releaseOutputBuffer(this); + owner.releaseOutputBuffer(this); } } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java similarity index 99% rename from library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java rename to library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java index fd89c6574e..cc0a9cdd95 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java @@ -26,9 +26,9 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.FormatHolder; +import com.google.android.exoplayer2.decoder.Decoder; import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; -import com.google.android.exoplayer2.decoder.SimpleDecoder; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; import com.google.android.exoplayer2.drm.ExoMediaCrypto; @@ -41,8 +41,8 @@ import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -/** Decodes and renders video using a {@link SimpleDecoder}. */ -public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { +/** Decodes and renders video using a {@link Decoder}. */ +public abstract class DecoderVideoRenderer extends BaseRenderer { /** Decoder reinitialization states. */ @Documented @@ -76,7 +76,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { private Format inputFormat; private Format outputFormat; - private SimpleDecoder< + private Decoder< VideoDecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends VideoDecoderException> @@ -125,7 +125,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { * @param maxDroppedFramesToNotify The maximum number of frames that can be dropped between * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. */ - protected SimpleDecoderVideoRenderer( + protected DecoderVideoRenderer( long allowedJoiningTimeMs, @Nullable Handler eventHandler, @Nullable VideoRendererEventListener eventListener, @@ -490,7 +490,7 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer { * @return The decoder. * @throws VideoDecoderException If an error occurred creating a suitable decoder. */ - protected abstract SimpleDecoder< + protected abstract Decoder< VideoDecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends VideoDecoderException> diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java index 457aa30ade..e78a511e5a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java @@ -23,17 +23,6 @@ import java.nio.ByteBuffer; /** Video decoder output buffer containing video frame data. */ public class VideoDecoderOutputBuffer extends OutputBuffer { - /** Buffer owner. */ - public interface Owner { - - /** - * Releases the buffer. - * - * @param outputBuffer Output buffer. - */ - void releaseOutputBuffer(VideoDecoderOutputBuffer outputBuffer); - } - // LINT.IfChange public static final int COLORSPACE_UNKNOWN = 0; public static final int COLORSPACE_BT601 = 1; @@ -68,14 +57,14 @@ public class VideoDecoderOutputBuffer extends OutputBuffer { */ @Nullable public ByteBuffer supplementalData; - private final Owner owner; + private final Owner owner; /** * Creates VideoDecoderOutputBuffer. * * @param owner Buffer owner. */ - public VideoDecoderOutputBuffer(Owner owner) { + public VideoDecoderOutputBuffer(Owner owner) { this.owner = owner; } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java similarity index 95% rename from library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java rename to library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java index b71f87dbb7..a73e703d51 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java @@ -42,21 +42,21 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; -/** Unit test for {@link SimpleDecoderAudioRenderer}. */ +/** Unit test for {@link DecoderAudioRenderer}. */ @RunWith(AndroidJUnit4.class) -public class SimpleDecoderAudioRendererTest { +public class DecoderAudioRendererTest { private static final Format FORMAT = new Format.Builder().setSampleMimeType(MimeTypes.AUDIO_RAW).build(); @Mock private AudioSink mockAudioSink; - private SimpleDecoderAudioRenderer audioRenderer; + private DecoderAudioRenderer audioRenderer; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); audioRenderer = - new SimpleDecoderAudioRenderer(null, null, mockAudioSink) { + new DecoderAudioRenderer(null, null, mockAudioSink) { @Override @FormatSupport protected int supportsFormatInternal(Format format) { @@ -132,7 +132,7 @@ public class SimpleDecoderAudioRendererTest { @Override protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this); + return new SimpleOutputBuffer(this::releaseOutputBuffer); } @Override diff --git a/library/core/src/test/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java similarity index 98% rename from library/core/src/test/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRendererTest.java rename to library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java index af98fd9ebf..cab0a5b2c8 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java @@ -47,10 +47,10 @@ import org.mockito.junit.MockitoRule; import org.robolectric.annotation.LooperMode; import org.robolectric.shadows.ShadowLooper; -/** Unit test for {@link SimpleDecoderVideoRenderer}. */ +/** Unit test for {@link DecoderVideoRenderer}. */ @LooperMode(LooperMode.Mode.PAUSED) @RunWith(AndroidJUnit4.class) -public final class SimpleDecoderVideoRendererTest { +public final class DecoderVideoRendererTest { @Rule public final MockitoRule mockito = MockitoJUnit.rule(); private static final Format H264_FORMAT = @@ -60,13 +60,13 @@ public final class SimpleDecoderVideoRendererTest { .setHeight(1080) .build(); - private SimpleDecoderVideoRenderer renderer; + private DecoderVideoRenderer renderer; @Mock private VideoRendererEventListener eventListener; @Before public void setUp() { renderer = - new SimpleDecoderVideoRenderer( + new DecoderVideoRenderer( /* allowedJoiningTimeMs= */ 0, new Handler(), eventListener,