mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Remove all null-tolerant methods from BundleableUtil.
In most cases it's clearer to in-line these null-checks with ternary operators. PiperOrigin-RevId: 449474621
This commit is contained in:
parent
e9d5381b54
commit
aef2f154a7
10 changed files with 84 additions and 109 deletions
|
|
@ -1527,7 +1527,9 @@ public final class Format implements Bundleable {
|
||||||
bundle.putFloat(keyForField(FIELD_PIXEL_WIDTH_HEIGHT_RATIO), pixelWidthHeightRatio);
|
bundle.putFloat(keyForField(FIELD_PIXEL_WIDTH_HEIGHT_RATIO), pixelWidthHeightRatio);
|
||||||
bundle.putByteArray(keyForField(FIELD_PROJECTION_DATA), projectionData);
|
bundle.putByteArray(keyForField(FIELD_PROJECTION_DATA), projectionData);
|
||||||
bundle.putInt(keyForField(FIELD_STEREO_MODE), stereoMode);
|
bundle.putInt(keyForField(FIELD_STEREO_MODE), stereoMode);
|
||||||
bundle.putBundle(keyForField(FIELD_COLOR_INFO), BundleableUtil.toNullableBundle(colorInfo));
|
if (colorInfo != null) {
|
||||||
|
bundle.putBundle(keyForField(FIELD_COLOR_INFO), colorInfo.toBundle());
|
||||||
|
}
|
||||||
// Audio specific.
|
// Audio specific.
|
||||||
bundle.putInt(keyForField(FIELD_CHANNEL_COUNT), channelCount);
|
bundle.putInt(keyForField(FIELD_CHANNEL_COUNT), channelCount);
|
||||||
bundle.putInt(keyForField(FIELD_SAMPLE_RATE), sampleRate);
|
bundle.putInt(keyForField(FIELD_SAMPLE_RATE), sampleRate);
|
||||||
|
|
@ -1594,11 +1596,13 @@ public final class Format implements Bundleable {
|
||||||
bundle.getFloat(
|
bundle.getFloat(
|
||||||
keyForField(FIELD_PIXEL_WIDTH_HEIGHT_RATIO), DEFAULT.pixelWidthHeightRatio))
|
keyForField(FIELD_PIXEL_WIDTH_HEIGHT_RATIO), DEFAULT.pixelWidthHeightRatio))
|
||||||
.setProjectionData(bundle.getByteArray(keyForField(FIELD_PROJECTION_DATA)))
|
.setProjectionData(bundle.getByteArray(keyForField(FIELD_PROJECTION_DATA)))
|
||||||
.setStereoMode(bundle.getInt(keyForField(FIELD_STEREO_MODE), DEFAULT.stereoMode))
|
.setStereoMode(bundle.getInt(keyForField(FIELD_STEREO_MODE), DEFAULT.stereoMode));
|
||||||
.setColorInfo(
|
Bundle colorInfoBundle = bundle.getBundle(keyForField(FIELD_COLOR_INFO));
|
||||||
BundleableUtil.fromNullableBundle(
|
if (colorInfoBundle != null) {
|
||||||
ColorInfo.CREATOR, bundle.getBundle(keyForField(FIELD_COLOR_INFO))))
|
builder.setColorInfo(ColorInfo.CREATOR.fromBundle(colorInfoBundle));
|
||||||
// Audio specific.
|
}
|
||||||
|
// Audio specific.
|
||||||
|
builder
|
||||||
.setChannelCount(bundle.getInt(keyForField(FIELD_CHANNEL_COUNT), DEFAULT.channelCount))
|
.setChannelCount(bundle.getInt(keyForField(FIELD_CHANNEL_COUNT), DEFAULT.channelCount))
|
||||||
.setSampleRate(bundle.getInt(keyForField(FIELD_SAMPLE_RATE), DEFAULT.sampleRate))
|
.setSampleRate(bundle.getInt(keyForField(FIELD_SAMPLE_RATE), DEFAULT.sampleRate))
|
||||||
.setPcmEncoding(bundle.getInt(keyForField(FIELD_PCM_ENCODING), DEFAULT.pcmEncoding))
|
.setPcmEncoding(bundle.getInt(keyForField(FIELD_PCM_ENCODING), DEFAULT.pcmEncoding))
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ import com.google.android.exoplayer2.metadata.Metadata;
|
||||||
import com.google.android.exoplayer2.text.Cue;
|
import com.google.android.exoplayer2.text.Cue;
|
||||||
import com.google.android.exoplayer2.text.CueGroup;
|
import com.google.android.exoplayer2.text.CueGroup;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
||||||
import com.google.android.exoplayer2.util.BundleableUtil;
|
|
||||||
import com.google.android.exoplayer2.util.FlagSet;
|
import com.google.android.exoplayer2.util.FlagSet;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import com.google.android.exoplayer2.video.VideoSize;
|
import com.google.android.exoplayer2.video.VideoSize;
|
||||||
|
|
@ -295,7 +294,9 @@ public interface Player {
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt(keyForField(FIELD_MEDIA_ITEM_INDEX), mediaItemIndex);
|
bundle.putInt(keyForField(FIELD_MEDIA_ITEM_INDEX), mediaItemIndex);
|
||||||
bundle.putBundle(keyForField(FIELD_MEDIA_ITEM), BundleableUtil.toNullableBundle(mediaItem));
|
if (mediaItem != null) {
|
||||||
|
bundle.putBundle(keyForField(FIELD_MEDIA_ITEM), mediaItem.toBundle());
|
||||||
|
}
|
||||||
bundle.putInt(keyForField(FIELD_PERIOD_INDEX), periodIndex);
|
bundle.putInt(keyForField(FIELD_PERIOD_INDEX), periodIndex);
|
||||||
bundle.putLong(keyForField(FIELD_POSITION_MS), positionMs);
|
bundle.putLong(keyForField(FIELD_POSITION_MS), positionMs);
|
||||||
bundle.putLong(keyForField(FIELD_CONTENT_POSITION_MS), contentPositionMs);
|
bundle.putLong(keyForField(FIELD_CONTENT_POSITION_MS), contentPositionMs);
|
||||||
|
|
@ -310,10 +311,10 @@ public interface Player {
|
||||||
private static PositionInfo fromBundle(Bundle bundle) {
|
private static PositionInfo fromBundle(Bundle bundle) {
|
||||||
int mediaItemIndex =
|
int mediaItemIndex =
|
||||||
bundle.getInt(keyForField(FIELD_MEDIA_ITEM_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
bundle.getInt(keyForField(FIELD_MEDIA_ITEM_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
||||||
|
@Nullable Bundle mediaItemBundle = bundle.getBundle(keyForField(FIELD_MEDIA_ITEM));
|
||||||
@Nullable
|
@Nullable
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
BundleableUtil.fromNullableBundle(
|
mediaItemBundle == null ? null : MediaItem.CREATOR.fromBundle(mediaItemBundle);
|
||||||
MediaItem.CREATOR, bundle.getBundle(keyForField(FIELD_MEDIA_ITEM)));
|
|
||||||
int periodIndex =
|
int periodIndex =
|
||||||
bundle.getInt(keyForField(FIELD_PERIOD_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
bundle.getInt(keyForField(FIELD_PERIOD_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
||||||
long positionMs =
|
long positionMs =
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,6 @@ package com.google.android.exoplayer2;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
|
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
|
||||||
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
||||||
import static com.google.android.exoplayer2.util.BundleableUtil.fromBundleNullableList;
|
|
||||||
import static com.google.android.exoplayer2.util.BundleableUtil.fromNullableBundle;
|
|
||||||
import static com.google.android.exoplayer2.util.BundleableUtil.toBundleArrayList;
|
import static com.google.android.exoplayer2.util.BundleableUtil.toBundleArrayList;
|
||||||
import static java.lang.annotation.ElementType.TYPE_USE;
|
import static java.lang.annotation.ElementType.TYPE_USE;
|
||||||
|
|
||||||
|
|
@ -26,6 +24,7 @@ import android.os.Bundle;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import com.google.android.exoplayer2.source.TrackGroup;
|
import com.google.android.exoplayer2.source.TrackGroup;
|
||||||
|
import com.google.android.exoplayer2.util.BundleableUtil;
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.primitives.Booleans;
|
import com.google.common.primitives.Booleans;
|
||||||
|
|
@ -249,10 +248,10 @@ public final class Tracks implements Bundleable {
|
||||||
/** Object that can restore a group of tracks from a {@link Bundle}. */
|
/** Object that can restore a group of tracks from a {@link Bundle}. */
|
||||||
public static final Creator<Group> CREATOR =
|
public static final Creator<Group> CREATOR =
|
||||||
bundle -> {
|
bundle -> {
|
||||||
|
// Can't create a Tracks.Group without a TrackGroup
|
||||||
TrackGroup trackGroup =
|
TrackGroup trackGroup =
|
||||||
fromNullableBundle(
|
TrackGroup.CREATOR.fromBundle(
|
||||||
TrackGroup.CREATOR, bundle.getBundle(keyForField(FIELD_TRACK_GROUP)));
|
checkNotNull(bundle.getBundle(keyForField(FIELD_TRACK_GROUP))));
|
||||||
checkNotNull(trackGroup); // Can't create a trackGroup info without a trackGroup
|
|
||||||
final @C.FormatSupport int[] trackSupport =
|
final @C.FormatSupport int[] trackSupport =
|
||||||
MoreObjects.firstNonNull(
|
MoreObjects.firstNonNull(
|
||||||
bundle.getIntArray(keyForField(FIELD_TRACK_SUPPORT)), new int[trackGroup.length]);
|
bundle.getIntArray(keyForField(FIELD_TRACK_SUPPORT)), new int[trackGroup.length]);
|
||||||
|
|
@ -400,11 +399,12 @@ public final class Tracks implements Bundleable {
|
||||||
/** Object that can restore tracks from a {@link Bundle}. */
|
/** Object that can restore tracks from a {@link Bundle}. */
|
||||||
public static final Creator<Tracks> CREATOR =
|
public static final Creator<Tracks> CREATOR =
|
||||||
bundle -> {
|
bundle -> {
|
||||||
|
@Nullable
|
||||||
|
List<Bundle> groupBundles = bundle.getParcelableArrayList(keyForField(FIELD_TRACK_GROUPS));
|
||||||
List<Group> groups =
|
List<Group> groups =
|
||||||
fromBundleNullableList(
|
groupBundles == null
|
||||||
Group.CREATOR,
|
? ImmutableList.of()
|
||||||
bundle.getParcelableArrayList(keyForField(FIELD_TRACK_GROUPS)),
|
: BundleableUtil.fromBundleList(Group.CREATOR, groupBundles);
|
||||||
/* defaultValue= */ ImmutableList.of());
|
|
||||||
return new Tracks(groups);
|
return new Tracks(groups);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -185,11 +185,12 @@ public final class TrackGroup implements Bundleable {
|
||||||
/** Object that can restore {@code TrackGroup} from a {@link Bundle}. */
|
/** Object that can restore {@code TrackGroup} from a {@link Bundle}. */
|
||||||
public static final Creator<TrackGroup> CREATOR =
|
public static final Creator<TrackGroup> CREATOR =
|
||||||
bundle -> {
|
bundle -> {
|
||||||
|
@Nullable
|
||||||
|
List<Bundle> formatBundles = bundle.getParcelableArrayList(keyForField(FIELD_FORMATS));
|
||||||
List<Format> formats =
|
List<Format> formats =
|
||||||
BundleableUtil.fromBundleNullableList(
|
formatBundles == null
|
||||||
Format.CREATOR,
|
? ImmutableList.of()
|
||||||
bundle.getParcelableArrayList(keyForField(FIELD_FORMATS)),
|
: BundleableUtil.fromBundleList(Format.CREATOR, formatBundles);
|
||||||
ImmutableList.of());
|
|
||||||
String id = bundle.getString(keyForField(FIELD_ID), /* defaultValue= */ "");
|
String id = bundle.getString(keyForField(FIELD_ID), /* defaultValue= */ "");
|
||||||
return new TrackGroup(id, formats.toArray(new Format[0]));
|
return new TrackGroup(id, formats.toArray(new Format[0]));
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import static java.lang.annotation.ElementType.TYPE_USE;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import com.google.android.exoplayer2.Bundleable;
|
import com.google.android.exoplayer2.Bundleable;
|
||||||
import com.google.android.exoplayer2.util.BundleableUtil;
|
import com.google.android.exoplayer2.util.BundleableUtil;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
@ -27,6 +28,7 @@ import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/** Class to represent the state of active {@link Cue Cues} at a particular time. */
|
/** Class to represent the state of active {@link Cue Cues} at a particular time. */
|
||||||
|
|
@ -71,11 +73,11 @@ public final class CueGroup implements Bundleable {
|
||||||
public static final Creator<CueGroup> CREATOR = CueGroup::fromBundle;
|
public static final Creator<CueGroup> CREATOR = CueGroup::fromBundle;
|
||||||
|
|
||||||
private static final CueGroup fromBundle(Bundle bundle) {
|
private static final CueGroup fromBundle(Bundle bundle) {
|
||||||
|
@Nullable ArrayList<Bundle> cueBundles = bundle.getParcelableArrayList(keyForField(FIELD_CUES));
|
||||||
List<Cue> cues =
|
List<Cue> cues =
|
||||||
BundleableUtil.fromBundleNullableList(
|
cueBundles == null
|
||||||
Cue.CREATOR,
|
? ImmutableList.of()
|
||||||
bundle.getParcelableArrayList(keyForField(FIELD_CUES)),
|
: BundleableUtil.fromBundleList(Cue.CREATOR, cueBundles);
|
||||||
/* defaultValue= */ ImmutableList.of());
|
|
||||||
return new CueGroup(cues);
|
return new CueGroup(cues);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@
|
||||||
package com.google.android.exoplayer2.trackselection;
|
package com.google.android.exoplayer2.trackselection;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
||||||
import static com.google.android.exoplayer2.util.BundleableUtil.fromBundleNullableList;
|
|
||||||
import static com.google.android.exoplayer2.util.BundleableUtil.toBundleArrayList;
|
import static com.google.android.exoplayer2.util.BundleableUtil.toBundleArrayList;
|
||||||
import static com.google.common.base.MoreObjects.firstNonNull;
|
import static com.google.common.base.MoreObjects.firstNonNull;
|
||||||
|
|
||||||
|
|
@ -31,6 +30,7 @@ import androidx.annotation.RequiresApi;
|
||||||
import com.google.android.exoplayer2.Bundleable;
|
import com.google.android.exoplayer2.Bundleable;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.source.TrackGroup;
|
import com.google.android.exoplayer2.source.TrackGroup;
|
||||||
|
import com.google.android.exoplayer2.util.BundleableUtil;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
@ -246,11 +246,13 @@ public class TrackSelectionParameters implements Bundleable {
|
||||||
bundle.getBoolean(
|
bundle.getBoolean(
|
||||||
keyForField(FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE),
|
keyForField(FIELD_FORCE_HIGHEST_SUPPORTED_BITRATE),
|
||||||
DEFAULT_WITHOUT_CONTEXT.forceHighestSupportedBitrate);
|
DEFAULT_WITHOUT_CONTEXT.forceHighestSupportedBitrate);
|
||||||
|
@Nullable
|
||||||
|
List<Bundle> overrideBundleList =
|
||||||
|
bundle.getParcelableArrayList(keyForField(FIELD_SELECTION_OVERRIDES));
|
||||||
List<TrackSelectionOverride> overrideList =
|
List<TrackSelectionOverride> overrideList =
|
||||||
fromBundleNullableList(
|
overrideBundleList == null
|
||||||
TrackSelectionOverride.CREATOR,
|
? ImmutableList.of()
|
||||||
bundle.getParcelableArrayList(keyForField(FIELD_SELECTION_OVERRIDES)),
|
: BundleableUtil.fromBundleList(TrackSelectionOverride.CREATOR, overrideBundleList);
|
||||||
ImmutableList.of());
|
|
||||||
overrides = new HashMap<>();
|
overrides = new HashMap<>();
|
||||||
for (int i = 0; i < overrideList.size(); i++) {
|
for (int i = 0; i < overrideList.size(); i++) {
|
||||||
TrackSelectionOverride override = overrideList.get(i);
|
TrackSelectionOverride override = overrideList.get(i);
|
||||||
|
|
|
||||||
|
|
@ -30,34 +30,6 @@ import java.util.List;
|
||||||
/** Utilities for {@link Bundleable}. */
|
/** Utilities for {@link Bundleable}. */
|
||||||
public final class BundleableUtil {
|
public final class BundleableUtil {
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a {@link Bundleable} to a {@link Bundle}. It's a convenience wrapper of {@link
|
|
||||||
* Bundleable#toBundle} that can take nullable values.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public static Bundle toNullableBundle(@Nullable Bundleable bundleable) {
|
|
||||||
return bundleable == null ? null : bundleable.toBundle();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a {@link Bundle} to a {@link Bundleable}. It's a convenience wrapper of {@link
|
|
||||||
* Bundleable.Creator#fromBundle} that can take nullable values.
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public static <T extends Bundleable> T fromNullableBundle(
|
|
||||||
Bundleable.Creator<T> creator, @Nullable Bundle bundle) {
|
|
||||||
return bundle == null ? null : creator.fromBundle(bundle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a {@link Bundle} to a {@link Bundleable}. It's a convenience wrapper of {@link
|
|
||||||
* Bundleable.Creator#fromBundle} that provides default value to ensure non-null.
|
|
||||||
*/
|
|
||||||
public static <T extends Bundleable> T fromNullableBundle(
|
|
||||||
Bundleable.Creator<T> creator, @Nullable Bundle bundle, T defaultValue) {
|
|
||||||
return bundle == null ? defaultValue : creator.fromBundle(bundle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Converts a list of {@link Bundleable} to a list {@link Bundle}. */
|
/** Converts a list of {@link Bundleable} to a list {@link Bundle}. */
|
||||||
public static <T extends Bundleable> ImmutableList<Bundle> toBundleList(List<T> bundleableList) {
|
public static <T extends Bundleable> ImmutableList<Bundle> toBundleList(List<T> bundleableList) {
|
||||||
ImmutableList.Builder<Bundle> builder = ImmutableList.builder();
|
ImmutableList.Builder<Bundle> builder = ImmutableList.builder();
|
||||||
|
|
@ -80,34 +52,6 @@ public final class BundleableUtil {
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a list of {@link Bundle} to a list of {@link Bundleable}. Returns {@code defaultValue}
|
|
||||||
* if {@code bundleList} is null.
|
|
||||||
*/
|
|
||||||
public static <T extends Bundleable> List<T> fromBundleNullableList(
|
|
||||||
Bundleable.Creator<T> creator, @Nullable List<Bundle> bundleList, List<T> defaultValue) {
|
|
||||||
return (bundleList == null) ? defaultValue : fromBundleList(creator, bundleList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a {@link SparseArray} of {@link Bundle} to a {@link SparseArray} of {@link
|
|
||||||
* Bundleable}. Returns {@code defaultValue} if {@code bundleSparseArray} is null.
|
|
||||||
*/
|
|
||||||
public static <T extends Bundleable> SparseArray<T> fromBundleNullableSparseArray(
|
|
||||||
Bundleable.Creator<T> creator,
|
|
||||||
@Nullable SparseArray<Bundle> bundleSparseArray,
|
|
||||||
SparseArray<T> defaultValue) {
|
|
||||||
if (bundleSparseArray == null) {
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
// Can't use ImmutableList as it doesn't support null elements.
|
|
||||||
SparseArray<T> result = new SparseArray<>(bundleSparseArray.size());
|
|
||||||
for (int i = 0; i < bundleSparseArray.size(); i++) {
|
|
||||||
result.put(bundleSparseArray.keyAt(i), creator.fromBundle(bundleSparseArray.valueAt(i)));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a collection of {@link Bundleable} to an {@link ArrayList} of {@link Bundle} so that
|
* Converts a collection of {@link Bundleable} to an {@link ArrayList} of {@link Bundle} so that
|
||||||
* the returned list can be put to {@link Bundle} using {@link Bundle#putParcelableArrayList}
|
* the returned list can be put to {@link Bundle} using {@link Bundle#putParcelableArrayList}
|
||||||
|
|
@ -122,6 +66,19 @@ public final class BundleableUtil {
|
||||||
return arrayList;
|
return arrayList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a {@link SparseArray} of {@link Bundle} to a {@link SparseArray} of {@link
|
||||||
|
* Bundleable}.
|
||||||
|
*/
|
||||||
|
public static <T extends Bundleable> SparseArray<T> fromBundleSparseArray(
|
||||||
|
Bundleable.Creator<T> creator, SparseArray<Bundle> bundleSparseArray) {
|
||||||
|
SparseArray<T> result = new SparseArray<>(bundleSparseArray.size());
|
||||||
|
for (int i = 0; i < bundleSparseArray.size(); i++) {
|
||||||
|
result.put(bundleSparseArray.keyAt(i), creator.fromBundle(bundleSparseArray.valueAt(i)));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a {@link SparseArray} of {@link Bundleable} to an {@link SparseArray} of {@link
|
* Converts a {@link SparseArray} of {@link Bundleable} to an {@link SparseArray} of {@link
|
||||||
* Bundle} so that the returned {@link SparseArray} can be put to {@link Bundle} using {@link
|
* Bundle} so that the returned {@link SparseArray} can be put to {@link Bundle} using {@link
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,6 @@ import com.google.android.exoplayer2.C.FormatSupport;
|
||||||
import com.google.android.exoplayer2.source.MediaPeriodId;
|
import com.google.android.exoplayer2.source.MediaPeriodId;
|
||||||
import com.google.android.exoplayer2.source.MediaSource;
|
import com.google.android.exoplayer2.source.MediaSource;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
import com.google.android.exoplayer2.util.BundleableUtil;
|
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
|
|
@ -245,9 +244,9 @@ public final class ExoPlaybackException extends PlaybackException {
|
||||||
rendererName = bundle.getString(keyForField(FIELD_RENDERER_NAME));
|
rendererName = bundle.getString(keyForField(FIELD_RENDERER_NAME));
|
||||||
rendererIndex =
|
rendererIndex =
|
||||||
bundle.getInt(keyForField(FIELD_RENDERER_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
bundle.getInt(keyForField(FIELD_RENDERER_INDEX), /* defaultValue= */ C.INDEX_UNSET);
|
||||||
|
@Nullable Bundle rendererFormatBundle = bundle.getBundle(keyForField(FIELD_RENDERER_FORMAT));
|
||||||
rendererFormat =
|
rendererFormat =
|
||||||
BundleableUtil.fromNullableBundle(
|
rendererFormatBundle == null ? null : Format.CREATOR.fromBundle(rendererFormatBundle);
|
||||||
Format.CREATOR, bundle.getBundle(keyForField(FIELD_RENDERER_FORMAT)));
|
|
||||||
rendererFormatSupport =
|
rendererFormatSupport =
|
||||||
bundle.getInt(
|
bundle.getInt(
|
||||||
keyForField(FIELD_RENDERER_FORMAT_SUPPORT), /* defaultValue= */ C.FORMAT_HANDLED);
|
keyForField(FIELD_RENDERER_FORMAT_SUPPORT), /* defaultValue= */ C.FORMAT_HANDLED);
|
||||||
|
|
@ -409,8 +408,9 @@ public final class ExoPlaybackException extends PlaybackException {
|
||||||
bundle.putInt(keyForField(FIELD_TYPE), type);
|
bundle.putInt(keyForField(FIELD_TYPE), type);
|
||||||
bundle.putString(keyForField(FIELD_RENDERER_NAME), rendererName);
|
bundle.putString(keyForField(FIELD_RENDERER_NAME), rendererName);
|
||||||
bundle.putInt(keyForField(FIELD_RENDERER_INDEX), rendererIndex);
|
bundle.putInt(keyForField(FIELD_RENDERER_INDEX), rendererIndex);
|
||||||
bundle.putBundle(
|
if (rendererFormat != null) {
|
||||||
keyForField(FIELD_RENDERER_FORMAT), BundleableUtil.toNullableBundle(rendererFormat));
|
bundle.putBundle(keyForField(FIELD_RENDERER_FORMAT), rendererFormat.toBundle());
|
||||||
|
}
|
||||||
bundle.putInt(keyForField(FIELD_RENDERER_FORMAT_SUPPORT), rendererFormatSupport);
|
bundle.putInt(keyForField(FIELD_RENDERER_FORMAT_SUPPORT), rendererFormatSupport);
|
||||||
bundle.putBoolean(keyForField(FIELD_IS_RECOVERABLE), isRecoverable);
|
bundle.putBoolean(keyForField(FIELD_IS_RECOVERABLE), isRecoverable);
|
||||||
return bundle;
|
return bundle;
|
||||||
|
|
|
||||||
|
|
@ -136,12 +136,15 @@ public final class TrackGroupArray implements Bundleable {
|
||||||
/** Object that can restores a TrackGroupArray from a {@link Bundle}. */
|
/** Object that can restores a TrackGroupArray from a {@link Bundle}. */
|
||||||
public static final Creator<TrackGroupArray> CREATOR =
|
public static final Creator<TrackGroupArray> CREATOR =
|
||||||
bundle -> {
|
bundle -> {
|
||||||
List<TrackGroup> trackGroups =
|
@Nullable
|
||||||
BundleableUtil.fromBundleNullableList(
|
List<Bundle> trackGroupBundles =
|
||||||
TrackGroup.CREATOR,
|
bundle.getParcelableArrayList(keyForField(FIELD_TRACK_GROUPS));
|
||||||
bundle.getParcelableArrayList(keyForField(FIELD_TRACK_GROUPS)),
|
if (trackGroupBundles == null) {
|
||||||
/* defaultValue= */ ImmutableList.of());
|
return new TrackGroupArray();
|
||||||
return new TrackGroupArray(trackGroups.toArray(new TrackGroup[0]));
|
}
|
||||||
|
return new TrackGroupArray(
|
||||||
|
BundleableUtil.fromBundleList(TrackGroup.CREATOR, trackGroupBundles)
|
||||||
|
.toArray(new TrackGroup[0]));
|
||||||
};
|
};
|
||||||
|
|
||||||
private void verifyCorrectness() {
|
private void verifyCorrectness() {
|
||||||
|
|
|
||||||
|
|
@ -839,18 +839,23 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
int[] rendererIndices =
|
int[] rendererIndices =
|
||||||
bundle.getIntArray(
|
bundle.getIntArray(
|
||||||
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES_RENDERER_INDICES));
|
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES_RENDERER_INDICES));
|
||||||
|
@Nullable
|
||||||
|
ArrayList<Bundle> trackGroupArrayBundles =
|
||||||
|
bundle.getParcelableArrayList(
|
||||||
|
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS));
|
||||||
List<TrackGroupArray> trackGroupArrays =
|
List<TrackGroupArray> trackGroupArrays =
|
||||||
BundleableUtil.fromBundleNullableList(
|
trackGroupArrayBundles == null
|
||||||
TrackGroupArray.CREATOR,
|
? ImmutableList.of()
|
||||||
bundle.getParcelableArrayList(
|
: BundleableUtil.fromBundleList(TrackGroupArray.CREATOR, trackGroupArrayBundles);
|
||||||
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES_TRACK_GROUP_ARRAYS)),
|
@Nullable
|
||||||
/* defaultValue= */ ImmutableList.of());
|
SparseArray<Bundle> selectionOverrideBundles =
|
||||||
|
bundle.getSparseParcelableArray(
|
||||||
|
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES));
|
||||||
SparseArray<SelectionOverride> selectionOverrides =
|
SparseArray<SelectionOverride> selectionOverrides =
|
||||||
BundleableUtil.fromBundleNullableSparseArray(
|
selectionOverrideBundles == null
|
||||||
SelectionOverride.CREATOR,
|
? new SparseArray<>()
|
||||||
bundle.getSparseParcelableArray(
|
: BundleableUtil.fromBundleSparseArray(
|
||||||
Parameters.keyForField(Parameters.FIELD_SELECTION_OVERRIDES)),
|
SelectionOverride.CREATOR, selectionOverrideBundles);
|
||||||
/* defaultValue= */ new SparseArray<>());
|
|
||||||
|
|
||||||
if (rendererIndices == null || rendererIndices.length != trackGroupArrays.size()) {
|
if (rendererIndices == null || rendererIndices.length != trackGroupArrays.size()) {
|
||||||
return; // Incorrect format, ignore all overrides.
|
return; // Incorrect format, ignore all overrides.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue