Added javadoc to DefaultTrackSelectionPolicy methods

Also fixed language comparison using Locale's.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126703125
This commit is contained in:
aquilescanta 2016-07-06 08:57:56 -07:00 committed by Oliver Woodman
parent 19d65a7a9d
commit b523ff8d81

View File

@ -17,6 +17,8 @@ package com.google.android.exoplayer;
import com.google.android.exoplayer.util.Util;
import java.util.Locale;
/**
* A {@link TrackSelectionPolicy} that allows configuration of common parameters.
*/
@ -27,9 +29,9 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
private String preferredLanguage;
private boolean allowMixedMimeAdaptiveness;
private boolean allowNonSeamlessAdaptiveness;
private boolean filterHdFormats;
private int maxVideoWidth;
private int maxVideoHeight;
private boolean filterHdVideoTracks;
public DefaultTrackSelectionPolicy() {
allowNonSeamlessAdaptiveness = true;
@ -37,20 +39,24 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
maxVideoHeight = Integer.MAX_VALUE;
}
/**
* Sets the preferred language for audio and text tracks.
*
* @param preferredLanguage The language as defined by RFC 5646.
*/
public void setPreferredLanguage(String preferredLanguage) {
if (!Util.areEqual(this.preferredLanguage, preferredLanguage)) {
this.preferredLanguage = preferredLanguage;
invalidate();
}
}
public void setFilterHdFormats(boolean filterHdFormats) {
if (this.filterHdFormats != filterHdFormats) {
this.filterHdFormats = filterHdFormats;
String adjustedPreferredLanguage = new Locale(preferredLanguage).getLanguage();
if (!Util.areEqual(this.preferredLanguage, adjustedPreferredLanguage)) {
this.preferredLanguage = adjustedPreferredLanguage;
invalidate();
}
}
/**
* Sets whether selections may contain mixed mime types.
*
* @param allowMixedMimeAdaptiveness True to allow mixed mime types, false otherwise.
*/
public void allowMixedMimeAdaptiveness(boolean allowMixedMimeAdaptiveness) {
if (this.allowMixedMimeAdaptiveness != allowMixedMimeAdaptiveness) {
this.allowMixedMimeAdaptiveness = allowMixedMimeAdaptiveness;
@ -58,6 +64,12 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
}
}
/**
* Sets whether non seamless adaptation is allowed.
*
* @param allowNonSeamlessAdaptiveness True to allow non seamless adaptation between tracks, false
* otherwise.
*/
public void allowNonSeamlessAdaptiveness(boolean allowNonSeamlessAdaptiveness) {
if (this.allowNonSeamlessAdaptiveness != allowNonSeamlessAdaptiveness) {
this.allowNonSeamlessAdaptiveness = allowNonSeamlessAdaptiveness;
@ -65,6 +77,12 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
}
}
/**
* Sets the maximum allowed size for video tracks.
*
* @param maxVideoWidth Maximum allowed width.
* @param maxVideoHeight Maximum allowed height.
*/
public void setMaxVideoSize(int maxVideoWidth, int maxVideoHeight) {
if (this.maxVideoWidth != maxVideoWidth || this.maxVideoHeight != maxVideoHeight) {
this.maxVideoWidth = maxVideoWidth;
@ -73,6 +91,23 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
}
}
/**
* Sets whether HD video tracks are filtered.
* <p>
* A video track is considered HD when it is 1280 pixels wide or more, or when it is 720 pixels
* high or more.
*
* @param filterHdVideoTracks True to filter HD video tracks, false otherwise.
*/
public void setFilterHdVideoTracks(boolean filterHdVideoTracks) {
if (this.filterHdVideoTracks != filterHdVideoTracks) {
this.filterHdVideoTracks = filterHdVideoTracks;
invalidate();
}
}
// TrackSelectionPolicy implementation.
@Override
public TrackSelection[] selectTracks(TrackRenderer[] renderers,
TrackGroupArray[] rendererTrackGroupArrays, int[][][] rendererFormatSupports)
@ -107,8 +142,10 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
int requiredAdaptiveSupport = allowNonSeamlessAdaptiveness
? TrackRenderer.ADAPTIVE_NOT_SEAMLESS | TrackRenderer.ADAPTIVE_SEAMLESS
: TrackRenderer.ADAPTIVE_SEAMLESS;
int maxVideoWidth = Math.min(this.maxVideoWidth, filterHdFormats ? 1279 : Integer.MAX_VALUE);
int maxVideoHeight = Math.min(this.maxVideoHeight, filterHdFormats ? 719 : Integer.MAX_VALUE);
int maxVideoWidth = Math.min(this.maxVideoWidth,
filterHdVideoTracks ? 1279 : Integer.MAX_VALUE);
int maxVideoHeight = Math.min(this.maxVideoHeight,
filterHdVideoTracks ? 719 : Integer.MAX_VALUE);
boolean allowMixedMimeTypes = allowMixedMimeAdaptiveness
&& (renderer.supportsMixedMimeTypeAdaptation() & requiredAdaptiveSupport) != 0;
int largestAdaptiveGroup = -1;
@ -214,8 +251,7 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
firstForcedGroup = groupIndex;
firstForcedTrack = trackIndex;
}
if (preferredLanguage != null
&& preferredLanguage.equals(trackGroup.getFormat(trackIndex).language)) {
if (formatHasLanguage(trackGroup.getFormat(trackIndex), preferredLanguage)) {
return new TrackSelection(groupIndex, trackIndex);
}
}
@ -246,7 +282,7 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
int[] trackFormatSupport = formatSupport[groupIndex];
for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) {
if (isSupported(trackFormatSupport[trackIndex])
&& preferredLanguage.equals(trackGroup.getFormat(trackIndex).language)) {
&& formatHasLanguage(trackGroup.getFormat(trackIndex), preferredLanguage)) {
return new TrackSelection(groupIndex, trackIndex);
}
}
@ -266,5 +302,9 @@ public class DefaultTrackSelectionPolicy extends TrackSelectionPolicy {
return (formatSupport & TrackRenderer.FORMAT_SUPPORT_MASK) == TrackRenderer.FORMAT_HANDLED;
}
private static boolean formatHasLanguage(Format format, String language) {
return language != null && language.equals(new Locale(format.language).getLanguage());
}
}