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;
/**
* 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 state;
......@@ -39,6 +39,11 @@ public abstract class BaseRenderer implements Renderer {
}
@Override
public final RendererCapabilities getCapabilities() {
return this;
}
@Override
public final void setIndex(int index) {
this.index = index;
}
......
......@@ -587,6 +587,7 @@ import java.util.ArrayList;
private final class Timeline {
private final Renderer[] renderers;
private final RendererCapabilities[] rendererCapabilities;
public boolean isReady;
public boolean isEnded;
......@@ -600,6 +601,10 @@ import java.util.ArrayList;
public Timeline(Renderer[] 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;
}
......@@ -651,7 +656,8 @@ import java.util.ArrayList;
// Attempt to create the next period.
MediaPeriod mediaPeriod = mediaSource.createPeriod(periodIndex);
if (mediaPeriod != null) {
Period newPeriod = new Period(renderers, trackSelector, mediaPeriod, periodIndex);
Period newPeriod = new Period(renderers, rendererCapabilities, trackSelector,
mediaPeriod, periodIndex);
if (loadingPeriod != null) {
loadingPeriod.setNextPeriod(newPeriod);
}
......@@ -1012,15 +1018,17 @@ import java.util.ArrayList;
public boolean needsContinueLoading;
private final Renderer[] renderers;
private final RendererCapabilities[] rendererCapabilities;
private final TrackSelector trackSelector;
private Object trackSelectionData;
private TrackSelectionArray trackSelections;
private TrackSelectionArray periodTrackSelections;
public Period(Renderer[] renderers, TrackSelector trackSelector, MediaPeriod mediaPeriod,
int index) {
public Period(Renderer[] renderers, RendererCapabilities[] rendererCapabilities,
TrackSelector trackSelector, MediaPeriod mediaPeriod, int index) {
this.renderers = renderers;
this.rendererCapabilities = rendererCapabilities;
this.trackSelector = trackSelector;
this.mediaPeriod = mediaPeriod;
this.index = index;
......@@ -1046,7 +1054,7 @@ import java.util.ArrayList;
public boolean selectTracks() throws ExoPlaybackException {
Pair<TrackSelectionArray, Object> result =
trackSelector.selectTracks(renderers, mediaPeriod.getTrackGroups());
trackSelector.selectTracks(rendererCapabilities, mediaPeriod.getTrackGroups());
TrackSelectionArray newTrackSelections = result.first;
if (newTrackSelections.equals(periodTrackSelections)) {
return false;
......
......@@ -32,7 +32,7 @@ import java.io.IOException;
* alt="Renderer state transitions"
* border="0"/></p>
*/
public interface Renderer extends ExoPlayerComponent, RendererCapabilities {
public interface Renderer extends ExoPlayerComponent {
/**
* The renderer is disabled.
......@@ -49,6 +49,22 @@ public interface Renderer extends ExoPlayerComponent, RendererCapabilities {
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.
*
* @param index The renderer index.
......
......@@ -78,13 +78,9 @@ public interface RendererCapabilities {
* The {@link Renderer} does not support adaptation between formats.
*/
int ADAPTIVE_NOT_SUPPORTED = 0b0000;
/**
* 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}.
* @see Renderer#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