diff --git a/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java b/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java
index 4a6248a9ea..c99b1c9bea 100644
--- a/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java
+++ b/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java
@@ -22,10 +22,10 @@ import com.google.android.exoplayer2.DefaultTrackSelector.TrackInfo;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Format;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.TrackGroup;
import com.google.android.exoplayer2.TrackGroupArray;
-import com.google.android.exoplayer2.TrackRenderer;
import com.google.android.exoplayer2.TrackSelection;
import com.google.android.exoplayer2.drm.StreamingDrmSessionManager;
import com.google.android.exoplayer2.extractor.ExtractorMediaSource;
@@ -130,7 +130,7 @@ public class EventLogger implements ExoPlayer.EventListener, SimpleExoPlayer.Deb
TrackGroup trackGroup = trackGroups.get(groupIndex);
for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) {
String status = getTrackStatusString(false);
- String formatSupport = getFormatSupportString(TrackRenderer.FORMAT_UNSUPPORTED_TYPE);
+ String formatSupport = getFormatSupportString(Renderer.FORMAT_UNSUPPORTED_TYPE);
Log.d(TAG, " " + status + " Track:" + trackIndex + ", "
+ getFormatString(trackGroup.getFormat(trackIndex))
+ ", supported=" + formatSupport);
@@ -291,13 +291,13 @@ public class EventLogger implements ExoPlayer.EventListener, SimpleExoPlayer.Deb
private static String getFormatSupportString(int formatSupport) {
switch (formatSupport) {
- case TrackRenderer.FORMAT_HANDLED:
+ case Renderer.FORMAT_HANDLED:
return "YES";
- case TrackRenderer.FORMAT_EXCEEDS_CAPABILITIES:
+ case Renderer.FORMAT_EXCEEDS_CAPABILITIES:
return "NO_EXCEEDS_CAPABILITIES";
- case TrackRenderer.FORMAT_UNSUPPORTED_SUBTYPE:
+ case Renderer.FORMAT_UNSUPPORTED_SUBTYPE:
return "NO_UNSUPPORTED_TYPE";
- case TrackRenderer.FORMAT_UNSUPPORTED_TYPE:
+ case Renderer.FORMAT_UNSUPPORTED_TYPE:
return "NO";
default:
return "?";
@@ -309,11 +309,11 @@ public class EventLogger implements ExoPlayer.EventListener, SimpleExoPlayer.Deb
return "N/A";
}
switch (adaptiveSupport) {
- case TrackRenderer.ADAPTIVE_SEAMLESS:
+ case Renderer.ADAPTIVE_SEAMLESS:
return "YES";
- case TrackRenderer.ADAPTIVE_NOT_SEAMLESS:
+ case Renderer.ADAPTIVE_NOT_SEAMLESS:
return "YES_NOT_SEAMLESS";
- case TrackRenderer.ADAPTIVE_NOT_SUPPORTED:
+ case Renderer.ADAPTIVE_NOT_SUPPORTED:
return "NO";
default:
return "?";
diff --git a/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java
index b043b9a39b..3db0894b8e 100644
--- a/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java
+++ b/demo/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java
@@ -25,7 +25,7 @@ import com.google.android.exoplayer2.DefaultTrackSelector.TrackInfo;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
-import com.google.android.exoplayer2.MediaCodecTrackRenderer.DecoderInitializationException;
+import com.google.android.exoplayer2.MediaCodecRenderer.DecoderInitializationException;
import com.google.android.exoplayer2.MediaCodecUtil.DecoderQueryException;
import com.google.android.exoplayer2.MediaSource;
import com.google.android.exoplayer2.SimpleExoPlayer;
diff --git a/demo/src/main/java/com/google/android/exoplayer2/demo/TrackSelectionHelper.java b/demo/src/main/java/com/google/android/exoplayer2/demo/TrackSelectionHelper.java
index 3ff57ba7f6..00778708c7 100644
--- a/demo/src/main/java/com/google/android/exoplayer2/demo/TrackSelectionHelper.java
+++ b/demo/src/main/java/com/google/android/exoplayer2/demo/TrackSelectionHelper.java
@@ -18,9 +18,9 @@ package com.google.android.exoplayer2.demo;
import com.google.android.exoplayer2.DefaultTrackSelector;
import com.google.android.exoplayer2.DefaultTrackSelector.TrackInfo;
import com.google.android.exoplayer2.Format;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.TrackGroup;
import com.google.android.exoplayer2.TrackGroupArray;
-import com.google.android.exoplayer2.TrackRenderer;
import com.google.android.exoplayer2.TrackSelection;
import com.google.android.exoplayer2.util.MimeTypes;
@@ -45,7 +45,7 @@ import java.util.Locale;
DialogInterface.OnClickListener {
private final DefaultTrackSelector selector;
-
+
private TrackInfo trackInfo;
private int rendererIndex;
private TrackGroupArray trackGroups;
@@ -81,7 +81,7 @@ import java.util.Locale;
trackGroupsAdaptive = new boolean[trackGroups.length];
for (int i = 0; i < trackGroups.length; i++) {
trackGroupsAdaptive[i] = trackInfo.getAdaptiveSupport(rendererIndex, i, false)
- != TrackRenderer.ADAPTIVE_NOT_SUPPORTED;
+ != Renderer.ADAPTIVE_NOT_SUPPORTED;
}
isDisabled = selector.getRendererDisabled(rendererIndex);
override = selector.hasSelectionOverride(rendererIndex, trackGroups)
@@ -133,7 +133,7 @@ import java.util.Locale;
trackViewLayoutId, root, false);
trackView.setText(buildTrackName(group.getFormat(trackIndex)));
if (trackInfo.getTrackFormatSupport(rendererIndex, groupIndex, trackIndex)
- == TrackRenderer.FORMAT_HANDLED) {
+ == Renderer.FORMAT_HANDLED) {
haveSupportedTracks = true;
trackView.setTag(Pair.create(groupIndex, trackIndex));
trackView.setOnClickListener(this);
diff --git a/extensions/ffmpeg/README.md b/extensions/ffmpeg/README.md
index 0ae576ba1c..f0ce07bdf7 100644
--- a/extensions/ffmpeg/README.md
+++ b/extensions/ffmpeg/README.md
@@ -1,11 +1,11 @@
-# FfmpegAudioTrackRenderer #
+# FfmpegAudioRenderer #
## Description ##
-The FFmpeg extension is a [TrackRenderer][] implementation that uses FFmpeg to
-decode audio.
+The FFmpeg extension is a [Renderer][] implementation that uses FFmpeg to decode
+audio.
-[TrackRenderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/TrackRenderer.html
+[Renderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Renderer.html
## Build instructions ##
diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
similarity index 84%
rename from extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java
rename to extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
index d9f6d6a9b8..73f7afebfb 100644
--- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java
+++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
@@ -15,12 +15,12 @@
*/
package com.google.android.exoplayer2.ext.ffmpeg;
-import com.google.android.exoplayer2.AudioTrackRendererEventListener;
+import com.google.android.exoplayer2.AudioRendererEventListener;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.audio.AudioCapabilities;
import com.google.android.exoplayer2.audio.AudioTrack;
-import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer;
+import com.google.android.exoplayer2.extensions.AudioDecoderRenderer;
import com.google.android.exoplayer2.util.MimeTypes;
import android.os.Handler;
@@ -28,14 +28,14 @@ import android.os.Handler;
/**
* Decodes and renders audio using FFmpeg.
*/
-public final class FfmpegAudioTrackRenderer extends AudioDecoderTrackRenderer {
+public final class FfmpegAudioRenderer extends AudioDecoderRenderer {
private static final int NUM_BUFFERS = 16;
private static final int INITIAL_INPUT_BUFFER_SIZE = 960 * 6;
private FfmpegDecoder decoder;
- public FfmpegAudioTrackRenderer() {
+ public FfmpegAudioRenderer() {
this(null, null);
}
@@ -44,8 +44,7 @@ public final class FfmpegAudioTrackRenderer extends AudioDecoderTrackRenderer {
* null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required.
*/
- public FfmpegAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener) {
+ public FfmpegAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener) {
super(eventHandler, eventListener);
}
@@ -57,9 +56,8 @@ public final class FfmpegAudioTrackRenderer extends AudioDecoderTrackRenderer {
* default capabilities (no encoded audio passthrough support) should be assumed.
* @param streamType The type of audio stream for the {@link AudioTrack}.
*/
- public FfmpegAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities,
- int streamType) {
+ public FfmpegAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener,
+ AudioCapabilities audioCapabilities, int streamType) {
super(eventHandler, eventListener, audioCapabilities, streamType);
}
diff --git a/extensions/flac/README.md b/extensions/flac/README.md
index c85c8f51d4..2f3b067d6f 100644
--- a/extensions/flac/README.md
+++ b/extensions/flac/README.md
@@ -2,11 +2,11 @@
## Description ##
-The Flac Extension is a [TrackRenderer][] implementation that helps you bundle
+The Flac Extension is a [Renderer][] implementation that helps you bundle
libFLAC (the Flac decoding library) into your app and use it along with
ExoPlayer to play Flac audio on Android devices.
-[TrackRenderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/TrackRenderer.html
+[Renderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Renderer.html
## Build Instructions ##
diff --git a/extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java b/extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java
index c327b5d822..6c0a51677f 100644
--- a/extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java
+++ b/extensions/flac/src/androidTest/java/com/google/android/exoplayer2/ext/flac/FlacPlaybackTest.java
@@ -20,7 +20,7 @@ import com.google.android.exoplayer2.DefaultTrackSelector;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
-import com.google.android.exoplayer2.TrackRenderer;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.extractor.ExtractorMediaSource;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
@@ -31,7 +31,7 @@ import android.os.Looper;
import android.test.InstrumentationTestCase;
/**
- * Playback tests using {@link LibflacAudioTrackRenderer}.
+ * Playback tests using {@link LibflacAudioRenderer}.
*/
public class FlacPlaybackTest extends InstrumentationTestCase {
@@ -71,10 +71,10 @@ public class FlacPlaybackTest extends InstrumentationTestCase {
@Override
public void run() {
Looper.prepare();
- LibflacAudioTrackRenderer audioRenderer = new LibflacAudioTrackRenderer();
+ LibflacAudioRenderer audioRenderer = new LibflacAudioRenderer();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(
new DefaultTrackSelectionPolicy(), null);
- player = ExoPlayerFactory.newInstance(new TrackRenderer[] {audioRenderer}, trackSelector);
+ player = ExoPlayerFactory.newInstance(new Renderer[] {audioRenderer}, trackSelector);
player.addListener(this);
ExtractorMediaSource mediaSource = new ExtractorMediaSource(
uri,
diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
similarity index 82%
rename from extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java
rename to extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
index de2ff7690d..bee5ef2866 100644
--- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java
+++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
@@ -15,11 +15,11 @@
*/
package com.google.android.exoplayer2.ext.flac;
-import com.google.android.exoplayer2.AudioTrackRendererEventListener;
+import com.google.android.exoplayer2.AudioRendererEventListener;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.audio.AudioCapabilities;
import com.google.android.exoplayer2.audio.AudioTrack;
-import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer;
+import com.google.android.exoplayer2.extensions.AudioDecoderRenderer;
import com.google.android.exoplayer2.util.MimeTypes;
import android.os.Handler;
@@ -27,7 +27,7 @@ import android.os.Handler;
/**
* Decodes and renders audio using the native Flac decoder.
*/
-public class LibflacAudioTrackRenderer extends AudioDecoderTrackRenderer {
+public class LibflacAudioRenderer extends AudioDecoderRenderer {
private static final int NUM_BUFFERS = 16;
@@ -38,7 +38,7 @@ public class LibflacAudioTrackRenderer extends AudioDecoderTrackRenderer {
return FlacJni.IS_AVAILABLE;
}
- public LibflacAudioTrackRenderer() {
+ public LibflacAudioRenderer() {
this(null, null);
}
@@ -47,8 +47,7 @@ public class LibflacAudioTrackRenderer extends AudioDecoderTrackRenderer {
* null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required.
*/
- public LibflacAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener) {
+ public LibflacAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener) {
super(eventHandler, eventListener);
}
@@ -60,9 +59,8 @@ public class LibflacAudioTrackRenderer extends AudioDecoderTrackRenderer {
* default capabilities (no encoded audio passthrough support) should be assumed.
* @param streamType The type of audio stream for the {@link AudioTrack}.
*/
- public LibflacAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities,
- int streamType) {
+ public LibflacAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener,
+ AudioCapabilities audioCapabilities, int streamType) {
super(eventHandler, eventListener, audioCapabilities, streamType);
}
diff --git a/extensions/opus/README.md b/extensions/opus/README.md
index 3a2bdcf04a..36ca2b7261 100644
--- a/extensions/opus/README.md
+++ b/extensions/opus/README.md
@@ -2,11 +2,11 @@
## Description ##
-The Opus Extension is a [TrackRenderer][] implementation that helps you bundle
+The Opus Extension is a [Renderer][] implementation that helps you bundle
libopus (the Opus decoding library) into your app and use it along with
ExoPlayer to play Opus audio on Android devices.
-[TrackRenderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/TrackRenderer.html
+[Renderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Renderer.html
## Build Instructions ##
diff --git a/extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java b/extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java
index 98784c23ad..380de6be64 100644
--- a/extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java
+++ b/extensions/opus/src/androidTest/java/com/google/android/exoplayer2/ext/opus/OpusPlaybackTest.java
@@ -20,7 +20,7 @@ import com.google.android.exoplayer2.DefaultTrackSelector;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
-import com.google.android.exoplayer2.TrackRenderer;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.extractor.ExtractorMediaSource;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
@@ -31,7 +31,7 @@ import android.os.Looper;
import android.test.InstrumentationTestCase;
/**
- * Playback tests using {@link LibopusAudioTrackRenderer}.
+ * Playback tests using {@link LibopusAudioRenderer}.
*/
public class OpusPlaybackTest extends InstrumentationTestCase {
@@ -71,10 +71,10 @@ public class OpusPlaybackTest extends InstrumentationTestCase {
@Override
public void run() {
Looper.prepare();
- LibopusAudioTrackRenderer audioRenderer = new LibopusAudioTrackRenderer();
+ LibopusAudioRenderer audioRenderer = new LibopusAudioRenderer();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(
new DefaultTrackSelectionPolicy(), null);
- player = ExoPlayerFactory.newInstance(new TrackRenderer[] {audioRenderer}, trackSelector);
+ player = ExoPlayerFactory.newInstance(new Renderer[] {audioRenderer}, trackSelector);
player.addListener(this);
ExtractorMediaSource mediaSource = new ExtractorMediaSource(
uri,
diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
similarity index 83%
rename from extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java
rename to extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
index 44af0f49a4..a9f71bc66c 100644
--- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java
+++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
@@ -15,11 +15,11 @@
*/
package com.google.android.exoplayer2.ext.opus;
-import com.google.android.exoplayer2.AudioTrackRendererEventListener;
+import com.google.android.exoplayer2.AudioRendererEventListener;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.audio.AudioCapabilities;
import com.google.android.exoplayer2.audio.AudioTrack;
-import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer;
+import com.google.android.exoplayer2.extensions.AudioDecoderRenderer;
import com.google.android.exoplayer2.util.MimeTypes;
import android.os.Handler;
@@ -27,7 +27,7 @@ import android.os.Handler;
/**
* Decodes and renders audio using the native Opus decoder.
*/
-public final class LibopusAudioTrackRenderer extends AudioDecoderTrackRenderer {
+public final class LibopusAudioRenderer extends AudioDecoderRenderer {
private static final int NUM_BUFFERS = 16;
private static final int INITIAL_INPUT_BUFFER_SIZE = 960 * 6;
@@ -46,7 +46,7 @@ public final class LibopusAudioTrackRenderer extends AudioDecoderTrackRenderer {
return isLibopusAvailable() ? OpusDecoder.getLibopusVersion() : null;
}
- public LibopusAudioTrackRenderer() {
+ public LibopusAudioRenderer() {
this(null, null);
}
@@ -55,8 +55,7 @@ public final class LibopusAudioTrackRenderer extends AudioDecoderTrackRenderer {
* null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required.
*/
- public LibopusAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener) {
+ public LibopusAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener) {
super(eventHandler, eventListener);
}
@@ -68,9 +67,8 @@ public final class LibopusAudioTrackRenderer extends AudioDecoderTrackRenderer {
* default capabilities (no encoded audio passthrough support) should be assumed.
* @param streamType The type of audio stream for the {@link AudioTrack}.
*/
- public LibopusAudioTrackRenderer(Handler eventHandler,
- AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities,
- int streamType) {
+ public LibopusAudioRenderer(Handler eventHandler, AudioRendererEventListener eventListener,
+ AudioCapabilities audioCapabilities, int streamType) {
super(eventHandler, eventListener, audioCapabilities, streamType);
}
diff --git a/extensions/vp9/README.md b/extensions/vp9/README.md
index d181bf0585..97c6b46280 100644
--- a/extensions/vp9/README.md
+++ b/extensions/vp9/README.md
@@ -2,11 +2,11 @@
## Description ##
-The VP9 Extension is a [TrackRenderer][] implementation that helps you bundle
-libvpx (the VP9 decoding library) into your app and use it along with ExoPlayer
-to play VP9 video on Android devices.
+The VP9 Extension is a [Renderer][] implementation that helps you bundle libvpx
+(the VP9 decoding library) into your app and use it along with ExoPlayer to play
+VP9 video on Android devices.
-[TrackRenderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/TrackRenderer.html
+[Renderer]: https://google.github.io/ExoPlayer/doc/reference/com/google/android/exoplayer2/Renderer.html
## Build Instructions ##
diff --git a/extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java b/extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java
index 811a9557ad..176c43d95f 100644
--- a/extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java
+++ b/extensions/vp9/src/androidTest/java/com/google/android/exoplayer2/ext/vp9/VpxPlaybackTest.java
@@ -20,7 +20,7 @@ import com.google.android.exoplayer2.DefaultTrackSelector;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.ExoPlayerFactory;
-import com.google.android.exoplayer2.TrackRenderer;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.extractor.ExtractorMediaSource;
import com.google.android.exoplayer2.extractor.mkv.MatroskaExtractor;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
@@ -31,7 +31,7 @@ import android.os.Looper;
import android.test.InstrumentationTestCase;
/**
- * Playback tests using {@link LibvpxVideoTrackRenderer}.
+ * Playback tests using {@link LibvpxVideoRenderer}.
*/
public class VpxPlaybackTest extends InstrumentationTestCase {
@@ -87,10 +87,10 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
@Override
public void run() {
Looper.prepare();
- LibvpxVideoTrackRenderer videoRenderer = new LibvpxVideoTrackRenderer(true, 0);
+ LibvpxVideoRenderer videoRenderer = new LibvpxVideoRenderer(true, 0);
DefaultTrackSelector trackSelector = new DefaultTrackSelector(
new DefaultTrackSelectionPolicy(), null);
- player = ExoPlayerFactory.newInstance(new TrackRenderer[] {videoRenderer}, trackSelector);
+ player = ExoPlayerFactory.newInstance(new Renderer[] {videoRenderer}, trackSelector);
player.addListener(this);
ExtractorMediaSource mediaSource = new ExtractorMediaSource(
uri,
@@ -100,7 +100,7 @@ public class VpxPlaybackTest extends InstrumentationTestCase {
null,
null);
player.sendMessages(new ExoPlayer.ExoPlayerMessage(videoRenderer,
- LibvpxVideoTrackRenderer.MSG_SET_OUTPUT_BUFFER_RENDERER,
+ LibvpxVideoRenderer.MSG_SET_OUTPUT_BUFFER_RENDERER,
new VpxVideoSurfaceView(context)));
player.setMediaSource(mediaSource);
player.setPlayWhenReady(true);
diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoTrackRenderer.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
similarity index 95%
rename from extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoTrackRenderer.java
rename to extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
index dc91d71968..4fcf9b9fe9 100644
--- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoTrackRenderer.java
+++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
@@ -22,10 +22,10 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.FormatHolder;
-import com.google.android.exoplayer2.TrackRenderer;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.TrackStream;
-import com.google.android.exoplayer2.VideoTrackRendererEventListener;
-import com.google.android.exoplayer2.VideoTrackRendererEventListener.EventDispatcher;
+import com.google.android.exoplayer2.VideoRendererEventListener;
+import com.google.android.exoplayer2.VideoRendererEventListener.EventDispatcher;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.TraceUtil;
@@ -38,7 +38,7 @@ import android.view.Surface;
/**
* Decodes and renders video using the native VP9 decoder.
*/
-public final class LibvpxVideoTrackRenderer extends TrackRenderer {
+public final class LibvpxVideoRenderer extends Renderer {
/**
* The type of a message that can be passed to an instance of this class via
@@ -48,7 +48,7 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer {
public static final int MSG_SET_OUTPUT_BUFFER_RENDERER = C.MSG_CUSTOM_BASE;
/**
- * The number of input buffers and the number of output buffers. The track renderer may limit the
+ * The number of input buffers and the number of output buffers. The renderer may limit the
* minimum possible value due to requiring multiple output buffers to be dequeued at a time for it
* to make progress.
*/
@@ -90,7 +90,7 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer {
* @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer
* can attempt to seamlessly join an ongoing playback.
*/
- public LibvpxVideoTrackRenderer(boolean scaleToFit, long allowedJoiningTimeMs) {
+ public LibvpxVideoRenderer(boolean scaleToFit, long allowedJoiningTimeMs) {
this(scaleToFit, allowedJoiningTimeMs, null, null, 0);
}
@@ -102,10 +102,10 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer {
* null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required.
* @param maxDroppedFrameCountToNotify The maximum number of frames that can be dropped between
- * invocations of {@link VideoTrackRendererEventListener#onDroppedFrames(int, long)}.
+ * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}.
*/
- public LibvpxVideoTrackRenderer(boolean scaleToFit, long allowedJoiningTimeMs,
- Handler eventHandler, VideoTrackRendererEventListener eventListener,
+ public LibvpxVideoRenderer(boolean scaleToFit, long allowedJoiningTimeMs,
+ Handler eventHandler, VideoRendererEventListener eventListener,
int maxDroppedFrameCountToNotify) {
this.scaleToFit = scaleToFit;
this.allowedJoiningTimeMs = allowedJoiningTimeMs;
@@ -234,7 +234,7 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer {
return false;
}
- if (getState() == TrackRenderer.STATE_STARTED
+ if (getState() == Renderer.STATE_STARTED
&& outputBuffer.timestampUs <= positionUs + 30000) {
renderBuffer();
}
diff --git a/library/src/main/java/com/google/android/exoplayer2/AudioTrackRendererEventListener.java b/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java
similarity index 93%
rename from library/src/main/java/com/google/android/exoplayer2/AudioTrackRendererEventListener.java
rename to library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java
index 49dc79f4c4..68c918e115 100644
--- a/library/src/main/java/com/google/android/exoplayer2/AudioTrackRendererEventListener.java
+++ b/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java
@@ -22,9 +22,9 @@ import android.os.Handler;
import android.os.SystemClock;
/**
- * Interface definition for a callback to be notified of audio {@link TrackRenderer} events.
+ * Interface definition for a callback to be notified of audio {@link Renderer} events.
*/
-public interface AudioTrackRendererEventListener {
+public interface AudioRendererEventListener {
/**
* Invoked when the renderer is enabled.
@@ -71,14 +71,14 @@ public interface AudioTrackRendererEventListener {
void onAudioDisabled(CodecCounters counters);
/**
- * Dispatches events to a {@link AudioTrackRendererEventListener}.
+ * Dispatches events to a {@link AudioRendererEventListener}.
*/
final class EventDispatcher {
private final Handler handler;
- private final AudioTrackRendererEventListener listener;
+ private final AudioRendererEventListener listener;
- public EventDispatcher(Handler handler, AudioTrackRendererEventListener listener) {
+ public EventDispatcher(Handler handler, AudioRendererEventListener listener) {
this.handler = listener != null ? Assertions.checkNotNull(handler) : null;
this.listener = listener;
}
diff --git a/library/src/main/java/com/google/android/exoplayer2/C.java b/library/src/main/java/com/google/android/exoplayer2/C.java
index fed993c360..c80964cd0f 100644
--- a/library/src/main/java/com/google/android/exoplayer2/C.java
+++ b/library/src/main/java/com/google/android/exoplayer2/C.java
@@ -271,21 +271,21 @@ public interface C {
UUID PLAYREADY_UUID = new UUID(0x9A04F07998404286L, 0xAB92E65BE0885F95L);
/**
- * The type of a message that can be passed to a video {@link TrackRenderer} via
+ * The type of a message that can be passed to a video {@link Renderer} via
* {@link ExoPlayer#sendMessages} or {@link ExoPlayer#blockingSendMessages}. The message object
* should be the target {@link Surface}, or null.
*/
int MSG_SET_SURFACE = 1;
/**
- * The type of a message that can be passed to an audio {@link TrackRenderer} via
+ * The type of a message that can be passed to an audio {@link Renderer} via
* {@link ExoPlayer#sendMessages} or {@link ExoPlayer#blockingSendMessages}. The message object
* should be a {@link Float} with 0 being silence and 1 being unity gain.
*/
int MSG_SET_VOLUME = 2;
/**
- * The type of a message that can be passed to an audio {@link TrackRenderer} via
+ * The type of a message that can be passed to an audio {@link Renderer} via
* {@link ExoPlayer#sendMessages} or {@link ExoPlayer#blockingSendMessages}. The message object
* should be a {@link android.media.PlaybackParams}, which will be used to configure the
* underlying {@link android.media.AudioTrack}. The message object should not be modified by the
diff --git a/library/src/main/java/com/google/android/exoplayer2/DefaultLoadControl.java b/library/src/main/java/com/google/android/exoplayer2/DefaultLoadControl.java
index 9cee0c8e14..d95b88325f 100644
--- a/library/src/main/java/com/google/android/exoplayer2/DefaultLoadControl.java
+++ b/library/src/main/java/com/google/android/exoplayer2/DefaultLoadControl.java
@@ -103,7 +103,7 @@ public final class DefaultLoadControl implements LoadControl {
}
@Override
- public void onTrackSelections(TrackRenderer[] renderers, TrackGroupArray trackGroups,
+ public void onTrackSelections(Renderer[] renderers, TrackGroupArray trackGroups,
TrackSelectionArray trackSelections) {
targetBufferSize = 0;
for (int i = 0; i < renderers.length; i++) {
diff --git a/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelectionPolicy.java b/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelectionPolicy.java
index 94c04087bf..ba2efcd121 100644
--- a/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelectionPolicy.java
+++ b/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelectionPolicy.java
@@ -122,7 +122,7 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
// TrackSelectionPolicy implementation.
@Override
- public TrackSelection[] selectTracks(TrackRenderer[] renderers,
+ public TrackSelection[] selectTracks(Renderer[] renderers,
TrackGroupArray[] rendererTrackGroupArrays, int[][][] rendererFormatSupports)
throws ExoPlaybackException {
// Make a track selection for each renderer.
@@ -157,13 +157,13 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
// Video track selection implementation.
- private static TrackSelection selectTrackForVideoRenderer(TrackRenderer renderer,
+ private static TrackSelection selectTrackForVideoRenderer(Renderer renderer,
TrackGroupArray trackGroups, int[][] formatSupport, int maxVideoWidth, int maxVideoHeight,
boolean allowNonSeamlessAdaptiveness, boolean allowMixedMimeAdaptiveness)
throws ExoPlaybackException {
int requiredAdaptiveSupport = allowNonSeamlessAdaptiveness
- ? TrackRenderer.ADAPTIVE_NOT_SEAMLESS | TrackRenderer.ADAPTIVE_SEAMLESS
- : TrackRenderer.ADAPTIVE_SEAMLESS;
+ ? (Renderer.ADAPTIVE_NOT_SEAMLESS | Renderer.ADAPTIVE_SEAMLESS)
+ : Renderer.ADAPTIVE_SEAMLESS;
boolean allowMixedMimeTypes = allowMixedMimeAdaptiveness
&& (renderer.supportsMixedMimeTypeAdaptation() & requiredAdaptiveSupport) != 0;
int largestAdaptiveGroup = -1;
@@ -347,7 +347,7 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
}
private static boolean isSupported(int formatSupport) {
- return (formatSupport & TrackRenderer.FORMAT_SUPPORT_MASK) == TrackRenderer.FORMAT_HANDLED;
+ return (formatSupport & Renderer.FORMAT_SUPPORT_MASK) == Renderer.FORMAT_HANDLED;
}
private static boolean formatHasLanguage(Format format, String language) {
diff --git a/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelector.java b/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelector.java
index 42619a82fa..8fcc90de5e 100644
--- a/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelector.java
+++ b/library/src/main/java/com/google/android/exoplayer2/DefaultTrackSelector.java
@@ -232,7 +232,7 @@ public final class DefaultTrackSelector extends TrackSelector implements
}
@Override
- protected Pair
* A {@link TrackGroup} is associated to a renderer that reports
- * {@link TrackRenderer#FORMAT_HANDLED} support for one or more of the tracks in the group, or
- * {@link TrackRenderer#FORMAT_EXCEEDS_CAPABILITIES} if no such renderer exists, or
- * {@link TrackRenderer#FORMAT_UNSUPPORTED_SUBTYPE} if again no such renderer exists. In the case
+ * {@link Renderer#FORMAT_HANDLED} support for one or more of the tracks in the group, or
+ * {@link Renderer#FORMAT_EXCEEDS_CAPABILITIES} if no such renderer exists, or
+ * {@link Renderer#FORMAT_UNSUPPORTED_SUBTYPE} if again no such renderer exists. In the case
* that two or more renderers report the same level of support, the renderer with the lowest index
* is associated.
*
- * If all renderers report {@link TrackRenderer#FORMAT_UNSUPPORTED_TYPE} for all of the tracks in
+ * If all renderers report {@link Renderer#FORMAT_UNSUPPORTED_TYPE} for all of the tracks in
* the group, then {@code renderers.length} is returned to indicate that no association was made.
*
* @param renderers The renderers from which to select.
@@ -334,18 +334,18 @@ public final class DefaultTrackSelector extends TrackSelector implements
* was made.
* @throws ExoPlaybackException If an error occurs finding a renderer.
*/
- private static int findRenderer(TrackRenderer[] renderers, TrackGroup group)
+ private static int findRenderer(Renderer[] renderers, TrackGroup group)
throws ExoPlaybackException {
int bestRendererIndex = renderers.length;
- int bestSupportLevel = TrackRenderer.FORMAT_UNSUPPORTED_TYPE;
+ int bestSupportLevel = Renderer.FORMAT_UNSUPPORTED_TYPE;
for (int rendererIndex = 0; rendererIndex < renderers.length; rendererIndex++) {
- TrackRenderer renderer = renderers[rendererIndex];
+ Renderer renderer = renderers[rendererIndex];
for (int trackIndex = 0; trackIndex < group.length; trackIndex++) {
int trackSupportLevel = renderer.supportsFormat(group.getFormat(trackIndex));
if (trackSupportLevel > bestSupportLevel) {
bestRendererIndex = rendererIndex;
bestSupportLevel = trackSupportLevel;
- if (bestSupportLevel == TrackRenderer.FORMAT_HANDLED) {
+ if (bestSupportLevel == Renderer.FORMAT_HANDLED) {
// We can't do better.
return bestRendererIndex;
}
@@ -356,16 +356,16 @@ public final class DefaultTrackSelector extends TrackSelector implements
}
/**
- * Calls {@link TrackRenderer#supportsFormat(Format)} for each track in the specified
+ * Calls {@link Renderer#supportsFormat(Format)} for each track in the specified
* {@link TrackGroup}, returning the results in an array.
*
* @param renderer The renderer to evaluate.
* @param group The {@link TrackGroup} to evaluate.
- * @return An array containing the result of calling {@link TrackRenderer#supportsFormat(Format)}
+ * @return An array containing the result of calling {@link Renderer#supportsFormat(Format)}
* on the renderer for each track in the group.
* @throws ExoPlaybackException If an error occurs determining the format support.
*/
- private static int[] getFormatSupport(TrackRenderer renderer, TrackGroup group)
+ private static int[] getFormatSupport(Renderer renderer, TrackGroup group)
throws ExoPlaybackException {
int[] formatSupport = new int[group.length];
for (int i = 0; i < group.length; i++) {
@@ -375,15 +375,15 @@ public final class DefaultTrackSelector extends TrackSelector implements
}
/**
- * Calls {@link TrackRenderer#supportsMixedMimeTypeAdaptation()} for each renderer, returning
+ * Calls {@link Renderer#supportsMixedMimeTypeAdaptation()} for each renderer, returning
* the results in an array.
*
* @param renderers The renderers to evaluate.
* @return An array containing the result of calling
- * {@link TrackRenderer#supportsMixedMimeTypeAdaptation()} on each renderer.
+ * {@link Renderer#supportsMixedMimeTypeAdaptation()} on each renderer.
* @throws ExoPlaybackException If an error occurs determining the adaptation support.
*/
- private static int[] getMixedMimeTypeAdaptationSupport(TrackRenderer[] renderers)
+ private static int[] getMixedMimeTypeAdaptationSupport(Renderer[] renderers)
throws ExoPlaybackException {
int[] mixedMimeTypeAdaptationSupport = new int[renderers.length];
for (int i = 0; i < mixedMimeTypeAdaptationSupport.length; i++) {
@@ -423,7 +423,7 @@ public final class DefaultTrackSelector extends TrackSelector implements
}
/**
- * Provides track information for each {@link TrackRenderer}.
+ * Provides track information for each {@link Renderer}.
*/
public static final class TrackInfo {
@@ -455,8 +455,8 @@ public final class DefaultTrackSelector extends TrackSelector implements
* @param trackGroups The {@link TrackGroupArray}s for each renderer.
* @param trackSelections The current {@link TrackSelection}s for each renderer.
* @param mixedMimeTypeAdaptiveSupport The result of
- * {@link TrackRenderer#supportsMixedMimeTypeAdaptation()} for each renderer.
- * @param formatSupport The result of {@link TrackRenderer#supportsFormat(Format)} for each
+ * {@link Renderer#supportsMixedMimeTypeAdaptation()} for each renderer.
+ * @param formatSupport The result of {@link Renderer#supportsFormat(Format)} for each
* track, indexed by renderer index, group index and track index (in that order).
* @param unassociatedTrackGroups Contains {@link TrackGroup}s not associated with any renderer.
*/
@@ -504,8 +504,8 @@ public final class DefaultTrackSelector extends TrackSelector implements
for (int i = 0; i < rendererFormatSupport.length; i++) {
for (int j = 0; j < rendererFormatSupport[i].length; j++) {
hasTracks = true;
- if ((rendererFormatSupport[i][j] & TrackRenderer.FORMAT_SUPPORT_MASK)
- == TrackRenderer.FORMAT_HANDLED) {
+ if ((rendererFormatSupport[i][j] & Renderer.FORMAT_SUPPORT_MASK)
+ == Renderer.FORMAT_HANDLED) {
return RENDERER_SUPPORT_PLAYABLE_TRACKS;
}
}
@@ -519,14 +519,14 @@ public final class DefaultTrackSelector extends TrackSelector implements
* @param rendererIndex The renderer index.
* @param groupIndex The index of the group to which the track belongs.
* @param trackIndex The index of the track within the group.
- * @return One of {@link TrackRenderer#FORMAT_HANDLED},
- * {@link TrackRenderer#FORMAT_EXCEEDS_CAPABILITIES},
- * {@link TrackRenderer#FORMAT_UNSUPPORTED_SUBTYPE} and
- * {@link TrackRenderer#FORMAT_UNSUPPORTED_TYPE}.
+ * @return One of {@link Renderer#FORMAT_HANDLED},
+ * {@link Renderer#FORMAT_EXCEEDS_CAPABILITIES},
+ * {@link Renderer#FORMAT_UNSUPPORTED_SUBTYPE} and
+ * {@link Renderer#FORMAT_UNSUPPORTED_TYPE}.
*/
public int getTrackFormatSupport(int rendererIndex, int groupIndex, int trackIndex) {
return formatSupport[rendererIndex][groupIndex][trackIndex]
- & TrackRenderer.FORMAT_SUPPORT_MASK;
+ & Renderer.FORMAT_SUPPORT_MASK;
}
/**
@@ -534,21 +534,21 @@ public final class DefaultTrackSelector extends TrackSelector implements
* specified {@link TrackGroup}.
*
* Tracks for which {@link #getTrackFormatSupport(int, int, int)} returns
- * {@link TrackRenderer#FORMAT_HANDLED} are always considered.
+ * {@link Renderer#FORMAT_HANDLED} are always considered.
* Tracks for which {@link #getTrackFormatSupport(int, int, int)} returns
- * {@link TrackRenderer#FORMAT_UNSUPPORTED_TYPE} or
- * {@link TrackRenderer#FORMAT_UNSUPPORTED_SUBTYPE} are never considered.
+ * {@link Renderer#FORMAT_UNSUPPORTED_TYPE} or
+ * {@link Renderer#FORMAT_UNSUPPORTED_SUBTYPE} are never considered.
* Tracks for which {@link #getTrackFormatSupport(int, int, int)} returns
- * {@link TrackRenderer#FORMAT_EXCEEDS_CAPABILITIES} are considered only if
+ * {@link Renderer#FORMAT_EXCEEDS_CAPABILITIES} are considered only if
* {@code includeCapabilitiesExceededTracks} is set to {@code true}.
*
* @param rendererIndex The renderer index.
* @param groupIndex The index of the group.
* @param includeCapabilitiesExceededTracks True if formats that exceed the capabilities of the
* renderer should be included when determining support. False otherwise.
- * @return One of {@link TrackRenderer#ADAPTIVE_SEAMLESS},
- * {@link TrackRenderer#ADAPTIVE_NOT_SEAMLESS} and
- * {@link TrackRenderer#ADAPTIVE_NOT_SUPPORTED}.
+ * @return One of {@link Renderer#ADAPTIVE_SEAMLESS},
+ * {@link Renderer#ADAPTIVE_NOT_SEAMLESS} and
+ * {@link Renderer#ADAPTIVE_NOT_SUPPORTED}.
*/
public int getAdaptiveSupport(int rendererIndex, int groupIndex,
boolean includeCapabilitiesExceededTracks) {
@@ -558,8 +558,8 @@ public final class DefaultTrackSelector extends TrackSelector implements
int trackIndexCount = 0;
for (int i = 0; i < trackCount; i++) {
int fixedSupport = getTrackFormatSupport(rendererIndex, groupIndex, i);
- if (fixedSupport == TrackRenderer.FORMAT_HANDLED || (includeCapabilitiesExceededTracks
- && fixedSupport == TrackRenderer.FORMAT_EXCEEDS_CAPABILITIES)) {
+ if (fixedSupport == Renderer.FORMAT_HANDLED || (includeCapabilitiesExceededTracks
+ && fixedSupport == Renderer.FORMAT_EXCEEDS_CAPABILITIES)) {
trackIndices[trackIndexCount++] = i;
}
}
@@ -573,17 +573,17 @@ public final class DefaultTrackSelector extends TrackSelector implements
*
* @param rendererIndex The renderer index.
* @param groupIndex The index of the group.
- * @return One of {@link TrackRenderer#ADAPTIVE_SEAMLESS},
- * {@link TrackRenderer#ADAPTIVE_NOT_SEAMLESS} and
- * {@link TrackRenderer#ADAPTIVE_NOT_SUPPORTED}.
+ * @return One of {@link Renderer#ADAPTIVE_SEAMLESS},
+ * {@link Renderer#ADAPTIVE_NOT_SEAMLESS} and
+ * {@link Renderer#ADAPTIVE_NOT_SUPPORTED}.
*/
public int getAdaptiveSupport(int rendererIndex, int groupIndex, int[] trackIndices) {
TrackGroup trackGroup = trackGroups[rendererIndex].get(groupIndex);
if (!trackGroup.adaptive) {
- return TrackRenderer.ADAPTIVE_NOT_SUPPORTED;
+ return Renderer.ADAPTIVE_NOT_SUPPORTED;
}
int handledTrackCount = 0;
- int adaptiveSupport = TrackRenderer.ADAPTIVE_SEAMLESS;
+ int adaptiveSupport = Renderer.ADAPTIVE_SEAMLESS;
boolean multipleMimeTypes = false;
String firstSampleMimeType = null;
for (int i = 0; i < trackIndices.length; i++) {
@@ -596,7 +596,7 @@ public final class DefaultTrackSelector extends TrackSelector implements
multipleMimeTypes |= !Util.areEqual(firstSampleMimeType, sampleMimeType);
}
adaptiveSupport = Math.min(adaptiveSupport,
- formatSupport[rendererIndex][groupIndex][i] & TrackRenderer.ADAPTIVE_SUPPORT_MASK);
+ formatSupport[rendererIndex][groupIndex][i] & Renderer.ADAPTIVE_SUPPORT_MASK);
}
return multipleMimeTypes
? Math.min(adaptiveSupport, mixedMimeTypeAdaptiveSupport[rendererIndex])
@@ -604,9 +604,9 @@ public final class DefaultTrackSelector extends TrackSelector implements
}
/**
- * Gets the {@link TrackGroup}s not associated with any {@link TrackRenderer}.
+ * Gets the {@link TrackGroup}s not associated with any {@link Renderer}.
*
- * @return The {@link TrackGroup}s not associated with any {@link TrackRenderer}.
+ * @return The {@link TrackGroup}s not associated with any {@link Renderer}.
*/
public TrackGroupArray getUnassociatedTrackGroups() {
return unassociatedTrackGroups;
diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java
index 050f9cc546..2ccc5b7175 100644
--- a/library/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java
+++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java
@@ -31,7 +31,7 @@ public final class ExoPlaybackException extends Exception {
*/
public static final int TYPE_SOURCE = 0;
/**
- * The error occurred in a {@link TrackRenderer}.
+ * The error occurred in a {@link Renderer}.
*
* Call {@link #getRendererException()} to retrieve the underlying cause.
*/
diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayer.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayer.java
index 419132469d..71f2cbd7da 100644
--- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayer.java
+++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayer.java
@@ -32,11 +32,11 @@ package com.google.android.exoplayer2;
* The implementation is designed to make no assumptions about (and hence impose no restrictions
* on) the type of the media being played, how and where it is stored, or how it is rendered.
* Rather than implementing the loading and rendering of media directly, {@link ExoPlayer} instead
- * delegates this work to one or more {@link TrackRenderer}s, which are injected when the player
+ * delegates this work to one or more {@link Renderer}s, which are injected when the player
* is created. Hence {@link ExoPlayer} is capable of loading and playing any media for which a
- * {@link TrackRenderer} implementation can be provided.
+ * {@link Renderer} implementation can be provided.
*
- * {@link MediaCodecAudioTrackRenderer} and {@link MediaCodecVideoTrackRenderer} can be used for
+ * {@link MediaCodecAudioRenderer} and {@link MediaCodecVideoRenderer} can be used for
* the common cases of rendering audio and video. These components in turn require an
* upstream {@link MediaPeriod} to be injected through their constructors, where upstream
* is defined to denote a component that is closer to the source of the media. This pattern of
@@ -63,8 +63,8 @@ package com.google.android.exoplayer2;
*
The possible playback state transitions are shown below. Transitions can be triggered either - * by changes in the state of the {@link TrackRenderer}s being used, or as a result of + * by changes in the state of the {@link Renderer}s being used, or as a result of * {@link #setMediaSource(MediaSource)}, {@link #stop()} or {@link #release()} being invoked.
*
* Must be called from a thread that has an associated {@link Looper}.
*
- * @param renderers The {@link TrackRenderer}s that will be used by the instance.
+ * @param renderers The {@link Renderer}s that will be used by the instance.
* @param trackSelector The {@link TrackSelector} that will be used by the instance.
*/
- public static ExoPlayer newInstance(TrackRenderer[] renderers, TrackSelector trackSelector) {
+ public static ExoPlayer newInstance(Renderer[] renderers, TrackSelector trackSelector) {
return newInstance(renderers, trackSelector, new DefaultLoadControl());
}
@@ -122,11 +122,11 @@ public final class ExoPlayerFactory {
*
* Must be called from a thread that has an associated {@link Looper}. * - * @param renderers The {@link TrackRenderer}s that will be used by the instance. + * @param renderers The {@link Renderer}s that will be used by the instance. * @param trackSelector The {@link TrackSelector} that will be used by the instance. * @param loadControl The {@link LoadControl} that will be used by the instance. */ - public static ExoPlayer newInstance(TrackRenderer[] renderers, TrackSelector trackSelector, + public static ExoPlayer newInstance(Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl) { return new ExoPlayerImpl(renderers, trackSelector, loadControl); } diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index 02ba34d646..0621748054 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -54,12 +54,12 @@ import java.util.concurrent.CopyOnWriteArraySet; /** * Constructs an instance. Must be invoked from a thread that has an associated {@link Looper}. * - * @param renderers The {@link TrackRenderer}s that will be used by the instance. + * @param renderers The {@link Renderer}s that will be used by the instance. * @param trackSelector The {@link TrackSelector} that will be used by the instance. * @param loadControl The {@link LoadControl} that will be used by the instance. */ @SuppressLint("HandlerLeak") - public ExoPlayerImpl(TrackRenderer[] renderers, TrackSelector trackSelector, + public ExoPlayerImpl(Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl) { Log.i(TAG, "Init " + ExoPlayerLibraryInfo.VERSION); Assertions.checkNotNull(renderers); diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index abf106a28f..581171ff71 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -100,10 +100,10 @@ import java.util.ArrayList; private final Timeline timeline; private PlaybackInfo playbackInfo; - private TrackRenderer rendererMediaClockSource; + private Renderer rendererMediaClockSource; private MediaClock rendererMediaClock; private MediaSource mediaSource; - private TrackRenderer[] enabledRenderers; + private Renderer[] enabledRenderers; private boolean released; private boolean playWhenReady; private boolean rebuffering; @@ -115,7 +115,7 @@ import java.util.ArrayList; private long internalPositionUs; - public ExoPlayerImplInternal(TrackRenderer[] renderers, TrackSelector trackSelector, + public ExoPlayerImplInternal(Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl, boolean playWhenReady, Handler eventHandler) { this.trackSelector = trackSelector; this.loadControl = loadControl; @@ -128,7 +128,7 @@ import java.util.ArrayList; } standaloneMediaClock = new StandaloneMediaClock(); - enabledRenderers = new TrackRenderer[0]; + enabledRenderers = new Renderer[0]; timeline = new Timeline(renderers); playbackInfo = new PlaybackInfo(0); @@ -335,14 +335,14 @@ import java.util.ArrayList; private void startRenderers() throws ExoPlaybackException { rebuffering = false; standaloneMediaClock.start(); - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { renderer.start(); } } private void stopRenderers() throws ExoPlaybackException { standaloneMediaClock.stop(); - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { ensureStopped(renderer); } } @@ -400,7 +400,7 @@ import java.util.ArrayList; updatePlaybackPositions(); boolean allRenderersEnded = true; boolean allRenderersReadyOrEnded = true; - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { // TODO: Each renderer should return the maximum delay before which it wishes to be invoked // again. The minimum of these values should then be used as the delay before the next // invocation of this method. @@ -494,7 +494,7 @@ import java.util.ArrayList; long sourceOffsetUs = timeline.playingPeriod == null ? 0 : timeline.playingPeriod.offsetUs; internalPositionUs = sourceOffsetUs + periodPositionUs; standaloneMediaClock.setPositionUs(internalPositionUs); - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { renderer.reset(internalPositionUs); } } @@ -519,7 +519,7 @@ import java.util.ArrayList; standaloneMediaClock.stop(); rendererMediaClock = null; rendererMediaClockSource = null; - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { try { ensureStopped(renderer); renderer.disable(); @@ -528,7 +528,7 @@ import java.util.ArrayList; Log.e(TAG, "Stop failed.", e); } } - enabledRenderers = new TrackRenderer[0]; + enabledRenderers = new Renderer[0]; mediaSource = null; timeline.reset(); loadControl.reset(); @@ -552,8 +552,8 @@ import java.util.ArrayList; } } - private void ensureStopped(TrackRenderer renderer) throws ExoPlaybackException { - if (renderer.getState() == TrackRenderer.STATE_STARTED) { + private void ensureStopped(Renderer renderer) throws ExoPlaybackException { + if (renderer.getState() == Renderer.STATE_STARTED) { renderer.stop(); } } @@ -573,7 +573,7 @@ import java.util.ArrayList; */ private final class Timeline { - private final TrackRenderer[] renderers; + private final Renderer[] renderers; public boolean isReady; public boolean isEnded; @@ -585,7 +585,7 @@ import java.util.ArrayList; private int pendingPeriodIndex; private long playingPeriodEndPositionUs; - public Timeline(TrackRenderer[] renderers) { + public Timeline(Renderer[] renderers) { this.renderers = renderers; playingPeriodEndPositionUs = C.UNSET_TIME_US; } @@ -615,7 +615,7 @@ import java.util.ArrayList; public void maybeThrowPeriodPrepareError() throws IOException { if (loadingPeriod != null && !loadingPeriod.prepared && (readingPeriod == null || readingPeriod.nextPeriod == loadingPeriod)) { - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { if (!renderer.hasReadStreamToEnd()) { return; } @@ -682,7 +682,7 @@ import java.util.ArrayList; // The renderers have their final TrackStreams. return; } - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { if (!renderer.hasReadStreamToEnd()) { return; } @@ -693,7 +693,7 @@ import java.util.ArrayList; TrackSelectionArray newTrackSelections = readingPeriod.trackSelections; TrackGroupArray groups = readingPeriod.mediaPeriod.getTrackGroups(); for (int i = 0; i < renderers.length; i++) { - TrackRenderer renderer = renderers[i]; + Renderer renderer = renderers[i]; TrackSelection oldSelection = oldTrackSelections.get(i); TrackSelection newSelection = newTrackSelections.get(i); if (oldSelection != null) { @@ -717,7 +717,7 @@ import java.util.ArrayList; && readingPeriod.index == periodCount - 1) { readingPeriod = null; // This is the last period, so signal the renderers to read the end of the stream. - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { renderer.setCurrentTrackStreamIsFinal(); } } @@ -789,11 +789,11 @@ import java.util.ArrayList; resetInternalPosition(seekPositionUs); maybeContinueLoading(); } else { - for (TrackRenderer renderer : enabledRenderers) { + for (Renderer renderer : enabledRenderers) { ensureStopped(renderer); renderer.disable(); } - enabledRenderers = new TrackRenderer[0]; + enabledRenderers = new Renderer[0]; playingPeriod = null; readingPeriod = null; loadingPeriod = null; @@ -844,8 +844,8 @@ import java.util.ArrayList; int enabledRendererCount = 0; boolean[] rendererWasEnabledFlags = new boolean[renderers.length]; for (int i = 0; i < renderers.length; i++) { - TrackRenderer renderer = renderers[i]; - rendererWasEnabledFlags[i] = renderer.getState() != TrackRenderer.STATE_DISABLED; + Renderer renderer = renderers[i]; + rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED; TrackSelection oldSelection = playingPeriodOldTrackSelections.get(i); TrackSelection newSelection = playingPeriod.trackSelections.get(i); if (newSelection != null) { @@ -906,8 +906,8 @@ import java.util.ArrayList; int enabledRendererCount = 0; boolean[] rendererWasEnabledFlags = new boolean[renderers.length]; for (int i = 0; i < renderers.length; i++) { - TrackRenderer renderer = renderers[i]; - rendererWasEnabledFlags[i] = renderer.getState() != TrackRenderer.STATE_DISABLED; + Renderer renderer = renderers[i]; + rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED; TrackSelection newSelection = period.trackSelections.get(i); if (newSelection != null) { // The renderer should be enabled when playing the new period. @@ -942,15 +942,15 @@ import java.util.ArrayList; private void enableRenderers(boolean[] rendererWasEnabledFlags, int enabledRendererCount) throws ExoPlaybackException { - enabledRenderers = new TrackRenderer[enabledRendererCount]; + enabledRenderers = new Renderer[enabledRendererCount]; enabledRendererCount = 0; TrackGroupArray trackGroups = playingPeriod.mediaPeriod.getTrackGroups(); for (int i = 0; i < renderers.length; i++) { - TrackRenderer renderer = renderers[i]; + Renderer renderer = renderers[i]; TrackSelection newSelection = playingPeriod.trackSelections.get(i); if (newSelection != null) { enabledRenderers[enabledRendererCount++] = renderer; - if (renderer.getState() == TrackRenderer.STATE_DISABLED) { + if (renderer.getState() == Renderer.STATE_DISABLED) { // The renderer needs enabling with its new track selection. boolean playing = playWhenReady && state == ExoPlayer.STATE_READY; // Consider as joining only if the renderer was previously disabled. @@ -988,7 +988,7 @@ import java.util.ArrayList; */ private static final class Period { - private final TrackRenderer[] renderers; + private final Renderer[] renderers; private final TrackSelector trackSelector; public final MediaPeriod mediaPeriod; @@ -1005,7 +1005,7 @@ import java.util.ArrayList; private TrackSelectionArray trackSelections; private TrackSelectionArray periodTrackSelections; - public Period(TrackRenderer[] renderers, TrackSelector trackSelector, MediaPeriod mediaPeriod, + public Period(Renderer[] renderers, TrackSelector trackSelector, MediaPeriod mediaPeriod, int index) { this.renderers = renderers; this.trackSelector = trackSelector; diff --git a/library/src/main/java/com/google/android/exoplayer2/LoadControl.java b/library/src/main/java/com/google/android/exoplayer2/LoadControl.java index 0b6012a827..67654be3e1 100644 --- a/library/src/main/java/com/google/android/exoplayer2/LoadControl.java +++ b/library/src/main/java/com/google/android/exoplayer2/LoadControl.java @@ -29,7 +29,7 @@ public interface LoadControl { * @param trackGroups The available {@link TrackGroup}s. * @param trackSelections The {@link TrackSelection}s that were made. */ - void onTrackSelections(TrackRenderer[] renderers, TrackGroupArray trackGroups, + void onTrackSelections(Renderer[] renderers, TrackGroupArray trackGroups, TrackSelectionArray trackSelections); /** diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java similarity index 94% rename from library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioTrackRenderer.java rename to library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java index e95f776f4d..aa15e445ab 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java @@ -15,7 +15,7 @@ */ package com.google.android.exoplayer2; -import com.google.android.exoplayer2.AudioTrackRendererEventListener.EventDispatcher; +import com.google.android.exoplayer2.AudioRendererEventListener.EventDispatcher; import com.google.android.exoplayer2.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.audio.AudioTrack; @@ -39,7 +39,7 @@ import java.nio.ByteBuffer; * Decodes and renders audio using {@link MediaCodec} and {@link android.media.AudioTrack}. */ @TargetApi(16) -public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implements MediaClock { +public class MediaCodecAudioRenderer extends MediaCodecRenderer implements MediaClock { private final EventDispatcher eventDispatcher; private final AudioTrack audioTrack; @@ -57,7 +57,7 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem /** * @param mediaCodecSelector A decoder selector. */ - public MediaCodecAudioTrackRenderer(MediaCodecSelector mediaCodecSelector) { + public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector) { this(mediaCodecSelector, null, true); } @@ -71,7 +71,7 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem * permitted to play clear regions of encrypted media files before {@code drmSessionManager} * has obtained the keys necessary to decrypt encrypted regions of the media. */ - public MediaCodecAudioTrackRenderer(MediaCodecSelector mediaCodecSelector, + public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys) { this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, null, null); } @@ -82,8 +82,8 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. */ - public MediaCodecAudioTrackRenderer(MediaCodecSelector mediaCodecSelector, Handler eventHandler, - AudioTrackRendererEventListener eventListener) { + public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, Handler eventHandler, + AudioRendererEventListener eventListener) { this(mediaCodecSelector, null, true, eventHandler, eventListener); } @@ -100,9 +100,9 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. */ - public MediaCodecAudioTrackRenderer(MediaCodecSelector mediaCodecSelector, + public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, - Handler eventHandler, AudioTrackRendererEventListener eventListener) { + Handler eventHandler, AudioRendererEventListener eventListener) { this(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys, eventHandler, eventListener, null, AudioManager.STREAM_MUSIC); } @@ -123,9 +123,9 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem * default capabilities (no encoded audio passthrough support) should be assumed. * @param streamType The type of audio stream for the {@link AudioTrack}. */ - public MediaCodecAudioTrackRenderer(MediaCodecSelector mediaCodecSelector, + public MediaCodecAudioRenderer(MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, - Handler eventHandler, AudioTrackRendererEventListener eventListener, + Handler eventHandler, AudioRendererEventListener eventListener, AudioCapabilities audioCapabilities, int streamType) { super(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys); audioSessionId = AudioTrack.SESSION_ID_NOT_SET; @@ -344,14 +344,14 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem } catch (AudioTrack.InitializationException e) { throw ExoPlaybackException.createForRenderer(e, getIndex()); } - if (getState() == TrackRenderer.STATE_STARTED) { + if (getState() == Renderer.STATE_STARTED) { audioTrack.play(); } } else { // Check for AudioTrack underrun. boolean audioTrackHadData = audioTrackHasData; audioTrackHasData = audioTrack.hasPendingData(); - if (audioTrackHadData && !audioTrackHasData && getState() == TrackRenderer.STATE_STARTED) { + if (audioTrackHadData && !audioTrackHasData && getState() == Renderer.STATE_STARTED) { long elapsedSinceLastFeedMs = SystemClock.elapsedRealtime() - lastFeedElapsedRealtimeMs; long bufferSizeUs = audioTrack.getBufferSizeUs(); long bufferSizeMs = bufferSizeUs == C.UNSET_TIME_US ? -1 : bufferSizeUs / 1000; diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java similarity index 99% rename from library/src/main/java/com/google/android/exoplayer2/MediaCodecTrackRenderer.java rename to library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java index 321acbebb2..d5016f991a 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecRenderer.java @@ -37,10 +37,10 @@ import java.util.ArrayList; import java.util.List; /** - * An abstract {@link TrackRenderer} that uses {@link MediaCodec} to decode samples for rendering. + * An abstract {@link Renderer} that uses {@link MediaCodec} to decode samples for rendering. */ @TargetApi(16) -public abstract class MediaCodecTrackRenderer extends TrackRenderer { +public abstract class MediaCodecRenderer extends Renderer { /** * Thrown when a failure occurs instantiating a decoder. @@ -192,7 +192,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { * permitted to play clear regions of encrypted media files before {@code drmSessionManager} * has obtained the keys necessary to decrypt encrypted regions of the media. */ - public MediaCodecTrackRenderer(MediaCodecSelector mediaCodecSelector, + public MediaCodecRenderer(MediaCodecSelector mediaCodecSelector, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys) { Assertions.checkState(Util.SDK_INT >= 16); this.mediaCodecSelector = Assertions.checkNotNull(mediaCodecSelector); @@ -338,7 +338,7 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { throwDecoderInitError(new DecoderInitializationException(format, e, drmSessionRequiresSecureDecoder, codecName)); } - codecHotswapDeadlineMs = getState() == TrackRenderer.STATE_STARTED + codecHotswapDeadlineMs = getState() == Renderer.STATE_STARTED ? (SystemClock.elapsedRealtime() + MAX_CODEC_HOTSWAP_TIME_MS) : -1; inputIndex = -1; outputIndex = -1; diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java similarity index 95% rename from library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoTrackRenderer.java rename to library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java index 3397d129b0..a733c1d0d4 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecVideoRenderer.java @@ -16,7 +16,7 @@ package com.google.android.exoplayer2; import com.google.android.exoplayer2.MediaCodecUtil.DecoderQueryException; -import com.google.android.exoplayer2.VideoTrackRendererEventListener.EventDispatcher; +import com.google.android.exoplayer2.VideoRendererEventListener.EventDispatcher; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; @@ -39,7 +39,7 @@ import java.nio.ByteBuffer; * Decodes and renders video using {@link MediaCodec}. */ @TargetApi(16) -public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { +public class MediaCodecVideoRenderer extends MediaCodecRenderer { private static final String TAG = "MediaCodecVideoRenderer"; private static final String KEY_CROP_LEFT = "crop-left"; @@ -82,7 +82,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { * @param videoScalingMode The scaling mode to pass to * {@link MediaCodec#setVideoScalingMode(int)}. */ - public MediaCodecVideoTrackRenderer(Context context, MediaCodecSelector mediaCodecSelector, + public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, int videoScalingMode) { this(context, mediaCodecSelector, videoScalingMode, 0); } @@ -95,7 +95,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { * @param allowedJoiningTimeMs The maximum duration in milliseconds for which this video renderer * can attempt to seamlessly join an ongoing playback. */ - public MediaCodecVideoTrackRenderer(Context context, MediaCodecSelector mediaCodecSelector, + public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, int videoScalingMode, long allowedJoiningTimeMs) { this(context, mediaCodecSelector, videoScalingMode, allowedJoiningTimeMs, null, null, -1); } @@ -111,11 +111,11 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. * @param maxDroppedFrameCountToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoTrackRendererEventListener#onDroppedFrames(int, long)}. + * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. */ - public MediaCodecVideoTrackRenderer(Context context, MediaCodecSelector mediaCodecSelector, + public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, int videoScalingMode, long allowedJoiningTimeMs, Handler eventHandler, - VideoTrackRendererEventListener eventListener, int maxDroppedFrameCountToNotify) { + VideoRendererEventListener eventListener, int maxDroppedFrameCountToNotify) { this(context, mediaCodecSelector, videoScalingMode, allowedJoiningTimeMs, null, false, eventHandler, eventListener, maxDroppedFrameCountToNotify); } @@ -138,12 +138,12 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { * null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required. * @param maxDroppedFrameCountToNotify The maximum number of frames that can be dropped between - * invocations of {@link VideoTrackRendererEventListener#onDroppedFrames(int, long)}. + * invocations of {@link VideoRendererEventListener#onDroppedFrames(int, long)}. */ - public MediaCodecVideoTrackRenderer(Context context, MediaCodecSelector mediaCodecSelector, + public MediaCodecVideoRenderer(Context context, MediaCodecSelector mediaCodecSelector, int videoScalingMode, long allowedJoiningTimeMs, DrmSessionManager drmSessionManager, boolean playClearSamplesWithoutKeys, Handler eventHandler, - VideoTrackRendererEventListener eventListener, int maxDroppedFrameCountToNotify) { + VideoRendererEventListener eventListener, int maxDroppedFrameCountToNotify) { super(mediaCodecSelector, drmSessionManager, playClearSamplesWithoutKeys); this.videoScalingMode = videoScalingMode; this.allowedJoiningTimeMs = allowedJoiningTimeMs; @@ -307,7 +307,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { this.surface = surface; this.reportedDrawnToSurface = false; int state = getState(); - if (state == TrackRenderer.STATE_ENABLED || state == TrackRenderer.STATE_STARTED) { + if (state == Renderer.STATE_ENABLED || state == Renderer.STATE_STARTED) { releaseCodec(); maybeInitCodec(); } @@ -403,7 +403,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { return true; } - if (getState() != TrackRenderer.STATE_STARTED) { + if (getState() != Renderer.STATE_STARTED) { return false; } diff --git a/library/src/main/java/com/google/android/exoplayer2/TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer2/Renderer.java similarity index 91% rename from library/src/main/java/com/google/android/exoplayer2/TrackRenderer.java rename to library/src/main/java/com/google/android/exoplayer2/Renderer.java index 780c4b1454..49d8630f8c 100644 --- a/library/src/main/java/com/google/android/exoplayer2/TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/Renderer.java @@ -23,16 +23,16 @@ import java.io.IOException; /** * Renders a single component of media. - * - *
Internally, a renderer's lifecycle is managed by the owning {@link ExoPlayer}. The player - * will transition its renderers through various states as the overall playback state changes. The - * valid state transitions are shown below, annotated with the methods that are invoked during each + *
+ * Internally, a renderer's lifecycle is managed by the owning {@link ExoPlayer}. The player will + * transition its renderers through various states as the overall playback state changes. The valid + * state transitions are shown below, annotated with the methods that are invoked during each * transition. *

- * Example: The {@link TrackRenderer} is capable of rendering H264 and the format's mimeType is + * Example: The {@link Renderer} is capable of rendering H264 and the format's mimeType is * {@link MimeTypes#VIDEO_H264}, but the format's resolution exceeds the maximum limit supported * by the underlying H264 decoder. */ public static final int FORMAT_EXCEEDS_CAPABILITIES = 0b10; /** - * The {@link TrackRenderer} is a general purpose renderer for formats of the same top-level type, + * The {@link Renderer} is a general purpose renderer for formats of the same top-level type, * but is not capable of rendering the format or any other format with the same mimeType because * the sub-type is not supported. *
- * Example: The {@link TrackRenderer} is a general purpose audio renderer and the format's + * Example: The {@link Renderer} is a general purpose audio renderer and the format's * mimeType matches audio/[subtype], but there does not exist a suitable decoder for [subtype]. */ public static final int FORMAT_UNSUPPORTED_SUBTYPE = 0b01; /** - * The {@link TrackRenderer} is not capable of rendering the format, either because it does not + * The {@link Renderer} is not capable of rendering the format, either because it does not * support the format's top-level type, or because it's a specialized renderer for a different * mimeType. *
- * Example: The {@link TrackRenderer} is a general purpose video renderer, but the format has an + * Example: The {@link Renderer} is a general purpose video renderer, but the format has an * audio mimeType. */ public static final int FORMAT_UNSUPPORTED_TYPE = 0b00; @@ -78,16 +78,16 @@ public abstract class TrackRenderer implements ExoPlayerComponent { */ public static final int ADAPTIVE_SUPPORT_MASK = 0b1100; /** - * The {@link TrackRenderer} can seamlessly adapt between formats. + * The {@link Renderer} can seamlessly adapt between formats. */ public static final int ADAPTIVE_SEAMLESS = 0b1000; /** - * The {@link TrackRenderer} can adapt between formats, but may suffer a brief discontinuity + * The {@link Renderer} can adapt between formats, but may suffer a brief discontinuity * (~50-100ms) when adaptation occurs. */ public static final int ADAPTIVE_NOT_SEAMLESS = 0b0100; /** - * The {@link TrackRenderer} does not support adaptation between formats. + * The {@link Renderer} does not support adaptation between formats. */ public static final int ADAPTIVE_NOT_SUPPORTED = 0b0000; @@ -112,7 +112,7 @@ public abstract class TrackRenderer implements ExoPlayerComponent { private boolean readEndOfStream; private boolean streamIsFinal; - public TrackRenderer() { + public Renderer() { readEndOfStream = true; } @@ -447,7 +447,7 @@ public abstract class TrackRenderer implements ExoPlayerComponent { /** * Whether the renderer is ready for the {@link ExoPlayer} instance to transition to * {@link ExoPlayer#STATE_ENDED}. The player will make this transition as soon as {@code true} is - * returned by all of its {@link TrackRenderer}s. + * returned by all of its {@link Renderer}s. *
* This method may be called when the renderer is in the following states: * {@link #STATE_ENABLED}, {@link #STATE_STARTED}. diff --git a/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index aca7b62e9d..ce5fc1cd06 100644 --- a/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -17,13 +17,11 @@ package com.google.android.exoplayer2; import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.metadata.MetadataTrackRenderer; -import com.google.android.exoplayer2.metadata.MetadataTrackRenderer.MetadataRenderer; +import com.google.android.exoplayer2.metadata.MetadataRenderer; import com.google.android.exoplayer2.metadata.id3.Id3Frame; import com.google.android.exoplayer2.metadata.id3.Id3Parser; import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.TextRenderer; -import com.google.android.exoplayer2.text.TextTrackRenderer; import com.google.android.exoplayer2.upstream.BandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; @@ -41,7 +39,7 @@ import java.util.ArrayList; import java.util.List; /** - * An {@link ExoPlayer} that uses default {@link TrackRenderer} components. + * An {@link ExoPlayer} that uses default {@link Renderer} components. *
* Instances of this class can be obtained from {@link ExoPlayerFactory}.
*/
@@ -94,7 +92,7 @@ public final class SimpleExoPlayer implements ExoPlayer {
private final ExoPlayer player;
private final BandwidthMeter bandwidthMeter;
- private final TrackRenderer[] renderers;
+ private final Renderer[] renderers;
private final ComponentListener componentListener;
private final Handler mainHandler;
private final int videoRendererCount;
@@ -118,7 +116,7 @@ public final class SimpleExoPlayer implements ExoPlayer {
componentListener = new ComponentListener();
// Build the renderers.
- ArrayList
+ * Text is parsed from sample data using {@link Decoder} instances obtained from a
+ * {@link SubtitleParserFactory}. The actual rendering of each line of text is delegated to a
+ * {@link Output}.
*/
-public interface TextRenderer {
+@TargetApi(16)
+public final class TextRenderer extends Renderer implements Callback {
/**
- * Invoked each time there is a change in the {@link Cue}s to be rendered.
- *
- * @param cues The {@link Cue}s to be rendered, or an empty list if no cues are to be rendered.
+ * An output for the renderer.
*/
- void onCues(List
- * Text is parsed from sample data using {@link Decoder} instances obtained from a
- * {@link SubtitleParserFactory}. The actual rendering of each line of text is delegated to a
- * {@link TextRenderer}.
- */
-@TargetApi(16)
-public final class TextTrackRenderer extends TrackRenderer implements Callback {
-
- private static final int MSG_UPDATE_OVERLAY = 0;
-
- private final Handler textRendererHandler;
- private final TextRenderer textRenderer;
- private final SubtitleParserFactory parserFactory;
- private final FormatHolder formatHolder;
-
- private boolean inputStreamEnded;
- private boolean outputStreamEnded;
- private SubtitleParser parser;
- private SubtitleInputBuffer nextInputBuffer;
- private SubtitleOutputBuffer subtitle;
- private SubtitleOutputBuffer nextSubtitle;
- private int nextSubtitleEventIndex;
-
- /**
- * @param textRenderer The text renderer.
- * @param textRendererLooper The looper associated with the thread on which textRenderer should be
- * invoked. If the renderer makes use of standard Android UI components, then this should
- * normally be the looper associated with the application's main thread, which can be obtained
- * using {@link android.app.Activity#getMainLooper()}. Null may be passed if the renderer
- * should be invoked directly on the player's internal rendering thread.
- */
- public TextTrackRenderer(TextRenderer textRenderer, Looper textRendererLooper) {
- this(textRenderer, textRendererLooper, SubtitleParserFactory.DEFAULT);
- }
-
- /**
- * @param textRenderer The text renderer.
- * @param textRendererLooper The looper associated with the thread on which textRenderer should be
- * invoked. If the renderer makes use of standard Android UI components, then this should
- * normally be the looper associated with the application's main thread, which can be obtained
- * using {@link android.app.Activity#getMainLooper()}. Null may be passed if the renderer
- * should be invoked directly on the player's internal rendering thread.
- * @param parserFactory A factory from which to obtain {@link Decoder} instances.
- */
- public TextTrackRenderer(TextRenderer textRenderer, Looper textRendererLooper,
- SubtitleParserFactory parserFactory) {
- this.textRenderer = Assertions.checkNotNull(textRenderer);
- this.textRendererHandler = textRendererLooper == null ? null
- : new Handler(textRendererLooper, this);
- this.parserFactory = parserFactory;
- formatHolder = new FormatHolder();
- }
-
- @Override
- public int getTrackType() {
- return C.TRACK_TYPE_TEXT;
- }
-
- @Override
- protected int supportsFormat(Format format) {
- return parserFactory.supportsFormat(format) ? TrackRenderer.FORMAT_HANDLED
- : (MimeTypes.isText(format.sampleMimeType) ? FORMAT_UNSUPPORTED_SUBTYPE
- : FORMAT_UNSUPPORTED_TYPE);
- }
-
- @Override
- protected void onStreamChanged(Format[] formats) throws ExoPlaybackException {
- if (parser != null) {
- parser.release();
- }
- parser = parserFactory.createParser(formats[0]);
- }
-
- @Override
- protected void onReset(long positionUs, boolean joining) {
- inputStreamEnded = false;
- outputStreamEnded = false;
- if (subtitle != null) {
- subtitle.release();
- subtitle = null;
- }
- if (nextSubtitle != null) {
- nextSubtitle.release();
- nextSubtitle = null;
- }
- nextInputBuffer = null;
- clearTextRenderer();
- parser.flush();
- }
-
- @Override
- protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException {
- if (outputStreamEnded) {
- return;
- }
-
- if (nextSubtitle == null) {
- parser.setPositionUs(positionUs);
- try {
- nextSubtitle = parser.dequeueOutputBuffer();
- } catch (IOException e) {
- throw ExoPlaybackException.createForRenderer(e, getIndex());
- }
- }
-
- if (getState() != TrackRenderer.STATE_STARTED) {
- return;
- }
-
- boolean textRendererNeedsUpdate = false;
- if (subtitle != null) {
- // We're iterating through the events in a subtitle. Set textRendererNeedsUpdate if we
- // advance to the next event.
- long subtitleNextEventTimeUs = getNextEventTime();
- while (subtitleNextEventTimeUs <= positionUs) {
- nextSubtitleEventIndex++;
- subtitleNextEventTimeUs = getNextEventTime();
- textRendererNeedsUpdate = true;
- }
- }
-
- if (nextSubtitle != null && nextSubtitle.timestampUs <= positionUs) {
- // Advance to the next subtitle. Sync the next event index and trigger an update.
- if (subtitle != null) {
- subtitle.release();
- }
- subtitle = nextSubtitle;
- nextSubtitle = null;
- if (subtitle.isEndOfStream()) {
- outputStreamEnded = true;
- subtitle.release();
- subtitle = null;
- return;
- }
- nextSubtitleEventIndex = subtitle.getNextEventTimeIndex(positionUs);
- textRendererNeedsUpdate = true;
- }
-
- if (textRendererNeedsUpdate) {
- // textRendererNeedsUpdate is set and we're playing. Update the renderer.
- updateTextRenderer(subtitle.getCues(positionUs));
- }
-
- try {
- while (!inputStreamEnded) {
- if (nextInputBuffer == null) {
- nextInputBuffer = parser.dequeueInputBuffer();
- if (nextInputBuffer == null) {
- return;
- }
- }
- // Try and read the next subtitle from the source.
- int result = readSource(formatHolder, nextInputBuffer);
- if (result == TrackStream.BUFFER_READ) {
- // Clear BUFFER_FLAG_DECODE_ONLY (see [Internal: b/27893809]) and queue the buffer.
- nextInputBuffer.clearFlag(C.BUFFER_FLAG_DECODE_ONLY);
- if (nextInputBuffer.isEndOfStream()) {
- inputStreamEnded = true;
- } else {
- nextInputBuffer.subsampleOffsetUs = formatHolder.format.subsampleOffsetUs;
- nextInputBuffer.flip();
- }
- parser.queueInputBuffer(nextInputBuffer);
- nextInputBuffer = null;
- } else if (result == TrackStream.NOTHING_READ) {
- break;
- }
- }
- } catch (ParserException e) {
- throw ExoPlaybackException.createForRenderer(e, getIndex());
- }
- }
-
- @Override
- protected void onDisabled() {
- if (subtitle != null) {
- subtitle.release();
- subtitle = null;
- }
- if (nextSubtitle != null) {
- nextSubtitle.release();
- nextSubtitle = null;
- }
- parser.release();
- parser = null;
- nextInputBuffer = null;
- clearTextRenderer();
- super.onDisabled();
- }
-
- @Override
- protected boolean isEnded() {
- return outputStreamEnded;
- }
-
- @Override
- protected boolean isReady() {
- // Don't block playback whilst subtitles are loading.
- // Note: To change this behavior, it will be necessary to consider [Internal: b/12949941].
- return true;
- }
-
- private long getNextEventTime() {
- return ((nextSubtitleEventIndex == -1)
- || (nextSubtitleEventIndex >= subtitle.getEventTimeCount())) ? Long.MAX_VALUE
- : (subtitle.getEventTime(nextSubtitleEventIndex));
- }
-
- private void updateTextRenderer(List
* Application of audio effects is dependent on the audio renderer used. When using
- * {@link com.google.android.exoplayer2.MediaCodecAudioTrackRenderer}, the recommended approach is
- * to extend the class and override
- * {@link com.google.android.exoplayer2.MediaCodecAudioTrackRenderer#onAudioSessionId}.
+ * {@link MediaCodecAudioRenderer}, the recommended approach is to extend the class and override
+ * {@link MediaCodecAudioRenderer#onAudioSessionId}.
*
* @throws UnsupportedOperationException Always thrown.
*/
diff --git a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java
index cd6b344741..8c3876e985 100644
--- a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java
+++ b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/gts/DashTest.java
@@ -23,9 +23,9 @@ import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaCodecUtil;
import com.google.android.exoplayer2.MediaCodecUtil.DecoderQueryException;
import com.google.android.exoplayer2.MediaSource;
+import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.TrackGroup;
import com.google.android.exoplayer2.TrackGroupArray;
-import com.google.android.exoplayer2.TrackRenderer;
import com.google.android.exoplayer2.TrackSelection;
import com.google.android.exoplayer2.TrackSelectionPolicy;
import com.google.android.exoplayer2.dash.DashMediaSource;
@@ -444,7 +444,7 @@ public final class DashTest extends ActivityInstrumentationTestCase2> id3Renderer = new MetadataTrackRenderer<>(new Id3Parser(),
- componentListener, mainHandler.getLooper());
+ MetadataRenderer
> id3Renderer = new MetadataRenderer<>(componentListener,
+ mainHandler.getLooper(), new Id3Parser());
renderersList.add(id3Renderer);
}
- private void buildExtensionRenderers(ArrayList
> {
+ private final class ComponentListener implements VideoRendererEventListener,
+ AudioRendererEventListener, TextRenderer.Output, MetadataRenderer.Output
> {
- // VideoTrackRendererEventListener implementation
+ // VideoRendererEventListener implementation
@Override
public void onVideoEnabled(CodecCounters counters) {
@@ -537,7 +535,7 @@ public final class SimpleExoPlayer implements ExoPlayer {
videoCodecCounters = null;
}
- // AudioTrackRendererEventListener implementation
+ // AudioRendererEventListener implementation
@Override
public void onAudioEnabled(CodecCounters counters) {
@@ -581,7 +579,7 @@ public final class SimpleExoPlayer implements ExoPlayer {
audioCodecCounters = null;
}
- // TextRenderer implementation
+ // TextRendererOutput implementation
@Override
public void onCues(List