Use a shared keyForField
implementation in track selection parameters
The current setup with distinct, private `keyForField` implementations, leaves open the (theoretical) possibility of a clash in the `Bundle` keys used by the superclass and subclass. This change brings consistency with our only other extensible `Bundleable` type (`PlaybackException`). #minor-release PiperOrigin-RevId: 453385875
This commit is contained in:
parent
14ea2e4c51
commit
814e43dbb9
@ -24,7 +24,6 @@ import android.graphics.Point;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.view.accessibility.CaptioningManager;
|
import android.view.accessibility.CaptioningManager;
|
||||||
import androidx.annotation.IntDef;
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import androidx.media3.common.util.BundleableUtil;
|
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.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.primitives.Ints;
|
import com.google.common.primitives.Ints;
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -1073,42 +1069,6 @@ public class TrackSelectionParameters implements Bundleable {
|
|||||||
|
|
||||||
// Bundleable implementation
|
// 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_LANGUAGES = 1;
|
||||||
private static final int FIELD_PREFERRED_AUDIO_ROLE_FLAGS = 2;
|
private static final int FIELD_PREFERRED_AUDIO_ROLE_FLAGS = 2;
|
||||||
private static final int FIELD_PREFERRED_TEXT_LANGUAGES = 3;
|
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_PREFERRED_VIDEO_ROLE_FLAGS = 25;
|
||||||
private static final int FIELD_IGNORED_TEXT_SELECTION_FLAGS = 26;
|
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}.
|
||||||
|
*
|
||||||
|
* <p>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
|
@Override
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
@ -1197,7 +1166,15 @@ public class TrackSelectionParameters implements Bundleable {
|
|||||||
public static final Creator<TrackSelectionParameters> CREATOR =
|
public static final Creator<TrackSelectionParameters> CREATOR =
|
||||||
TrackSelectionParameters::fromBundle;
|
TrackSelectionParameters::fromBundle;
|
||||||
|
|
||||||
private static String keyForField(@FieldNumber int field) {
|
/**
|
||||||
|
* Converts the given field number to a string which can be used as a field key when implementing
|
||||||
|
* {@link #toBundle()} and {@link Bundleable.Creator}.
|
||||||
|
*
|
||||||
|
* <p>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);
|
return Integer.toString(field, Character.MAX_RADIX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1688,50 +1688,30 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
|
|
||||||
// Bundleable implementation.
|
// Bundleable implementation.
|
||||||
|
|
||||||
@Documented
|
private static final int FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY = FIELD_CUSTOM_ID_BASE;
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
private static final int FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS =
|
||||||
@Target(TYPE_USE)
|
FIELD_CUSTOM_ID_BASE + 1;
|
||||||
@IntDef({
|
private static final int FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS = FIELD_CUSTOM_ID_BASE + 2;
|
||||||
// Video
|
private static final int FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY = FIELD_CUSTOM_ID_BASE + 3;
|
||||||
FIELD_EXCEED_VIDEO_CONSTRAINTS_IF_NECESSARY,
|
private static final int FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS =
|
||||||
FIELD_ALLOW_VIDEO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
FIELD_CUSTOM_ID_BASE + 4;
|
||||||
FIELD_ALLOW_VIDEO_NON_SEAMLESS_ADAPTIVENESS,
|
private static final int FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS =
|
||||||
FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
|
FIELD_CUSTOM_ID_BASE + 5;
|
||||||
// Audio
|
private static final int FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS =
|
||||||
FIELD_EXCEED_AUDIO_CONSTRAINTS_IF_NCESSARY,
|
FIELD_CUSTOM_ID_BASE + 6;
|
||||||
FIELD_ALLOW_AUDIO_MIXED_MIME_TYPE_ADAPTIVENESS,
|
private static final int FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY =
|
||||||
FIELD_ALLOW_AUDIO_MIXED_SAMPLE_RATE_ADAPTIVENESS,
|
FIELD_CUSTOM_ID_BASE + 7;
|
||||||
FIELD_ALLOW_AUDIO_MIXED_CHANNEL_COUNT_ADAPTIVENESS,
|
private static final int FIELD_TUNNELING_ENABLED = FIELD_CUSTOM_ID_BASE + 8;
|
||||||
FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS,
|
private static final int FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS = FIELD_CUSTOM_ID_BASE + 9;
|
||||||
// General
|
private static final int FIELD_SELECTION_OVERRIDES_RENDERER_INDICES = FIELD_CUSTOM_ID_BASE + 10;
|
||||||
FIELD_EXCEED_RENDERER_CAPABILITIES_IF_NECESSARY,
|
private static final int FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS =
|
||||||
FIELD_TUNNELING_ENABLED,
|
FIELD_CUSTOM_ID_BASE + 11;
|
||||||
FIELD_ALLOW_MULTIPLE_ADAPTIVE_SELECTIONS,
|
private static final int FIELD_SELECTION_OVERRIDES = FIELD_CUSTOM_ID_BASE + 12;
|
||||||
// Overrides
|
private static final int FIELD_RENDERER_DISABLED_INDICES = FIELD_CUSTOM_ID_BASE + 13;
|
||||||
FIELD_SELECTION_OVERRIDES_RENDERER_INDICES,
|
private static final int FIELD_ALLOW_VIDEO_MIXED_DECODER_SUPPORT_ADAPTIVENESS =
|
||||||
FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS,
|
FIELD_CUSTOM_ID_BASE + 14;
|
||||||
FIELD_SELECTION_OVERRIDES,
|
private static final int FIELD_ALLOW_AUDIO_MIXED_DECODER_SUPPORT_ADAPTIVENESS =
|
||||||
FIELD_RENDERER_DISABLED_INDICES,
|
FIELD_CUSTOM_ID_BASE + 15;
|
||||||
})
|
|
||||||
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;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
@ -1787,10 +1767,6 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
|||||||
public static final Creator<Parameters> CREATOR =
|
public static final Creator<Parameters> CREATOR =
|
||||||
bundle -> new Parameters.Builder(bundle).build();
|
bundle -> new Parameters.Builder(bundle).build();
|
||||||
|
|
||||||
private static String keyForField(@FieldNumber int field) {
|
|
||||||
return Integer.toString(field, Character.MAX_RADIX);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bundles selection overrides in 3 arrays of equal length. Each triplet of matching indices is:
|
* Bundles selection overrides in 3 arrays of equal length. Each triplet of matching indices is:
|
||||||
* the selection override (stored in a sparse array as they can be null), the trackGroupArray of
|
* the selection override (stored in a sparse array as they can be null), the trackGroupArray of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user