mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Convert context dependent TrackSelectionParameters to boolean
This avoids that these settings have to be resolved inline, potentially blocking the main thread. They can be resolved at the time of track selection on a background thread instead. As a side effect, we can also remove the context parameter from the Builder. Having the Context in the Builder is also a bad sign in the first place because it implies the potentially blocking calls can happen. PiperOrigin-RevId: 720523139
This commit is contained in:
parent
c058d97a97
commit
ddcf455d03
13
api.txt
13
api.txt
@ -1096,12 +1096,13 @@ package androidx.media3.common {
|
|||||||
public class TrackSelectionParameters {
|
public class TrackSelectionParameters {
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder buildUpon();
|
method public androidx.media3.common.TrackSelectionParameters.Builder buildUpon();
|
||||||
method public static androidx.media3.common.TrackSelectionParameters fromBundle(android.os.Bundle);
|
method public static androidx.media3.common.TrackSelectionParameters fromBundle(android.os.Bundle);
|
||||||
method public static androidx.media3.common.TrackSelectionParameters getDefaults(android.content.Context);
|
method @Deprecated public static androidx.media3.common.TrackSelectionParameters getDefaults(android.content.Context);
|
||||||
method @CallSuper public android.os.Bundle toBundle();
|
method @CallSuper public android.os.Bundle toBundle();
|
||||||
field public final com.google.common.collect.ImmutableSet<java.lang.Integer> disabledTrackTypes;
|
field public final com.google.common.collect.ImmutableSet<java.lang.Integer> disabledTrackTypes;
|
||||||
field public final boolean forceHighestSupportedBitrate;
|
field public final boolean forceHighestSupportedBitrate;
|
||||||
field public final boolean forceLowestBitrate;
|
field public final boolean forceLowestBitrate;
|
||||||
field @androidx.media3.common.C.SelectionFlags public final int ignoredTextSelectionFlags;
|
field @androidx.media3.common.C.SelectionFlags public final int ignoredTextSelectionFlags;
|
||||||
|
field public final boolean isViewportSizeLimitedByPhysicalDisplaySize;
|
||||||
field public final int maxAudioBitrate;
|
field public final int maxAudioBitrate;
|
||||||
field public final int maxAudioChannelCount;
|
field public final int maxAudioChannelCount;
|
||||||
field public final int maxVideoBitrate;
|
field public final int maxVideoBitrate;
|
||||||
@ -1121,13 +1122,15 @@ package androidx.media3.common {
|
|||||||
field public final com.google.common.collect.ImmutableList<java.lang.String> preferredVideoMimeTypes;
|
field public final com.google.common.collect.ImmutableList<java.lang.String> preferredVideoMimeTypes;
|
||||||
field @androidx.media3.common.C.RoleFlags public final int preferredVideoRoleFlags;
|
field @androidx.media3.common.C.RoleFlags public final int preferredVideoRoleFlags;
|
||||||
field public final boolean selectUndeterminedTextLanguage;
|
field public final boolean selectUndeterminedTextLanguage;
|
||||||
|
field public final boolean usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||||
field public final int viewportHeight;
|
field public final int viewportHeight;
|
||||||
field public final boolean viewportOrientationMayChange;
|
field public final boolean viewportOrientationMayChange;
|
||||||
field public final int viewportWidth;
|
field public final int viewportWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TrackSelectionParameters.Builder {
|
public static class TrackSelectionParameters.Builder {
|
||||||
ctor public TrackSelectionParameters.Builder(android.content.Context);
|
ctor public TrackSelectionParameters.Builder();
|
||||||
|
ctor @Deprecated @com.google.errorprone.annotations.InlineMe(replacement="this()") public TrackSelectionParameters.Builder(android.content.Context);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder addOverride(androidx.media3.common.TrackSelectionOverride);
|
method public androidx.media3.common.TrackSelectionParameters.Builder addOverride(androidx.media3.common.TrackSelectionOverride);
|
||||||
method public androidx.media3.common.TrackSelectionParameters build();
|
method public androidx.media3.common.TrackSelectionParameters build();
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder clearOverride(androidx.media3.common.TrackGroup);
|
method public androidx.media3.common.TrackSelectionParameters.Builder clearOverride(androidx.media3.common.TrackGroup);
|
||||||
@ -1154,7 +1157,8 @@ package androidx.media3.common {
|
|||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredAudioMimeTypes(java.lang.String...);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredAudioMimeTypes(java.lang.String...);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredAudioRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredAudioRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguage(@Nullable String);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguage(@Nullable String);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(android.content.Context);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||||
|
method @Deprecated public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(android.content.Context);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguages(java.lang.String...);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextLanguages(java.lang.String...);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredTextRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredVideoMimeType(@Nullable String);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setPreferredVideoMimeType(@Nullable String);
|
||||||
@ -1163,7 +1167,8 @@ package androidx.media3.common {
|
|||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setSelectUndeterminedTextLanguage(boolean);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setSelectUndeterminedTextLanguage(boolean);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setTrackTypeDisabled(@androidx.media3.common.C.TrackType int, boolean);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setTrackTypeDisabled(@androidx.media3.common.C.TrackType int, boolean);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setViewportSize(int, int, boolean);
|
method public androidx.media3.common.TrackSelectionParameters.Builder setViewportSize(int, int, boolean);
|
||||||
method public androidx.media3.common.TrackSelectionParameters.Builder setViewportSizeToPhysicalDisplaySize(android.content.Context, boolean);
|
method @Deprecated public androidx.media3.common.TrackSelectionParameters.Builder setViewportSizeToPhysicalDisplaySize(android.content.Context, boolean);
|
||||||
|
method public androidx.media3.common.TrackSelectionParameters.Builder setViewportSizeToPhysicalDisplaySize(boolean);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class Tracks {
|
public final class Tracks {
|
||||||
|
@ -315,7 +315,7 @@ public class DownloadTracker {
|
|||||||
TrackSelectionDialog.createForTracksAndParameters(
|
TrackSelectionDialog.createForTracksAndParameters(
|
||||||
/* titleId= */ R.string.exo_download_description,
|
/* titleId= */ R.string.exo_download_description,
|
||||||
tracks,
|
tracks,
|
||||||
DownloadHelper.getDefaultTrackSelectorParameters(context),
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
/* allowAdaptiveSelections= */ false,
|
/* allowAdaptiveSelections= */ false,
|
||||||
/* allowMultipleOverrides= */ true,
|
/* allowMultipleOverrides= */ true,
|
||||||
/* onTracksSelectedListener= */ this,
|
/* onTracksSelectedListener= */ this,
|
||||||
|
@ -637,7 +637,7 @@ public final class CastPlayer extends BasePlayer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
return TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -159,7 +159,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
|||||||
seekForwardIncrementMs = C.DEFAULT_SEEK_FORWARD_INCREMENT_MS;
|
seekForwardIncrementMs = C.DEFAULT_SEEK_FORWARD_INCREMENT_MS;
|
||||||
maxSeekToPreviousPositionMs = C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS;
|
maxSeekToPreviousPositionMs = C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS;
|
||||||
playbackParameters = PlaybackParameters.DEFAULT;
|
playbackParameters = PlaybackParameters.DEFAULT;
|
||||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
trackSelectionParameters = TrackSelectionParameters.DEFAULT;
|
||||||
audioAttributes = AudioAttributes.DEFAULT;
|
audioAttributes = AudioAttributes.DEFAULT;
|
||||||
volume = 1f;
|
volume = 1f;
|
||||||
videoSize = VideoSize.UNKNOWN;
|
videoSize = VideoSize.UNKNOWN;
|
||||||
|
@ -22,9 +22,7 @@ import static java.lang.annotation.ElementType.TYPE_USE;
|
|||||||
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Point;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
|
||||||
import android.view.accessibility.CaptioningManager;
|
import android.view.accessibility.CaptioningManager;
|
||||||
import androidx.annotation.CallSuper;
|
import androidx.annotation.CallSuper;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
@ -37,6 +35,7 @@ import com.google.common.collect.ImmutableMap;
|
|||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
|
import com.google.errorprone.annotations.InlineMe;
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
@ -44,7 +43,6 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.checkerframework.checker.initialization.qual.UnknownInitialization;
|
import org.checkerframework.checker.initialization.qual.UnknownInitialization;
|
||||||
import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
|
import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
|
||||||
@ -88,6 +86,7 @@ public class TrackSelectionParameters {
|
|||||||
private int minVideoBitrate;
|
private int minVideoBitrate;
|
||||||
private int viewportWidth;
|
private int viewportWidth;
|
||||||
private int viewportHeight;
|
private int viewportHeight;
|
||||||
|
private boolean isViewportSizeLimitedByPhysicalDisplaySize;
|
||||||
private boolean viewportOrientationMayChange;
|
private boolean viewportOrientationMayChange;
|
||||||
private ImmutableList<String> preferredVideoMimeTypes;
|
private ImmutableList<String> preferredVideoMimeTypes;
|
||||||
private ImmutableList<String> preferredVideoLanguages;
|
private ImmutableList<String> preferredVideoLanguages;
|
||||||
@ -102,6 +101,7 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
private ImmutableList<String> preferredTextLanguages;
|
private ImmutableList<String> preferredTextLanguages;
|
||||||
private @C.RoleFlags int preferredTextRoleFlags;
|
private @C.RoleFlags int preferredTextRoleFlags;
|
||||||
|
private boolean usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||||
private @C.SelectionFlags int ignoredTextSelectionFlags;
|
private @C.SelectionFlags int ignoredTextSelectionFlags;
|
||||||
private boolean selectUndeterminedTextLanguage;
|
private boolean selectUndeterminedTextLanguage;
|
||||||
// Image
|
// Image
|
||||||
@ -112,12 +112,7 @@ public class TrackSelectionParameters {
|
|||||||
private HashMap<TrackGroup, TrackSelectionOverride> overrides;
|
private HashMap<TrackGroup, TrackSelectionOverride> overrides;
|
||||||
private HashSet<@C.TrackType Integer> disabledTrackTypes;
|
private HashSet<@C.TrackType Integer> disabledTrackTypes;
|
||||||
|
|
||||||
/**
|
/** Creates a builder with default initial values. */
|
||||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
|
||||||
* #Builder(Context)} instead.
|
|
||||||
*/
|
|
||||||
@UnstableApi
|
|
||||||
@Deprecated
|
|
||||||
public Builder() {
|
public Builder() {
|
||||||
// Video
|
// Video
|
||||||
maxVideoWidth = Integer.MAX_VALUE;
|
maxVideoWidth = Integer.MAX_VALUE;
|
||||||
@ -126,6 +121,7 @@ public class TrackSelectionParameters {
|
|||||||
maxVideoBitrate = Integer.MAX_VALUE;
|
maxVideoBitrate = Integer.MAX_VALUE;
|
||||||
viewportWidth = Integer.MAX_VALUE;
|
viewportWidth = Integer.MAX_VALUE;
|
||||||
viewportHeight = Integer.MAX_VALUE;
|
viewportHeight = Integer.MAX_VALUE;
|
||||||
|
isViewportSizeLimitedByPhysicalDisplaySize = true;
|
||||||
viewportOrientationMayChange = true;
|
viewportOrientationMayChange = true;
|
||||||
preferredVideoMimeTypes = ImmutableList.of();
|
preferredVideoMimeTypes = ImmutableList.of();
|
||||||
preferredVideoLanguages = ImmutableList.of();
|
preferredVideoLanguages = ImmutableList.of();
|
||||||
@ -140,6 +136,7 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
preferredTextLanguages = ImmutableList.of();
|
preferredTextLanguages = ImmutableList.of();
|
||||||
preferredTextRoleFlags = 0;
|
preferredTextRoleFlags = 0;
|
||||||
|
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = true;
|
||||||
ignoredTextSelectionFlags = 0;
|
ignoredTextSelectionFlags = 0;
|
||||||
selectUndeterminedTextLanguage = false;
|
selectUndeterminedTextLanguage = false;
|
||||||
// Image
|
// Image
|
||||||
@ -152,15 +149,12 @@ public class TrackSelectionParameters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a builder with default initial values.
|
* @deprecated Use {@link #Builder()} instead.
|
||||||
*
|
|
||||||
* @param context Any context.
|
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"deprecation", "method.invocation"}) // Methods invoked are setter only.
|
@Deprecated
|
||||||
|
@InlineMe(replacement = "this()")
|
||||||
public Builder(Context context) {
|
public Builder(Context context) {
|
||||||
this();
|
this();
|
||||||
setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(context);
|
|
||||||
setViewportSizeToPhysicalDisplaySize(context, /* viewportOrientationMayChange= */ true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Creates a builder with the initial values specified in {@code initialValues}. */
|
/** Creates a builder with the initial values specified in {@code initialValues}. */
|
||||||
@ -173,26 +167,25 @@ public class TrackSelectionParameters {
|
|||||||
@UnstableApi
|
@UnstableApi
|
||||||
protected Builder(Bundle bundle) {
|
protected Builder(Bundle bundle) {
|
||||||
// Video
|
// Video
|
||||||
maxVideoWidth = bundle.getInt(FIELD_MAX_VIDEO_WIDTH, DEFAULT_WITHOUT_CONTEXT.maxVideoWidth);
|
maxVideoWidth = bundle.getInt(FIELD_MAX_VIDEO_WIDTH, DEFAULT.maxVideoWidth);
|
||||||
maxVideoHeight =
|
maxVideoHeight = bundle.getInt(FIELD_MAX_VIDEO_HEIGHT, DEFAULT.maxVideoHeight);
|
||||||
bundle.getInt(FIELD_MAX_VIDEO_HEIGHT, DEFAULT_WITHOUT_CONTEXT.maxVideoHeight);
|
maxVideoFrameRate = bundle.getInt(FIELD_MAX_VIDEO_FRAMERATE, DEFAULT.maxVideoFrameRate);
|
||||||
maxVideoFrameRate =
|
maxVideoBitrate = bundle.getInt(FIELD_MAX_VIDEO_BITRATE, DEFAULT.maxVideoBitrate);
|
||||||
bundle.getInt(FIELD_MAX_VIDEO_FRAMERATE, DEFAULT_WITHOUT_CONTEXT.maxVideoFrameRate);
|
minVideoWidth = bundle.getInt(FIELD_MIN_VIDEO_WIDTH, DEFAULT.minVideoWidth);
|
||||||
maxVideoBitrate =
|
minVideoHeight = bundle.getInt(FIELD_MIN_VIDEO_HEIGHT, DEFAULT.minVideoHeight);
|
||||||
bundle.getInt(FIELD_MAX_VIDEO_BITRATE, DEFAULT_WITHOUT_CONTEXT.maxVideoBitrate);
|
minVideoFrameRate = bundle.getInt(FIELD_MIN_VIDEO_FRAMERATE, DEFAULT.minVideoFrameRate);
|
||||||
minVideoWidth = bundle.getInt(FIELD_MIN_VIDEO_WIDTH, DEFAULT_WITHOUT_CONTEXT.minVideoWidth);
|
minVideoBitrate = bundle.getInt(FIELD_MIN_VIDEO_BITRATE, DEFAULT.minVideoBitrate);
|
||||||
minVideoHeight =
|
viewportWidth = bundle.getInt(FIELD_VIEWPORT_WIDTH, DEFAULT.viewportWidth);
|
||||||
bundle.getInt(FIELD_MIN_VIDEO_HEIGHT, DEFAULT_WITHOUT_CONTEXT.minVideoHeight);
|
viewportHeight = bundle.getInt(FIELD_VIEWPORT_HEIGHT, DEFAULT.viewportHeight);
|
||||||
minVideoFrameRate =
|
isViewportSizeLimitedByPhysicalDisplaySize =
|
||||||
bundle.getInt(FIELD_MIN_VIDEO_FRAMERATE, DEFAULT_WITHOUT_CONTEXT.minVideoFrameRate);
|
viewportWidth == Integer.MAX_VALUE
|
||||||
minVideoBitrate =
|
&& viewportHeight == Integer.MAX_VALUE
|
||||||
bundle.getInt(FIELD_MIN_VIDEO_BITRATE, DEFAULT_WITHOUT_CONTEXT.minVideoBitrate);
|
&& bundle.getBoolean(
|
||||||
viewportWidth = bundle.getInt(FIELD_VIEWPORT_WIDTH, DEFAULT_WITHOUT_CONTEXT.viewportWidth);
|
FIELD_IS_VIEWPORT_SIZE_LIMITED_BY_PHYSICAL_DISPLAY_SIZE,
|
||||||
viewportHeight = bundle.getInt(FIELD_VIEWPORT_HEIGHT, DEFAULT_WITHOUT_CONTEXT.viewportHeight);
|
DEFAULT.isViewportSizeLimitedByPhysicalDisplaySize);
|
||||||
viewportOrientationMayChange =
|
viewportOrientationMayChange =
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE,
|
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, DEFAULT.viewportOrientationMayChange);
|
||||||
DEFAULT_WITHOUT_CONTEXT.viewportOrientationMayChange);
|
|
||||||
preferredVideoMimeTypes =
|
preferredVideoMimeTypes =
|
||||||
ImmutableList.copyOf(
|
ImmutableList.copyOf(
|
||||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_MIMETYPES), new String[0]));
|
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_MIMETYPES), new String[0]));
|
||||||
@ -200,20 +193,16 @@ public class TrackSelectionParameters {
|
|||||||
ImmutableList.copyOf(
|
ImmutableList.copyOf(
|
||||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_LANGUAGES), new String[0]));
|
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_LANGUAGES), new String[0]));
|
||||||
preferredVideoRoleFlags =
|
preferredVideoRoleFlags =
|
||||||
bundle.getInt(
|
bundle.getInt(FIELD_PREFERRED_VIDEO_ROLE_FLAGS, DEFAULT.preferredVideoRoleFlags);
|
||||||
FIELD_PREFERRED_VIDEO_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredVideoRoleFlags);
|
|
||||||
// Audio
|
// Audio
|
||||||
String[] preferredAudioLanguages1 =
|
String[] preferredAudioLanguages1 =
|
||||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_LANGUAGES), new String[0]);
|
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_LANGUAGES), new String[0]);
|
||||||
preferredAudioLanguages = normalizeLanguageCodes(preferredAudioLanguages1);
|
preferredAudioLanguages = normalizeLanguageCodes(preferredAudioLanguages1);
|
||||||
preferredAudioRoleFlags =
|
preferredAudioRoleFlags =
|
||||||
bundle.getInt(
|
bundle.getInt(FIELD_PREFERRED_AUDIO_ROLE_FLAGS, DEFAULT.preferredAudioRoleFlags);
|
||||||
FIELD_PREFERRED_AUDIO_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredAudioRoleFlags);
|
|
||||||
maxAudioChannelCount =
|
maxAudioChannelCount =
|
||||||
bundle.getInt(
|
bundle.getInt(FIELD_MAX_AUDIO_CHANNEL_COUNT, DEFAULT.maxAudioChannelCount);
|
||||||
FIELD_MAX_AUDIO_CHANNEL_COUNT, DEFAULT_WITHOUT_CONTEXT.maxAudioChannelCount);
|
maxAudioBitrate = bundle.getInt(FIELD_MAX_AUDIO_BITRATE, DEFAULT.maxAudioBitrate);
|
||||||
maxAudioBitrate =
|
|
||||||
bundle.getInt(FIELD_MAX_AUDIO_BITRATE, DEFAULT_WITHOUT_CONTEXT.maxAudioBitrate);
|
|
||||||
preferredAudioMimeTypes =
|
preferredAudioMimeTypes =
|
||||||
ImmutableList.copyOf(
|
ImmutableList.copyOf(
|
||||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_MIME_TYPES), new String[0]));
|
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_MIME_TYPES), new String[0]));
|
||||||
@ -223,29 +212,29 @@ public class TrackSelectionParameters {
|
|||||||
normalizeLanguageCodes(
|
normalizeLanguageCodes(
|
||||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_TEXT_LANGUAGES), new String[0]));
|
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_TEXT_LANGUAGES), new String[0]));
|
||||||
preferredTextRoleFlags =
|
preferredTextRoleFlags =
|
||||||
bundle.getInt(
|
bundle.getInt(FIELD_PREFERRED_TEXT_ROLE_FLAGS, DEFAULT.preferredTextRoleFlags);
|
||||||
FIELD_PREFERRED_TEXT_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredTextRoleFlags);
|
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||||
|
preferredTextLanguages.isEmpty()
|
||||||
|
&& preferredTextRoleFlags == 0
|
||||||
|
&& bundle.getBoolean(
|
||||||
|
FIELD_USE_PREFERRED_TEXT_LANGUAGES_AND_ROLE_FLAGS_FROM_CAPTIONING_MANAGER,
|
||||||
|
DEFAULT.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager);
|
||||||
ignoredTextSelectionFlags =
|
ignoredTextSelectionFlags =
|
||||||
bundle.getInt(
|
bundle.getInt(FIELD_IGNORED_TEXT_SELECTION_FLAGS, DEFAULT.ignoredTextSelectionFlags);
|
||||||
FIELD_IGNORED_TEXT_SELECTION_FLAGS,
|
|
||||||
DEFAULT_WITHOUT_CONTEXT.ignoredTextSelectionFlags);
|
|
||||||
selectUndeterminedTextLanguage =
|
selectUndeterminedTextLanguage =
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE,
|
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, DEFAULT.selectUndeterminedTextLanguage);
|
||||||
DEFAULT_WITHOUT_CONTEXT.selectUndeterminedTextLanguage);
|
|
||||||
// Image
|
// Image
|
||||||
isPrioritizeImageOverVideoEnabled =
|
isPrioritizeImageOverVideoEnabled =
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED,
|
FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED, DEFAULT.isPrioritizeImageOverVideoEnabled);
|
||||||
DEFAULT_WITHOUT_CONTEXT.isPrioritizeImageOverVideoEnabled);
|
|
||||||
|
|
||||||
// General
|
// General
|
||||||
forceLowestBitrate =
|
forceLowestBitrate =
|
||||||
bundle.getBoolean(FIELD_FORCE_LOWEST_BITRATE, DEFAULT_WITHOUT_CONTEXT.forceLowestBitrate);
|
bundle.getBoolean(FIELD_FORCE_LOWEST_BITRATE, DEFAULT.forceLowestBitrate);
|
||||||
forceHighestSupportedBitrate =
|
forceHighestSupportedBitrate =
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE,
|
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE, DEFAULT.forceHighestSupportedBitrate);
|
||||||
DEFAULT_WITHOUT_CONTEXT.forceHighestSupportedBitrate);
|
|
||||||
@Nullable
|
@Nullable
|
||||||
List<Bundle> overrideBundleList = bundle.getParcelableArrayList(FIELD_SELECTION_OVERRIDES);
|
List<Bundle> overrideBundleList = bundle.getParcelableArrayList(FIELD_SELECTION_OVERRIDES);
|
||||||
List<TrackSelectionOverride> overrideList =
|
List<TrackSelectionOverride> overrideList =
|
||||||
@ -309,6 +298,8 @@ public class TrackSelectionParameters {
|
|||||||
minVideoBitrate = parameters.minVideoBitrate;
|
minVideoBitrate = parameters.minVideoBitrate;
|
||||||
viewportWidth = parameters.viewportWidth;
|
viewportWidth = parameters.viewportWidth;
|
||||||
viewportHeight = parameters.viewportHeight;
|
viewportHeight = parameters.viewportHeight;
|
||||||
|
isViewportSizeLimitedByPhysicalDisplaySize =
|
||||||
|
parameters.isViewportSizeLimitedByPhysicalDisplaySize;
|
||||||
viewportOrientationMayChange = parameters.viewportOrientationMayChange;
|
viewportOrientationMayChange = parameters.viewportOrientationMayChange;
|
||||||
preferredVideoMimeTypes = parameters.preferredVideoMimeTypes;
|
preferredVideoMimeTypes = parameters.preferredVideoMimeTypes;
|
||||||
preferredVideoLanguages = parameters.preferredVideoLanguages;
|
preferredVideoLanguages = parameters.preferredVideoLanguages;
|
||||||
@ -323,6 +314,8 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
preferredTextLanguages = parameters.preferredTextLanguages;
|
preferredTextLanguages = parameters.preferredTextLanguages;
|
||||||
preferredTextRoleFlags = parameters.preferredTextRoleFlags;
|
preferredTextRoleFlags = parameters.preferredTextRoleFlags;
|
||||||
|
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||||
|
parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||||
ignoredTextSelectionFlags = parameters.ignoredTextSelectionFlags;
|
ignoredTextSelectionFlags = parameters.ignoredTextSelectionFlags;
|
||||||
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
||||||
// Image
|
// Image
|
||||||
@ -441,20 +434,31 @@ public class TrackSelectionParameters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Equivalent to calling {@link #setViewportSize(int, int, boolean)} with the viewport size
|
* Sets whether the viewport size should be assumed to the physical display size if no other
|
||||||
* obtained from {@link Util#getCurrentDisplayModeSize(Context)}.
|
* specific viewport size constraint is specified. Constrains video track selections for
|
||||||
|
* adaptive content so that only tracks suitable for the viewport are selected.
|
||||||
*
|
*
|
||||||
* @param context Any context.
|
|
||||||
* @param viewportOrientationMayChange Whether the viewport orientation may change during
|
* @param viewportOrientationMayChange Whether the viewport orientation may change during
|
||||||
* playback.
|
* playback.
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
|
public Builder setViewportSizeToPhysicalDisplaySize(boolean viewportOrientationMayChange) {
|
||||||
|
this.isViewportSizeLimitedByPhysicalDisplaySize = true;
|
||||||
|
this.viewportOrientationMayChange = viewportOrientationMayChange;
|
||||||
|
this.viewportHeight = Integer.MAX_VALUE;
|
||||||
|
this.viewportWidth = Integer.MAX_VALUE;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #setViewportSizeToPhysicalDisplaySize(boolean)} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@CanIgnoreReturnValue
|
||||||
public Builder setViewportSizeToPhysicalDisplaySize(
|
public Builder setViewportSizeToPhysicalDisplaySize(
|
||||||
Context context, boolean viewportOrientationMayChange) {
|
Context context, boolean viewportOrientationMayChange) {
|
||||||
// Assume the viewport is fullscreen.
|
return setViewportSizeToPhysicalDisplaySize(viewportOrientationMayChange);
|
||||||
Point viewportSize = Util.getCurrentDisplayModeSize(context);
|
|
||||||
return setViewportSize(viewportSize.x, viewportSize.y, viewportOrientationMayChange);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -484,6 +488,7 @@ public class TrackSelectionParameters {
|
|||||||
this.viewportWidth = viewportWidth;
|
this.viewportWidth = viewportWidth;
|
||||||
this.viewportHeight = viewportHeight;
|
this.viewportHeight = viewportHeight;
|
||||||
this.viewportOrientationMayChange = viewportOrientationMayChange;
|
this.viewportOrientationMayChange = viewportOrientationMayChange;
|
||||||
|
this.isViewportSizeLimitedByPhysicalDisplaySize = false;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,33 +662,29 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the preferred language and role flags for text tracks based on the accessibility
|
* Sets whether the preferred languages and the preferred role flags for text tracks should be
|
||||||
* settings of {@link CaptioningManager}.
|
* set according the {@link CaptioningManager} preferences, if enabled in the system settings
|
||||||
|
* and no other explicit language or role flag preferences are specified.
|
||||||
*
|
*
|
||||||
* <p>Does nothing when the {@link CaptioningManager} is disabled.
|
|
||||||
*
|
|
||||||
* @param context A {@link Context}.
|
|
||||||
* @return This builder.
|
* @return This builder.
|
||||||
*/
|
*/
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
|
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||||
|
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = true;
|
||||||
|
preferredTextLanguages = ImmutableList.of();
|
||||||
|
preferredTextRoleFlags = 0;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings()}
|
||||||
|
* instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@CanIgnoreReturnValue
|
||||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
||||||
Context context) {
|
Context context) {
|
||||||
if (Util.SDK_INT < 23 && Looper.myLooper() == null) {
|
return setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||||
// Android platform bug (pre-Marshmallow) that causes RuntimeExceptions when
|
|
||||||
// CaptioningService is instantiated from a non-Looper thread. See [internal: b/143779904].
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
CaptioningManager captioningManager =
|
|
||||||
(CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);
|
|
||||||
if (captioningManager == null || !captioningManager.isEnabled()) {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
preferredTextRoleFlags = C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND;
|
|
||||||
Locale preferredLocale = captioningManager.getLocale();
|
|
||||||
if (preferredLocale != null) {
|
|
||||||
preferredTextLanguages = ImmutableList.of(Util.getLocaleLanguageTag(preferredLocale));
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -710,6 +711,7 @@ public class TrackSelectionParameters {
|
|||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public Builder setPreferredTextLanguages(String... preferredTextLanguages) {
|
public Builder setPreferredTextLanguages(String... preferredTextLanguages) {
|
||||||
this.preferredTextLanguages = normalizeLanguageCodes(preferredTextLanguages);
|
this.preferredTextLanguages = normalizeLanguageCodes(preferredTextLanguages);
|
||||||
|
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = false;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -722,6 +724,7 @@ public class TrackSelectionParameters {
|
|||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public Builder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
|
public Builder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
|
||||||
this.preferredTextRoleFlags = preferredTextRoleFlags;
|
this.preferredTextRoleFlags = preferredTextRoleFlags;
|
||||||
|
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = false;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1080,35 +1083,21 @@ public class TrackSelectionParameters {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** An instance with default parameters. */
|
||||||
* An instance with default values, except those obtained from the {@link Context}.
|
@UnstableApi public static final TrackSelectionParameters DEFAULT = new Builder().build();
|
||||||
*
|
|
||||||
* <p>If possible, use {@link #getDefaults(Context)} instead.
|
|
||||||
*
|
|
||||||
* <p>This instance will not have the following settings:
|
|
||||||
*
|
|
||||||
* <ul>
|
|
||||||
* <li>{@link Builder#setViewportSizeToPhysicalDisplaySize(Context, boolean) Viewport
|
|
||||||
* constraints} configured for the primary display.
|
|
||||||
* <li>{@link Builder#setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(Context)
|
|
||||||
* Preferred text language and role flags} configured to the accessibility settings of
|
|
||||||
* {@link CaptioningManager}.
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
@UnstableApi
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public static final TrackSelectionParameters DEFAULT_WITHOUT_CONTEXT = new Builder().build();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated This instance is not configured using {@link Context} constraints. Use {@link
|
* @deprecated Use {@link #DEFAULT} instead.
|
||||||
* #getDefaults(Context)} instead.
|
|
||||||
*/
|
*/
|
||||||
@UnstableApi @Deprecated
|
@UnstableApi @Deprecated
|
||||||
public static final TrackSelectionParameters DEFAULT = DEFAULT_WITHOUT_CONTEXT;
|
public static final TrackSelectionParameters DEFAULT_WITHOUT_CONTEXT = DEFAULT;
|
||||||
|
|
||||||
/** Returns an instance configured with default values. */
|
/**
|
||||||
|
* @deprecated Use {@link #DEFAULT} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static TrackSelectionParameters getDefaults(Context context) {
|
public static TrackSelectionParameters getDefaults(Context context) {
|
||||||
return new Builder(context).build();
|
return DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video
|
// Video
|
||||||
@ -1172,6 +1161,13 @@ public class TrackSelectionParameters {
|
|||||||
*/
|
*/
|
||||||
public final int viewportHeight;
|
public final int viewportHeight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the viewport size should be assumed to the physical display size if no other specific
|
||||||
|
* viewport size constraint is specified. Constrains video track selections for adaptive content
|
||||||
|
* so that only tracks suitable for the viewport are selected. The default value is {@code true}.
|
||||||
|
*/
|
||||||
|
public final boolean isViewportSizeLimitedByPhysicalDisplaySize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the viewport orientation may change during playback. Constrains video track selections
|
* Whether the viewport orientation may change during playback. Constrains video track selections
|
||||||
* for adaptive content so that only tracks suitable for the viewport are selected. The default
|
* for adaptive content so that only tracks suitable for the viewport are selected. The default
|
||||||
@ -1238,19 +1234,24 @@ public class TrackSelectionParameters {
|
|||||||
/**
|
/**
|
||||||
* The preferred languages for text tracks as IETF BCP 47 conformant tags in order of preference.
|
* The preferred languages for text tracks as IETF BCP 47 conformant tags in order of preference.
|
||||||
* An empty list selects the default track if there is one, or no track otherwise. The default
|
* An empty list selects the default track if there is one, or no track otherwise. The default
|
||||||
* value is an empty list, or the language of the accessibility {@link CaptioningManager} if
|
* value is an empty list.
|
||||||
* enabled.
|
|
||||||
*/
|
*/
|
||||||
public final ImmutableList<String> preferredTextLanguages;
|
public final ImmutableList<String> preferredTextLanguages;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there
|
* The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there
|
||||||
* is one, or no track otherwise. The default value is {@code 0}, or {@link C#ROLE_FLAG_SUBTITLE}
|
* is one, or no track otherwise. The default value is {@code 0}.
|
||||||
* | {@link C#ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND} if the accessibility {@link CaptioningManager}
|
|
||||||
* is enabled.
|
|
||||||
*/
|
*/
|
||||||
public final @C.RoleFlags int preferredTextRoleFlags;
|
public final @C.RoleFlags int preferredTextRoleFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the preferred languages and the preferred role flags for text tracks should be set
|
||||||
|
* according the {@link CaptioningManager} preferences, if enabled in the system settings and no
|
||||||
|
* other explicit language or role flag preferences are specified. The default value is {@code
|
||||||
|
* true}.
|
||||||
|
*/
|
||||||
|
public final boolean usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bitmask of selection flags that are ignored for text track selections. See {@link
|
* Bitmask of selection flags that are ignored for text track selections. See {@link
|
||||||
* C.SelectionFlags}. The default value is {@code 0} (i.e., no flags are ignored).
|
* C.SelectionFlags}. The default value is {@code 0} (i.e., no flags are ignored).
|
||||||
@ -1307,6 +1308,8 @@ public class TrackSelectionParameters {
|
|||||||
this.minVideoBitrate = builder.minVideoBitrate;
|
this.minVideoBitrate = builder.minVideoBitrate;
|
||||||
this.viewportWidth = builder.viewportWidth;
|
this.viewportWidth = builder.viewportWidth;
|
||||||
this.viewportHeight = builder.viewportHeight;
|
this.viewportHeight = builder.viewportHeight;
|
||||||
|
this.isViewportSizeLimitedByPhysicalDisplaySize =
|
||||||
|
builder.isViewportSizeLimitedByPhysicalDisplaySize;
|
||||||
this.viewportOrientationMayChange = builder.viewportOrientationMayChange;
|
this.viewportOrientationMayChange = builder.viewportOrientationMayChange;
|
||||||
this.preferredVideoMimeTypes = builder.preferredVideoMimeTypes;
|
this.preferredVideoMimeTypes = builder.preferredVideoMimeTypes;
|
||||||
this.preferredVideoLanguages = builder.preferredVideoLanguages;
|
this.preferredVideoLanguages = builder.preferredVideoLanguages;
|
||||||
@ -1321,6 +1324,8 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
this.preferredTextLanguages = builder.preferredTextLanguages;
|
this.preferredTextLanguages = builder.preferredTextLanguages;
|
||||||
this.preferredTextRoleFlags = builder.preferredTextRoleFlags;
|
this.preferredTextRoleFlags = builder.preferredTextRoleFlags;
|
||||||
|
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||||
|
builder.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||||
this.ignoredTextSelectionFlags = builder.ignoredTextSelectionFlags;
|
this.ignoredTextSelectionFlags = builder.ignoredTextSelectionFlags;
|
||||||
this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage;
|
this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage;
|
||||||
// Image
|
// Image
|
||||||
@ -1359,6 +1364,8 @@ public class TrackSelectionParameters {
|
|||||||
&& viewportOrientationMayChange == other.viewportOrientationMayChange
|
&& viewportOrientationMayChange == other.viewportOrientationMayChange
|
||||||
&& viewportWidth == other.viewportWidth
|
&& viewportWidth == other.viewportWidth
|
||||||
&& viewportHeight == other.viewportHeight
|
&& viewportHeight == other.viewportHeight
|
||||||
|
&& isViewportSizeLimitedByPhysicalDisplaySize
|
||||||
|
== other.isViewportSizeLimitedByPhysicalDisplaySize
|
||||||
&& preferredVideoMimeTypes.equals(other.preferredVideoMimeTypes)
|
&& preferredVideoMimeTypes.equals(other.preferredVideoMimeTypes)
|
||||||
&& preferredVideoLanguages.equals(other.preferredVideoLanguages)
|
&& preferredVideoLanguages.equals(other.preferredVideoLanguages)
|
||||||
&& preferredVideoRoleFlags == other.preferredVideoRoleFlags
|
&& preferredVideoRoleFlags == other.preferredVideoRoleFlags
|
||||||
@ -1372,6 +1379,8 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
&& preferredTextLanguages.equals(other.preferredTextLanguages)
|
&& preferredTextLanguages.equals(other.preferredTextLanguages)
|
||||||
&& preferredTextRoleFlags == other.preferredTextRoleFlags
|
&& preferredTextRoleFlags == other.preferredTextRoleFlags
|
||||||
|
&& usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||||
|
== other.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||||
&& ignoredTextSelectionFlags == other.ignoredTextSelectionFlags
|
&& ignoredTextSelectionFlags == other.ignoredTextSelectionFlags
|
||||||
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
|
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
|
||||||
// Image
|
// Image
|
||||||
@ -1398,6 +1407,7 @@ public class TrackSelectionParameters {
|
|||||||
result = 31 * result + (viewportOrientationMayChange ? 1 : 0);
|
result = 31 * result + (viewportOrientationMayChange ? 1 : 0);
|
||||||
result = 31 * result + viewportWidth;
|
result = 31 * result + viewportWidth;
|
||||||
result = 31 * result + viewportHeight;
|
result = 31 * result + viewportHeight;
|
||||||
|
result = 31 * result + (isViewportSizeLimitedByPhysicalDisplaySize ? 1 : 0);
|
||||||
result = 31 * result + preferredVideoMimeTypes.hashCode();
|
result = 31 * result + preferredVideoMimeTypes.hashCode();
|
||||||
result = 31 * result + preferredVideoLanguages.hashCode();
|
result = 31 * result + preferredVideoLanguages.hashCode();
|
||||||
result = 31 * result + preferredVideoRoleFlags;
|
result = 31 * result + preferredVideoRoleFlags;
|
||||||
@ -1411,6 +1421,7 @@ public class TrackSelectionParameters {
|
|||||||
// Text
|
// Text
|
||||||
result = 31 * result + preferredTextLanguages.hashCode();
|
result = 31 * result + preferredTextLanguages.hashCode();
|
||||||
result = 31 * result + preferredTextRoleFlags;
|
result = 31 * result + preferredTextRoleFlags;
|
||||||
|
result = 31 * result + (usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager ? 1 : 0);
|
||||||
result = 31 * result + ignoredTextSelectionFlags;
|
result = 31 * result + ignoredTextSelectionFlags;
|
||||||
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
|
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
|
||||||
// Image
|
// Image
|
||||||
@ -1456,6 +1467,11 @@ public class TrackSelectionParameters {
|
|||||||
private static final String FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED =
|
private static final String FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED =
|
||||||
Util.intToStringMaxRadix(31);
|
Util.intToStringMaxRadix(31);
|
||||||
private static final String FIELD_PREFERRED_VIDEO_LANGUAGES = Util.intToStringMaxRadix(32);
|
private static final String FIELD_PREFERRED_VIDEO_LANGUAGES = Util.intToStringMaxRadix(32);
|
||||||
|
private static final String FIELD_IS_VIEWPORT_SIZE_LIMITED_BY_PHYSICAL_DISPLAY_SIZE =
|
||||||
|
Util.intToStringMaxRadix(33);
|
||||||
|
private static final String
|
||||||
|
FIELD_USE_PREFERRED_TEXT_LANGUAGES_AND_ROLE_FLAGS_FROM_CAPTIONING_MANAGER =
|
||||||
|
Util.intToStringMaxRadix(34);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a minimum field ID value for subclasses to use when implementing {@link #toBundle()}
|
* Defines a minimum field ID value for subclasses to use when implementing {@link #toBundle()}
|
||||||
@ -1482,6 +1498,9 @@ public class TrackSelectionParameters {
|
|||||||
bundle.putInt(FIELD_MIN_VIDEO_BITRATE, minVideoBitrate);
|
bundle.putInt(FIELD_MIN_VIDEO_BITRATE, minVideoBitrate);
|
||||||
bundle.putInt(FIELD_VIEWPORT_WIDTH, viewportWidth);
|
bundle.putInt(FIELD_VIEWPORT_WIDTH, viewportWidth);
|
||||||
bundle.putInt(FIELD_VIEWPORT_HEIGHT, viewportHeight);
|
bundle.putInt(FIELD_VIEWPORT_HEIGHT, viewportHeight);
|
||||||
|
bundle.putBoolean(
|
||||||
|
FIELD_IS_VIEWPORT_SIZE_LIMITED_BY_PHYSICAL_DISPLAY_SIZE,
|
||||||
|
isViewportSizeLimitedByPhysicalDisplaySize);
|
||||||
bundle.putBoolean(FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, viewportOrientationMayChange);
|
bundle.putBoolean(FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, viewportOrientationMayChange);
|
||||||
bundle.putStringArray(
|
bundle.putStringArray(
|
||||||
FIELD_PREFERRED_VIDEO_MIMETYPES, preferredVideoMimeTypes.toArray(new String[0]));
|
FIELD_PREFERRED_VIDEO_MIMETYPES, preferredVideoMimeTypes.toArray(new String[0]));
|
||||||
@ -1500,6 +1519,9 @@ public class TrackSelectionParameters {
|
|||||||
bundle.putStringArray(
|
bundle.putStringArray(
|
||||||
FIELD_PREFERRED_TEXT_LANGUAGES, preferredTextLanguages.toArray(new String[0]));
|
FIELD_PREFERRED_TEXT_LANGUAGES, preferredTextLanguages.toArray(new String[0]));
|
||||||
bundle.putInt(FIELD_PREFERRED_TEXT_ROLE_FLAGS, preferredTextRoleFlags);
|
bundle.putInt(FIELD_PREFERRED_TEXT_ROLE_FLAGS, preferredTextRoleFlags);
|
||||||
|
bundle.putBoolean(
|
||||||
|
FIELD_USE_PREFERRED_TEXT_LANGUAGES_AND_ROLE_FLAGS_FROM_CAPTIONING_MANAGER,
|
||||||
|
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager);
|
||||||
bundle.putInt(FIELD_IGNORED_TEXT_SELECTION_FLAGS, ignoredTextSelectionFlags);
|
bundle.putInt(FIELD_IGNORED_TEXT_SELECTION_FLAGS, ignoredTextSelectionFlags);
|
||||||
bundle.putBoolean(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, selectUndeterminedTextLanguage);
|
bundle.putBoolean(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, selectUndeterminedTextLanguage);
|
||||||
bundle.putInt(FIELD_AUDIO_OFFLOAD_MODE_PREFERENCE, audioOffloadPreferences.audioOffloadMode);
|
bundle.putInt(FIELD_AUDIO_OFFLOAD_MODE_PREFERENCE, audioOffloadPreferences.audioOffloadMode);
|
||||||
|
@ -88,10 +88,7 @@ public final class ForwardingSimpleBasePlayerTest {
|
|||||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxVideoBitrate(1000)
|
|
||||||
.build();
|
|
||||||
AudioAttributes audioAttributes =
|
AudioAttributes audioAttributes =
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||||
@ -309,7 +306,7 @@ public final class ForwardingSimpleBasePlayerTest {
|
|||||||
.setSeekForwardIncrementMs(2000)
|
.setSeekForwardIncrementMs(2000)
|
||||||
.setMaxSeekToPreviousPositionMs(8000)
|
.setMaxSeekToPreviousPositionMs(8000)
|
||||||
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
||||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||||
.setAudioAttributes(AudioAttributes.DEFAULT)
|
.setAudioAttributes(AudioAttributes.DEFAULT)
|
||||||
.setVolume(1f)
|
.setVolume(1f)
|
||||||
.setVideoSize(VideoSize.UNKNOWN)
|
.setVideoSize(VideoSize.UNKNOWN)
|
||||||
@ -349,10 +346,7 @@ public final class ForwardingSimpleBasePlayerTest {
|
|||||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxVideoBitrate(1000)
|
|
||||||
.build();
|
|
||||||
AudioAttributes audioAttributes =
|
AudioAttributes audioAttributes =
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||||
|
@ -101,7 +101,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setSeekForwardIncrementMs(4000)
|
.setSeekForwardIncrementMs(4000)
|
||||||
.setMaxSeekToPreviousPositionMs(3000)
|
.setMaxSeekToPreviousPositionMs(3000)
|
||||||
.setPlaybackParameters(new PlaybackParameters(/* speed= */ 2f))
|
.setPlaybackParameters(new PlaybackParameters(/* speed= */ 2f))
|
||||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||||
.setAudioAttributes(
|
.setAudioAttributes(
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build())
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build())
|
||||||
.setVolume(0.5f)
|
.setVolume(0.5f)
|
||||||
@ -280,10 +280,7 @@ public class SimpleBasePlayerTest {
|
|||||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxVideoBitrate(1000)
|
|
||||||
.build();
|
|
||||||
AudioAttributes audioAttributes =
|
AudioAttributes audioAttributes =
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||||
@ -945,10 +942,7 @@ public class SimpleBasePlayerTest {
|
|||||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxVideoBitrate(1000)
|
|
||||||
.build();
|
|
||||||
AudioAttributes audioAttributes =
|
AudioAttributes audioAttributes =
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||||
@ -1368,7 +1362,7 @@ public class SimpleBasePlayerTest {
|
|||||||
.setSeekForwardIncrementMs(2000)
|
.setSeekForwardIncrementMs(2000)
|
||||||
.setMaxSeekToPreviousPositionMs(8000)
|
.setMaxSeekToPreviousPositionMs(8000)
|
||||||
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
||||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||||
.setAudioAttributes(AudioAttributes.DEFAULT)
|
.setAudioAttributes(AudioAttributes.DEFAULT)
|
||||||
.setVolume(1f)
|
.setVolume(1f)
|
||||||
.setVideoSize(VideoSize.UNKNOWN)
|
.setVideoSize(VideoSize.UNKNOWN)
|
||||||
@ -1407,10 +1401,7 @@ public class SimpleBasePlayerTest {
|
|||||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxVideoBitrate(1000)
|
|
||||||
.build();
|
|
||||||
AudioAttributes audioAttributes =
|
AudioAttributes audioAttributes =
|
||||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||||
|
@ -17,7 +17,6 @@ package androidx.media3.common;
|
|||||||
|
|
||||||
import static androidx.media3.common.TrackSelectionParameters.AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_DISABLED;
|
import static androidx.media3.common.TrackSelectionParameters.AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_DISABLED;
|
||||||
import static androidx.media3.common.TrackSelectionParameters.AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED;
|
import static androidx.media3.common.TrackSelectionParameters.AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED;
|
||||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -40,7 +39,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void defaultValue_withoutChange_isAsExpected() {
|
public void defaultValue_withoutChange_isAsExpected() {
|
||||||
TrackSelectionParameters parameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
TrackSelectionParameters parameters = TrackSelectionParameters.DEFAULT;
|
||||||
|
|
||||||
// Video
|
// Video
|
||||||
assertThat(parameters.maxVideoWidth).isEqualTo(Integer.MAX_VALUE);
|
assertThat(parameters.maxVideoWidth).isEqualTo(Integer.MAX_VALUE);
|
||||||
@ -53,6 +52,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
assertThat(parameters.minVideoBitrate).isEqualTo(0);
|
assertThat(parameters.minVideoBitrate).isEqualTo(0);
|
||||||
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
||||||
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
||||||
|
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isTrue();
|
||||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||||
assertThat(parameters.preferredVideoMimeTypes).isEmpty();
|
assertThat(parameters.preferredVideoMimeTypes).isEmpty();
|
||||||
// Audio
|
// Audio
|
||||||
@ -67,6 +67,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
// Text
|
// Text
|
||||||
assertThat(parameters.preferredAudioMimeTypes).isEmpty();
|
assertThat(parameters.preferredAudioMimeTypes).isEmpty();
|
||||||
assertThat(parameters.preferredTextLanguages).isEmpty();
|
assertThat(parameters.preferredTextLanguages).isEmpty();
|
||||||
|
assertThat(parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager).isTrue();
|
||||||
assertThat(parameters.preferredTextRoleFlags).isEqualTo(0);
|
assertThat(parameters.preferredTextRoleFlags).isEqualTo(0);
|
||||||
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(0);
|
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(0);
|
||||||
assertThat(parameters.selectUndeterminedTextLanguage).isFalse();
|
assertThat(parameters.selectUndeterminedTextLanguage).isFalse();
|
||||||
@ -90,7 +91,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
new Format.Builder().setId(4).build(), new Format.Builder().setId(5).build()),
|
new Format.Builder().setId(4).build(), new Format.Builder().setId(5).build()),
|
||||||
/* trackIndices= */ ImmutableList.of(1));
|
/* trackIndices= */ ImmutableList.of(1));
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
// Video
|
// Video
|
||||||
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
||||||
@ -149,6 +150,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
assertThat(parameters.minVideoBitrate).isEqualTo(7);
|
assertThat(parameters.minVideoBitrate).isEqualTo(7);
|
||||||
assertThat(parameters.viewportWidth).isEqualTo(8);
|
assertThat(parameters.viewportWidth).isEqualTo(8);
|
||||||
assertThat(parameters.viewportHeight).isEqualTo(9);
|
assertThat(parameters.viewportHeight).isEqualTo(9);
|
||||||
|
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isFalse();
|
||||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||||
assertThat(parameters.preferredVideoMimeTypes)
|
assertThat(parameters.preferredVideoMimeTypes)
|
||||||
.containsExactly(MimeTypes.VIDEO_AV1, MimeTypes.VIDEO_H264)
|
.containsExactly(MimeTypes.VIDEO_AV1, MimeTypes.VIDEO_H264)
|
||||||
@ -168,6 +170,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
// Text
|
// Text
|
||||||
assertThat(parameters.preferredTextLanguages).containsExactly("de", "en").inOrder();
|
assertThat(parameters.preferredTextLanguages).containsExactly("de", "en").inOrder();
|
||||||
assertThat(parameters.preferredTextRoleFlags).isEqualTo(C.ROLE_FLAG_CAPTION);
|
assertThat(parameters.preferredTextRoleFlags).isEqualTo(C.ROLE_FLAG_CAPTION);
|
||||||
|
assertThat(parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager).isFalse();
|
||||||
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(C.SELECTION_FLAG_AUTOSELECT);
|
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(C.SELECTION_FLAG_AUTOSELECT);
|
||||||
assertThat(parameters.selectUndeterminedTextLanguage).isTrue();
|
assertThat(parameters.selectUndeterminedTextLanguage).isTrue();
|
||||||
// Image
|
// Image
|
||||||
@ -185,7 +188,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
@Test
|
@Test
|
||||||
public void setMaxVideoSizeSd_defaultBuilder_parametersVideoSizeAreSd() {
|
public void setMaxVideoSizeSd_defaultBuilder_parametersVideoSizeAreSd() {
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext()).setMaxVideoSizeSd().build();
|
new TrackSelectionParameters.Builder().setMaxVideoSizeSd().build();
|
||||||
|
|
||||||
assertThat(parameters.maxVideoWidth).isEqualTo(1279);
|
assertThat(parameters.maxVideoWidth).isEqualTo(1279);
|
||||||
assertThat(parameters.maxVideoHeight).isEqualTo(719);
|
assertThat(parameters.maxVideoHeight).isEqualTo(719);
|
||||||
@ -194,7 +197,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
@Test
|
@Test
|
||||||
public void clearVideoSizeConstraints_withSdConstrains_clearConstrains() {
|
public void clearVideoSizeConstraints_withSdConstrains_clearConstrains() {
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.setMaxVideoSizeSd()
|
.setMaxVideoSizeSd()
|
||||||
.clearVideoSizeConstraints()
|
.clearVideoSizeConstraints()
|
||||||
.build();
|
.build();
|
||||||
@ -206,7 +209,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
@Test
|
@Test
|
||||||
public void clearViewPortConstraints_withConstrains_clearConstrains() {
|
public void clearViewPortConstraints_withConstrains_clearConstrains() {
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.setViewportSize(
|
.setViewportSize(
|
||||||
/* viewportWidth= */ 1,
|
/* viewportWidth= */ 1,
|
||||||
/* viewportHeight= */ 2,
|
/* viewportHeight= */ 2,
|
||||||
@ -216,6 +219,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
|
|
||||||
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
||||||
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
||||||
|
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isFalse();
|
||||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,7 +229,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
new TrackSelectionOverride(
|
new TrackSelectionOverride(
|
||||||
newTrackGroupWithIds(3, 4), /* trackIndices= */ ImmutableList.of(1));
|
newTrackGroupWithIds(3, 4), /* trackIndices= */ ImmutableList.of(1));
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext()).addOverride(override).build();
|
new TrackSelectionParameters.Builder().addOverride(override).build();
|
||||||
|
|
||||||
TrackSelectionParameters fromBundle =
|
TrackSelectionParameters fromBundle =
|
||||||
TrackSelectionParameters.fromBundle(trackSelectionParameters.toBundle());
|
TrackSelectionParameters.fromBundle(trackSelectionParameters.toBundle());
|
||||||
@ -238,7 +242,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
@Test
|
@Test
|
||||||
public void roundTripViaBundle_withLegacyPreferenceFields_yieldsEqualInstance() {
|
public void roundTripViaBundle_withLegacyPreferenceFields_yieldsEqualInstance() {
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.setAudioOffloadPreferences(
|
.setAudioOffloadPreferences(
|
||||||
new AudioOffloadPreferences.Builder()
|
new AudioOffloadPreferences.Builder()
|
||||||
.setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED)
|
.setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED)
|
||||||
@ -266,7 +270,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
||||||
|
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.addOverride(override1)
|
.addOverride(override1)
|
||||||
.addOverride(override2)
|
.addOverride(override2)
|
||||||
.build();
|
.build();
|
||||||
@ -285,7 +289,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
new TrackSelectionOverride(trackGroup, /* trackIndices= */ ImmutableList.of(1));
|
new TrackSelectionOverride(trackGroup, /* trackIndices= */ ImmutableList.of(1));
|
||||||
|
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.addOverride(override1)
|
.addOverride(override1)
|
||||||
.addOverride(override2)
|
.addOverride(override2)
|
||||||
.build();
|
.build();
|
||||||
@ -302,7 +306,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
||||||
|
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.setOverrideForType(override1)
|
.setOverrideForType(override1)
|
||||||
.setOverrideForType(override2)
|
.setOverrideForType(override2)
|
||||||
.build();
|
.build();
|
||||||
@ -318,7 +322,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
TrackSelectionOverride override2 =
|
TrackSelectionOverride override2 =
|
||||||
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.addOverride(override1)
|
.addOverride(override1)
|
||||||
.addOverride(override2)
|
.addOverride(override2)
|
||||||
.clearOverridesOfType(C.TRACK_TYPE_AUDIO)
|
.clearOverridesOfType(C.TRACK_TYPE_AUDIO)
|
||||||
@ -335,7 +339,7 @@ public final class TrackSelectionParametersTest {
|
|||||||
TrackSelectionOverride override2 =
|
TrackSelectionOverride override2 =
|
||||||
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
new TrackSelectionParameters.Builder()
|
||||||
.addOverride(override1)
|
.addOverride(override1)
|
||||||
.addOverride(override2)
|
.addOverride(override2)
|
||||||
.clearOverride(override2.mediaTrackGroup)
|
.clearOverride(override2.mediaTrackGroup)
|
||||||
|
@ -98,29 +98,27 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
@UnstableApi
|
@UnstableApi
|
||||||
public final class DownloadHelper {
|
public final class DownloadHelper {
|
||||||
|
|
||||||
/**
|
/** Default track selection parameters for downloading. */
|
||||||
* Default track selection parameters for downloading, but without any {@link Context}
|
public static final DefaultTrackSelector.Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS =
|
||||||
* constraints.
|
DefaultTrackSelector.Parameters.DEFAULT
|
||||||
*
|
.buildUpon()
|
||||||
* <p>If possible, use {@link #getDefaultTrackSelectorParameters(Context)} instead.
|
.setForceHighestSupportedBitrate(true)
|
||||||
*
|
.setConstrainAudioChannelCountToDeviceCapabilities(false)
|
||||||
* @see DefaultTrackSelector.Parameters#DEFAULT_WITHOUT_CONTEXT
|
.build();
|
||||||
*/
|
|
||||||
public static final DefaultTrackSelector.Parameters
|
|
||||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT =
|
|
||||||
DefaultTrackSelector.Parameters.DEFAULT_WITHOUT_CONTEXT
|
|
||||||
.buildUpon()
|
|
||||||
.setForceHighestSupportedBitrate(true)
|
|
||||||
.setConstrainAudioChannelCountToDeviceCapabilities(false)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
/** Returns the default parameters used for track selection for downloading. */
|
/**
|
||||||
|
* @deprecated Use {@link #DEFAULT_TRACK_SELECTOR_PARAMETERS} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public static final DefaultTrackSelector.Parameters
|
||||||
|
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT = DEFAULT_TRACK_SELECTOR_PARAMETERS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #DEFAULT_TRACK_SELECTOR_PARAMETERS} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static DefaultTrackSelector.Parameters getDefaultTrackSelectorParameters(Context context) {
|
public static DefaultTrackSelector.Parameters getDefaultTrackSelectorParameters(Context context) {
|
||||||
return DefaultTrackSelector.Parameters.getDefaults(context)
|
return DEFAULT_TRACK_SELECTOR_PARAMETERS;
|
||||||
.buildUpon()
|
|
||||||
.setForceHighestSupportedBitrate(true)
|
|
||||||
.setConstrainAudioChannelCountToDeviceCapabilities(false)
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A callback to be notified when the {@link DownloadHelper} is prepared. */
|
/** A callback to be notified when the {@link DownloadHelper} is prepared. */
|
||||||
@ -179,7 +177,7 @@ public final class DownloadHelper {
|
|||||||
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.localConfiguration)));
|
Assertions.checkArgument(isProgressive(checkNotNull(mediaItem.localConfiguration)));
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
getDefaultTrackSelectorParameters(context),
|
DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
/* renderersFactory= */ null,
|
/* renderersFactory= */ null,
|
||||||
/* dataSourceFactory= */ null,
|
/* dataSourceFactory= */ null,
|
||||||
/* drmSessionManager= */ null);
|
/* drmSessionManager= */ null);
|
||||||
@ -207,7 +205,7 @@ public final class DownloadHelper {
|
|||||||
@Nullable DataSource.Factory dataSourceFactory) {
|
@Nullable DataSource.Factory dataSourceFactory) {
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
getDefaultTrackSelectorParameters(context),
|
DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
dataSourceFactory,
|
dataSourceFactory,
|
||||||
/* drmSessionManager= */ null);
|
/* drmSessionManager= */ null);
|
||||||
@ -541,7 +539,7 @@ public final class DownloadHelper {
|
|||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
|
|
||||||
TrackSelectionParameters.Builder parametersBuilder =
|
TrackSelectionParameters.Builder parametersBuilder =
|
||||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||||
// Prefer highest supported bitrate for downloads.
|
// Prefer highest supported bitrate for downloads.
|
||||||
parametersBuilder.setForceHighestSupportedBitrate(true);
|
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||||
// Disable all non-audio track types supported by the renderers.
|
// Disable all non-audio track types supported by the renderers.
|
||||||
@ -581,7 +579,7 @@ public final class DownloadHelper {
|
|||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
|
|
||||||
TrackSelectionParameters.Builder parametersBuilder =
|
TrackSelectionParameters.Builder parametersBuilder =
|
||||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||||
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
||||||
// Prefer highest supported bitrate for downloads.
|
// Prefer highest supported bitrate for downloads.
|
||||||
parametersBuilder.setForceHighestSupportedBitrate(true);
|
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||||
|
@ -39,6 +39,7 @@ import android.text.TextUtils;
|
|||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
|
import android.view.accessibility.CaptioningManager;
|
||||||
import androidx.annotation.GuardedBy;
|
import androidx.annotation.GuardedBy;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -74,6 +75,7 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
|
import com.google.errorprone.annotations.InlineMe;
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
@ -83,6 +85,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -136,12 +139,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
|
|
||||||
private final Parameters.Builder delegate;
|
private final Parameters.Builder delegate;
|
||||||
|
|
||||||
/**
|
/** Creates a builder with default initial values. */
|
||||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
|
||||||
* #ParametersBuilder(Context)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
@SuppressWarnings({"deprecation"})
|
|
||||||
public ParametersBuilder() {
|
public ParametersBuilder() {
|
||||||
delegate = new Parameters.Builder();
|
delegate = new Parameters.Builder();
|
||||||
}
|
}
|
||||||
@ -301,6 +299,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
@Override
|
||||||
|
public ParametersBuilder setViewportSizeToPhysicalDisplaySize(
|
||||||
|
boolean viewportOrientationMayChange) {
|
||||||
|
delegate.setViewportSizeToPhysicalDisplaySize(viewportOrientationMayChange);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@Override
|
@Override
|
||||||
@ -522,6 +529,14 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
|
|
||||||
// Text
|
// Text
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
@Override
|
||||||
|
public ParametersBuilder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||||
|
delegate.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@Override
|
@Override
|
||||||
@ -868,12 +883,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
selectionOverrides;
|
selectionOverrides;
|
||||||
private final SparseBooleanArray rendererDisabledFlags;
|
private final SparseBooleanArray rendererDisabledFlags;
|
||||||
|
|
||||||
/**
|
/** Creates a builder with default initial values. */
|
||||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
|
||||||
* #Builder(Context)} instead.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
@SuppressWarnings({"deprecation"})
|
|
||||||
public Builder() {
|
public Builder() {
|
||||||
super();
|
super();
|
||||||
selectionOverrides = new SparseArray<>();
|
selectionOverrides = new SparseArray<>();
|
||||||
@ -882,15 +892,12 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a builder with default initial values.
|
* @deprecated Use {@link #Builder()} instead.
|
||||||
*
|
|
||||||
* @param context Any context.
|
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@InlineMe(replacement = "this()")
|
||||||
public Builder(Context context) {
|
public Builder(Context context) {
|
||||||
super(context);
|
this();
|
||||||
selectionOverrides = new SparseArray<>();
|
|
||||||
rendererDisabledFlags = new SparseBooleanArray();
|
|
||||||
init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -931,7 +938,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
private Builder(Bundle bundle) {
|
private Builder(Bundle bundle) {
|
||||||
super(bundle);
|
super(bundle);
|
||||||
init();
|
init();
|
||||||
Parameters defaultValue = Parameters.DEFAULT_WITHOUT_CONTEXT;
|
Parameters defaultValue = Parameters.DEFAULT;
|
||||||
// Video
|
// Video
|
||||||
setExceedVideoConstraintsIfNecessary(
|
setExceedVideoConstraintsIfNecessary(
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
@ -1132,6 +1139,14 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
|
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@Override
|
@Override
|
||||||
|
public Builder setViewportSizeToPhysicalDisplaySize(boolean viewportOrientationMayChange) {
|
||||||
|
super.setViewportSizeToPhysicalDisplaySize(viewportOrientationMayChange);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
public Builder setViewportSizeToPhysicalDisplaySize(
|
public Builder setViewportSizeToPhysicalDisplaySize(
|
||||||
Context context, boolean viewportOrientationMayChange) {
|
Context context, boolean viewportOrientationMayChange) {
|
||||||
super.setViewportSizeToPhysicalDisplaySize(context, viewportOrientationMayChange);
|
super.setViewportSizeToPhysicalDisplaySize(context, viewportOrientationMayChange);
|
||||||
@ -1377,6 +1392,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
|
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
@Override
|
@Override
|
||||||
|
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||||
|
super.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings("deprecation") // Calling deprecated super method.
|
||||||
|
@Override
|
||||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
||||||
Context context) {
|
Context context) {
|
||||||
super.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(context);
|
super.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(context);
|
||||||
@ -1790,34 +1814,20 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** An instance with default values. */
|
||||||
* An instance with default values, except those obtained from the {@link Context}.
|
public static final Parameters DEFAULT = new Builder().build();
|
||||||
*
|
|
||||||
* <p>If possible, use {@link #getDefaults(Context)} instead.
|
|
||||||
*
|
|
||||||
* <p>This instance will not have the following settings:
|
|
||||||
*
|
|
||||||
* <ul>
|
|
||||||
* <li>{@linkplain Builder#setViewportSizeToPhysicalDisplaySize(Context, boolean) Viewport
|
|
||||||
* constraints} configured for the primary display.
|
|
||||||
* <li>{@linkplain
|
|
||||||
* Builder#setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(Context)
|
|
||||||
* Preferred text language and role flags} configured to the accessibility settings of
|
|
||||||
* {@link android.view.accessibility.CaptioningManager}.
|
|
||||||
* </ul>
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public static final Parameters DEFAULT_WITHOUT_CONTEXT = new Builder().build();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated This instance is not configured using {@link Context} constraints. Use {@link
|
* @deprecated Use {@link #DEFAULT} instead.
|
||||||
* #getDefaults(Context)} instead.
|
|
||||||
*/
|
*/
|
||||||
@Deprecated public static final Parameters DEFAULT = DEFAULT_WITHOUT_CONTEXT;
|
@Deprecated public static final Parameters DEFAULT_WITHOUT_CONTEXT = DEFAULT;
|
||||||
|
|
||||||
/** Returns an instance configured with default values. */
|
/**
|
||||||
|
* @deprecated Use {@link #DEFAULT} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static Parameters getDefaults(Context context) {
|
public static Parameters getDefaults(Context context) {
|
||||||
return new Parameters.Builder(context).build();
|
return DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video
|
// Video
|
||||||
@ -2416,7 +2426,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
* @param trackSelectionFactory A factory for {@link ExoTrackSelection}s.
|
* @param trackSelectionFactory A factory for {@link ExoTrackSelection}s.
|
||||||
*/
|
*/
|
||||||
public DefaultTrackSelector(Context context, ExoTrackSelection.Factory trackSelectionFactory) {
|
public DefaultTrackSelector(Context context, ExoTrackSelection.Factory trackSelectionFactory) {
|
||||||
this(context, Parameters.getDefaults(context), trackSelectionFactory);
|
this(context, Parameters.DEFAULT, trackSelectionFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2471,9 +2481,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
if (parameters instanceof Parameters) {
|
if (parameters instanceof Parameters) {
|
||||||
this.parameters = (Parameters) parameters;
|
this.parameters = (Parameters) parameters;
|
||||||
} else {
|
} else {
|
||||||
Parameters defaultParameters =
|
this.parameters = Parameters.DEFAULT.buildUpon().set(parameters).build();
|
||||||
context == null ? Parameters.DEFAULT_WITHOUT_CONTEXT : Parameters.getDefaults(context);
|
|
||||||
this.parameters = defaultParameters.buildUpon().set(parameters).build();
|
|
||||||
}
|
}
|
||||||
this.audioAttributes = AudioAttributes.DEFAULT;
|
this.audioAttributes = AudioAttributes.DEFAULT;
|
||||||
if (this.parameters.constrainAudioChannelCountToDeviceCapabilities && context == null) {
|
if (this.parameters.constrainAudioChannelCountToDeviceCapabilities && context == null) {
|
||||||
@ -2778,6 +2786,11 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@Nullable
|
||||||
|
Point viewportSizeFromDisplay =
|
||||||
|
params.isViewportSizeLimitedByPhysicalDisplaySize && context != null
|
||||||
|
? Util.getCurrentDisplayModeSize(context)
|
||||||
|
: null;
|
||||||
return selectTracksForType(
|
return selectTracksForType(
|
||||||
C.TRACK_TYPE_VIDEO,
|
C.TRACK_TYPE_VIDEO,
|
||||||
mappedTrackInfo,
|
mappedTrackInfo,
|
||||||
@ -2789,7 +2802,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
params,
|
params,
|
||||||
support,
|
support,
|
||||||
selectedAudioLanguage,
|
selectedAudioLanguage,
|
||||||
mixedMimeTypeSupports[rendererIndex]),
|
mixedMimeTypeSupports[rendererIndex],
|
||||||
|
viewportSizeFromDisplay),
|
||||||
VideoTrackInfo::compareSelections);
|
VideoTrackInfo::compareSelections);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2900,13 +2914,23 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@Nullable
|
||||||
|
String preferredCaptioningLanguage =
|
||||||
|
params.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||||
|
? getPreferredLanguageFromCaptioningManager(context)
|
||||||
|
: null;
|
||||||
return selectTracksForType(
|
return selectTracksForType(
|
||||||
C.TRACK_TYPE_TEXT,
|
C.TRACK_TYPE_TEXT,
|
||||||
mappedTrackInfo,
|
mappedTrackInfo,
|
||||||
rendererFormatSupports,
|
rendererFormatSupports,
|
||||||
(int rendererIndex, TrackGroup group, @Capabilities int[] support) ->
|
(int rendererIndex, TrackGroup group, @Capabilities int[] support) ->
|
||||||
TextTrackInfo.createForTrackGroup(
|
TextTrackInfo.createForTrackGroup(
|
||||||
rendererIndex, group, params, support, selectedAudioLanguage),
|
rendererIndex,
|
||||||
|
group,
|
||||||
|
params,
|
||||||
|
support,
|
||||||
|
selectedAudioLanguage,
|
||||||
|
preferredCaptioningLanguage),
|
||||||
TextTrackInfo::compareSelections);
|
TextTrackInfo::compareSelections);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3478,6 +3502,23 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static String getPreferredLanguageFromCaptioningManager(@Nullable Context context) {
|
||||||
|
if (context == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
CaptioningManager captioningManager =
|
||||||
|
(CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);
|
||||||
|
if (captioningManager == null || !captioningManager.isEnabled()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Locale preferredLocale = captioningManager.getLocale();
|
||||||
|
if (preferredLocale == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Util.getLocaleLanguageTag(preferredLocale);
|
||||||
|
}
|
||||||
|
|
||||||
/** Base class for track selection information of a {@link Format}. */
|
/** Base class for track selection information of a {@link Format}. */
|
||||||
private abstract static class TrackInfo<T extends TrackInfo<T>> {
|
private abstract static class TrackInfo<T extends TrackInfo<T>> {
|
||||||
/** Factory for {@link TrackInfo} implementations for a given {@link TrackGroup}. */
|
/** Factory for {@link TrackInfo} implementations for a given {@link TrackGroup}. */
|
||||||
@ -3521,13 +3562,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
Parameters params,
|
Parameters params,
|
||||||
@Capabilities int[] formatSupport,
|
@Capabilities int[] formatSupport,
|
||||||
@Nullable String selectedAudioLanguage,
|
@Nullable String selectedAudioLanguage,
|
||||||
@AdaptiveSupport int mixedMimeTypeAdaptationSupport) {
|
@AdaptiveSupport int mixedMimeTypeAdaptationSupport,
|
||||||
|
@Nullable Point viewportSizeFromDisplay) {
|
||||||
|
int viewportWidth =
|
||||||
|
viewportSizeFromDisplay != null ? viewportSizeFromDisplay.x : params.viewportWidth;
|
||||||
|
int viewportHeight =
|
||||||
|
viewportSizeFromDisplay != null ? viewportSizeFromDisplay.y : params.viewportHeight;
|
||||||
int maxPixelsToRetainForViewport =
|
int maxPixelsToRetainForViewport =
|
||||||
getMaxVideoPixelsToRetainForViewport(
|
getMaxVideoPixelsToRetainForViewport(
|
||||||
trackGroup,
|
trackGroup, viewportWidth, viewportHeight, params.viewportOrientationMayChange);
|
||||||
params.viewportWidth,
|
|
||||||
params.viewportHeight,
|
|
||||||
params.viewportOrientationMayChange);
|
|
||||||
ImmutableList.Builder<VideoTrackInfo> listBuilder = ImmutableList.builder();
|
ImmutableList.Builder<VideoTrackInfo> listBuilder = ImmutableList.builder();
|
||||||
for (int i = 0; i < trackGroup.length; i++) {
|
for (int i = 0; i < trackGroup.length; i++) {
|
||||||
int pixelCount = trackGroup.getFormat(i).getPixelCount();
|
int pixelCount = trackGroup.getFormat(i).getPixelCount();
|
||||||
@ -4018,7 +4061,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
TrackGroup trackGroup,
|
TrackGroup trackGroup,
|
||||||
Parameters params,
|
Parameters params,
|
||||||
@Capabilities int[] formatSupport,
|
@Capabilities int[] formatSupport,
|
||||||
@Nullable String selectedAudioLanguage) {
|
@Nullable String selectedAudioLanguage,
|
||||||
|
@Nullable String preferredCaptioningLanguage) {
|
||||||
ImmutableList.Builder<TextTrackInfo> listBuilder = ImmutableList.builder();
|
ImmutableList.Builder<TextTrackInfo> listBuilder = ImmutableList.builder();
|
||||||
for (int i = 0; i < trackGroup.length; i++) {
|
for (int i = 0; i < trackGroup.length; i++) {
|
||||||
listBuilder.add(
|
listBuilder.add(
|
||||||
@ -4028,7 +4072,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
/* trackIndex= */ i,
|
/* trackIndex= */ i,
|
||||||
params,
|
params,
|
||||||
formatSupport[i],
|
formatSupport[i],
|
||||||
selectedAudioLanguage));
|
selectedAudioLanguage,
|
||||||
|
preferredCaptioningLanguage));
|
||||||
}
|
}
|
||||||
return listBuilder.build();
|
return listBuilder.build();
|
||||||
}
|
}
|
||||||
@ -4049,7 +4094,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
int trackIndex,
|
int trackIndex,
|
||||||
Parameters parameters,
|
Parameters parameters,
|
||||||
@Capabilities int trackFormatSupport,
|
@Capabilities int trackFormatSupport,
|
||||||
@Nullable String selectedAudioLanguage) {
|
@Nullable String selectedAudioLanguage,
|
||||||
|
@Nullable String preferredCaptioningLanguage) {
|
||||||
super(rendererIndex, trackGroup, trackIndex);
|
super(rendererIndex, trackGroup, trackIndex);
|
||||||
isWithinRendererCapabilities =
|
isWithinRendererCapabilities =
|
||||||
isFormatSupported(trackFormatSupport, /* allowExceedsCapabilities= */ false);
|
isFormatSupported(trackFormatSupport, /* allowExceedsCapabilities= */ false);
|
||||||
@ -4061,9 +4107,11 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
// Compare against empty (unset) language if no preference is given to allow the selection of
|
// Compare against empty (unset) language if no preference is given to allow the selection of
|
||||||
// a text track with undetermined language.
|
// a text track with undetermined language.
|
||||||
ImmutableList<String> preferredLanguages =
|
ImmutableList<String> preferredLanguages =
|
||||||
parameters.preferredTextLanguages.isEmpty()
|
preferredCaptioningLanguage != null
|
||||||
? ImmutableList.of("")
|
? ImmutableList.of(preferredCaptioningLanguage)
|
||||||
: parameters.preferredTextLanguages;
|
: parameters.preferredTextLanguages.isEmpty()
|
||||||
|
? ImmutableList.of("")
|
||||||
|
: parameters.preferredTextLanguages;
|
||||||
for (int i = 0; i < preferredLanguages.size(); i++) {
|
for (int i = 0; i < preferredLanguages.size(); i++) {
|
||||||
int score =
|
int score =
|
||||||
getFormatLanguageScore(
|
getFormatLanguageScore(
|
||||||
@ -4076,8 +4124,11 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
|||||||
}
|
}
|
||||||
preferredLanguageIndex = bestLanguageIndex;
|
preferredLanguageIndex = bestLanguageIndex;
|
||||||
preferredLanguageScore = bestLanguageScore;
|
preferredLanguageScore = bestLanguageScore;
|
||||||
preferredRoleFlagsScore =
|
int preferredRoleFlags =
|
||||||
getRoleFlagMatchScore(format.roleFlags, parameters.preferredTextRoleFlags);
|
preferredCaptioningLanguage != null
|
||||||
|
? C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND
|
||||||
|
: parameters.preferredTextRoleFlags;
|
||||||
|
preferredRoleFlagsScore = getRoleFlagMatchScore(format.roleFlags, preferredRoleFlags);
|
||||||
hasCaptionRoleFlags =
|
hasCaptionRoleFlags =
|
||||||
(format.roleFlags & (C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND)) != 0;
|
(format.roleFlags & (C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND)) != 0;
|
||||||
boolean selectedAudioLanguageUndetermined =
|
boolean selectedAudioLanguageUndetermined =
|
||||||
|
@ -183,7 +183,7 @@ public abstract class TrackSelector {
|
|||||||
|
|
||||||
/** Returns the current parameters for track selection. */
|
/** Returns the current parameters for track selection. */
|
||||||
public TrackSelectionParameters getParameters() {
|
public TrackSelectionParameters getParameters() {
|
||||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
return TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,7 +93,7 @@ public class AudioCapabilitiesEndToEndTest {
|
|||||||
applicationContext = ApplicationProvider.getApplicationContext();
|
applicationContext = ApplicationProvider.getApplicationContext();
|
||||||
audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE);
|
audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE);
|
||||||
shadowOf(audioManager).setOutputDevices(ImmutableList.of());
|
shadowOf(audioManager).setOutputDevices(ImmutableList.of());
|
||||||
defaultParameters = Parameters.getDefaults(applicationContext);
|
defaultParameters = Parameters.DEFAULT;
|
||||||
selectedTracks = new ArrayList<>();
|
selectedTracks = new ArrayList<>();
|
||||||
analyticsListenerReceivedCallbacks = new ArrayList<>();
|
analyticsListenerReceivedCallbacks = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ public class DownloadHelperTest {
|
|||||||
new DownloadHelper(
|
new DownloadHelper(
|
||||||
testMediaItem,
|
testMediaItem,
|
||||||
new TestMediaSource(),
|
new TestMediaSource(),
|
||||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
new DefaultRendererCapabilitiesList.Factory(renderersFactory)
|
new DefaultRendererCapabilitiesList.Factory(renderersFactory)
|
||||||
.createRendererCapabilitiesList());
|
.createRendererCapabilitiesList());
|
||||||
}
|
}
|
||||||
@ -257,7 +257,7 @@ public class DownloadHelperTest {
|
|||||||
throws Exception {
|
throws Exception {
|
||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
DefaultTrackSelector.Parameters parameters =
|
DefaultTrackSelector.Parameters parameters =
|
||||||
new DefaultTrackSelector.ParametersBuilder(getApplicationContext())
|
new DefaultTrackSelector.Parameters.Builder()
|
||||||
.setPreferredAudioLanguage("de")
|
.setPreferredAudioLanguage("de")
|
||||||
.setPreferredTextLanguage("de")
|
.setPreferredTextLanguage("de")
|
||||||
.setRendererDisabled(/* rendererIndex= */ 2, true)
|
.setRendererDisabled(/* rendererIndex= */ 2, true)
|
||||||
@ -461,7 +461,7 @@ public class DownloadHelperTest {
|
|||||||
DownloadHelper downloadHelper =
|
DownloadHelper downloadHelper =
|
||||||
DownloadHelper.forMediaItem(
|
DownloadHelper.forMediaItem(
|
||||||
testMediaItem,
|
testMediaItem,
|
||||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
new FakeDataSource.Factory());
|
new FakeDataSource.Factory());
|
||||||
|
|
||||||
@ -541,7 +541,7 @@ public class DownloadHelperTest {
|
|||||||
downloadHelper.set(
|
downloadHelper.set(
|
||||||
DownloadHelper.forMediaItem(
|
DownloadHelper.forMediaItem(
|
||||||
testMediaItem,
|
testMediaItem,
|
||||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
TrackSelectionParameters.DEFAULT,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
new FakeDataSource.Factory()));
|
new FakeDataSource.Factory()));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
@ -572,7 +572,7 @@ public class DownloadHelperTest {
|
|||||||
downloadHelper.set(
|
downloadHelper.set(
|
||||||
DownloadHelper.forMediaItem(
|
DownloadHelper.forMediaItem(
|
||||||
testMediaItem,
|
testMediaItem,
|
||||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
TrackSelectionParameters.DEFAULT,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
new FakeDataSource.Factory(),
|
new FakeDataSource.Factory(),
|
||||||
new DefaultDrmSessionManager.Builder()
|
new DefaultDrmSessionManager.Builder()
|
||||||
@ -619,7 +619,7 @@ public class DownloadHelperTest {
|
|||||||
new DownloadHelper(
|
new DownloadHelper(
|
||||||
testMediaItem,
|
testMediaItem,
|
||||||
new FakeMediaSource(),
|
new FakeMediaSource(),
|
||||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
TrackSelectionParameters.DEFAULT,
|
||||||
emptyRendererCapabilitiesList));
|
emptyRendererCapabilitiesList));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
exception.set(e);
|
exception.set(e);
|
||||||
|
@ -89,6 +89,8 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.MockitoJUnit;
|
import org.mockito.junit.MockitoJUnit;
|
||||||
import org.mockito.junit.MockitoRule;
|
import org.mockito.junit.MockitoRule;
|
||||||
|
import org.robolectric.shadows.ShadowDisplay;
|
||||||
|
import org.robolectric.shadows.ShadowDisplayManager;
|
||||||
|
|
||||||
/** Unit tests for {@link DefaultTrackSelector}. */
|
/** Unit tests for {@link DefaultTrackSelector}. */
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@ -171,7 +173,7 @@ public final class DefaultTrackSelectorTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
when(bandwidthMeter.getBitrateEstimate()).thenReturn(1000000L);
|
when(bandwidthMeter.getBitrateEstimate()).thenReturn(1000000L);
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
defaultParameters = Parameters.getDefaults(context);
|
defaultParameters = Parameters.DEFAULT;
|
||||||
trackSelector = new DefaultTrackSelector(context);
|
trackSelector = new DefaultTrackSelector(context);
|
||||||
trackSelector.init(invalidationListener, bandwidthMeter);
|
trackSelector.init(invalidationListener, bandwidthMeter);
|
||||||
}
|
}
|
||||||
@ -2517,6 +2519,127 @@ public final class DefaultTrackSelectorTest {
|
|||||||
assertFixedSelection(result.selections[0], trackGroups, formatDV);
|
assertFixedSelection(result.selections[0], trackGroups, formatDV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void selectTracks_withViewportSize_selectsTrackWithinViewport() throws Exception {
|
||||||
|
Format formatH264Low =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(400)
|
||||||
|
.setWidth(600)
|
||||||
|
.setHeight(400)
|
||||||
|
.build();
|
||||||
|
Format formatH264Mid =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(800)
|
||||||
|
.setWidth(1200)
|
||||||
|
.setHeight(800)
|
||||||
|
.build();
|
||||||
|
Format formatH264High =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(2000)
|
||||||
|
.setWidth(2400)
|
||||||
|
.setHeight(1600)
|
||||||
|
.build();
|
||||||
|
TrackGroup adaptiveGroup = new TrackGroup(formatH264Low, formatH264Mid, formatH264High);
|
||||||
|
TrackGroupArray trackGroups = new TrackGroupArray(adaptiveGroup);
|
||||||
|
|
||||||
|
// Choose a viewport between low and mid, so that the low resolution only fits if orientation
|
||||||
|
// changes are allowed.
|
||||||
|
trackSelector.setParameters(
|
||||||
|
defaultParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setViewportSize(
|
||||||
|
/* viewportWidth= */ 450,
|
||||||
|
/* viewportHeight= */ 650,
|
||||||
|
/* viewportOrientationMayChange= */ true));
|
||||||
|
TrackSelectorResult result =
|
||||||
|
trackSelector.selectTracks(
|
||||||
|
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE);
|
||||||
|
assertThat(result.length).isEqualTo(1);
|
||||||
|
assertAdaptiveSelection(result.selections[0], adaptiveGroup, /* expectedTracks...= */ 1, 0);
|
||||||
|
|
||||||
|
trackSelector.setParameters(
|
||||||
|
defaultParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setViewportSize(
|
||||||
|
/* viewportWidth= */ 450,
|
||||||
|
/* viewportHeight= */ 650,
|
||||||
|
/* viewportOrientationMayChange= */ false));
|
||||||
|
result =
|
||||||
|
trackSelector.selectTracks(
|
||||||
|
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE);
|
||||||
|
assertThat(result.length).isEqualTo(1);
|
||||||
|
assertFixedSelection(result.selections[0], adaptiveGroup, /* expectedTrack= */ 0);
|
||||||
|
|
||||||
|
// Verify that selecting (almost) exactly one resolution does not include the next larger one.
|
||||||
|
trackSelector.setParameters(
|
||||||
|
defaultParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setViewportSize(
|
||||||
|
/* viewportWidth= */ 1201,
|
||||||
|
/* viewportHeight= */ 801,
|
||||||
|
/* viewportOrientationMayChange= */ true));
|
||||||
|
result =
|
||||||
|
trackSelector.selectTracks(
|
||||||
|
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE);
|
||||||
|
assertThat(result.length).isEqualTo(1);
|
||||||
|
assertAdaptiveSelection(result.selections[0], adaptiveGroup, /* expectedTracks...= */ 1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void selectTracks_withViewportSizeSetToPhysicalDisplaySize_selectsTrackWithinDisplaySize()
|
||||||
|
throws Exception {
|
||||||
|
Format formatH264Low =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(400)
|
||||||
|
.setWidth(600)
|
||||||
|
.setHeight(400)
|
||||||
|
.build();
|
||||||
|
Format formatH264Mid =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(800)
|
||||||
|
.setWidth(1200)
|
||||||
|
.setHeight(800)
|
||||||
|
.build();
|
||||||
|
Format formatH264High =
|
||||||
|
new Format.Builder()
|
||||||
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
|
.setAverageBitrate(2000)
|
||||||
|
.setWidth(2400)
|
||||||
|
.setHeight(1600)
|
||||||
|
.build();
|
||||||
|
TrackGroup adaptiveGroup = new TrackGroup(formatH264Low, formatH264Mid, formatH264High);
|
||||||
|
TrackGroupArray trackGroups = new TrackGroupArray(adaptiveGroup);
|
||||||
|
// Choose a display size (450x650) between low and mid, so that the low resolution only fits if
|
||||||
|
// orientation changes are allowed.
|
||||||
|
ShadowDisplayManager.changeDisplay(
|
||||||
|
ShadowDisplay.getDefaultDisplay().getDisplayId(), "w450dp-h650dp-160dpi");
|
||||||
|
|
||||||
|
trackSelector.setParameters(
|
||||||
|
defaultParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setViewportSizeToPhysicalDisplaySize(/* viewportOrientationMayChange= */ true));
|
||||||
|
TrackSelectorResult result =
|
||||||
|
trackSelector.selectTracks(
|
||||||
|
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE);
|
||||||
|
assertThat(result.length).isEqualTo(1);
|
||||||
|
assertAdaptiveSelection(result.selections[0], adaptiveGroup, /* expectedTracks...= */ 1, 0);
|
||||||
|
|
||||||
|
trackSelector.setParameters(
|
||||||
|
defaultParameters
|
||||||
|
.buildUpon()
|
||||||
|
.setViewportSizeToPhysicalDisplaySize(/* viewportOrientationMayChange= */ false));
|
||||||
|
result =
|
||||||
|
trackSelector.selectTracks(
|
||||||
|
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE);
|
||||||
|
assertThat(result.length).isEqualTo(1);
|
||||||
|
assertFixedSelection(result.selections[0], adaptiveGroup, /* expectedTrack= */ 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void
|
public void
|
||||||
selectTracks_withSingleTrackAndOffloadPreferenceEnabled_returnsRendererConfigOffloadModeEnabledGaplessRequired()
|
selectTracks_withSingleTrackAndOffloadPreferenceEnabled_returnsRendererConfigOffloadModeEnabledGaplessRequired()
|
||||||
@ -3295,7 +3418,7 @@ public final class DefaultTrackSelectorTest {
|
|||||||
* variables.
|
* variables.
|
||||||
*/
|
*/
|
||||||
private static Parameters buildParametersForEqualsTest() {
|
private static Parameters buildParametersForEqualsTest() {
|
||||||
return Parameters.DEFAULT_WITHOUT_CONTEXT
|
return Parameters.DEFAULT
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
// Video
|
// Video
|
||||||
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
||||||
|
@ -39,7 +39,7 @@ public final class DownloadHelperTest {
|
|||||||
new FakeDataSource.Factory());
|
new FakeDataSource.Factory());
|
||||||
DownloadHelper.forMediaItem(
|
DownloadHelper.forMediaItem(
|
||||||
new MediaItem.Builder().setUri("http://uri").setMimeType(MimeTypes.APPLICATION_MPD).build(),
|
new MediaItem.Builder().setUri("http://uri").setMimeType(MimeTypes.APPLICATION_MPD).build(),
|
||||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
||||||
new FakeDataSource.Factory(),
|
new FakeDataSource.Factory(),
|
||||||
/* drmSessionManager= */ DrmSessionManager.DRM_UNSUPPORTED);
|
/* drmSessionManager= */ DrmSessionManager.DRM_UNSUPPORTED);
|
||||||
|
@ -44,7 +44,7 @@ public final class DownloadHelperTest {
|
|||||||
.setUri("http://uri")
|
.setUri("http://uri")
|
||||||
.setMimeType(MimeTypes.APPLICATION_M3U8)
|
.setMimeType(MimeTypes.APPLICATION_M3U8)
|
||||||
.build(),
|
.build(),
|
||||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
||||||
new FakeDataSource.Factory(),
|
new FakeDataSource.Factory(),
|
||||||
/* drmSessionManager= */ null);
|
/* drmSessionManager= */ null);
|
||||||
|
@ -267,7 +267,7 @@ import androidx.media3.test.utils.StubExoPlayer;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
return TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -38,7 +38,7 @@ public final class DownloadHelperTest {
|
|||||||
new FakeDataSource.Factory());
|
new FakeDataSource.Factory());
|
||||||
DownloadHelper.forMediaItem(
|
DownloadHelper.forMediaItem(
|
||||||
new MediaItem.Builder().setUri("http://uri").setMimeType(MimeTypes.APPLICATION_SS).build(),
|
new MediaItem.Builder().setUri("http://uri").setMimeType(MimeTypes.APPLICATION_SS).build(),
|
||||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||||
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
||||||
new FakeDataSource.Factory(),
|
new FakeDataSource.Factory(),
|
||||||
/* drmSessionManager= */ null);
|
/* drmSessionManager= */ null);
|
||||||
|
@ -1986,7 +1986,7 @@ public class MediaController implements Player {
|
|||||||
public final TrackSelectionParameters getTrackSelectionParameters() {
|
public final TrackSelectionParameters getTrackSelectionParameters() {
|
||||||
verifyApplicationThread();
|
verifyApplicationThread();
|
||||||
if (!isConnected()) {
|
if (!isConnected()) {
|
||||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
return TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
return impl.getTrackSelectionParameters();
|
return impl.getTrackSelectionParameters();
|
||||||
}
|
}
|
||||||
|
@ -1345,7 +1345,7 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
return TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -2434,7 +2434,7 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization;
|
|||||||
seekForwardIncrementMs,
|
seekForwardIncrementMs,
|
||||||
maxSeekToPreviousPositionMs,
|
maxSeekToPreviousPositionMs,
|
||||||
/* currentTracks= */ Tracks.EMPTY,
|
/* currentTracks= */ Tracks.EMPTY,
|
||||||
/* parameters= */ TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
/* parameters= */ TrackSelectionParameters.DEFAULT);
|
||||||
|
|
||||||
return new ControllerInfo(
|
return new ControllerInfo(
|
||||||
playerInfo,
|
playerInfo,
|
||||||
|
@ -462,7 +462,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||||||
/* seekForwardIncrementMs= */ C.DEFAULT_SEEK_FORWARD_INCREMENT_MS,
|
/* seekForwardIncrementMs= */ C.DEFAULT_SEEK_FORWARD_INCREMENT_MS,
|
||||||
/* maxSeekToPreviousPositionMs= */ C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS,
|
/* maxSeekToPreviousPositionMs= */ C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS,
|
||||||
/* currentTracks= */ Tracks.EMPTY,
|
/* currentTracks= */ Tracks.EMPTY,
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
TrackSelectionParameters.DEFAULT);
|
||||||
|
|
||||||
@Nullable public final PlaybackException playerError;
|
@Nullable public final PlaybackException playerError;
|
||||||
|
|
||||||
@ -1003,7 +1003,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||||||
if (!currentTracks.equals(Tracks.EMPTY)) {
|
if (!currentTracks.equals(Tracks.EMPTY)) {
|
||||||
bundle.putBundle(FIELD_CURRENT_TRACKS, currentTracks.toBundle());
|
bundle.putBundle(FIELD_CURRENT_TRACKS, currentTracks.toBundle());
|
||||||
}
|
}
|
||||||
if (!trackSelectionParameters.equals(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)) {
|
if (!trackSelectionParameters.equals(TrackSelectionParameters.DEFAULT)) {
|
||||||
bundle.putBundle(FIELD_TRACK_SELECTION_PARAMETERS, trackSelectionParameters.toBundle());
|
bundle.putBundle(FIELD_TRACK_SELECTION_PARAMETERS, trackSelectionParameters.toBundle());
|
||||||
}
|
}
|
||||||
return bundle;
|
return bundle;
|
||||||
@ -1117,7 +1117,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||||||
Bundle trackSelectionParametersBundle = bundle.getBundle(FIELD_TRACK_SELECTION_PARAMETERS);
|
Bundle trackSelectionParametersBundle = bundle.getBundle(FIELD_TRACK_SELECTION_PARAMETERS);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
trackSelectionParametersBundle == null
|
trackSelectionParametersBundle == null
|
||||||
? TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
? TrackSelectionParameters.DEFAULT
|
||||||
: TrackSelectionParameters.fromBundle(trackSelectionParametersBundle);
|
: TrackSelectionParameters.fromBundle(trackSelectionParametersBundle);
|
||||||
return new PlayerInfo(
|
return new PlayerInfo(
|
||||||
playerError,
|
playerError,
|
||||||
|
@ -1005,7 +1005,7 @@ public class MediaControllerListenerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void onTrackSelectionParametersChanged() throws Exception {
|
public void onTrackSelectionParametersChanged() throws Exception {
|
||||||
RemoteMediaSession.RemoteMockPlayer player = remoteSession.getMockPlayer();
|
RemoteMediaSession.RemoteMockPlayer player = remoteSession.getMockPlayer();
|
||||||
player.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
player.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT);
|
||||||
MediaController controller = controllerTestRule.createController(remoteSession.getToken());
|
MediaController controller = controllerTestRule.createController(remoteSession.getToken());
|
||||||
AtomicReference<TrackSelectionParameters> parametersFromParamRef = new AtomicReference<>();
|
AtomicReference<TrackSelectionParameters> parametersFromParamRef = new AtomicReference<>();
|
||||||
AtomicReference<TrackSelectionParameters> parametersFromGetterRef = new AtomicReference<>();
|
AtomicReference<TrackSelectionParameters> parametersFromGetterRef = new AtomicReference<>();
|
||||||
@ -1031,10 +1031,7 @@ public class MediaControllerListenerTest {
|
|||||||
threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
|
threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
|
||||||
|
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(100).build();
|
||||||
.buildUpon()
|
|
||||||
.setMaxAudioBitrate(100)
|
|
||||||
.build();
|
|
||||||
player.notifyTrackSelectionParametersChanged(parameters);
|
player.notifyTrackSelectionParametersChanged(parameters);
|
||||||
|
|
||||||
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
|
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
|
||||||
|
@ -2028,7 +2028,7 @@ public class MediaControllerTest {
|
|||||||
.build();
|
.build();
|
||||||
Tracks currentTracks = new Tracks(trackGroups);
|
Tracks currentTracks = new Tracks(trackGroups);
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxVideoSizeSd().build();
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoSizeSd().build();
|
||||||
Timeline timeline = MediaTestUtils.createTimeline(5);
|
Timeline timeline = MediaTestUtils.createTimeline(5);
|
||||||
int currentMediaItemIndex = 3;
|
int currentMediaItemIndex = 3;
|
||||||
MediaItem currentMediaItem =
|
MediaItem currentMediaItem =
|
||||||
@ -2249,7 +2249,7 @@ public class MediaControllerTest {
|
|||||||
public void getTrackSelectionParameters_returnsTrackSelectionParametersOfPlayerInSession()
|
public void getTrackSelectionParameters_returnsTrackSelectionParametersOfPlayerInSession()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxVideoSizeSd().build();
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoSizeSd().build();
|
||||||
Bundle playerConfig =
|
Bundle playerConfig =
|
||||||
new RemoteMediaSession.MockPlayerConfigBuilder()
|
new RemoteMediaSession.MockPlayerConfigBuilder()
|
||||||
.setTrackSelectionParameters(parameters)
|
.setTrackSelectionParameters(parameters)
|
||||||
@ -3066,7 +3066,7 @@ public class MediaControllerTest {
|
|||||||
/* trackSupport= */ new int[1],
|
/* trackSupport= */ new int[1],
|
||||||
/* trackSelected= */ new boolean[1])));
|
/* trackSelected= */ new boolean[1])));
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
TrackSelectionParameters.DEFAULT
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.addOverride(
|
.addOverride(
|
||||||
new TrackSelectionOverride(playerTrackGroupForOverride, /* trackIndex= */ 0))
|
new TrackSelectionOverride(playerTrackGroupForOverride, /* trackIndex= */ 0))
|
||||||
|
@ -280,9 +280,7 @@ public class MediaSessionPermissionTest {
|
|||||||
public void setTrackSelectionParameters() throws Exception {
|
public void setTrackSelectionParameters() throws Exception {
|
||||||
testOnCommandRequest(
|
testOnCommandRequest(
|
||||||
COMMAND_SET_TRACK_SELECTION_PARAMETERS,
|
COMMAND_SET_TRACK_SELECTION_PARAMETERS,
|
||||||
controller ->
|
controller -> controller.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT));
|
||||||
controller.setTrackSelectionParameters(
|
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -862,7 +862,7 @@ public class MediaSessionPlayerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void setTrackSelectionParameters() throws Exception {
|
public void setTrackSelectionParameters() throws Exception {
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxAudioBitrate(10).build();
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(10).build();
|
||||||
|
|
||||||
controller.setTrackSelectionParameters(trackSelectionParameters);
|
controller.setTrackSelectionParameters(trackSelectionParameters);
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ public class MockPlayerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void setTrackSelectionParameters() {
|
public void setTrackSelectionParameters() {
|
||||||
TrackSelectionParameters trackSelectionParameters =
|
TrackSelectionParameters trackSelectionParameters =
|
||||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxAudioBitrate(10).build();
|
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(10).build();
|
||||||
|
|
||||||
player.setTrackSelectionParameters(trackSelectionParameters);
|
player.setTrackSelectionParameters(trackSelectionParameters);
|
||||||
|
|
||||||
|
@ -371,7 +371,7 @@ public class MockPlayer implements Player {
|
|||||||
commands = new Player.Commands.Builder().addAllCommands().build();
|
commands = new Player.Commands.Builder().addAllCommands().build();
|
||||||
|
|
||||||
currentTracks = Tracks.EMPTY;
|
currentTracks = Tracks.EMPTY;
|
||||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
trackSelectionParameters = TrackSelectionParameters.DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user