mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +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 {
|
||||
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 getDefaults(android.content.Context);
|
||||
method @Deprecated public static androidx.media3.common.TrackSelectionParameters getDefaults(android.content.Context);
|
||||
method @CallSuper public android.os.Bundle toBundle();
|
||||
field public final com.google.common.collect.ImmutableSet<java.lang.Integer> disabledTrackTypes;
|
||||
field public final boolean forceHighestSupportedBitrate;
|
||||
field public final boolean forceLowestBitrate;
|
||||
field @androidx.media3.common.C.SelectionFlags public final int ignoredTextSelectionFlags;
|
||||
field public final boolean isViewportSizeLimitedByPhysicalDisplaySize;
|
||||
field public final int maxAudioBitrate;
|
||||
field public final int maxAudioChannelCount;
|
||||
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 @androidx.media3.common.C.RoleFlags public final int preferredVideoRoleFlags;
|
||||
field public final boolean selectUndeterminedTextLanguage;
|
||||
field public final boolean usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||
field public final int viewportHeight;
|
||||
field public final boolean viewportOrientationMayChange;
|
||||
field public final int viewportWidth;
|
||||
}
|
||||
|
||||
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 build();
|
||||
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 setPreferredAudioRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
||||
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 setPreferredTextRoleFlags(@androidx.media3.common.C.RoleFlags int);
|
||||
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 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 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 {
|
||||
|
@ -315,7 +315,7 @@ public class DownloadTracker {
|
||||
TrackSelectionDialog.createForTracksAndParameters(
|
||||
/* titleId= */ R.string.exo_download_description,
|
||||
tracks,
|
||||
DownloadHelper.getDefaultTrackSelectorParameters(context),
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
/* allowAdaptiveSelections= */ false,
|
||||
/* allowMultipleOverrides= */ true,
|
||||
/* onTracksSelectedListener= */ this,
|
||||
|
@ -637,7 +637,7 @@ public final class CastPlayer extends BasePlayer {
|
||||
|
||||
@Override
|
||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
return TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -159,7 +159,7 @@ public abstract class SimpleBasePlayer extends BasePlayer {
|
||||
seekForwardIncrementMs = C.DEFAULT_SEEK_FORWARD_INCREMENT_MS;
|
||||
maxSeekToPreviousPositionMs = C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS;
|
||||
playbackParameters = PlaybackParameters.DEFAULT;
|
||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT;
|
||||
audioAttributes = AudioAttributes.DEFAULT;
|
||||
volume = 1f;
|
||||
videoSize = VideoSize.UNKNOWN;
|
||||
|
@ -22,9 +22,7 @@ import static java.lang.annotation.ElementType.TYPE_USE;
|
||||
import static java.lang.annotation.RetentionPolicy.SOURCE;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.os.Bundle;
|
||||
import android.os.Looper;
|
||||
import android.view.accessibility.CaptioningManager;
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.IntDef;
|
||||
@ -37,6 +35,7 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.primitives.Ints;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import com.google.errorprone.annotations.InlineMe;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
@ -44,7 +43,6 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import org.checkerframework.checker.initialization.qual.UnknownInitialization;
|
||||
import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
|
||||
@ -88,6 +86,7 @@ public class TrackSelectionParameters {
|
||||
private int minVideoBitrate;
|
||||
private int viewportWidth;
|
||||
private int viewportHeight;
|
||||
private boolean isViewportSizeLimitedByPhysicalDisplaySize;
|
||||
private boolean viewportOrientationMayChange;
|
||||
private ImmutableList<String> preferredVideoMimeTypes;
|
||||
private ImmutableList<String> preferredVideoLanguages;
|
||||
@ -102,6 +101,7 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
private ImmutableList<String> preferredTextLanguages;
|
||||
private @C.RoleFlags int preferredTextRoleFlags;
|
||||
private boolean usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||
private @C.SelectionFlags int ignoredTextSelectionFlags;
|
||||
private boolean selectUndeterminedTextLanguage;
|
||||
// Image
|
||||
@ -112,12 +112,7 @@ public class TrackSelectionParameters {
|
||||
private HashMap<TrackGroup, TrackSelectionOverride> overrides;
|
||||
private HashSet<@C.TrackType Integer> disabledTrackTypes;
|
||||
|
||||
/**
|
||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
||||
* #Builder(Context)} instead.
|
||||
*/
|
||||
@UnstableApi
|
||||
@Deprecated
|
||||
/** Creates a builder with default initial values. */
|
||||
public Builder() {
|
||||
// Video
|
||||
maxVideoWidth = Integer.MAX_VALUE;
|
||||
@ -126,6 +121,7 @@ public class TrackSelectionParameters {
|
||||
maxVideoBitrate = Integer.MAX_VALUE;
|
||||
viewportWidth = Integer.MAX_VALUE;
|
||||
viewportHeight = Integer.MAX_VALUE;
|
||||
isViewportSizeLimitedByPhysicalDisplaySize = true;
|
||||
viewportOrientationMayChange = true;
|
||||
preferredVideoMimeTypes = ImmutableList.of();
|
||||
preferredVideoLanguages = ImmutableList.of();
|
||||
@ -140,6 +136,7 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
preferredTextLanguages = ImmutableList.of();
|
||||
preferredTextRoleFlags = 0;
|
||||
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = true;
|
||||
ignoredTextSelectionFlags = 0;
|
||||
selectUndeterminedTextLanguage = false;
|
||||
// Image
|
||||
@ -152,15 +149,12 @@ public class TrackSelectionParameters {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a builder with default initial values.
|
||||
*
|
||||
* @param context Any context.
|
||||
* @deprecated Use {@link #Builder()} instead.
|
||||
*/
|
||||
@SuppressWarnings({"deprecation", "method.invocation"}) // Methods invoked are setter only.
|
||||
@Deprecated
|
||||
@InlineMe(replacement = "this()")
|
||||
public Builder(Context context) {
|
||||
this();
|
||||
setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(context);
|
||||
setViewportSizeToPhysicalDisplaySize(context, /* viewportOrientationMayChange= */ true);
|
||||
}
|
||||
|
||||
/** Creates a builder with the initial values specified in {@code initialValues}. */
|
||||
@ -173,26 +167,25 @@ public class TrackSelectionParameters {
|
||||
@UnstableApi
|
||||
protected Builder(Bundle bundle) {
|
||||
// Video
|
||||
maxVideoWidth = bundle.getInt(FIELD_MAX_VIDEO_WIDTH, DEFAULT_WITHOUT_CONTEXT.maxVideoWidth);
|
||||
maxVideoHeight =
|
||||
bundle.getInt(FIELD_MAX_VIDEO_HEIGHT, DEFAULT_WITHOUT_CONTEXT.maxVideoHeight);
|
||||
maxVideoFrameRate =
|
||||
bundle.getInt(FIELD_MAX_VIDEO_FRAMERATE, DEFAULT_WITHOUT_CONTEXT.maxVideoFrameRate);
|
||||
maxVideoBitrate =
|
||||
bundle.getInt(FIELD_MAX_VIDEO_BITRATE, DEFAULT_WITHOUT_CONTEXT.maxVideoBitrate);
|
||||
minVideoWidth = bundle.getInt(FIELD_MIN_VIDEO_WIDTH, DEFAULT_WITHOUT_CONTEXT.minVideoWidth);
|
||||
minVideoHeight =
|
||||
bundle.getInt(FIELD_MIN_VIDEO_HEIGHT, DEFAULT_WITHOUT_CONTEXT.minVideoHeight);
|
||||
minVideoFrameRate =
|
||||
bundle.getInt(FIELD_MIN_VIDEO_FRAMERATE, DEFAULT_WITHOUT_CONTEXT.minVideoFrameRate);
|
||||
minVideoBitrate =
|
||||
bundle.getInt(FIELD_MIN_VIDEO_BITRATE, DEFAULT_WITHOUT_CONTEXT.minVideoBitrate);
|
||||
viewportWidth = bundle.getInt(FIELD_VIEWPORT_WIDTH, DEFAULT_WITHOUT_CONTEXT.viewportWidth);
|
||||
viewportHeight = bundle.getInt(FIELD_VIEWPORT_HEIGHT, DEFAULT_WITHOUT_CONTEXT.viewportHeight);
|
||||
maxVideoWidth = bundle.getInt(FIELD_MAX_VIDEO_WIDTH, DEFAULT.maxVideoWidth);
|
||||
maxVideoHeight = bundle.getInt(FIELD_MAX_VIDEO_HEIGHT, DEFAULT.maxVideoHeight);
|
||||
maxVideoFrameRate = bundle.getInt(FIELD_MAX_VIDEO_FRAMERATE, DEFAULT.maxVideoFrameRate);
|
||||
maxVideoBitrate = bundle.getInt(FIELD_MAX_VIDEO_BITRATE, DEFAULT.maxVideoBitrate);
|
||||
minVideoWidth = bundle.getInt(FIELD_MIN_VIDEO_WIDTH, DEFAULT.minVideoWidth);
|
||||
minVideoHeight = bundle.getInt(FIELD_MIN_VIDEO_HEIGHT, DEFAULT.minVideoHeight);
|
||||
minVideoFrameRate = bundle.getInt(FIELD_MIN_VIDEO_FRAMERATE, DEFAULT.minVideoFrameRate);
|
||||
minVideoBitrate = bundle.getInt(FIELD_MIN_VIDEO_BITRATE, DEFAULT.minVideoBitrate);
|
||||
viewportWidth = bundle.getInt(FIELD_VIEWPORT_WIDTH, DEFAULT.viewportWidth);
|
||||
viewportHeight = bundle.getInt(FIELD_VIEWPORT_HEIGHT, DEFAULT.viewportHeight);
|
||||
isViewportSizeLimitedByPhysicalDisplaySize =
|
||||
viewportWidth == Integer.MAX_VALUE
|
||||
&& viewportHeight == Integer.MAX_VALUE
|
||||
&& bundle.getBoolean(
|
||||
FIELD_IS_VIEWPORT_SIZE_LIMITED_BY_PHYSICAL_DISPLAY_SIZE,
|
||||
DEFAULT.isViewportSizeLimitedByPhysicalDisplaySize);
|
||||
viewportOrientationMayChange =
|
||||
bundle.getBoolean(
|
||||
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE,
|
||||
DEFAULT_WITHOUT_CONTEXT.viewportOrientationMayChange);
|
||||
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, DEFAULT.viewportOrientationMayChange);
|
||||
preferredVideoMimeTypes =
|
||||
ImmutableList.copyOf(
|
||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_MIMETYPES), new String[0]));
|
||||
@ -200,20 +193,16 @@ public class TrackSelectionParameters {
|
||||
ImmutableList.copyOf(
|
||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_VIDEO_LANGUAGES), new String[0]));
|
||||
preferredVideoRoleFlags =
|
||||
bundle.getInt(
|
||||
FIELD_PREFERRED_VIDEO_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredVideoRoleFlags);
|
||||
bundle.getInt(FIELD_PREFERRED_VIDEO_ROLE_FLAGS, DEFAULT.preferredVideoRoleFlags);
|
||||
// Audio
|
||||
String[] preferredAudioLanguages1 =
|
||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_LANGUAGES), new String[0]);
|
||||
preferredAudioLanguages = normalizeLanguageCodes(preferredAudioLanguages1);
|
||||
preferredAudioRoleFlags =
|
||||
bundle.getInt(
|
||||
FIELD_PREFERRED_AUDIO_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredAudioRoleFlags);
|
||||
bundle.getInt(FIELD_PREFERRED_AUDIO_ROLE_FLAGS, DEFAULT.preferredAudioRoleFlags);
|
||||
maxAudioChannelCount =
|
||||
bundle.getInt(
|
||||
FIELD_MAX_AUDIO_CHANNEL_COUNT, DEFAULT_WITHOUT_CONTEXT.maxAudioChannelCount);
|
||||
maxAudioBitrate =
|
||||
bundle.getInt(FIELD_MAX_AUDIO_BITRATE, DEFAULT_WITHOUT_CONTEXT.maxAudioBitrate);
|
||||
bundle.getInt(FIELD_MAX_AUDIO_CHANNEL_COUNT, DEFAULT.maxAudioChannelCount);
|
||||
maxAudioBitrate = bundle.getInt(FIELD_MAX_AUDIO_BITRATE, DEFAULT.maxAudioBitrate);
|
||||
preferredAudioMimeTypes =
|
||||
ImmutableList.copyOf(
|
||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_AUDIO_MIME_TYPES), new String[0]));
|
||||
@ -223,29 +212,29 @@ public class TrackSelectionParameters {
|
||||
normalizeLanguageCodes(
|
||||
firstNonNull(bundle.getStringArray(FIELD_PREFERRED_TEXT_LANGUAGES), new String[0]));
|
||||
preferredTextRoleFlags =
|
||||
bundle.getInt(
|
||||
FIELD_PREFERRED_TEXT_ROLE_FLAGS, DEFAULT_WITHOUT_CONTEXT.preferredTextRoleFlags);
|
||||
bundle.getInt(FIELD_PREFERRED_TEXT_ROLE_FLAGS, DEFAULT.preferredTextRoleFlags);
|
||||
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||
preferredTextLanguages.isEmpty()
|
||||
&& preferredTextRoleFlags == 0
|
||||
&& bundle.getBoolean(
|
||||
FIELD_USE_PREFERRED_TEXT_LANGUAGES_AND_ROLE_FLAGS_FROM_CAPTIONING_MANAGER,
|
||||
DEFAULT.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager);
|
||||
ignoredTextSelectionFlags =
|
||||
bundle.getInt(
|
||||
FIELD_IGNORED_TEXT_SELECTION_FLAGS,
|
||||
DEFAULT_WITHOUT_CONTEXT.ignoredTextSelectionFlags);
|
||||
bundle.getInt(FIELD_IGNORED_TEXT_SELECTION_FLAGS, DEFAULT.ignoredTextSelectionFlags);
|
||||
selectUndeterminedTextLanguage =
|
||||
bundle.getBoolean(
|
||||
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE,
|
||||
DEFAULT_WITHOUT_CONTEXT.selectUndeterminedTextLanguage);
|
||||
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, DEFAULT.selectUndeterminedTextLanguage);
|
||||
// Image
|
||||
isPrioritizeImageOverVideoEnabled =
|
||||
bundle.getBoolean(
|
||||
FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED,
|
||||
DEFAULT_WITHOUT_CONTEXT.isPrioritizeImageOverVideoEnabled);
|
||||
FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED, DEFAULT.isPrioritizeImageOverVideoEnabled);
|
||||
|
||||
// General
|
||||
forceLowestBitrate =
|
||||
bundle.getBoolean(FIELD_FORCE_LOWEST_BITRATE, DEFAULT_WITHOUT_CONTEXT.forceLowestBitrate);
|
||||
bundle.getBoolean(FIELD_FORCE_LOWEST_BITRATE, DEFAULT.forceLowestBitrate);
|
||||
forceHighestSupportedBitrate =
|
||||
bundle.getBoolean(
|
||||
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE,
|
||||
DEFAULT_WITHOUT_CONTEXT.forceHighestSupportedBitrate);
|
||||
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE, DEFAULT.forceHighestSupportedBitrate);
|
||||
@Nullable
|
||||
List<Bundle> overrideBundleList = bundle.getParcelableArrayList(FIELD_SELECTION_OVERRIDES);
|
||||
List<TrackSelectionOverride> overrideList =
|
||||
@ -309,6 +298,8 @@ public class TrackSelectionParameters {
|
||||
minVideoBitrate = parameters.minVideoBitrate;
|
||||
viewportWidth = parameters.viewportWidth;
|
||||
viewportHeight = parameters.viewportHeight;
|
||||
isViewportSizeLimitedByPhysicalDisplaySize =
|
||||
parameters.isViewportSizeLimitedByPhysicalDisplaySize;
|
||||
viewportOrientationMayChange = parameters.viewportOrientationMayChange;
|
||||
preferredVideoMimeTypes = parameters.preferredVideoMimeTypes;
|
||||
preferredVideoLanguages = parameters.preferredVideoLanguages;
|
||||
@ -323,6 +314,8 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
preferredTextLanguages = parameters.preferredTextLanguages;
|
||||
preferredTextRoleFlags = parameters.preferredTextRoleFlags;
|
||||
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||
parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||
ignoredTextSelectionFlags = parameters.ignoredTextSelectionFlags;
|
||||
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
||||
// Image
|
||||
@ -441,20 +434,31 @@ public class TrackSelectionParameters {
|
||||
}
|
||||
|
||||
/**
|
||||
* Equivalent to calling {@link #setViewportSize(int, int, boolean)} with the viewport size
|
||||
* obtained from {@link Util#getCurrentDisplayModeSize(Context)}.
|
||||
* Sets 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.
|
||||
*
|
||||
* @param context Any context.
|
||||
* @param viewportOrientationMayChange Whether the viewport orientation may change during
|
||||
* playback.
|
||||
* @return This builder.
|
||||
*/
|
||||
@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(
|
||||
Context context, boolean viewportOrientationMayChange) {
|
||||
// Assume the viewport is fullscreen.
|
||||
Point viewportSize = Util.getCurrentDisplayModeSize(context);
|
||||
return setViewportSize(viewportSize.x, viewportSize.y, viewportOrientationMayChange);
|
||||
return setViewportSizeToPhysicalDisplaySize(viewportOrientationMayChange);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -484,6 +488,7 @@ public class TrackSelectionParameters {
|
||||
this.viewportWidth = viewportWidth;
|
||||
this.viewportHeight = viewportHeight;
|
||||
this.viewportOrientationMayChange = viewportOrientationMayChange;
|
||||
this.isViewportSizeLimitedByPhysicalDisplaySize = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -657,33 +662,29 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
|
||||
/**
|
||||
* Sets the preferred language and role flags for text tracks based on the accessibility
|
||||
* settings of {@link CaptioningManager}.
|
||||
* Sets 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.
|
||||
*
|
||||
* <p>Does nothing when the {@link CaptioningManager} is disabled.
|
||||
*
|
||||
* @param context A {@link Context}.
|
||||
* @return This builder.
|
||||
*/
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||
usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = true;
|
||||
preferredTextLanguages = ImmutableList.of();
|
||||
preferredTextRoleFlags = 0;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings()}
|
||||
* instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
||||
Context context) {
|
||||
if (Util.SDK_INT < 23 && Looper.myLooper() == null) {
|
||||
// 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;
|
||||
return setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -710,6 +711,7 @@ public class TrackSelectionParameters {
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setPreferredTextLanguages(String... preferredTextLanguages) {
|
||||
this.preferredTextLanguages = normalizeLanguageCodes(preferredTextLanguages);
|
||||
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -722,6 +724,7 @@ public class TrackSelectionParameters {
|
||||
@CanIgnoreReturnValue
|
||||
public Builder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
|
||||
this.preferredTextRoleFlags = preferredTextRoleFlags;
|
||||
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager = false;
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -1080,35 +1083,21 @@ public class TrackSelectionParameters {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance with default values, except those obtained from the {@link Context}.
|
||||
*
|
||||
* <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();
|
||||
/** An instance with default parameters. */
|
||||
@UnstableApi public static final TrackSelectionParameters DEFAULT = new Builder().build();
|
||||
|
||||
/**
|
||||
* @deprecated This instance is not configured using {@link Context} constraints. Use {@link
|
||||
* #getDefaults(Context)} instead.
|
||||
* @deprecated Use {@link #DEFAULT} instead.
|
||||
*/
|
||||
@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) {
|
||||
return new Builder(context).build();
|
||||
return DEFAULT;
|
||||
}
|
||||
|
||||
// Video
|
||||
@ -1172,6 +1161,13 @@ public class TrackSelectionParameters {
|
||||
*/
|
||||
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
|
||||
* 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.
|
||||
* 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
|
||||
* enabled.
|
||||
* value is an empty list.
|
||||
*/
|
||||
public final ImmutableList<String> preferredTextLanguages;
|
||||
|
||||
/**
|
||||
* 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}
|
||||
* | {@link C#ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND} if the accessibility {@link CaptioningManager}
|
||||
* is enabled.
|
||||
* is one, or no track otherwise. The default value is {@code 0}.
|
||||
*/
|
||||
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
|
||||
* 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.viewportWidth = builder.viewportWidth;
|
||||
this.viewportHeight = builder.viewportHeight;
|
||||
this.isViewportSizeLimitedByPhysicalDisplaySize =
|
||||
builder.isViewportSizeLimitedByPhysicalDisplaySize;
|
||||
this.viewportOrientationMayChange = builder.viewportOrientationMayChange;
|
||||
this.preferredVideoMimeTypes = builder.preferredVideoMimeTypes;
|
||||
this.preferredVideoLanguages = builder.preferredVideoLanguages;
|
||||
@ -1321,6 +1324,8 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
this.preferredTextLanguages = builder.preferredTextLanguages;
|
||||
this.preferredTextRoleFlags = builder.preferredTextRoleFlags;
|
||||
this.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager =
|
||||
builder.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager;
|
||||
this.ignoredTextSelectionFlags = builder.ignoredTextSelectionFlags;
|
||||
this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage;
|
||||
// Image
|
||||
@ -1359,6 +1364,8 @@ public class TrackSelectionParameters {
|
||||
&& viewportOrientationMayChange == other.viewportOrientationMayChange
|
||||
&& viewportWidth == other.viewportWidth
|
||||
&& viewportHeight == other.viewportHeight
|
||||
&& isViewportSizeLimitedByPhysicalDisplaySize
|
||||
== other.isViewportSizeLimitedByPhysicalDisplaySize
|
||||
&& preferredVideoMimeTypes.equals(other.preferredVideoMimeTypes)
|
||||
&& preferredVideoLanguages.equals(other.preferredVideoLanguages)
|
||||
&& preferredVideoRoleFlags == other.preferredVideoRoleFlags
|
||||
@ -1372,6 +1379,8 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
&& preferredTextLanguages.equals(other.preferredTextLanguages)
|
||||
&& preferredTextRoleFlags == other.preferredTextRoleFlags
|
||||
&& usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||
== other.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||
&& ignoredTextSelectionFlags == other.ignoredTextSelectionFlags
|
||||
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
|
||||
// Image
|
||||
@ -1398,6 +1407,7 @@ public class TrackSelectionParameters {
|
||||
result = 31 * result + (viewportOrientationMayChange ? 1 : 0);
|
||||
result = 31 * result + viewportWidth;
|
||||
result = 31 * result + viewportHeight;
|
||||
result = 31 * result + (isViewportSizeLimitedByPhysicalDisplaySize ? 1 : 0);
|
||||
result = 31 * result + preferredVideoMimeTypes.hashCode();
|
||||
result = 31 * result + preferredVideoLanguages.hashCode();
|
||||
result = 31 * result + preferredVideoRoleFlags;
|
||||
@ -1411,6 +1421,7 @@ public class TrackSelectionParameters {
|
||||
// Text
|
||||
result = 31 * result + preferredTextLanguages.hashCode();
|
||||
result = 31 * result + preferredTextRoleFlags;
|
||||
result = 31 * result + (usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager ? 1 : 0);
|
||||
result = 31 * result + ignoredTextSelectionFlags;
|
||||
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
|
||||
// Image
|
||||
@ -1456,6 +1467,11 @@ public class TrackSelectionParameters {
|
||||
private static final String FIELD_IS_PREFER_IMAGE_OVER_VIDEO_ENABLED =
|
||||
Util.intToStringMaxRadix(31);
|
||||
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()}
|
||||
@ -1482,6 +1498,9 @@ public class TrackSelectionParameters {
|
||||
bundle.putInt(FIELD_MIN_VIDEO_BITRATE, minVideoBitrate);
|
||||
bundle.putInt(FIELD_VIEWPORT_WIDTH, viewportWidth);
|
||||
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.putStringArray(
|
||||
FIELD_PREFERRED_VIDEO_MIMETYPES, preferredVideoMimeTypes.toArray(new String[0]));
|
||||
@ -1500,6 +1519,9 @@ public class TrackSelectionParameters {
|
||||
bundle.putStringArray(
|
||||
FIELD_PREFERRED_TEXT_LANGUAGES, preferredTextLanguages.toArray(new String[0]));
|
||||
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.putBoolean(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE, selectUndeterminedTextLanguage);
|
||||
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);
|
||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(1000)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||
AudioAttributes audioAttributes =
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||
@ -309,7 +306,7 @@ public final class ForwardingSimpleBasePlayerTest {
|
||||
.setSeekForwardIncrementMs(2000)
|
||||
.setMaxSeekToPreviousPositionMs(8000)
|
||||
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||
.setAudioAttributes(AudioAttributes.DEFAULT)
|
||||
.setVolume(1f)
|
||||
.setVideoSize(VideoSize.UNKNOWN)
|
||||
@ -349,10 +346,7 @@ public final class ForwardingSimpleBasePlayerTest {
|
||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(1000)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||
AudioAttributes audioAttributes =
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||
|
@ -101,7 +101,7 @@ public class SimpleBasePlayerTest {
|
||||
.setSeekForwardIncrementMs(4000)
|
||||
.setMaxSeekToPreviousPositionMs(3000)
|
||||
.setPlaybackParameters(new PlaybackParameters(/* speed= */ 2f))
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||
.setAudioAttributes(
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build())
|
||||
.setVolume(0.5f)
|
||||
@ -280,10 +280,7 @@ public class SimpleBasePlayerTest {
|
||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(1000)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||
AudioAttributes audioAttributes =
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||
@ -945,10 +942,7 @@ public class SimpleBasePlayerTest {
|
||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(1000)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||
AudioAttributes audioAttributes =
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||
VideoSize videoSize = new VideoSize(/* width= */ 200, /* height= */ 400);
|
||||
@ -1368,7 +1362,7 @@ public class SimpleBasePlayerTest {
|
||||
.setSeekForwardIncrementMs(2000)
|
||||
.setMaxSeekToPreviousPositionMs(8000)
|
||||
.setPlaybackParameters(PlaybackParameters.DEFAULT)
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT)
|
||||
.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT)
|
||||
.setAudioAttributes(AudioAttributes.DEFAULT)
|
||||
.setVolume(1f)
|
||||
.setVideoSize(VideoSize.UNKNOWN)
|
||||
@ -1407,10 +1401,7 @@ public class SimpleBasePlayerTest {
|
||||
/* message= */ null, /* cause= */ null, PlaybackException.ERROR_CODE_DECODING_FAILED);
|
||||
PlaybackParameters playbackParameters = new PlaybackParameters(/* speed= */ 2f);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(1000)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoBitrate(1000).build();
|
||||
AudioAttributes audioAttributes =
|
||||
new AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MOVIE).build();
|
||||
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_ENABLED;
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.os.Bundle;
|
||||
@ -40,7 +39,7 @@ public final class TrackSelectionParametersTest {
|
||||
|
||||
@Test
|
||||
public void defaultValue_withoutChange_isAsExpected() {
|
||||
TrackSelectionParameters parameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
TrackSelectionParameters parameters = TrackSelectionParameters.DEFAULT;
|
||||
|
||||
// Video
|
||||
assertThat(parameters.maxVideoWidth).isEqualTo(Integer.MAX_VALUE);
|
||||
@ -53,6 +52,7 @@ public final class TrackSelectionParametersTest {
|
||||
assertThat(parameters.minVideoBitrate).isEqualTo(0);
|
||||
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isTrue();
|
||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||
assertThat(parameters.preferredVideoMimeTypes).isEmpty();
|
||||
// Audio
|
||||
@ -67,6 +67,7 @@ public final class TrackSelectionParametersTest {
|
||||
// Text
|
||||
assertThat(parameters.preferredAudioMimeTypes).isEmpty();
|
||||
assertThat(parameters.preferredTextLanguages).isEmpty();
|
||||
assertThat(parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager).isTrue();
|
||||
assertThat(parameters.preferredTextRoleFlags).isEqualTo(0);
|
||||
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(0);
|
||||
assertThat(parameters.selectUndeterminedTextLanguage).isFalse();
|
||||
@ -90,7 +91,7 @@ public final class TrackSelectionParametersTest {
|
||||
new Format.Builder().setId(4).build(), new Format.Builder().setId(5).build()),
|
||||
/* trackIndices= */ ImmutableList.of(1));
|
||||
TrackSelectionParameters parameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
TrackSelectionParameters.DEFAULT
|
||||
.buildUpon()
|
||||
// Video
|
||||
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
||||
@ -149,6 +150,7 @@ public final class TrackSelectionParametersTest {
|
||||
assertThat(parameters.minVideoBitrate).isEqualTo(7);
|
||||
assertThat(parameters.viewportWidth).isEqualTo(8);
|
||||
assertThat(parameters.viewportHeight).isEqualTo(9);
|
||||
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isFalse();
|
||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||
assertThat(parameters.preferredVideoMimeTypes)
|
||||
.containsExactly(MimeTypes.VIDEO_AV1, MimeTypes.VIDEO_H264)
|
||||
@ -168,6 +170,7 @@ public final class TrackSelectionParametersTest {
|
||||
// Text
|
||||
assertThat(parameters.preferredTextLanguages).containsExactly("de", "en").inOrder();
|
||||
assertThat(parameters.preferredTextRoleFlags).isEqualTo(C.ROLE_FLAG_CAPTION);
|
||||
assertThat(parameters.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager).isFalse();
|
||||
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(C.SELECTION_FLAG_AUTOSELECT);
|
||||
assertThat(parameters.selectUndeterminedTextLanguage).isTrue();
|
||||
// Image
|
||||
@ -185,7 +188,7 @@ public final class TrackSelectionParametersTest {
|
||||
@Test
|
||||
public void setMaxVideoSizeSd_defaultBuilder_parametersVideoSizeAreSd() {
|
||||
TrackSelectionParameters parameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext()).setMaxVideoSizeSd().build();
|
||||
new TrackSelectionParameters.Builder().setMaxVideoSizeSd().build();
|
||||
|
||||
assertThat(parameters.maxVideoWidth).isEqualTo(1279);
|
||||
assertThat(parameters.maxVideoHeight).isEqualTo(719);
|
||||
@ -194,7 +197,7 @@ public final class TrackSelectionParametersTest {
|
||||
@Test
|
||||
public void clearVideoSizeConstraints_withSdConstrains_clearConstrains() {
|
||||
TrackSelectionParameters parameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.setMaxVideoSizeSd()
|
||||
.clearVideoSizeConstraints()
|
||||
.build();
|
||||
@ -206,7 +209,7 @@ public final class TrackSelectionParametersTest {
|
||||
@Test
|
||||
public void clearViewPortConstraints_withConstrains_clearConstrains() {
|
||||
TrackSelectionParameters parameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.setViewportSize(
|
||||
/* viewportWidth= */ 1,
|
||||
/* viewportHeight= */ 2,
|
||||
@ -216,6 +219,7 @@ public final class TrackSelectionParametersTest {
|
||||
|
||||
assertThat(parameters.viewportWidth).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(parameters.viewportHeight).isEqualTo(Integer.MAX_VALUE);
|
||||
assertThat(parameters.isViewportSizeLimitedByPhysicalDisplaySize).isFalse();
|
||||
assertThat(parameters.viewportOrientationMayChange).isTrue();
|
||||
}
|
||||
|
||||
@ -225,7 +229,7 @@ public final class TrackSelectionParametersTest {
|
||||
new TrackSelectionOverride(
|
||||
newTrackGroupWithIds(3, 4), /* trackIndices= */ ImmutableList.of(1));
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext()).addOverride(override).build();
|
||||
new TrackSelectionParameters.Builder().addOverride(override).build();
|
||||
|
||||
TrackSelectionParameters fromBundle =
|
||||
TrackSelectionParameters.fromBundle(trackSelectionParameters.toBundle());
|
||||
@ -238,7 +242,7 @@ public final class TrackSelectionParametersTest {
|
||||
@Test
|
||||
public void roundTripViaBundle_withLegacyPreferenceFields_yieldsEqualInstance() {
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.setAudioOffloadPreferences(
|
||||
new AudioOffloadPreferences.Builder()
|
||||
.setAudioOffloadMode(AudioOffloadPreferences.AUDIO_OFFLOAD_MODE_ENABLED)
|
||||
@ -266,7 +270,7 @@ public final class TrackSelectionParametersTest {
|
||||
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
||||
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.addOverride(override1)
|
||||
.addOverride(override2)
|
||||
.build();
|
||||
@ -285,7 +289,7 @@ public final class TrackSelectionParametersTest {
|
||||
new TrackSelectionOverride(trackGroup, /* trackIndices= */ ImmutableList.of(1));
|
||||
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.addOverride(override1)
|
||||
.addOverride(override2)
|
||||
.build();
|
||||
@ -302,7 +306,7 @@ public final class TrackSelectionParametersTest {
|
||||
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
|
||||
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.setOverrideForType(override1)
|
||||
.setOverrideForType(override2)
|
||||
.build();
|
||||
@ -318,7 +322,7 @@ public final class TrackSelectionParametersTest {
|
||||
TrackSelectionOverride override2 =
|
||||
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.addOverride(override1)
|
||||
.addOverride(override2)
|
||||
.clearOverridesOfType(C.TRACK_TYPE_AUDIO)
|
||||
@ -335,7 +339,7 @@ public final class TrackSelectionParametersTest {
|
||||
TrackSelectionOverride override2 =
|
||||
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||
new TrackSelectionParameters.Builder()
|
||||
.addOverride(override1)
|
||||
.addOverride(override2)
|
||||
.clearOverride(override2.mediaTrackGroup)
|
||||
|
@ -98,29 +98,27 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||
@UnstableApi
|
||||
public final class DownloadHelper {
|
||||
|
||||
/**
|
||||
* Default track selection parameters for downloading, but without any {@link Context}
|
||||
* constraints.
|
||||
*
|
||||
* <p>If possible, use {@link #getDefaultTrackSelectorParameters(Context)} instead.
|
||||
*
|
||||
* @see DefaultTrackSelector.Parameters#DEFAULT_WITHOUT_CONTEXT
|
||||
*/
|
||||
public static final DefaultTrackSelector.Parameters
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT =
|
||||
DefaultTrackSelector.Parameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setForceHighestSupportedBitrate(true)
|
||||
.setConstrainAudioChannelCountToDeviceCapabilities(false)
|
||||
.build();
|
||||
/** Default track selection parameters for downloading. */
|
||||
public static final DefaultTrackSelector.Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS =
|
||||
DefaultTrackSelector.Parameters.DEFAULT
|
||||
.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) {
|
||||
return DefaultTrackSelector.Parameters.getDefaults(context)
|
||||
.buildUpon()
|
||||
.setForceHighestSupportedBitrate(true)
|
||||
.setConstrainAudioChannelCountToDeviceCapabilities(false)
|
||||
.build();
|
||||
return DEFAULT_TRACK_SELECTOR_PARAMETERS;
|
||||
}
|
||||
|
||||
/** 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)));
|
||||
return forMediaItem(
|
||||
mediaItem,
|
||||
getDefaultTrackSelectorParameters(context),
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
/* renderersFactory= */ null,
|
||||
/* dataSourceFactory= */ null,
|
||||
/* drmSessionManager= */ null);
|
||||
@ -207,7 +205,7 @@ public final class DownloadHelper {
|
||||
@Nullable DataSource.Factory dataSourceFactory) {
|
||||
return forMediaItem(
|
||||
mediaItem,
|
||||
getDefaultTrackSelectorParameters(context),
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
renderersFactory,
|
||||
dataSourceFactory,
|
||||
/* drmSessionManager= */ null);
|
||||
@ -541,7 +539,7 @@ public final class DownloadHelper {
|
||||
assertPreparedWithMedia();
|
||||
|
||||
TrackSelectionParameters.Builder parametersBuilder =
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||
// Prefer highest supported bitrate for downloads.
|
||||
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||
// Disable all non-audio track types supported by the renderers.
|
||||
@ -581,7 +579,7 @@ public final class DownloadHelper {
|
||||
assertPreparedWithMedia();
|
||||
|
||||
TrackSelectionParameters.Builder parametersBuilder =
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
||||
DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
||||
// Prefer highest supported bitrate for downloads.
|
||||
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||
|
@ -39,6 +39,7 @@ import android.text.TextUtils;
|
||||
import android.util.Pair;
|
||||
import android.util.SparseArray;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.accessibility.CaptioningManager;
|
||||
import androidx.annotation.GuardedBy;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
@ -74,6 +75,7 @@ import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.google.common.primitives.Ints;
|
||||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import com.google.errorprone.annotations.InlineMe;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@ -83,6 +85,7 @@ import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
@ -136,12 +139,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
|
||||
private final Parameters.Builder delegate;
|
||||
|
||||
/**
|
||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
||||
* #ParametersBuilder(Context)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings({"deprecation"})
|
||||
/** Creates a builder with default initial values. */
|
||||
public ParametersBuilder() {
|
||||
delegate = new Parameters.Builder();
|
||||
}
|
||||
@ -301,6 +299,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
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
|
||||
@CanIgnoreReturnValue
|
||||
@Override
|
||||
@ -522,6 +529,14 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
|
||||
// Text
|
||||
|
||||
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||
@CanIgnoreReturnValue
|
||||
@Override
|
||||
public ParametersBuilder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||
delegate.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||
return this;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") // Intentionally returning deprecated type
|
||||
@CanIgnoreReturnValue
|
||||
@Override
|
||||
@ -868,12 +883,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
selectionOverrides;
|
||||
private final SparseBooleanArray rendererDisabledFlags;
|
||||
|
||||
/**
|
||||
* @deprecated {@link Context} constraints will not be set using this constructor. Use {@link
|
||||
* #Builder(Context)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings({"deprecation"})
|
||||
/** Creates a builder with default initial values. */
|
||||
public Builder() {
|
||||
super();
|
||||
selectionOverrides = new SparseArray<>();
|
||||
@ -882,15 +892,12 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a builder with default initial values.
|
||||
*
|
||||
* @param context Any context.
|
||||
* @deprecated Use {@link #Builder()} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@InlineMe(replacement = "this()")
|
||||
public Builder(Context context) {
|
||||
super(context);
|
||||
selectionOverrides = new SparseArray<>();
|
||||
rendererDisabledFlags = new SparseBooleanArray();
|
||||
init();
|
||||
this();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -931,7 +938,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
private Builder(Bundle bundle) {
|
||||
super(bundle);
|
||||
init();
|
||||
Parameters defaultValue = Parameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
Parameters defaultValue = Parameters.DEFAULT;
|
||||
// Video
|
||||
setExceedVideoConstraintsIfNecessary(
|
||||
bundle.getBoolean(
|
||||
@ -1132,6 +1139,14 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
|
||||
@CanIgnoreReturnValue
|
||||
@Override
|
||||
public Builder setViewportSizeToPhysicalDisplaySize(boolean viewportOrientationMayChange) {
|
||||
super.setViewportSizeToPhysicalDisplaySize(viewportOrientationMayChange);
|
||||
return this;
|
||||
}
|
||||
|
||||
@CanIgnoreReturnValue
|
||||
@Deprecated
|
||||
@Override
|
||||
public Builder setViewportSizeToPhysicalDisplaySize(
|
||||
Context context, boolean viewportOrientationMayChange) {
|
||||
super.setViewportSizeToPhysicalDisplaySize(context, viewportOrientationMayChange);
|
||||
@ -1377,6 +1392,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
|
||||
@CanIgnoreReturnValue
|
||||
@Override
|
||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings() {
|
||||
super.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings();
|
||||
return this;
|
||||
}
|
||||
|
||||
@CanIgnoreReturnValue
|
||||
@Deprecated
|
||||
@SuppressWarnings("deprecation") // Calling deprecated super method.
|
||||
@Override
|
||||
public Builder setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(
|
||||
Context context) {
|
||||
super.setPreferredTextLanguageAndRoleFlagsToCaptioningManagerSettings(context);
|
||||
@ -1790,34 +1814,20 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An instance with default values, except those obtained from the {@link Context}.
|
||||
*
|
||||
* <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();
|
||||
/** An instance with default values. */
|
||||
public static final Parameters DEFAULT = new Builder().build();
|
||||
|
||||
/**
|
||||
* @deprecated This instance is not configured using {@link Context} constraints. Use {@link
|
||||
* #getDefaults(Context)} instead.
|
||||
* @deprecated Use {@link #DEFAULT} 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) {
|
||||
return new Parameters.Builder(context).build();
|
||||
return DEFAULT;
|
||||
}
|
||||
|
||||
// Video
|
||||
@ -2416,7 +2426,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
* @param trackSelectionFactory A factory for {@link ExoTrackSelection}s.
|
||||
*/
|
||||
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) {
|
||||
this.parameters = (Parameters) parameters;
|
||||
} else {
|
||||
Parameters defaultParameters =
|
||||
context == null ? Parameters.DEFAULT_WITHOUT_CONTEXT : Parameters.getDefaults(context);
|
||||
this.parameters = defaultParameters.buildUpon().set(parameters).build();
|
||||
this.parameters = Parameters.DEFAULT.buildUpon().set(parameters).build();
|
||||
}
|
||||
this.audioAttributes = AudioAttributes.DEFAULT;
|
||||
if (this.parameters.constrainAudioChannelCountToDeviceCapabilities && context == null) {
|
||||
@ -2778,6 +2786,11 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
||||
return null;
|
||||
}
|
||||
@Nullable
|
||||
Point viewportSizeFromDisplay =
|
||||
params.isViewportSizeLimitedByPhysicalDisplaySize && context != null
|
||||
? Util.getCurrentDisplayModeSize(context)
|
||||
: null;
|
||||
return selectTracksForType(
|
||||
C.TRACK_TYPE_VIDEO,
|
||||
mappedTrackInfo,
|
||||
@ -2789,7 +2802,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
params,
|
||||
support,
|
||||
selectedAudioLanguage,
|
||||
mixedMimeTypeSupports[rendererIndex]),
|
||||
mixedMimeTypeSupports[rendererIndex],
|
||||
viewportSizeFromDisplay),
|
||||
VideoTrackInfo::compareSelections);
|
||||
}
|
||||
|
||||
@ -2900,13 +2914,23 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
if (params.audioOffloadPreferences.audioOffloadMode == AUDIO_OFFLOAD_MODE_REQUIRED) {
|
||||
return null;
|
||||
}
|
||||
@Nullable
|
||||
String preferredCaptioningLanguage =
|
||||
params.usePreferredTextLanguagesAndRoleFlagsFromCaptioningManager
|
||||
? getPreferredLanguageFromCaptioningManager(context)
|
||||
: null;
|
||||
return selectTracksForType(
|
||||
C.TRACK_TYPE_TEXT,
|
||||
mappedTrackInfo,
|
||||
rendererFormatSupports,
|
||||
(int rendererIndex, TrackGroup group, @Capabilities int[] support) ->
|
||||
TextTrackInfo.createForTrackGroup(
|
||||
rendererIndex, group, params, support, selectedAudioLanguage),
|
||||
rendererIndex,
|
||||
group,
|
||||
params,
|
||||
support,
|
||||
selectedAudioLanguage,
|
||||
preferredCaptioningLanguage),
|
||||
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}. */
|
||||
private abstract static class TrackInfo<T extends TrackInfo<T>> {
|
||||
/** Factory for {@link TrackInfo} implementations for a given {@link TrackGroup}. */
|
||||
@ -3521,13 +3562,15 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
Parameters params,
|
||||
@Capabilities int[] formatSupport,
|
||||
@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 =
|
||||
getMaxVideoPixelsToRetainForViewport(
|
||||
trackGroup,
|
||||
params.viewportWidth,
|
||||
params.viewportHeight,
|
||||
params.viewportOrientationMayChange);
|
||||
trackGroup, viewportWidth, viewportHeight, params.viewportOrientationMayChange);
|
||||
ImmutableList.Builder<VideoTrackInfo> listBuilder = ImmutableList.builder();
|
||||
for (int i = 0; i < trackGroup.length; i++) {
|
||||
int pixelCount = trackGroup.getFormat(i).getPixelCount();
|
||||
@ -4018,7 +4061,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
TrackGroup trackGroup,
|
||||
Parameters params,
|
||||
@Capabilities int[] formatSupport,
|
||||
@Nullable String selectedAudioLanguage) {
|
||||
@Nullable String selectedAudioLanguage,
|
||||
@Nullable String preferredCaptioningLanguage) {
|
||||
ImmutableList.Builder<TextTrackInfo> listBuilder = ImmutableList.builder();
|
||||
for (int i = 0; i < trackGroup.length; i++) {
|
||||
listBuilder.add(
|
||||
@ -4028,7 +4072,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
/* trackIndex= */ i,
|
||||
params,
|
||||
formatSupport[i],
|
||||
selectedAudioLanguage));
|
||||
selectedAudioLanguage,
|
||||
preferredCaptioningLanguage));
|
||||
}
|
||||
return listBuilder.build();
|
||||
}
|
||||
@ -4049,7 +4094,8 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
int trackIndex,
|
||||
Parameters parameters,
|
||||
@Capabilities int trackFormatSupport,
|
||||
@Nullable String selectedAudioLanguage) {
|
||||
@Nullable String selectedAudioLanguage,
|
||||
@Nullable String preferredCaptioningLanguage) {
|
||||
super(rendererIndex, trackGroup, trackIndex);
|
||||
isWithinRendererCapabilities =
|
||||
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
|
||||
// a text track with undetermined language.
|
||||
ImmutableList<String> preferredLanguages =
|
||||
parameters.preferredTextLanguages.isEmpty()
|
||||
? ImmutableList.of("")
|
||||
: parameters.preferredTextLanguages;
|
||||
preferredCaptioningLanguage != null
|
||||
? ImmutableList.of(preferredCaptioningLanguage)
|
||||
: parameters.preferredTextLanguages.isEmpty()
|
||||
? ImmutableList.of("")
|
||||
: parameters.preferredTextLanguages;
|
||||
for (int i = 0; i < preferredLanguages.size(); i++) {
|
||||
int score =
|
||||
getFormatLanguageScore(
|
||||
@ -4076,8 +4124,11 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
}
|
||||
preferredLanguageIndex = bestLanguageIndex;
|
||||
preferredLanguageScore = bestLanguageScore;
|
||||
preferredRoleFlagsScore =
|
||||
getRoleFlagMatchScore(format.roleFlags, parameters.preferredTextRoleFlags);
|
||||
int preferredRoleFlags =
|
||||
preferredCaptioningLanguage != null
|
||||
? C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND
|
||||
: parameters.preferredTextRoleFlags;
|
||||
preferredRoleFlagsScore = getRoleFlagMatchScore(format.roleFlags, preferredRoleFlags);
|
||||
hasCaptionRoleFlags =
|
||||
(format.roleFlags & (C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND)) != 0;
|
||||
boolean selectedAudioLanguageUndetermined =
|
||||
|
@ -183,7 +183,7 @@ public abstract class TrackSelector {
|
||||
|
||||
/** Returns the current parameters for track selection. */
|
||||
public TrackSelectionParameters getParameters() {
|
||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
return TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -93,7 +93,7 @@ public class AudioCapabilitiesEndToEndTest {
|
||||
applicationContext = ApplicationProvider.getApplicationContext();
|
||||
audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE);
|
||||
shadowOf(audioManager).setOutputDevices(ImmutableList.of());
|
||||
defaultParameters = Parameters.getDefaults(applicationContext);
|
||||
defaultParameters = Parameters.DEFAULT;
|
||||
selectedTracks = new ArrayList<>();
|
||||
analyticsListenerReceivedCallbacks = new ArrayList<>();
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ public class DownloadHelperTest {
|
||||
new DownloadHelper(
|
||||
testMediaItem,
|
||||
new TestMediaSource(),
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
new DefaultRendererCapabilitiesList.Factory(renderersFactory)
|
||||
.createRendererCapabilitiesList());
|
||||
}
|
||||
@ -257,7 +257,7 @@ public class DownloadHelperTest {
|
||||
throws Exception {
|
||||
prepareDownloadHelper(downloadHelper);
|
||||
DefaultTrackSelector.Parameters parameters =
|
||||
new DefaultTrackSelector.ParametersBuilder(getApplicationContext())
|
||||
new DefaultTrackSelector.Parameters.Builder()
|
||||
.setPreferredAudioLanguage("de")
|
||||
.setPreferredTextLanguage("de")
|
||||
.setRendererDisabled(/* rendererIndex= */ 2, true)
|
||||
@ -461,7 +461,7 @@ public class DownloadHelperTest {
|
||||
DownloadHelper downloadHelper =
|
||||
DownloadHelper.forMediaItem(
|
||||
testMediaItem,
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
renderersFactory,
|
||||
new FakeDataSource.Factory());
|
||||
|
||||
@ -541,7 +541,7 @@ public class DownloadHelperTest {
|
||||
downloadHelper.set(
|
||||
DownloadHelper.forMediaItem(
|
||||
testMediaItem,
|
||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
||||
TrackSelectionParameters.DEFAULT,
|
||||
renderersFactory,
|
||||
new FakeDataSource.Factory()));
|
||||
} catch (Throwable e) {
|
||||
@ -572,7 +572,7 @@ public class DownloadHelperTest {
|
||||
downloadHelper.set(
|
||||
DownloadHelper.forMediaItem(
|
||||
testMediaItem,
|
||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
||||
TrackSelectionParameters.DEFAULT,
|
||||
renderersFactory,
|
||||
new FakeDataSource.Factory(),
|
||||
new DefaultDrmSessionManager.Builder()
|
||||
@ -619,7 +619,7 @@ public class DownloadHelperTest {
|
||||
new DownloadHelper(
|
||||
testMediaItem,
|
||||
new FakeMediaSource(),
|
||||
TrackSelectionParameters.getDefaults(getApplicationContext()),
|
||||
TrackSelectionParameters.DEFAULT,
|
||||
emptyRendererCapabilitiesList));
|
||||
} catch (Throwable e) {
|
||||
exception.set(e);
|
||||
|
@ -89,6 +89,8 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.shadows.ShadowDisplay;
|
||||
import org.robolectric.shadows.ShadowDisplayManager;
|
||||
|
||||
/** Unit tests for {@link DefaultTrackSelector}. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@ -171,7 +173,7 @@ public final class DefaultTrackSelectorTest {
|
||||
public void setUp() {
|
||||
when(bandwidthMeter.getBitrateEstimate()).thenReturn(1000000L);
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
defaultParameters = Parameters.getDefaults(context);
|
||||
defaultParameters = Parameters.DEFAULT;
|
||||
trackSelector = new DefaultTrackSelector(context);
|
||||
trackSelector.init(invalidationListener, bandwidthMeter);
|
||||
}
|
||||
@ -2517,6 +2519,127 @@ public final class DefaultTrackSelectorTest {
|
||||
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
|
||||
public void
|
||||
selectTracks_withSingleTrackAndOffloadPreferenceEnabled_returnsRendererConfigOffloadModeEnabledGaplessRequired()
|
||||
@ -3295,7 +3418,7 @@ public final class DefaultTrackSelectorTest {
|
||||
* variables.
|
||||
*/
|
||||
private static Parameters buildParametersForEqualsTest() {
|
||||
return Parameters.DEFAULT_WITHOUT_CONTEXT
|
||||
return Parameters.DEFAULT
|
||||
.buildUpon()
|
||||
// Video
|
||||
.setMaxVideoSize(/* maxVideoWidth= */ 0, /* maxVideoHeight= */ 1)
|
||||
|
@ -39,7 +39,7 @@ public final class DownloadHelperTest {
|
||||
new FakeDataSource.Factory());
|
||||
DownloadHelper.forMediaItem(
|
||||
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],
|
||||
new FakeDataSource.Factory(),
|
||||
/* drmSessionManager= */ DrmSessionManager.DRM_UNSUPPORTED);
|
||||
|
@ -44,7 +44,7 @@ public final class DownloadHelperTest {
|
||||
.setUri("http://uri")
|
||||
.setMimeType(MimeTypes.APPLICATION_M3U8)
|
||||
.build(),
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT,
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
(handler, videoListener, audioListener, text, metadata) -> new Renderer[0],
|
||||
new FakeDataSource.Factory(),
|
||||
/* drmSessionManager= */ null);
|
||||
|
@ -267,7 +267,7 @@ import androidx.media3.test.utils.StubExoPlayer;
|
||||
|
||||
@Override
|
||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
return TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,7 +38,7 @@ public final class DownloadHelperTest {
|
||||
new FakeDataSource.Factory());
|
||||
DownloadHelper.forMediaItem(
|
||||
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],
|
||||
new FakeDataSource.Factory(),
|
||||
/* drmSessionManager= */ null);
|
||||
|
@ -1986,7 +1986,7 @@ public class MediaController implements Player {
|
||||
public final TrackSelectionParameters getTrackSelectionParameters() {
|
||||
verifyApplicationThread();
|
||||
if (!isConnected()) {
|
||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
return TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
return impl.getTrackSelectionParameters();
|
||||
}
|
||||
|
@ -1345,7 +1345,7 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization;
|
||||
|
||||
@Override
|
||||
public TrackSelectionParameters getTrackSelectionParameters() {
|
||||
return TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
return TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -2434,7 +2434,7 @@ import org.checkerframework.checker.initialization.qual.UnderInitialization;
|
||||
seekForwardIncrementMs,
|
||||
maxSeekToPreviousPositionMs,
|
||||
/* currentTracks= */ Tracks.EMPTY,
|
||||
/* parameters= */ TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
||||
/* parameters= */ TrackSelectionParameters.DEFAULT);
|
||||
|
||||
return new ControllerInfo(
|
||||
playerInfo,
|
||||
|
@ -462,7 +462,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
/* seekForwardIncrementMs= */ C.DEFAULT_SEEK_FORWARD_INCREMENT_MS,
|
||||
/* maxSeekToPreviousPositionMs= */ C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS,
|
||||
/* currentTracks= */ Tracks.EMPTY,
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
||||
TrackSelectionParameters.DEFAULT);
|
||||
|
||||
@Nullable public final PlaybackException playerError;
|
||||
|
||||
@ -1003,7 +1003,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
if (!currentTracks.equals(Tracks.EMPTY)) {
|
||||
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());
|
||||
}
|
||||
return bundle;
|
||||
@ -1117,7 +1117,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
Bundle trackSelectionParametersBundle = bundle.getBundle(FIELD_TRACK_SELECTION_PARAMETERS);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
trackSelectionParametersBundle == null
|
||||
? TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
? TrackSelectionParameters.DEFAULT
|
||||
: TrackSelectionParameters.fromBundle(trackSelectionParametersBundle);
|
||||
return new PlayerInfo(
|
||||
playerError,
|
||||
|
@ -1005,7 +1005,7 @@ public class MediaControllerListenerTest {
|
||||
@Test
|
||||
public void onTrackSelectionParametersChanged() throws Exception {
|
||||
RemoteMediaSession.RemoteMockPlayer player = remoteSession.getMockPlayer();
|
||||
player.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT);
|
||||
player.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT);
|
||||
MediaController controller = controllerTestRule.createController(remoteSession.getToken());
|
||||
AtomicReference<TrackSelectionParameters> parametersFromParamRef = new AtomicReference<>();
|
||||
AtomicReference<TrackSelectionParameters> parametersFromGetterRef = new AtomicReference<>();
|
||||
@ -1031,10 +1031,7 @@ public class MediaControllerListenerTest {
|
||||
threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
|
||||
|
||||
TrackSelectionParameters parameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
.buildUpon()
|
||||
.setMaxAudioBitrate(100)
|
||||
.build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(100).build();
|
||||
player.notifyTrackSelectionParametersChanged(parameters);
|
||||
|
||||
assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
|
||||
|
@ -2028,7 +2028,7 @@ public class MediaControllerTest {
|
||||
.build();
|
||||
Tracks currentTracks = new Tracks(trackGroups);
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxVideoSizeSd().build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoSizeSd().build();
|
||||
Timeline timeline = MediaTestUtils.createTimeline(5);
|
||||
int currentMediaItemIndex = 3;
|
||||
MediaItem currentMediaItem =
|
||||
@ -2249,7 +2249,7 @@ public class MediaControllerTest {
|
||||
public void getTrackSelectionParameters_returnsTrackSelectionParametersOfPlayerInSession()
|
||||
throws Exception {
|
||||
TrackSelectionParameters parameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxVideoSizeSd().build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxVideoSizeSd().build();
|
||||
Bundle playerConfig =
|
||||
new RemoteMediaSession.MockPlayerConfigBuilder()
|
||||
.setTrackSelectionParameters(parameters)
|
||||
@ -3066,7 +3066,7 @@ public class MediaControllerTest {
|
||||
/* trackSupport= */ new int[1],
|
||||
/* trackSelected= */ new boolean[1])));
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT
|
||||
TrackSelectionParameters.DEFAULT
|
||||
.buildUpon()
|
||||
.addOverride(
|
||||
new TrackSelectionOverride(playerTrackGroupForOverride, /* trackIndex= */ 0))
|
||||
|
@ -280,9 +280,7 @@ public class MediaSessionPermissionTest {
|
||||
public void setTrackSelectionParameters() throws Exception {
|
||||
testOnCommandRequest(
|
||||
COMMAND_SET_TRACK_SELECTION_PARAMETERS,
|
||||
controller ->
|
||||
controller.setTrackSelectionParameters(
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT));
|
||||
controller -> controller.setTrackSelectionParameters(TrackSelectionParameters.DEFAULT));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -862,7 +862,7 @@ public class MediaSessionPlayerTest {
|
||||
@Test
|
||||
public void setTrackSelectionParameters() throws Exception {
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxAudioBitrate(10).build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(10).build();
|
||||
|
||||
controller.setTrackSelectionParameters(trackSelectionParameters);
|
||||
|
||||
|
@ -538,7 +538,7 @@ public class MockPlayerTest {
|
||||
@Test
|
||||
public void setTrackSelectionParameters() {
|
||||
TrackSelectionParameters trackSelectionParameters =
|
||||
TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setMaxAudioBitrate(10).build();
|
||||
TrackSelectionParameters.DEFAULT.buildUpon().setMaxAudioBitrate(10).build();
|
||||
|
||||
player.setTrackSelectionParameters(trackSelectionParameters);
|
||||
|
||||
|
@ -371,7 +371,7 @@ public class MockPlayer implements Player {
|
||||
commands = new Player.Commands.Builder().addAllCommands().build();
|
||||
|
||||
currentTracks = Tracks.EMPTY;
|
||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT_WITHOUT_CONTEXT;
|
||||
trackSelectionParameters = TrackSelectionParameters.DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user