mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Merge pull request #10047 from LuGO0:9432/added-filtering-for-forced-text-tracks
PiperOrigin-RevId: 439262085
This commit is contained in:
commit
9f7abd4f42
5 changed files with 84 additions and 65 deletions
|
|
@ -98,6 +98,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
// Text
|
// Text
|
||||||
private ImmutableList<String> preferredTextLanguages;
|
private ImmutableList<String> preferredTextLanguages;
|
||||||
private @C.RoleFlags int preferredTextRoleFlags;
|
private @C.RoleFlags int preferredTextRoleFlags;
|
||||||
|
private @C.SelectionFlags int ignoredTextSelectionFlags;
|
||||||
private boolean selectUndeterminedTextLanguage;
|
private boolean selectUndeterminedTextLanguage;
|
||||||
// General
|
// General
|
||||||
private boolean forceLowestBitrate;
|
private boolean forceLowestBitrate;
|
||||||
|
|
@ -130,6 +131,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
// Text
|
// Text
|
||||||
preferredTextLanguages = ImmutableList.of();
|
preferredTextLanguages = ImmutableList.of();
|
||||||
preferredTextRoleFlags = 0;
|
preferredTextRoleFlags = 0;
|
||||||
|
ignoredTextSelectionFlags = 0;
|
||||||
selectUndeterminedTextLanguage = false;
|
selectUndeterminedTextLanguage = false;
|
||||||
// General
|
// General
|
||||||
forceLowestBitrate = false;
|
forceLowestBitrate = false;
|
||||||
|
|
@ -228,6 +230,10 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
bundle.getInt(
|
bundle.getInt(
|
||||||
keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS),
|
keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS),
|
||||||
DEFAULT_WITHOUT_CONTEXT.preferredTextRoleFlags);
|
DEFAULT_WITHOUT_CONTEXT.preferredTextRoleFlags);
|
||||||
|
ignoredTextSelectionFlags =
|
||||||
|
bundle.getInt(
|
||||||
|
keyForField(FIELD_IGNORED_TEXT_SELECTION_FLAGS),
|
||||||
|
DEFAULT_WITHOUT_CONTEXT.ignoredTextSelectionFlags);
|
||||||
selectUndeterminedTextLanguage =
|
selectUndeterminedTextLanguage =
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE),
|
keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE),
|
||||||
|
|
@ -291,6 +297,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
// Text
|
// Text
|
||||||
preferredTextLanguages = parameters.preferredTextLanguages;
|
preferredTextLanguages = parameters.preferredTextLanguages;
|
||||||
preferredTextRoleFlags = parameters.preferredTextRoleFlags;
|
preferredTextRoleFlags = parameters.preferredTextRoleFlags;
|
||||||
|
ignoredTextSelectionFlags = parameters.ignoredTextSelectionFlags;
|
||||||
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
||||||
// General
|
// General
|
||||||
forceLowestBitrate = parameters.forceLowestBitrate;
|
forceLowestBitrate = parameters.forceLowestBitrate;
|
||||||
|
|
@ -613,6 +620,18 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a bitmask of selection flags that are ignored for text track selections.
|
||||||
|
*
|
||||||
|
* @param ignoredTextSelectionFlags A bitmask of {@link C.SelectionFlags} that are ignored for
|
||||||
|
* text track selections.
|
||||||
|
* @return This builder.
|
||||||
|
*/
|
||||||
|
public Builder setIgnoredTextSelectionFlags(@C.SelectionFlags int ignoredTextSelectionFlags) {
|
||||||
|
this.ignoredTextSelectionFlags = ignoredTextSelectionFlags;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets whether a text track with undetermined language should be selected if no track with
|
* Sets whether a text track with undetermined language should be selected if no track with
|
||||||
* {@link #setPreferredTextLanguages(String...) a preferred language} is available, or if the
|
* {@link #setPreferredTextLanguages(String...) a preferred language} is available, or if the
|
||||||
|
|
@ -895,6 +914,11 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
* is enabled.
|
* is enabled.
|
||||||
*/
|
*/
|
||||||
public final @C.RoleFlags int preferredTextRoleFlags;
|
public final @C.RoleFlags int preferredTextRoleFlags;
|
||||||
|
/**
|
||||||
|
* 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).
|
||||||
|
*/
|
||||||
|
public final @C.SelectionFlags int ignoredTextSelectionFlags;
|
||||||
/**
|
/**
|
||||||
* Whether a text track with undetermined language should be selected if no track with {@link
|
* Whether a text track with undetermined language should be selected if no track with {@link
|
||||||
* #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The
|
* #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The
|
||||||
|
|
@ -947,6 +971,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
// Text
|
// Text
|
||||||
this.preferredTextLanguages = builder.preferredTextLanguages;
|
this.preferredTextLanguages = builder.preferredTextLanguages;
|
||||||
this.preferredTextRoleFlags = builder.preferredTextRoleFlags;
|
this.preferredTextRoleFlags = builder.preferredTextRoleFlags;
|
||||||
|
this.ignoredTextSelectionFlags = builder.ignoredTextSelectionFlags;
|
||||||
this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage;
|
this.selectUndeterminedTextLanguage = builder.selectUndeterminedTextLanguage;
|
||||||
// General
|
// General
|
||||||
this.forceLowestBitrate = builder.forceLowestBitrate;
|
this.forceLowestBitrate = builder.forceLowestBitrate;
|
||||||
|
|
@ -990,8 +1015,10 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
&& maxAudioChannelCount == other.maxAudioChannelCount
|
&& maxAudioChannelCount == other.maxAudioChannelCount
|
||||||
&& maxAudioBitrate == other.maxAudioBitrate
|
&& maxAudioBitrate == other.maxAudioBitrate
|
||||||
&& preferredAudioMimeTypes.equals(other.preferredAudioMimeTypes)
|
&& preferredAudioMimeTypes.equals(other.preferredAudioMimeTypes)
|
||||||
|
// Text
|
||||||
&& preferredTextLanguages.equals(other.preferredTextLanguages)
|
&& preferredTextLanguages.equals(other.preferredTextLanguages)
|
||||||
&& preferredTextRoleFlags == other.preferredTextRoleFlags
|
&& preferredTextRoleFlags == other.preferredTextRoleFlags
|
||||||
|
&& ignoredTextSelectionFlags == other.ignoredTextSelectionFlags
|
||||||
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
|
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
|
||||||
// General
|
// General
|
||||||
&& forceLowestBitrate == other.forceLowestBitrate
|
&& forceLowestBitrate == other.forceLowestBitrate
|
||||||
|
|
@ -1026,6 +1053,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
// Text
|
// Text
|
||||||
result = 31 * result + preferredTextLanguages.hashCode();
|
result = 31 * result + preferredTextLanguages.hashCode();
|
||||||
result = 31 * result + preferredTextRoleFlags;
|
result = 31 * result + preferredTextRoleFlags;
|
||||||
|
result = 31 * result + ignoredTextSelectionFlags;
|
||||||
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
|
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
|
||||||
// General
|
// General
|
||||||
result = 31 * result + (forceLowestBitrate ? 1 : 0);
|
result = 31 * result + (forceLowestBitrate ? 1 : 0);
|
||||||
|
|
@ -1040,11 +1068,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
@Documented
|
@Documented
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@IntDef({
|
@IntDef({
|
||||||
FIELD_PREFERRED_AUDIO_LANGUAGES,
|
// Video
|
||||||
FIELD_PREFERRED_AUDIO_ROLE_FLAGS,
|
|
||||||
FIELD_PREFERRED_TEXT_LANGUAGES,
|
|
||||||
FIELD_PREFERRED_TEXT_ROLE_FLAGS,
|
|
||||||
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE,
|
|
||||||
FIELD_MAX_VIDEO_WIDTH,
|
FIELD_MAX_VIDEO_WIDTH,
|
||||||
FIELD_MAX_VIDEO_HEIGHT,
|
FIELD_MAX_VIDEO_HEIGHT,
|
||||||
FIELD_MAX_VIDEO_FRAMERATE,
|
FIELD_MAX_VIDEO_FRAMERATE,
|
||||||
|
|
@ -1057,14 +1081,23 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
FIELD_VIEWPORT_HEIGHT,
|
FIELD_VIEWPORT_HEIGHT,
|
||||||
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE,
|
FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE,
|
||||||
FIELD_PREFERRED_VIDEO_MIMETYPES,
|
FIELD_PREFERRED_VIDEO_MIMETYPES,
|
||||||
|
FIELD_PREFERRED_VIDEO_ROLE_FLAGS,
|
||||||
|
// Audio
|
||||||
|
FIELD_PREFERRED_AUDIO_LANGUAGES,
|
||||||
|
FIELD_PREFERRED_AUDIO_ROLE_FLAGS,
|
||||||
FIELD_MAX_AUDIO_CHANNEL_COUNT,
|
FIELD_MAX_AUDIO_CHANNEL_COUNT,
|
||||||
FIELD_MAX_AUDIO_BITRATE,
|
FIELD_MAX_AUDIO_BITRATE,
|
||||||
FIELD_PREFERRED_AUDIO_MIME_TYPES,
|
FIELD_PREFERRED_AUDIO_MIME_TYPES,
|
||||||
|
// Text
|
||||||
|
FIELD_PREFERRED_TEXT_LANGUAGES,
|
||||||
|
FIELD_PREFERRED_TEXT_ROLE_FLAGS,
|
||||||
|
FIELD_IGNORED_TEXT_SELECTION_FLAGS,
|
||||||
|
FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE,
|
||||||
|
// General
|
||||||
FIELD_FORCE_LOWEST_BITRATE,
|
FIELD_FORCE_LOWEST_BITRATE,
|
||||||
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE,
|
FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE,
|
||||||
FIELD_SELECTION_OVERRIDES,
|
FIELD_SELECTION_OVERRIDES,
|
||||||
FIELD_DISABLED_TRACK_TYPE,
|
FIELD_DISABLED_TRACK_TYPE,
|
||||||
FIELD_PREFERRED_VIDEO_ROLE_FLAGS
|
|
||||||
})
|
})
|
||||||
private @interface FieldNumber {}
|
private @interface FieldNumber {}
|
||||||
|
|
||||||
|
|
@ -1093,6 +1126,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
private static final int FIELD_SELECTION_OVERRIDES = 23;
|
private static final int FIELD_SELECTION_OVERRIDES = 23;
|
||||||
private static final int FIELD_DISABLED_TRACK_TYPE = 24;
|
private static final int FIELD_DISABLED_TRACK_TYPE = 24;
|
||||||
private static final int FIELD_PREFERRED_VIDEO_ROLE_FLAGS = 25;
|
private static final int FIELD_PREFERRED_VIDEO_ROLE_FLAGS = 25;
|
||||||
|
private static final int FIELD_IGNORED_TEXT_SELECTION_FLAGS = 26;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
|
|
@ -1129,6 +1163,7 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
bundle.putStringArray(
|
bundle.putStringArray(
|
||||||
keyForField(FIELD_PREFERRED_TEXT_LANGUAGES), preferredTextLanguages.toArray(new String[0]));
|
keyForField(FIELD_PREFERRED_TEXT_LANGUAGES), preferredTextLanguages.toArray(new String[0]));
|
||||||
bundle.putInt(keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS), preferredTextRoleFlags);
|
bundle.putInt(keyForField(FIELD_PREFERRED_TEXT_ROLE_FLAGS), preferredTextRoleFlags);
|
||||||
|
bundle.putInt(keyForField(FIELD_IGNORED_TEXT_SELECTION_FLAGS), ignoredTextSelectionFlags);
|
||||||
bundle.putBoolean(
|
bundle.putBoolean(
|
||||||
keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE), selectUndeterminedTextLanguage);
|
keyForField(FIELD_SELECT_UNDETERMINED_TEXT_LANGUAGE), selectUndeterminedTextLanguage);
|
||||||
// General
|
// General
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ public final class TrackSelectionParametersTest {
|
||||||
assertThat(parameters.preferredAudioMimeTypes).isEmpty();
|
assertThat(parameters.preferredAudioMimeTypes).isEmpty();
|
||||||
assertThat(parameters.preferredTextLanguages).isEmpty();
|
assertThat(parameters.preferredTextLanguages).isEmpty();
|
||||||
assertThat(parameters.preferredTextRoleFlags).isEqualTo(0);
|
assertThat(parameters.preferredTextRoleFlags).isEqualTo(0);
|
||||||
|
assertThat(parameters.ignoredTextSelectionFlags).isEqualTo(0);
|
||||||
assertThat(parameters.selectUndeterminedTextLanguage).isFalse();
|
assertThat(parameters.selectUndeterminedTextLanguage).isFalse();
|
||||||
// General
|
// General
|
||||||
assertThat(parameters.forceLowestBitrate).isFalse();
|
assertThat(parameters.forceLowestBitrate).isFalse();
|
||||||
|
|
@ -102,6 +103,7 @@ public final class TrackSelectionParametersTest {
|
||||||
// Text
|
// Text
|
||||||
.setPreferredTextLanguages("de", "en")
|
.setPreferredTextLanguages("de", "en")
|
||||||
.setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION)
|
.setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION)
|
||||||
|
.setIgnoredTextSelectionFlags(C.SELECTION_FLAG_AUTOSELECT)
|
||||||
.setSelectUndeterminedTextLanguage(true)
|
.setSelectUndeterminedTextLanguage(true)
|
||||||
// General
|
// General
|
||||||
.setForceLowestBitrate(false)
|
.setForceLowestBitrate(false)
|
||||||
|
|
@ -145,6 +147,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.ignoredTextSelectionFlags).isEqualTo(C.SELECTION_FLAG_AUTOSELECT);
|
||||||
assertThat(parameters.selectUndeterminedTextLanguage).isTrue();
|
assertThat(parameters.selectUndeterminedTextLanguage).isTrue();
|
||||||
// General
|
// General
|
||||||
assertThat(parameters.forceLowestBitrate).isFalse();
|
assertThat(parameters.forceLowestBitrate).isFalse();
|
||||||
|
|
|
||||||
|
|
@ -114,13 +114,11 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
private boolean allowAudioMixedSampleRateAdaptiveness;
|
private boolean allowAudioMixedSampleRateAdaptiveness;
|
||||||
private boolean allowAudioMixedChannelCountAdaptiveness;
|
private boolean allowAudioMixedChannelCountAdaptiveness;
|
||||||
private boolean allowAudioMixedDecoderSupportAdaptiveness;
|
private boolean allowAudioMixedDecoderSupportAdaptiveness;
|
||||||
// Text
|
|
||||||
private @C.SelectionFlags int disabledTextTrackSelectionFlags;
|
|
||||||
// General
|
// General
|
||||||
private boolean exceedRendererCapabilitiesIfNecessary;
|
private boolean exceedRendererCapabilitiesIfNecessary;
|
||||||
private boolean tunnelingEnabled;
|
private boolean tunnelingEnabled;
|
||||||
private boolean allowMultipleAdaptiveSelections;
|
private boolean allowMultipleAdaptiveSelections;
|
||||||
|
// Overrides
|
||||||
private final SparseArray<Map<TrackGroupArray, @NullableType SelectionOverride>>
|
private final SparseArray<Map<TrackGroupArray, @NullableType SelectionOverride>>
|
||||||
selectionOverrides;
|
selectionOverrides;
|
||||||
private final SparseBooleanArray rendererDisabledFlags;
|
private final SparseBooleanArray rendererDisabledFlags;
|
||||||
|
|
@ -156,8 +154,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
*/
|
*/
|
||||||
private ParametersBuilder(Parameters initialValues) {
|
private ParametersBuilder(Parameters initialValues) {
|
||||||
super(initialValues);
|
super(initialValues);
|
||||||
// Text
|
|
||||||
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
|
|
||||||
// Video
|
// Video
|
||||||
exceedVideoConstraintsIfNecessary = initialValues.exceedVideoConstraintsIfNecessary;
|
exceedVideoConstraintsIfNecessary = initialValues.exceedVideoConstraintsIfNecessary;
|
||||||
allowVideoMixedMimeTypeAdaptiveness = initialValues.allowVideoMixedMimeTypeAdaptiveness;
|
allowVideoMixedMimeTypeAdaptiveness = initialValues.allowVideoMixedMimeTypeAdaptiveness;
|
||||||
|
|
@ -225,11 +221,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
Parameters.keyForField(
|
Parameters.keyForField(
|
||||||
Parameters.FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS),
|
Parameters.FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS),
|
||||||
defaultValue.allowAudioMixedDecoderSupportAdaptiveness));
|
defaultValue.allowAudioMixedDecoderSupportAdaptiveness));
|
||||||
// Text
|
|
||||||
setDisabledTextTrackSelectionFlags(
|
|
||||||
bundle.getInt(
|
|
||||||
Parameters.keyForField(Parameters.FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS),
|
|
||||||
defaultValue.disabledTextTrackSelectionFlags));
|
|
||||||
// General
|
// General
|
||||||
setExceedRendererCapabilitiesIfNecessary(
|
setExceedRendererCapabilitiesIfNecessary(
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
|
|
@ -243,10 +234,9 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
Parameters.keyForField(Parameters.FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS),
|
Parameters.keyForField(Parameters.FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS),
|
||||||
defaultValue.allowMultipleAdaptiveSelections));
|
defaultValue.allowMultipleAdaptiveSelections));
|
||||||
|
// Overrides
|
||||||
selectionOverrides = new SparseArray<>();
|
selectionOverrides = new SparseArray<>();
|
||||||
setSelectionOverridesFromBundle(bundle);
|
setSelectionOverridesFromBundle(bundle);
|
||||||
|
|
||||||
rendererDisabledFlags =
|
rendererDisabledFlags =
|
||||||
makeSparseBooleanArrayFromTrueKeys(
|
makeSparseBooleanArrayFromTrueKeys(
|
||||||
bundle.getIntArray(
|
bundle.getIntArray(
|
||||||
|
|
@ -555,6 +545,13 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ParametersBuilder setIgnoredTextSelectionFlags(
|
||||||
|
@C.SelectionFlags int ignoredTextSelectionFlags) {
|
||||||
|
super.setIgnoredTextSelectionFlags(ignoredTextSelectionFlags);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParametersBuilder setSelectUndeterminedTextLanguage(
|
public ParametersBuilder setSelectUndeterminedTextLanguage(
|
||||||
boolean selectUndeterminedTextLanguage) {
|
boolean selectUndeterminedTextLanguage) {
|
||||||
|
|
@ -563,16 +560,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a bitmask of selection flags that are disabled for text track selections.
|
* @deprecated Use {@link #setIgnoredTextSelectionFlags}.
|
||||||
*
|
|
||||||
* @param disabledTextTrackSelectionFlags A bitmask of {@link C.SelectionFlags} that are
|
|
||||||
* disabled for text track selections.
|
|
||||||
* @return This builder.
|
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public ParametersBuilder setDisabledTextTrackSelectionFlags(
|
public ParametersBuilder setDisabledTextTrackSelectionFlags(
|
||||||
@C.SelectionFlags int disabledTextTrackSelectionFlags) {
|
@C.SelectionFlags int disabledTextTrackSelectionFlags) {
|
||||||
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
|
return setIgnoredTextSelectionFlags(disabledTextTrackSelectionFlags);
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
|
@ -824,8 +817,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
allowAudioMixedSampleRateAdaptiveness = false;
|
allowAudioMixedSampleRateAdaptiveness = false;
|
||||||
allowAudioMixedChannelCountAdaptiveness = false;
|
allowAudioMixedChannelCountAdaptiveness = false;
|
||||||
allowAudioMixedDecoderSupportAdaptiveness = false;
|
allowAudioMixedDecoderSupportAdaptiveness = false;
|
||||||
// Text
|
|
||||||
disabledTextTrackSelectionFlags = 0;
|
|
||||||
// General
|
// General
|
||||||
exceedRendererCapabilitiesIfNecessary = true;
|
exceedRendererCapabilitiesIfNecessary = true;
|
||||||
tunnelingEnabled = false;
|
tunnelingEnabled = false;
|
||||||
|
|
@ -913,12 +904,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
*/
|
*/
|
||||||
@Deprecated public static final Parameters DEFAULT = DEFAULT_WITHOUT_CONTEXT;
|
@Deprecated public static final Parameters DEFAULT = DEFAULT_WITHOUT_CONTEXT;
|
||||||
|
|
||||||
/**
|
|
||||||
* Bitmask of selection flags that are disabled for text track selections. See {@link
|
|
||||||
* C.SelectionFlags}. The default value is {@code 0} (i.e. no flags).
|
|
||||||
*/
|
|
||||||
public final @C.SelectionFlags int disabledTextTrackSelectionFlags;
|
|
||||||
|
|
||||||
/** Returns an instance configured with default values. */
|
/** Returns an instance configured with default values. */
|
||||||
public static Parameters getDefaults(Context context) {
|
public static Parameters getDefaults(Context context) {
|
||||||
return new ParametersBuilder(context).build();
|
return new ParametersBuilder(context).build();
|
||||||
|
|
@ -1016,8 +1001,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
allowAudioMixedSampleRateAdaptiveness = builder.allowAudioMixedSampleRateAdaptiveness;
|
allowAudioMixedSampleRateAdaptiveness = builder.allowAudioMixedSampleRateAdaptiveness;
|
||||||
allowAudioMixedChannelCountAdaptiveness = builder.allowAudioMixedChannelCountAdaptiveness;
|
allowAudioMixedChannelCountAdaptiveness = builder.allowAudioMixedChannelCountAdaptiveness;
|
||||||
allowAudioMixedDecoderSupportAdaptiveness = builder.allowAudioMixedDecoderSupportAdaptiveness;
|
allowAudioMixedDecoderSupportAdaptiveness = builder.allowAudioMixedDecoderSupportAdaptiveness;
|
||||||
// Text
|
|
||||||
disabledTextTrackSelectionFlags = builder.disabledTextTrackSelectionFlags;
|
|
||||||
// General
|
// General
|
||||||
exceedRendererCapabilitiesIfNecessary = builder.exceedRendererCapabilitiesIfNecessary;
|
exceedRendererCapabilitiesIfNecessary = builder.exceedRendererCapabilitiesIfNecessary;
|
||||||
tunnelingEnabled = builder.tunnelingEnabled;
|
tunnelingEnabled = builder.tunnelingEnabled;
|
||||||
|
|
@ -1105,8 +1088,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
== other.allowAudioMixedChannelCountAdaptiveness
|
== other.allowAudioMixedChannelCountAdaptiveness
|
||||||
&& allowAudioMixedDecoderSupportAdaptiveness
|
&& allowAudioMixedDecoderSupportAdaptiveness
|
||||||
== other.allowAudioMixedDecoderSupportAdaptiveness
|
== other.allowAudioMixedDecoderSupportAdaptiveness
|
||||||
// Text
|
|
||||||
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags
|
|
||||||
// General
|
// General
|
||||||
&& exceedRendererCapabilitiesIfNecessary == other.exceedRendererCapabilitiesIfNecessary
|
&& exceedRendererCapabilitiesIfNecessary == other.exceedRendererCapabilitiesIfNecessary
|
||||||
&& tunnelingEnabled == other.tunnelingEnabled
|
&& tunnelingEnabled == other.tunnelingEnabled
|
||||||
|
|
@ -1131,8 +1112,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
result = 31 * result + (allowAudioMixedSampleRateAdaptiveness ? 1 : 0);
|
result = 31 * result + (allowAudioMixedSampleRateAdaptiveness ? 1 : 0);
|
||||||
result = 31 * result + (allowAudioMixedChannelCountAdaptiveness ? 1 : 0);
|
result = 31 * result + (allowAudioMixedChannelCountAdaptiveness ? 1 : 0);
|
||||||
result = 31 * result + (allowAudioMixedDecoderSupportAdaptiveness ? 1 : 0);
|
result = 31 * result + (allowAudioMixedDecoderSupportAdaptiveness ? 1 : 0);
|
||||||
// Text
|
|
||||||
result = 31 * result + disabledTextTrackSelectionFlags;
|
|
||||||
// General
|
// General
|
||||||
result = 31 * result + (exceedRendererCapabilitiesIfNecessary ? 1 : 0);
|
result = 31 * result + (exceedRendererCapabilitiesIfNecessary ? 1 : 0);
|
||||||
result = 31 * result + (tunnelingEnabled ? 1 : 0);
|
result = 31 * result + (tunnelingEnabled ? 1 : 0);
|
||||||
|
|
@ -1147,23 +1126,26 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@Target(TYPE_USE)
|
@Target(TYPE_USE)
|
||||||
@IntDef({
|
@IntDef({
|
||||||
|
// Video
|
||||||
FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY,
|
FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY,
|
||||||
FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
||||||
FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS,
|
FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS,
|
||||||
|
FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
|
||||||
|
// Audio
|
||||||
FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY,
|
FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY,
|
||||||
FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
||||||
FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS,
|
FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS,
|
||||||
FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS,
|
FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS,
|
||||||
FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS,
|
FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
|
||||||
|
// General
|
||||||
FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY,
|
FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY,
|
||||||
FIELD_TUNNELING_ENABLED,
|
FIELD_TUNNELING_ENABLED,
|
||||||
FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS,
|
FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS,
|
||||||
|
// Overrides
|
||||||
FIELD_SELECTION_OVERRIDES_RENDERER_INDICES,
|
FIELD_SELECTION_OVERRIDES_RENDERER_INDICES,
|
||||||
FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS,
|
FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS,
|
||||||
FIELD_SELECTION_OVERRIDES,
|
FIELD_SELECTION_OVERRIDES,
|
||||||
FIELD_RENDERER_DISABLED_INDICES,
|
FIELD_RENDERER_DISABLED_INDICES,
|
||||||
FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
|
|
||||||
FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS
|
|
||||||
})
|
})
|
||||||
private @interface FieldNumber {}
|
private @interface FieldNumber {}
|
||||||
|
|
||||||
|
|
@ -1175,16 +1157,15 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
private static final int FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS = 1004;
|
private static final int FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS = 1004;
|
||||||
private static final int FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS = 1005;
|
private static final int FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS = 1005;
|
||||||
private static final int FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS = 1006;
|
private static final int FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS = 1006;
|
||||||
private static final int FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS = 1007;
|
private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY = 1007;
|
||||||
private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY = 1008;
|
private static final int FIELD_TUNNELING_ENABLED = 1008;
|
||||||
private static final int FIELD_TUNNELING_ENABLED = 1009;
|
private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = 1009;
|
||||||
private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = 1010;
|
private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = 1010;
|
||||||
private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = 1011;
|
private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS = 1011;
|
||||||
private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS = 1012;
|
private static final int FIELD_SELECTION_OVERRIDES = 1012;
|
||||||
private static final int FIELD_SELECTION_OVERRIDES = 1013;
|
private static final int FIELD_RENDERER_DISABLED_INDICES = 1013;
|
||||||
private static final int FIELD_RENDERER_DISABLED_INDICES = 1014;
|
private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1014;
|
||||||
private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1015;
|
private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1015;
|
||||||
private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1016;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
|
|
@ -1219,9 +1200,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
bundle.putBoolean(
|
bundle.putBoolean(
|
||||||
keyForField(FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS),
|
keyForField(FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS),
|
||||||
allowAudioMixedDecoderSupportAdaptiveness);
|
allowAudioMixedDecoderSupportAdaptiveness);
|
||||||
// Text
|
|
||||||
bundle.putInt(
|
|
||||||
keyForField(FIELD_DISABLED_TEXT_TRACK_SELECTION_FLAGS), disabledTextTrackSelectionFlags);
|
|
||||||
// General
|
// General
|
||||||
bundle.putBoolean(
|
bundle.putBoolean(
|
||||||
keyForField(FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY),
|
keyForField(FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY),
|
||||||
|
|
@ -2738,8 +2716,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
super(rendererIndex, trackGroup, trackIndex);
|
super(rendererIndex, trackGroup, trackIndex);
|
||||||
isWithinRendererCapabilities =
|
isWithinRendererCapabilities =
|
||||||
isSupported(trackFormatSupport, /* allowExceedsCapabilities= */ false);
|
isSupported(trackFormatSupport, /* allowExceedsCapabilities= */ false);
|
||||||
int maskedSelectionFlags =
|
int maskedSelectionFlags = format.selectionFlags & ~parameters.ignoredTextSelectionFlags;
|
||||||
format.selectionFlags & ~parameters.disabledTextTrackSelectionFlags;
|
|
||||||
isDefault = (maskedSelectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
|
isDefault = (maskedSelectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
|
||||||
isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0;
|
isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0;
|
||||||
int bestLanguageIndex = Integer.MAX_VALUE;
|
int bestLanguageIndex = Integer.MAX_VALUE;
|
||||||
|
|
|
||||||
|
|
@ -1129,7 +1129,7 @@ public final class DefaultTrackSelectorTest {
|
||||||
// selected.
|
// selected.
|
||||||
trackGroups = wrapFormats(defaultOnly, noFlag, forcedOnly, forcedDefault);
|
trackGroups = wrapFormats(defaultOnly, noFlag, forcedOnly, forcedDefault);
|
||||||
trackSelector.setParameters(
|
trackSelector.setParameters(
|
||||||
defaultParameters.buildUpon().setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_DEFAULT));
|
defaultParameters.buildUpon().setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT));
|
||||||
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
||||||
assertNoSelection(result.selections[0]);
|
assertNoSelection(result.selections[0]);
|
||||||
|
|
||||||
|
|
@ -1140,8 +1140,7 @@ public final class DefaultTrackSelectorTest {
|
||||||
trackSelector
|
trackSelector
|
||||||
.getParameters()
|
.getParameters()
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setDisabledTextTrackSelectionFlags(
|
.setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT | C.SELECTION_FLAG_FORCED));
|
||||||
C.SELECTION_FLAG_DEFAULT | C.SELECTION_FLAG_FORCED));
|
|
||||||
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
||||||
assertNoSelection(result.selections[0]);
|
assertNoSelection(result.selections[0]);
|
||||||
|
|
||||||
|
|
@ -1159,7 +1158,7 @@ public final class DefaultTrackSelectorTest {
|
||||||
trackSelector
|
trackSelector
|
||||||
.getParameters()
|
.getParameters()
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_DEFAULT));
|
.setIgnoredTextSelectionFlags(C.SELECTION_FLAG_DEFAULT));
|
||||||
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
|
||||||
assertFixedSelection(result.selections[0], trackGroups, noFlag);
|
assertFixedSelection(result.selections[0], trackGroups, noFlag);
|
||||||
}
|
}
|
||||||
|
|
@ -2370,7 +2369,7 @@ public final class DefaultTrackSelectorTest {
|
||||||
.setPreferredTextLanguages("de", "en")
|
.setPreferredTextLanguages("de", "en")
|
||||||
.setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION)
|
.setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION)
|
||||||
.setSelectUndeterminedTextLanguage(true)
|
.setSelectUndeterminedTextLanguage(true)
|
||||||
.setDisabledTextTrackSelectionFlags(C.SELECTION_FLAG_AUTOSELECT)
|
.setIgnoredTextSelectionFlags(C.SELECTION_FLAG_AUTOSELECT)
|
||||||
// General
|
// General
|
||||||
.setForceLowestBitrate(false)
|
.setForceLowestBitrate(false)
|
||||||
.setForceHighestSupportedBitrate(true)
|
.setForceHighestSupportedBitrate(true)
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
|
import com.google.android.exoplayer2.ExoPlayerLibraryInfo;
|
||||||
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.ForwardingPlayer;
|
import com.google.android.exoplayer2.ForwardingPlayer;
|
||||||
import com.google.android.exoplayer2.Player;
|
import com.google.android.exoplayer2.Player;
|
||||||
import com.google.android.exoplayer2.Player.Events;
|
import com.google.android.exoplayer2.Player.Events;
|
||||||
|
|
@ -1130,8 +1131,11 @@ public class StyledPlayerControlView extends FrameLayout {
|
||||||
if (!trackGroupInfo.isTrackSupported(trackIndex)) {
|
if (!trackGroupInfo.isTrackSupported(trackIndex)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String trackName =
|
Format trackFormat = trackGroupInfo.getTrackFormat(trackIndex);
|
||||||
trackNameProvider.getTrackName(trackGroupInfo.getTrackFormat(trackIndex));
|
if ((trackFormat.selectionFlags & C.SELECTION_FLAG_FORCED) != 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String trackName = trackNameProvider.getTrackName(trackFormat);
|
||||||
tracks.add(new TrackInformation(tracksInfo, trackGroupIndex, trackIndex, trackName));
|
tracks.add(new TrackInformation(tracksInfo, trackGroupIndex, trackIndex, trackName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1870,7 +1874,8 @@ public class StyledPlayerControlView extends FrameLayout {
|
||||||
player.setTrackSelectionParameters(
|
player.setTrackSelectionParameters(
|
||||||
trackSelectionParameters
|
trackSelectionParameters
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, /* disabled= */ true)
|
.clearOverridesOfType(C.TRACK_TYPE_TEXT)
|
||||||
|
.setIgnoredTextSelectionFlags(~C.SELECTION_FLAG_FORCED)
|
||||||
.build());
|
.build());
|
||||||
settingsWindow.dismiss();
|
settingsWindow.dismiss();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue