Skip to content

Commit cbe99ec

Browse files
committed
Make SimpleDecoderXRenderers work with any Decoder implementation
The restriction that these classes only work with SimpleDecoders is unnecessary. An FfmpegVideoRenderer will not be able to use a SimpleDecoder, because the SimpleDecoder assumption that each input buffer can be decoded immediately into a corresponding output is not true for all video codecs that Ffmpeg supports (e.g., H264 does not have this property). Generalizing SimpleDecoderVideoRenderer to DecoderVideoRenderer will allow FfmpegVideoRenderer to still use the base class, without having to use a SimpleDecoder. This is a preliminary change toward being able to merge a version of #7079. Issue: #2159 PiperOrigin-RevId: 301412344
1 parent a3a3b5b commit cbe99ec

23 files changed

Lines changed: 79 additions & 80 deletions

File tree

RELEASENOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
* Add option to `MergingMediaSource` to adjust the time offsets between
5454
the merged sources
5555
([#6103](https://github.com/google/ExoPlayer/issues/6103)).
56+
* `SimpleDecoderVideoRenderer` and `SimpleDecoderAudioRenderer` renamed to
57+
`DecoderVideoRenderer` and `DecoderAudioRenderer` respectively, and
58+
generalized to work with `Decoder` rather than `SimpleDecoder`.
5659
* Text:
5760
* Parse `<ruby>` and `<rt>` tags in WebVTT subtitles (rendering is coming
5861
later).

extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import com.google.android.exoplayer2.util.MimeTypes;
3232
import com.google.android.exoplayer2.util.TraceUtil;
3333
import com.google.android.exoplayer2.util.Util;
34-
import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer;
34+
import com.google.android.exoplayer2.video.DecoderVideoRenderer;
3535
import com.google.android.exoplayer2.video.VideoDecoderException;
3636
import com.google.android.exoplayer2.video.VideoDecoderInputBuffer;
3737
import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer;
@@ -52,7 +52,7 @@
5252
* VideoDecoderOutputBufferRenderer}, or null.
5353
* </ul>
5454
*/
55-
public class Libgav1VideoRenderer extends SimpleDecoderVideoRenderer {
55+
public class Libgav1VideoRenderer extends DecoderVideoRenderer {
5656

5757
private static final int DEFAULT_NUM_OF_INPUT_BUFFERS = 4;
5858
private static final int DEFAULT_NUM_OF_OUTPUT_BUFFERS = 4;

extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,15 @@
2222
import com.google.android.exoplayer2.audio.AudioProcessor;
2323
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
2424
import com.google.android.exoplayer2.audio.AudioSink;
25+
import com.google.android.exoplayer2.audio.DecoderAudioRenderer;
2526
import com.google.android.exoplayer2.audio.DefaultAudioSink;
26-
import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer;
2727
import com.google.android.exoplayer2.drm.ExoMediaCrypto;
2828
import com.google.android.exoplayer2.util.Assertions;
2929
import com.google.android.exoplayer2.util.MimeTypes;
3030
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
3131

32-
/**
33-
* Decodes and renders audio using FFmpeg.
34-
*/
35-
public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer {
32+
/** Decodes and renders audio using FFmpeg. */
33+
public final class FfmpegAudioRenderer extends DecoderAudioRenderer {
3634

3735
/** The number of input and output buffers. */
3836
private static final int NUM_BUFFERS = 16;

extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ protected DecoderInputBuffer createInputBuffer() {
8888

8989
@Override
9090
protected SimpleOutputBuffer createOutputBuffer() {
91-
return new SimpleOutputBuffer(this);
91+
return new SimpleOutputBuffer(this::releaseOutputBuffer);
9292
}
9393

9494
@Override

extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected DecoderInputBuffer createInputBuffer() {
8585

8686
@Override
8787
protected SimpleOutputBuffer createOutputBuffer() {
88-
return new SimpleOutputBuffer(this);
88+
return new SimpleOutputBuffer(this::releaseOutputBuffer);
8989
}
9090

9191
@Override

extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import com.google.android.exoplayer2.audio.AudioProcessor;
2323
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
2424
import com.google.android.exoplayer2.audio.AudioSink;
25-
import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer;
25+
import com.google.android.exoplayer2.audio.DecoderAudioRenderer;
2626
import com.google.android.exoplayer2.drm.ExoMediaCrypto;
2727
import com.google.android.exoplayer2.extractor.FlacStreamMetadata;
2828
import com.google.android.exoplayer2.util.Assertions;
@@ -32,7 +32,7 @@
3232
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
3333

3434
/** Decodes and renders audio using the native Flac decoder. */
35-
public final class LibflacAudioRenderer extends SimpleDecoderAudioRenderer {
35+
public final class LibflacAudioRenderer extends DecoderAudioRenderer {
3636

3737
private static final int NUM_BUFFERS = 16;
3838

extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
import com.google.android.exoplayer2.Format;
2222
import com.google.android.exoplayer2.audio.AudioProcessor;
2323
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
24-
import com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer;
24+
import com.google.android.exoplayer2.audio.DecoderAudioRenderer;
2525
import com.google.android.exoplayer2.drm.ExoMediaCrypto;
2626
import com.google.android.exoplayer2.util.MimeTypes;
2727

2828
/** Decodes and renders audio using the native Opus decoder. */
29-
public class LibopusAudioRenderer extends SimpleDecoderAudioRenderer {
29+
public class LibopusAudioRenderer extends DecoderAudioRenderer {
3030

3131
/** The number of input and output buffers. */
3232
private static final int NUM_BUFFERS = 16;

extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ protected DecoderInputBuffer createInputBuffer() {
148148

149149
@Override
150150
protected SimpleOutputBuffer createOutputBuffer() {
151-
return new SimpleOutputBuffer(this);
151+
return new SimpleOutputBuffer(this::releaseOutputBuffer);
152152
}
153153

154154
@Override

extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import com.google.android.exoplayer2.drm.ExoMediaCrypto;
3131
import com.google.android.exoplayer2.util.MimeTypes;
3232
import com.google.android.exoplayer2.util.TraceUtil;
33-
import com.google.android.exoplayer2.video.SimpleDecoderVideoRenderer;
33+
import com.google.android.exoplayer2.video.DecoderVideoRenderer;
3434
import com.google.android.exoplayer2.video.VideoDecoderException;
3535
import com.google.android.exoplayer2.video.VideoDecoderInputBuffer;
3636
import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer;
@@ -52,7 +52,7 @@
5252
* VideoDecoderOutputBufferRenderer}, or null.
5353
* </ul>
5454
*/
55-
public class LibvpxVideoRenderer extends SimpleDecoderVideoRenderer {
55+
public class LibvpxVideoRenderer extends DecoderVideoRenderer {
5656

5757
/** The number of input buffers. */
5858
private final int numInputBuffers;

extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxOutputBuffer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public final class VpxOutputBuffer extends VideoDecoderOutputBuffer {
3232
*
3333
* @param owner Buffer owner.
3434
*/
35-
public VpxOutputBuffer(VideoDecoderOutputBuffer.Owner owner) {
35+
public VpxOutputBuffer(Owner<VideoDecoderOutputBuffer> owner) {
3636
super(owner);
3737
}
3838
}

0 commit comments

Comments
 (0)