diff --git a/extensions/av1/proguard-rules.txt b/extensions/av1/proguard-rules.txt index c4ef2286f2..ee6ca93e97 100644 --- a/extensions/av1/proguard-rules.txt +++ b/extensions/av1/proguard-rules.txt @@ -6,6 +6,6 @@ } # Some members of this class are being accessed from native methods. Keep them unobfuscated. --keep class com.google.android.exoplayer2.video.VideoDecoderOutputBuffer { +-keep class com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer { *; } diff --git a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java index 9e31bd6ef5..63bc16d97e 100644 --- a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java +++ b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java @@ -24,15 +24,14 @@ import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoDecoderInputBuffer; -import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import java.nio.ByteBuffer; /** Gav1 decoder. */ @VisibleForTesting(otherwise = PACKAGE_PRIVATE) public final class Gav1Decoder - extends SimpleDecoder { + extends SimpleDecoder { private static final int GAV1_ERROR = 0; private static final int GAV1_OK = 1; @@ -56,9 +55,7 @@ public final class Gav1Decoder public Gav1Decoder( int numInputBuffers, int numOutputBuffers, int initialInputBufferSize, int threads) throws Gav1DecoderException { - super( - new VideoDecoderInputBuffer[numInputBuffers], - new VideoDecoderOutputBuffer[numOutputBuffers]); + super(new DecoderInputBuffer[numInputBuffers], new VideoDecoderOutputBuffer[numOutputBuffers]); if (!Gav1Library.isAvailable()) { throw new Gav1DecoderException("Failed to load decoder native library."); } @@ -86,8 +83,8 @@ public final class Gav1Decoder } @Override - protected VideoDecoderInputBuffer createInputBuffer() { - return new VideoDecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT); + protected DecoderInputBuffer createInputBuffer() { + return new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT); } @Override @@ -98,7 +95,7 @@ public final class Gav1Decoder @Override @Nullable protected Gav1DecoderException decode( - VideoDecoderInputBuffer inputBuffer, VideoDecoderOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, VideoDecoderOutputBuffer outputBuffer, boolean reset) { ByteBuffer inputData = Util.castNonNull(inputBuffer.data); int inputSize = inputData.limit(); if (gav1Decode(gav1DecoderContext, inputData, inputSize) == GAV1_ERROR) { 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 fc7d6b6091..443f1d1e7c 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 @@ -25,11 +25,11 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.CryptoConfig; import com.google.android.exoplayer2.decoder.DecoderReuseEvaluation; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; 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.DecoderVideoRenderer; -import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.video.VideoRendererEventListener; /** Decodes and renders video using libgav1 decoder. */ diff --git a/extensions/av1/src/main/jni/gav1_jni.cc b/extensions/av1/src/main/jni/gav1_jni.cc index d2f6532fac..ebce9c9b5a 100644 --- a/extensions/av1/src/main/jni/gav1_jni.cc +++ b/extensions/av1/src/main/jni/gav1_jni.cc @@ -537,7 +537,7 @@ DECODER_FUNC(jlong, gav1Init, jint threads) { // Populate JNI References. const jclass outputBufferClass = env->FindClass( - "com/google/android/exoplayer2/video/VideoDecoderOutputBuffer"); + "com/google/android/exoplayer2/decoder/VideoDecoderOutputBuffer"); context->decoder_private_field = env->GetFieldID(outputBufferClass, "decoderPrivate", "I"); context->output_mode_field = env->GetFieldID(outputBufferClass, "mode", "I"); diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioDecoder.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioDecoder.java index 5ab47293c3..b042c36a10 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioDecoder.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioDecoder.java @@ -20,7 +20,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; 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.decoder.SimpleDecoderOutputBuffer; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.ParsableByteArray; @@ -30,7 +30,7 @@ import java.util.List; /** FFmpeg audio decoder. */ /* package */ final class FfmpegAudioDecoder - extends SimpleDecoder { + extends SimpleDecoder { // Output buffer sizes when decoding PCM mu-law streams, which is the maximum FFmpeg outputs. private static final int OUTPUT_BUFFER_SIZE_16BIT = 65536; @@ -56,7 +56,7 @@ import java.util.List; int initialInputBufferSize, boolean outputFloat) throws FfmpegDecoderException { - super(new DecoderInputBuffer[numInputBuffers], new SimpleOutputBuffer[numOutputBuffers]); + super(new DecoderInputBuffer[numInputBuffers], new SimpleDecoderOutputBuffer[numOutputBuffers]); if (!FfmpegLibrary.isAvailable()) { throw new FfmpegDecoderException("Failed to load decoder native libraries."); } @@ -86,8 +86,8 @@ import java.util.List; } @Override - protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this::releaseOutputBuffer); + protected SimpleDecoderOutputBuffer createOutputBuffer() { + return new SimpleDecoderOutputBuffer(this::releaseOutputBuffer); } @Override @@ -98,7 +98,7 @@ import java.util.List; @Override @Nullable protected FfmpegDecoderException decode( - DecoderInputBuffer inputBuffer, SimpleOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, SimpleDecoderOutputBuffer outputBuffer, boolean reset) { if (reset) { nativeContext = ffmpegReset(nativeContext, extraData); if (nativeContext == 0) { diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java index 7cffc3d6c4..e074b87a21 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java @@ -27,12 +27,12 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.CryptoConfig; import com.google.android.exoplayer2.decoder.Decoder; +import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderReuseEvaluation; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.util.TraceUtil; import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.video.DecoderVideoRenderer; -import com.google.android.exoplayer2.video.VideoDecoderInputBuffer; -import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.video.VideoRendererEventListener; // TODO: Remove the NOTE below. @@ -94,7 +94,7 @@ public final class FfmpegVideoRenderer extends DecoderVideoRenderer { @SuppressWarnings("nullness:return") @Override - protected Decoder + protected Decoder createDecoder(Format format, @Nullable CryptoConfig cryptoConfig) throws FfmpegDecoderException { TraceUtil.beginSection("createFfmpegVideoDecoder"); 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 f6c5f6a6a7..f2ac5f40e8 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 @@ -23,7 +23,7 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.ParserException; 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.decoder.SimpleDecoderOutputBuffer; import com.google.android.exoplayer2.extractor.FlacStreamMetadata; import com.google.android.exoplayer2.util.Util; import java.io.IOException; @@ -33,7 +33,7 @@ import java.util.List; /** Flac decoder. */ @VisibleForTesting(otherwise = PACKAGE_PRIVATE) public final class FlacDecoder - extends SimpleDecoder { + extends SimpleDecoder { private final FlacStreamMetadata streamMetadata; private final FlacDecoderJni decoderJni; @@ -55,7 +55,7 @@ public final class FlacDecoder int maxInputBufferSize, List initializationData) throws FlacDecoderException { - super(new DecoderInputBuffer[numInputBuffers], new SimpleOutputBuffer[numOutputBuffers]); + super(new DecoderInputBuffer[numInputBuffers], new SimpleDecoderOutputBuffer[numOutputBuffers]); if (initializationData.size() != 1) { throw new FlacDecoderException("Initialization data must be of length 1"); } @@ -86,8 +86,8 @@ public final class FlacDecoder } @Override - protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this::releaseOutputBuffer); + protected SimpleDecoderOutputBuffer createOutputBuffer() { + return new SimpleDecoderOutputBuffer(this::releaseOutputBuffer); } @Override @@ -98,7 +98,7 @@ public final class FlacDecoder @Override @Nullable protected FlacDecoderException decode( - DecoderInputBuffer inputBuffer, SimpleOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, SimpleDecoderOutputBuffer outputBuffer, boolean reset) { if (reset) { decoderJni.flush(); } diff --git a/extensions/opus/proguard-rules.txt b/extensions/opus/proguard-rules.txt index 2a380e23dd..89eea5ffdc 100644 --- a/extensions/opus/proguard-rules.txt +++ b/extensions/opus/proguard-rules.txt @@ -6,6 +6,6 @@ } # Some members of this class are being accessed from native methods. Keep them unobfuscated. --keep class com.google.android.exoplayer2.decoder.SimpleOutputBuffer { +-keep class com.google.android.exoplayer2.decoder.SimpleDecoderOutputBuffer { *; } 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 2cea08df14..56617b7d13 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 @@ -26,7 +26,7 @@ import com.google.android.exoplayer2.decoder.CryptoException; import com.google.android.exoplayer2.decoder.CryptoInfo; 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.decoder.SimpleDecoderOutputBuffer; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Util; import java.nio.ByteBuffer; @@ -35,7 +35,7 @@ import java.util.List; /** Opus decoder. */ @VisibleForTesting(otherwise = PACKAGE_PRIVATE) public final class OpusDecoder - extends SimpleDecoder { + extends SimpleDecoder { private static final int NO_ERROR = 0; private static final int DECODE_ERROR = -1; @@ -73,7 +73,7 @@ public final class OpusDecoder @Nullable CryptoConfig cryptoConfig, boolean outputFloat) throws OpusDecoderException { - super(new DecoderInputBuffer[numInputBuffers], new SimpleOutputBuffer[numOutputBuffers]); + super(new DecoderInputBuffer[numInputBuffers], new SimpleDecoderOutputBuffer[numOutputBuffers]); if (!OpusLibrary.isAvailable()) { throw new OpusDecoderException("Failed to load decoder native libraries"); } @@ -147,8 +147,8 @@ public final class OpusDecoder } @Override - protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this::releaseOutputBuffer); + protected SimpleDecoderOutputBuffer createOutputBuffer() { + return new SimpleDecoderOutputBuffer(this::releaseOutputBuffer); } @Override @@ -159,7 +159,7 @@ public final class OpusDecoder @Override @Nullable protected OpusDecoderException decode( - DecoderInputBuffer inputBuffer, SimpleOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, SimpleDecoderOutputBuffer outputBuffer, boolean reset) { if (reset) { opusReset(nativeDecoderContext); // When seeking to 0, skip number of samples as specified in opus header. When seeking to @@ -239,14 +239,14 @@ public final class OpusDecoder long timeUs, ByteBuffer inputBuffer, int inputSize, - SimpleOutputBuffer outputBuffer); + SimpleDecoderOutputBuffer outputBuffer); private native int opusSecureDecode( long decoder, long timeUs, ByteBuffer inputBuffer, int inputSize, - SimpleOutputBuffer outputBuffer, + SimpleDecoderOutputBuffer outputBuffer, int sampleRate, @Nullable CryptoConfig mediaCrypto, int inputMode, diff --git a/extensions/opus/src/main/jni/opus_jni.cc b/extensions/opus/src/main/jni/opus_jni.cc index 96c2838039..49b7675f97 100644 --- a/extensions/opus/src/main/jni/opus_jni.cc +++ b/extensions/opus/src/main/jni/opus_jni.cc @@ -87,7 +87,7 @@ DECODER_FUNC(jlong, opusInit, jint sampleRate, jint channelCount, // Populate JNI References. const jclass outputBufferClass = env->FindClass( - "com/google/android/exoplayer2/decoder/SimpleOutputBuffer"); + "com/google/android/exoplayer2/decoder/SimpleDecoderOutputBuffer"); outputBufferInit = env->GetMethodID(outputBufferClass, "init", "(JI)Ljava/nio/ByteBuffer;"); diff --git a/extensions/vp9/proguard-rules.txt b/extensions/vp9/proguard-rules.txt index 56fca12d19..db074ae7a2 100644 --- a/extensions/vp9/proguard-rules.txt +++ b/extensions/vp9/proguard-rules.txt @@ -6,7 +6,7 @@ } # Some members of this class are being accessed from native methods. Keep them unobfuscated. --keep class com.google.android.exoplayer2.video.VideoDecoderOutputBuffer { +-keep class com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer { *; } 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 218b3b779e..6edf129ff5 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 @@ -26,10 +26,10 @@ import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.decoder.CryptoConfig; import com.google.android.exoplayer2.decoder.DecoderReuseEvaluation; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; import com.google.android.exoplayer2.video.DecoderVideoRenderer; -import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.video.VideoRendererEventListener; /** Decodes and renders video using the native VP9 decoder. */ diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java index 78b9c96e37..47b51e37ca 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java @@ -26,16 +26,15 @@ import com.google.android.exoplayer2.decoder.CryptoException; import com.google.android.exoplayer2.decoder.CryptoInfo; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoDecoderInputBuffer; -import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import java.nio.ByteBuffer; /** Vpx decoder. */ @VisibleForTesting(otherwise = PACKAGE_PRIVATE) public final class VpxDecoder - extends SimpleDecoder { + extends SimpleDecoder { // These constants should match the codes returned from vpxDecode and vpxSecureDecode functions in // https://github.com/google/ExoPlayer/blob/release-v2/extensions/vp9/src/main/jni/vpx_jni.cc. @@ -68,9 +67,7 @@ public final class VpxDecoder @Nullable CryptoConfig cryptoConfig, int threads) throws VpxDecoderException { - super( - new VideoDecoderInputBuffer[numInputBuffers], - new VideoDecoderOutputBuffer[numOutputBuffers]); + super(new DecoderInputBuffer[numInputBuffers], new VideoDecoderOutputBuffer[numOutputBuffers]); if (!VpxLibrary.isAvailable()) { throw new VpxDecoderException("Failed to load decoder native libraries."); } @@ -92,8 +89,8 @@ public final class VpxDecoder } @Override - protected VideoDecoderInputBuffer createInputBuffer() { - return new VideoDecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT); + protected DecoderInputBuffer createInputBuffer() { + return new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT); } @Override @@ -119,7 +116,7 @@ public final class VpxDecoder @Override @Nullable protected VpxDecoderException decode( - VideoDecoderInputBuffer inputBuffer, VideoDecoderOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, VideoDecoderOutputBuffer outputBuffer, boolean reset) { if (reset && lastSupplementalData != null) { // Don't propagate supplemental data across calls to flush the decoder. lastSupplementalData.clear(); diff --git a/extensions/vp9/src/main/jni/vpx_jni.cc b/extensions/vp9/src/main/jni/vpx_jni.cc index 3f4c89dc7b..eca4cd6721 100644 --- a/extensions/vp9/src/main/jni/vpx_jni.cc +++ b/extensions/vp9/src/main/jni/vpx_jni.cc @@ -479,7 +479,7 @@ DECODER_FUNC(jlong, vpxInit, jboolean disableLoopFilter, // Populate JNI References. const jclass outputBufferClass = env->FindClass( - "com/google/android/exoplayer2/video/VideoDecoderOutputBuffer"); + "com/google/android/exoplayer2/decoder/VideoDecoderOutputBuffer"); initForYuvFrame = env->GetMethodID(outputBufferClass, "initForYuvFrame", "(IIIII)Z"); initForPrivateFrame = diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java index ed97f09d3f..b6aa1eaf6d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java @@ -44,7 +44,7 @@ import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderException; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderReuseEvaluation; -import com.google.android.exoplayer2.decoder.SimpleOutputBuffer; +import com.google.android.exoplayer2.decoder.SimpleDecoderOutputBuffer; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; import com.google.android.exoplayer2.source.SampleStream.ReadDataResult; @@ -82,7 +82,10 @@ import java.lang.annotation.RetentionPolicy; */ public abstract class DecoderAudioRenderer< T extends - Decoder> + Decoder< + DecoderInputBuffer, + ? extends SimpleDecoderOutputBuffer, + ? extends DecoderException>> extends BaseRenderer implements MediaClock { private static final String TAG = "DecoderAudioRenderer"; @@ -124,7 +127,7 @@ public abstract class DecoderAudioRenderer< @Nullable private T decoder; @Nullable private DecoderInputBuffer inputBuffer; - @Nullable private SimpleOutputBuffer outputBuffer; + @Nullable private SimpleDecoderOutputBuffer outputBuffer; @Nullable private DrmSession decoderDrmSession; @Nullable private DrmSession sourceDrmSession; @@ -456,6 +459,7 @@ public abstract class DecoderAudioRenderer< return false; } inputBuffer.flip(); + inputBuffer.format = inputFormat; onQueueInputBuffer(inputBuffer); decoder.queueInputBuffer(inputBuffer); decoderReceivedBuffers = true; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java index 2c64e6c92f..e0e49d478b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/DecoderVideoRenderer.java @@ -42,6 +42,7 @@ import com.google.android.exoplayer2.decoder.DecoderCounters; import com.google.android.exoplayer2.decoder.DecoderException; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderReuseEvaluation; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.drm.DrmSession; import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException; import com.google.android.exoplayer2.source.SampleStream.ReadDataResult; @@ -108,10 +109,10 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { @Nullable private Decoder< - VideoDecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends DecoderException> + DecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends DecoderException> decoder; - private VideoDecoderInputBuffer inputBuffer; + private DecoderInputBuffer inputBuffer; private VideoDecoderOutputBuffer outputBuffer; @VideoOutputMode private int outputMode; @Nullable private Object output; @@ -415,7 +416,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { * * @param buffer The buffer that will be queued. */ - protected void onQueueInputBuffer(VideoDecoderInputBuffer buffer) { + protected void onQueueInputBuffer(DecoderInputBuffer buffer) { // Do nothing. } @@ -536,7 +537,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { * @throws DecoderException If an error occurred creating a suitable decoder. */ protected abstract Decoder< - VideoDecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends DecoderException> + DecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends DecoderException> createDecoder(Format format, @Nullable CryptoConfig cryptoConfig) throws DecoderException; /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderGLSurfaceView.java b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderGLSurfaceView.java index f47a76760f..d7d90c5e02 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderGLSurfaceView.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderGLSurfaceView.java @@ -20,6 +20,7 @@ import android.opengl.GLES20; import android.opengl.GLSurfaceView; import android.util.AttributeSet; import androidx.annotation.Nullable; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.GlUtil; import java.nio.ByteBuffer; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderInputBuffer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderInputBuffer.java deleted file mode 100644 index c496dbabde..0000000000 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderInputBuffer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.google.android.exoplayer2.video; - -import androidx.annotation.Nullable; -import com.google.android.exoplayer2.Format; -import com.google.android.exoplayer2.decoder.DecoderInputBuffer; - -/** Input buffer to a video decoder. */ -public class VideoDecoderInputBuffer extends DecoderInputBuffer { - - @Nullable public Format format; - - /** - * Creates a new instance. - * - * @param bufferReplacementMode Determines the behavior of {@link #ensureSpaceForWrite(int)}. One - * of {@link #BUFFER_REPLACEMENT_MODE_DISABLED}, {@link #BUFFER_REPLACEMENT_MODE_NORMAL} and - * {@link #BUFFER_REPLACEMENT_MODE_DIRECT}. - */ - public VideoDecoderInputBuffer(@BufferReplacementMode int bufferReplacementMode) { - super(bufferReplacementMode); - } - - /** - * Creates a new instance. - * - * @param bufferReplacementMode Determines the behavior of {@link #ensureSpaceForWrite(int)}. One - * of {@link #BUFFER_REPLACEMENT_MODE_DISABLED}, {@link #BUFFER_REPLACEMENT_MODE_NORMAL} and - * {@link #BUFFER_REPLACEMENT_MODE_DIRECT}. - * @param paddingSize If non-zero, {@link #ensureSpaceForWrite(int)} will ensure that the buffer - * is this number of bytes larger than the requested length. This can be useful for decoders - * that consume data in fixed size blocks, for efficiency. Setting the padding size to the - * decoder's fixed read size is necessary to prevent such a decoder from trying to read beyond - * the end of the buffer. - */ - public VideoDecoderInputBuffer( - @BufferReplacementMode int bufferReplacementMode, int paddingSize) { - super(bufferReplacementMode, paddingSize); - } -} diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBufferRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBufferRenderer.java index c57794f454..921922f961 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBufferRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBufferRenderer.java @@ -15,6 +15,8 @@ */ package com.google.android.exoplayer2.video; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; + /** Renders the {@link VideoDecoderOutputBuffer}. */ public interface VideoDecoderOutputBufferRenderer { diff --git a/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java index 23161aef05..95bd372aa3 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java @@ -34,7 +34,7 @@ import com.google.android.exoplayer2.decoder.CryptoConfig; import com.google.android.exoplayer2.decoder.DecoderException; 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.decoder.SimpleDecoderOutputBuffer; import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.testutil.FakeSampleStream; @@ -133,10 +133,10 @@ public class DecoderAudioRendererTest { } private static final class FakeDecoder - extends SimpleDecoder { + extends SimpleDecoder { public FakeDecoder() { - super(new DecoderInputBuffer[1], new SimpleOutputBuffer[1]); + super(new DecoderInputBuffer[1], new SimpleDecoderOutputBuffer[1]); } @Override @@ -150,8 +150,8 @@ public class DecoderAudioRendererTest { } @Override - protected SimpleOutputBuffer createOutputBuffer() { - return new SimpleOutputBuffer(this::releaseOutputBuffer); + protected SimpleDecoderOutputBuffer createOutputBuffer() { + return new SimpleDecoderOutputBuffer(this::releaseOutputBuffer); } @Override @@ -161,7 +161,7 @@ public class DecoderAudioRendererTest { @Override protected DecoderException decode( - DecoderInputBuffer inputBuffer, SimpleOutputBuffer outputBuffer, boolean reset) { + DecoderInputBuffer inputBuffer, SimpleDecoderOutputBuffer outputBuffer, boolean reset) { if (inputBuffer.isEndOfStream()) { outputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java index fcaf93bd7e..97a6ccda98 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java @@ -38,6 +38,7 @@ import com.google.android.exoplayer2.decoder.CryptoConfig; import com.google.android.exoplayer2.decoder.DecoderException; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; +import com.google.android.exoplayer2.decoder.VideoDecoderOutputBuffer; import com.google.android.exoplayer2.drm.DrmSessionEventListener; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.testutil.FakeSampleStream; @@ -108,7 +109,7 @@ public final class DecoderVideoRendererTest { } @Override - protected void onQueueInputBuffer(VideoDecoderInputBuffer buffer) { + protected void onQueueInputBuffer(DecoderInputBuffer buffer) { // Decoding is done on a background thread we have no control about from the test. // Ensure the background calls are predictably serialized by waiting for them to finish: // 1. Register queued input buffers here. @@ -125,17 +126,16 @@ public final class DecoderVideoRendererTest { @Override protected SimpleDecoder< - VideoDecoderInputBuffer, + DecoderInputBuffer, ? extends VideoDecoderOutputBuffer, ? extends DecoderException> createDecoder(Format format, @Nullable CryptoConfig cryptoConfig) { return new SimpleDecoder< - VideoDecoderInputBuffer, VideoDecoderOutputBuffer, DecoderException>( - new VideoDecoderInputBuffer[10], new VideoDecoderOutputBuffer[10]) { + DecoderInputBuffer, VideoDecoderOutputBuffer, DecoderException>( + new DecoderInputBuffer[10], new VideoDecoderOutputBuffer[10]) { @Override - protected VideoDecoderInputBuffer createInputBuffer() { - return new VideoDecoderInputBuffer( - DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT) { + protected DecoderInputBuffer createInputBuffer() { + return new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DIRECT) { @Override public void clear() { super.clear(); @@ -157,7 +157,7 @@ public final class DecoderVideoRendererTest { @Nullable @Override protected DecoderException decode( - VideoDecoderInputBuffer inputBuffer, + DecoderInputBuffer inputBuffer, VideoDecoderOutputBuffer outputBuffer, boolean reset) { outputBuffer.init(inputBuffer.timeUs, outputMode, /* supplementalData= */ null); diff --git a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java index 71b3a68d19..d10f24184c 100644 --- a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java +++ b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderInputBuffer.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.decoder; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.Format; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -73,6 +74,9 @@ public class DecoderInputBuffer extends Buffer { /** Allows buffer replacement using {@link ByteBuffer#allocateDirect(int)}. */ public static final int BUFFER_REPLACEMENT_MODE_DIRECT = 2; + /** The {@link Format}. */ + @Nullable public Format format; + /** {@link CryptoInfo} for encrypted data. */ public final CryptoInfo cryptoInfo; diff --git a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderOutputBuffer.java similarity index 91% rename from library/decoder/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java rename to library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderOutputBuffer.java index bce21cca9c..897f251cc1 100644 --- a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/OutputBuffer.java +++ b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/DecoderOutputBuffer.java @@ -16,10 +16,10 @@ package com.google.android.exoplayer2.decoder; /** Output buffer decoded by a {@link Decoder}. */ -public abstract class OutputBuffer extends Buffer { +public abstract class DecoderOutputBuffer extends Buffer { /** Buffer owner. */ - public interface Owner { + public interface Owner { /** * Releases the buffer. diff --git a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java index 1886cdf9f4..4ac32f685f 100644 --- a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java +++ b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoder.java @@ -27,7 +27,7 @@ import java.util.ArrayDeque; */ @SuppressWarnings("UngroupedOverloads") public abstract class SimpleDecoder< - I extends DecoderInputBuffer, O extends OutputBuffer, E extends DecoderException> + I extends DecoderInputBuffer, O extends DecoderOutputBuffer, E extends DecoderException> implements Decoder { private final Thread decodeThread; diff --git a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoderOutputBuffer.java similarity index 88% rename from library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java rename to library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoderOutputBuffer.java index 81561701e2..cdc3530661 100644 --- a/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleOutputBuffer.java +++ b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/SimpleDecoderOutputBuffer.java @@ -20,13 +20,13 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; /** Buffer for {@link SimpleDecoder} output. */ -public class SimpleOutputBuffer extends OutputBuffer { +public class SimpleDecoderOutputBuffer extends DecoderOutputBuffer { - private final Owner owner; + private final Owner owner; @Nullable public ByteBuffer data; - public SimpleOutputBuffer(Owner owner) { + public SimpleDecoderOutputBuffer(Owner owner) { this.owner = owner; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/VideoDecoderOutputBuffer.java similarity index 97% rename from library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java rename to library/decoder/src/main/java/com/google/android/exoplayer2/decoder/VideoDecoderOutputBuffer.java index 0386b7a17c..fde0a73d8b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/VideoDecoderOutputBuffer.java +++ b/library/decoder/src/main/java/com/google/android/exoplayer2/decoder/VideoDecoderOutputBuffer.java @@ -13,16 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.android.exoplayer2.video; +package com.google.android.exoplayer2.decoder; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; -import com.google.android.exoplayer2.decoder.OutputBuffer; import java.nio.ByteBuffer; /** Video decoder output buffer containing video frame data. */ -public class VideoDecoderOutputBuffer extends OutputBuffer { +public class VideoDecoderOutputBuffer extends DecoderOutputBuffer { public static final int COLORSPACE_UNKNOWN = 0; public static final int COLORSPACE_BT601 = 1; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java b/library/extractor/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java index 7d9c8d9c32..898551b84d 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/text/SubtitleOutputBuffer.java @@ -17,12 +17,12 @@ package com.google.android.exoplayer2.text; import androidx.annotation.Nullable; import com.google.android.exoplayer2.Format; -import com.google.android.exoplayer2.decoder.OutputBuffer; +import com.google.android.exoplayer2.decoder.DecoderOutputBuffer; import com.google.android.exoplayer2.util.Assertions; import java.util.List; /** Base class for {@link SubtitleDecoder} output buffers. */ -public abstract class SubtitleOutputBuffer extends OutputBuffer implements Subtitle { +public abstract class SubtitleOutputBuffer extends DecoderOutputBuffer implements Subtitle { @Nullable private Subtitle subtitle; private long subsampleOffsetUs;