diff --git a/libraries/common/src/main/java/androidx/media3/common/TrackSelectionParameters.java b/libraries/common/src/main/java/androidx/media3/common/TrackSelectionParameters.java index e7c4cbbc50..b7fe8176e3 100644 --- a/libraries/common/src/main/java/androidx/media3/common/TrackSelectionParameters.java +++ b/libraries/common/src/main/java/androidx/media3/common/TrackSelectionParameters.java @@ -24,7 +24,6 @@ import android.graphics.Point; import android.os.Bundle; import android.os.Looper; import android.view.accessibility.CaptioningManager; -import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.media3.common.util.BundleableUtil; @@ -34,9 +33,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.primitives.Ints; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -1073,42 +1069,6 @@ public class TrackSelectionParameters implements Bundleable { // Bundleable implementation - @Documented - @Retention(RetentionPolicy.SOURCE) - @IntDef({ - // Video - FIELD_MAX_VIDEO_WIDTH, - FIELD_MAX_VIDEO_HEIGHT, - FIELD_MAX_VIDEO_FRAMERATE, - FIELD_MAX_VIDEO_BITRATE, - FIELD_MIN_VIDEO_WIDTH, - FIELD_MIN_VIDEO_HEIGHT, - FIELD_MIN_VIDEO_FRAMERATE, - FIELD_MIN_VIDEO_BITRATE, - FIELD_VIEWPORT_WIDTH, - FIELD_VIEWPORT_HEIGHT, - FIELD_VIEWPORT_ORIENTATION_MAY_CHANGE, - 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_BITRATE, - 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_HIGHEST_SUPPORTED_BITRATE, - FIELD_SELECTION_OVERRIDES, - FIELD_DISABLED_TRACK_TYPE, - }) - private @interface FieldNumber {} - private static final int FIELD_PREFERRED_AUDIO_LANGUAGES = 1; private static final int FIELD_PREFERRED_AUDIO_ROLE_FLAGS = 2; private static final int FIELD_PREFERRED_TEXT_LANGUAGES = 3; @@ -1136,6 +1096,15 @@ public class TrackSelectionParameters implements Bundleable { private static final int FIELD_PREFERRED_VIDEO_ROLE_FLAGS = 25; private static final int FIELD_IGNORED_TEXT_SELECTION_FLAGS = 26; + /** + * Defines a minimum field ID value for subclasses to use when implementing {@link #toBundle()} + * and {@link Bundleable.Creator}. + * + *
Subclasses should obtain keys for their {@link Bundle} representation by applying a
+ * non-negative offset on this constant and passing the result to {@link #keyForField(int)}.
+ */
+ @UnstableApi protected static final int FIELD_CUSTOM_ID_BASE = 1000;
+
@Override
public Bundle toBundle() {
Bundle bundle = new Bundle();
@@ -1197,7 +1166,15 @@ public class TrackSelectionParameters implements Bundleable {
public static final Creator Subclasses should use {@code field} values greater than or equal to {@link
+ * #FIELD_CUSTOM_ID_BASE}.
+ */
+ @UnstableApi
+ protected static String keyForField(int field) {
return Integer.toString(field, Character.MAX_RADIX);
}
}
diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java
index dbed6b4ffb..c85e40b24a 100644
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java
@@ -1688,50 +1688,30 @@ public class DefaultTrackSelector extends MappingTrackSelector {
// Bundleable implementation.
- @Documented
- @Retention(RetentionPolicy.SOURCE)
- @Target(TYPE_USE)
- @IntDef({
- // Video
- FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY,
- FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS,
- FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS,
- FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
- // Audio
- FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY,
- FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS,
- FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS,
- FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS,
- FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
- // General
- FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY,
- FIELD_TUNNELING_ENABLED,
- FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS,
- // Overrides
- FIELD_SELECTION_OVERRIDES_RENDERER_INDICES,
- FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS,
- FIELD_SELECTION_OVERRIDES,
- FIELD_RENDERER_DISABLED_INDICES,
- })
- private @interface FieldNumber {}
-
- // Start at 1000 to avoid conflict with the base class fields.
- private static final int FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY = 1000;
- private static final int FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS = 1001;
- private static final int FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS = 1002;
- private static final int FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY = 1003;
- 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_CHANNEL_COUNT_ADAPTIVENESS = 1006;
- private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY = 1007;
- private static final int FIELD_TUNNELING_ENABLED = 1008;
- private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = 1009;
- private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = 1010;
- private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS = 1011;
- private static final int FIELD_SELECTION_OVERRIDES = 1012;
- private static final int FIELD_RENDERER_DISABLED_INDICES = 1013;
- private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1014;
- private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS = 1015;
+ private static final int FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY = FIELD_CUSTOM_ID_BASE;
+ private static final int FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 1;
+ private static final int FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS = FIELD_CUSTOM_ID_BASE + 2;
+ private static final int FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY = FIELD_CUSTOM_ID_BASE + 3;
+ private static final int FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 4;
+ private static final int FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 5;
+ private static final int FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 6;
+ private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY =
+ FIELD_CUSTOM_ID_BASE + 7;
+ private static final int FIELD_TUNNELING_ENABLED = FIELD_CUSTOM_ID_BASE + 8;
+ private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = FIELD_CUSTOM_ID_BASE + 9;
+ private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = FIELD_CUSTOM_ID_BASE + 10;
+ private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS =
+ FIELD_CUSTOM_ID_BASE + 11;
+ private static final int FIELD_SELECTION_OVERRIDES = FIELD_CUSTOM_ID_BASE + 12;
+ private static final int FIELD_RENDERER_DISABLED_INDICES = FIELD_CUSTOM_ID_BASE + 13;
+ private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 14;
+ private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS =
+ FIELD_CUSTOM_ID_BASE + 15;
@Override
public Bundle toBundle() {
@@ -1787,10 +1767,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
public static final Creator