Commit 8a36ce69 by olly Committed by Oliver Woodman

Add Renderer.getCapabilities

Renderer no longer extends RendererCapabilities after this
change. Capabilities are instead accessed via a getter.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=127532634
parent dcc1ac56
...@@ -25,7 +25,7 @@ import java.io.IOException; ...@@ -25,7 +25,7 @@ import java.io.IOException;
/** /**
* An abstract base class suitable for most {@link Renderer} implementations. * An abstract base class suitable for most {@link Renderer} implementations.
*/ */
public abstract class BaseRenderer implements Renderer { public abstract class BaseRenderer implements Renderer, RendererCapabilities {
private int index; private int index;
private int state; private int state;
...@@ -39,6 +39,11 @@ public abstract class BaseRenderer implements Renderer { ...@@ -39,6 +39,11 @@ public abstract class BaseRenderer implements Renderer {
} }
@Override @Override
public final RendererCapabilities getCapabilities() {
return this;
}
@Override
public final void setIndex(int index) { public final void setIndex(int index) {
this.index = index; this.index = index;
} }
......
...@@ -587,6 +587,7 @@ import java.util.ArrayList; ...@@ -587,6 +587,7 @@ import java.util.ArrayList;
private final class Timeline { private final class Timeline {
private final Renderer[] renderers; private final Renderer[] renderers;
private final RendererCapabilities[] rendererCapabilities;
public boolean isReady; public boolean isReady;
public boolean isEnded; public boolean isEnded;
...@@ -600,6 +601,10 @@ import java.util.ArrayList; ...@@ -600,6 +601,10 @@ import java.util.ArrayList;
public Timeline(Renderer[] renderers) { public Timeline(Renderer[] renderers) {
this.renderers = renderers; this.renderers = renderers;
rendererCapabilities = new RendererCapabilities[renderers.length];
for (int i = 0; i < renderers.length; i++) {
rendererCapabilities[i] = renderers[i].getCapabilities();
}
playingPeriodEndPositionUs = C.UNSET_TIME_US; playingPeriodEndPositionUs = C.UNSET_TIME_US;
} }
...@@ -651,7 +656,8 @@ import java.util.ArrayList; ...@@ -651,7 +656,8 @@ import java.util.ArrayList;
// Attempt to create the next period. // Attempt to create the next period.
MediaPeriod mediaPeriod = mediaSource.createPeriod(periodIndex); MediaPeriod mediaPeriod = mediaSource.createPeriod(periodIndex);
if (mediaPeriod != null) { if (mediaPeriod != null) {
Period newPeriod = new Period(renderers, trackSelector, mediaPeriod, periodIndex); Period newPeriod = new Period(renderers, rendererCapabilities, trackSelector,
mediaPeriod, periodIndex);
if (loadingPeriod != null) { if (loadingPeriod != null) {
loadingPeriod.setNextPeriod(newPeriod); loadingPeriod.setNextPeriod(newPeriod);
} }
...@@ -1012,15 +1018,17 @@ import java.util.ArrayList; ...@@ -1012,15 +1018,17 @@ import java.util.ArrayList;
public boolean needsContinueLoading; public boolean needsContinueLoading;
private final Renderer[] renderers; private final Renderer[] renderers;
private final RendererCapabilities[] rendererCapabilities;
private final TrackSelector trackSelector; private final TrackSelector trackSelector;
private Object trackSelectionData; private Object trackSelectionData;
private TrackSelectionArray trackSelections; private TrackSelectionArray trackSelections;
private TrackSelectionArray periodTrackSelections; private TrackSelectionArray periodTrackSelections;
public Period(Renderer[] renderers, TrackSelector trackSelector, MediaPeriod mediaPeriod, public Period(Renderer[] renderers, RendererCapabilities[] rendererCapabilities,
int index) { TrackSelector trackSelector, MediaPeriod mediaPeriod, int index) {
this.renderers = renderers; this.renderers = renderers;
this.rendererCapabilities = rendererCapabilities;
this.trackSelector = trackSelector; this.trackSelector = trackSelector;
this.mediaPeriod = mediaPeriod; this.mediaPeriod = mediaPeriod;
this.index = index; this.index = index;
...@@ -1046,7 +1054,7 @@ import java.util.ArrayList; ...@@ -1046,7 +1054,7 @@ import java.util.ArrayList;
public boolean selectTracks() throws ExoPlaybackException { public boolean selectTracks() throws ExoPlaybackException {
Pair<TrackSelectionArray, Object> result = Pair<TrackSelectionArray, Object> result =
trackSelector.selectTracks(renderers, mediaPeriod.getTrackGroups()); trackSelector.selectTracks(rendererCapabilities, mediaPeriod.getTrackGroups());
TrackSelectionArray newTrackSelections = result.first; TrackSelectionArray newTrackSelections = result.first;
if (newTrackSelections.equals(periodTrackSelections)) { if (newTrackSelections.equals(periodTrackSelections)) {
return false; return false;
......
...@@ -32,7 +32,7 @@ import java.io.IOException; ...@@ -32,7 +32,7 @@ import java.io.IOException;
* alt="Renderer state transitions" * alt="Renderer state transitions"
* border="0"/></p> * border="0"/></p>
*/ */
public interface Renderer extends ExoPlayerComponent, RendererCapabilities { public interface Renderer extends ExoPlayerComponent {
/** /**
* The renderer is disabled. * The renderer is disabled.
...@@ -49,6 +49,22 @@ public interface Renderer extends ExoPlayerComponent, RendererCapabilities { ...@@ -49,6 +49,22 @@ public interface Renderer extends ExoPlayerComponent, RendererCapabilities {
int STATE_STARTED = 2; int STATE_STARTED = 2;
/** /**
* Returns the track type that the {@link Renderer} handles. For example, a video renderer will
* return {@link C#TRACK_TYPE_VIDEO}, an audio renderer will return {@link C#TRACK_TYPE_AUDIO}, a
* text renderer will return {@link C#TRACK_TYPE_TEXT}, and so on.
*
* @return One of the {@code TRACK_TYPE_*} constants defined in {@link C}.
*/
int getTrackType();
/**
* Returns the capabilities of the renderer.
*
* @return The capabilities of the renderer.
*/
RendererCapabilities getCapabilities();
/**
* Sets the index of this renderer within the player. * Sets the index of this renderer within the player.
* *
* @param index The renderer index. * @param index The renderer index.
......
...@@ -80,11 +80,7 @@ public interface RendererCapabilities { ...@@ -80,11 +80,7 @@ public interface RendererCapabilities {
int ADAPTIVE_NOT_SUPPORTED = 0b0000; int ADAPTIVE_NOT_SUPPORTED = 0b0000;
/** /**
* Returns the track type that the {@link Renderer} handles. For example, a video renderer will * @see Renderer#getTrackType()
* return {@link C#TRACK_TYPE_VIDEO}, an audio renderer will return {@link C#TRACK_TYPE_AUDIO}, a
* text renderer will return {@link C#TRACK_TYPE_TEXT}, and so on.
*
* @return One of the {@code TRACK_TYPE_*} constants defined in {@link C}.
*/ */
int getTrackType(); int getTrackType();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment