- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
316 lines
16 KiB
Java
316 lines
16 KiB
Java
package com.google.android.exoplayer2.trackselection;
|
|
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.util.SparseArray;
|
|
import android.util.SparseBooleanArray;
|
|
import com.google.android.exoplayer2.source.TrackGroupArray;
|
|
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
|
import com.google.android.exoplayer2.util.Assertions;
|
|
import com.google.android.exoplayer2.util.Util;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public abstract class DefaultTrackSelector extends MappingTrackSelector {
|
|
|
|
public static final class ParametersBuilder extends TrackSelectionParameters.Builder {
|
|
public boolean allowAudioMixedChannelCountAdaptiveness;
|
|
public boolean allowAudioMixedMimeTypeAdaptiveness;
|
|
public boolean allowAudioMixedSampleRateAdaptiveness;
|
|
public boolean allowMultipleAdaptiveSelections;
|
|
public boolean allowVideoMixedMimeTypeAdaptiveness;
|
|
public boolean allowVideoNonSeamlessAdaptiveness;
|
|
public int disabledTextTrackSelectionFlags;
|
|
public boolean exceedAudioConstraintsIfNecessary;
|
|
public boolean exceedRendererCapabilitiesIfNecessary;
|
|
public boolean exceedVideoConstraintsIfNecessary;
|
|
public boolean tunnelingEnabled;
|
|
public final SparseArray selectionOverrides = new SparseArray();
|
|
public final SparseBooleanArray rendererDisabledFlags = new SparseBooleanArray();
|
|
|
|
public final void init() {
|
|
this.exceedVideoConstraintsIfNecessary = true;
|
|
this.allowVideoMixedMimeTypeAdaptiveness = false;
|
|
this.allowVideoNonSeamlessAdaptiveness = true;
|
|
this.exceedAudioConstraintsIfNecessary = true;
|
|
this.allowAudioMixedMimeTypeAdaptiveness = false;
|
|
this.allowAudioMixedSampleRateAdaptiveness = false;
|
|
this.allowAudioMixedChannelCountAdaptiveness = false;
|
|
this.disabledTextTrackSelectionFlags = 0;
|
|
this.exceedRendererCapabilitiesIfNecessary = true;
|
|
this.tunnelingEnabled = false;
|
|
this.allowMultipleAdaptiveSelections = true;
|
|
}
|
|
|
|
public ParametersBuilder() {
|
|
init();
|
|
}
|
|
|
|
@Override // com.google.android.exoplayer2.trackselection.TrackSelectionParameters.Builder
|
|
public Parameters build() {
|
|
return new Parameters(this);
|
|
}
|
|
}
|
|
|
|
public static final class Parameters extends TrackSelectionParameters implements Parcelable {
|
|
public static final Parcelable.Creator<Parameters> CREATOR;
|
|
public static final Parameters DEFAULT;
|
|
public static final Parameters DEFAULT_WITHOUT_CONTEXT;
|
|
public final boolean allowAudioMixedChannelCountAdaptiveness;
|
|
public final boolean allowAudioMixedMimeTypeAdaptiveness;
|
|
public final boolean allowAudioMixedSampleRateAdaptiveness;
|
|
public final boolean allowMultipleAdaptiveSelections;
|
|
public final boolean allowVideoMixedMimeTypeAdaptiveness;
|
|
public final boolean allowVideoNonSeamlessAdaptiveness;
|
|
public final int disabledTextTrackSelectionFlags;
|
|
public final boolean exceedAudioConstraintsIfNecessary;
|
|
public final boolean exceedRendererCapabilitiesIfNecessary;
|
|
public final boolean exceedVideoConstraintsIfNecessary;
|
|
public final SparseBooleanArray rendererDisabledFlags;
|
|
public final SparseArray selectionOverrides;
|
|
public final boolean tunnelingEnabled;
|
|
|
|
@Override // com.google.android.exoplayer2.trackselection.TrackSelectionParameters, android.os.Parcelable
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
static {
|
|
Parameters build = new ParametersBuilder().build();
|
|
DEFAULT_WITHOUT_CONTEXT = build;
|
|
DEFAULT = build;
|
|
CREATOR = new Parcelable.Creator() { // from class: com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters.1
|
|
@Override // android.os.Parcelable.Creator
|
|
public Parameters createFromParcel(Parcel parcel) {
|
|
return new Parameters(parcel);
|
|
}
|
|
|
|
@Override // android.os.Parcelable.Creator
|
|
public Parameters[] newArray(int i) {
|
|
return new Parameters[i];
|
|
}
|
|
};
|
|
}
|
|
|
|
public Parameters(ParametersBuilder parametersBuilder) {
|
|
super(parametersBuilder);
|
|
this.exceedVideoConstraintsIfNecessary = parametersBuilder.exceedVideoConstraintsIfNecessary;
|
|
this.allowVideoMixedMimeTypeAdaptiveness = parametersBuilder.allowVideoMixedMimeTypeAdaptiveness;
|
|
this.allowVideoNonSeamlessAdaptiveness = parametersBuilder.allowVideoNonSeamlessAdaptiveness;
|
|
this.exceedAudioConstraintsIfNecessary = parametersBuilder.exceedAudioConstraintsIfNecessary;
|
|
this.allowAudioMixedMimeTypeAdaptiveness = parametersBuilder.allowAudioMixedMimeTypeAdaptiveness;
|
|
this.allowAudioMixedSampleRateAdaptiveness = parametersBuilder.allowAudioMixedSampleRateAdaptiveness;
|
|
this.allowAudioMixedChannelCountAdaptiveness = parametersBuilder.allowAudioMixedChannelCountAdaptiveness;
|
|
this.disabledTextTrackSelectionFlags = parametersBuilder.disabledTextTrackSelectionFlags;
|
|
this.exceedRendererCapabilitiesIfNecessary = parametersBuilder.exceedRendererCapabilitiesIfNecessary;
|
|
this.tunnelingEnabled = parametersBuilder.tunnelingEnabled;
|
|
this.allowMultipleAdaptiveSelections = parametersBuilder.allowMultipleAdaptiveSelections;
|
|
this.selectionOverrides = parametersBuilder.selectionOverrides;
|
|
this.rendererDisabledFlags = parametersBuilder.rendererDisabledFlags;
|
|
}
|
|
|
|
public Parameters(Parcel parcel) {
|
|
super(parcel);
|
|
this.exceedVideoConstraintsIfNecessary = Util.readBoolean(parcel);
|
|
this.allowVideoMixedMimeTypeAdaptiveness = Util.readBoolean(parcel);
|
|
this.allowVideoNonSeamlessAdaptiveness = Util.readBoolean(parcel);
|
|
this.exceedAudioConstraintsIfNecessary = Util.readBoolean(parcel);
|
|
this.allowAudioMixedMimeTypeAdaptiveness = Util.readBoolean(parcel);
|
|
this.allowAudioMixedSampleRateAdaptiveness = Util.readBoolean(parcel);
|
|
this.allowAudioMixedChannelCountAdaptiveness = Util.readBoolean(parcel);
|
|
this.disabledTextTrackSelectionFlags = parcel.readInt();
|
|
this.exceedRendererCapabilitiesIfNecessary = Util.readBoolean(parcel);
|
|
this.tunnelingEnabled = Util.readBoolean(parcel);
|
|
this.allowMultipleAdaptiveSelections = Util.readBoolean(parcel);
|
|
this.selectionOverrides = readSelectionOverrides(parcel);
|
|
this.rendererDisabledFlags = (SparseBooleanArray) Util.castNonNull(parcel.readSparseBooleanArray());
|
|
}
|
|
|
|
@Override // com.google.android.exoplayer2.trackselection.TrackSelectionParameters
|
|
public boolean equals(Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (obj == null || Parameters.class != obj.getClass()) {
|
|
return false;
|
|
}
|
|
Parameters parameters = (Parameters) obj;
|
|
return super.equals(parameters) && this.exceedVideoConstraintsIfNecessary == parameters.exceedVideoConstraintsIfNecessary && this.allowVideoMixedMimeTypeAdaptiveness == parameters.allowVideoMixedMimeTypeAdaptiveness && this.allowVideoNonSeamlessAdaptiveness == parameters.allowVideoNonSeamlessAdaptiveness && this.exceedAudioConstraintsIfNecessary == parameters.exceedAudioConstraintsIfNecessary && this.allowAudioMixedMimeTypeAdaptiveness == parameters.allowAudioMixedMimeTypeAdaptiveness && this.allowAudioMixedSampleRateAdaptiveness == parameters.allowAudioMixedSampleRateAdaptiveness && this.allowAudioMixedChannelCountAdaptiveness == parameters.allowAudioMixedChannelCountAdaptiveness && this.disabledTextTrackSelectionFlags == parameters.disabledTextTrackSelectionFlags && this.exceedRendererCapabilitiesIfNecessary == parameters.exceedRendererCapabilitiesIfNecessary && this.tunnelingEnabled == parameters.tunnelingEnabled && this.allowMultipleAdaptiveSelections == parameters.allowMultipleAdaptiveSelections && areRendererDisabledFlagsEqual(this.rendererDisabledFlags, parameters.rendererDisabledFlags) && areSelectionOverridesEqual(this.selectionOverrides, parameters.selectionOverrides);
|
|
}
|
|
|
|
@Override // com.google.android.exoplayer2.trackselection.TrackSelectionParameters
|
|
public int hashCode() {
|
|
return ((((((((((((((((((((((super.hashCode() + 31) * 31) + (this.exceedVideoConstraintsIfNecessary ? 1 : 0)) * 31) + (this.allowVideoMixedMimeTypeAdaptiveness ? 1 : 0)) * 31) + (this.allowVideoNonSeamlessAdaptiveness ? 1 : 0)) * 31) + (this.exceedAudioConstraintsIfNecessary ? 1 : 0)) * 31) + (this.allowAudioMixedMimeTypeAdaptiveness ? 1 : 0)) * 31) + (this.allowAudioMixedSampleRateAdaptiveness ? 1 : 0)) * 31) + (this.allowAudioMixedChannelCountAdaptiveness ? 1 : 0)) * 31) + this.disabledTextTrackSelectionFlags) * 31) + (this.exceedRendererCapabilitiesIfNecessary ? 1 : 0)) * 31) + (this.tunnelingEnabled ? 1 : 0)) * 31) + (this.allowMultipleAdaptiveSelections ? 1 : 0);
|
|
}
|
|
|
|
@Override // com.google.android.exoplayer2.trackselection.TrackSelectionParameters, android.os.Parcelable
|
|
public void writeToParcel(Parcel parcel, int i) {
|
|
super.writeToParcel(parcel, i);
|
|
Util.writeBoolean(parcel, this.exceedVideoConstraintsIfNecessary);
|
|
Util.writeBoolean(parcel, this.allowVideoMixedMimeTypeAdaptiveness);
|
|
Util.writeBoolean(parcel, this.allowVideoNonSeamlessAdaptiveness);
|
|
Util.writeBoolean(parcel, this.exceedAudioConstraintsIfNecessary);
|
|
Util.writeBoolean(parcel, this.allowAudioMixedMimeTypeAdaptiveness);
|
|
Util.writeBoolean(parcel, this.allowAudioMixedSampleRateAdaptiveness);
|
|
Util.writeBoolean(parcel, this.allowAudioMixedChannelCountAdaptiveness);
|
|
parcel.writeInt(this.disabledTextTrackSelectionFlags);
|
|
Util.writeBoolean(parcel, this.exceedRendererCapabilitiesIfNecessary);
|
|
Util.writeBoolean(parcel, this.tunnelingEnabled);
|
|
Util.writeBoolean(parcel, this.allowMultipleAdaptiveSelections);
|
|
writeSelectionOverridesToParcel(parcel, this.selectionOverrides);
|
|
parcel.writeSparseBooleanArray(this.rendererDisabledFlags);
|
|
}
|
|
|
|
public static SparseArray readSelectionOverrides(Parcel parcel) {
|
|
int readInt = parcel.readInt();
|
|
SparseArray sparseArray = new SparseArray(readInt);
|
|
for (int i = 0; i < readInt; i++) {
|
|
int readInt2 = parcel.readInt();
|
|
int readInt3 = parcel.readInt();
|
|
HashMap hashMap = new HashMap(readInt3);
|
|
for (int i2 = 0; i2 < readInt3; i2++) {
|
|
hashMap.put((TrackGroupArray) Assertions.checkNotNull((TrackGroupArray) parcel.readParcelable(TrackGroupArray.class.getClassLoader())), (SelectionOverride) parcel.readParcelable(SelectionOverride.class.getClassLoader()));
|
|
}
|
|
sparseArray.put(readInt2, hashMap);
|
|
}
|
|
return sparseArray;
|
|
}
|
|
|
|
public static void writeSelectionOverridesToParcel(Parcel parcel, SparseArray sparseArray) {
|
|
int size = sparseArray.size();
|
|
parcel.writeInt(size);
|
|
for (int i = 0; i < size; i++) {
|
|
int keyAt = sparseArray.keyAt(i);
|
|
Map map = (Map) sparseArray.valueAt(i);
|
|
int size2 = map.size();
|
|
parcel.writeInt(keyAt);
|
|
parcel.writeInt(size2);
|
|
for (Map.Entry entry : map.entrySet()) {
|
|
parcel.writeParcelable((Parcelable) entry.getKey(), 0);
|
|
parcel.writeParcelable((Parcelable) entry.getValue(), 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static boolean areRendererDisabledFlagsEqual(SparseBooleanArray sparseBooleanArray, SparseBooleanArray sparseBooleanArray2) {
|
|
int size = sparseBooleanArray.size();
|
|
if (sparseBooleanArray2.size() != size) {
|
|
return false;
|
|
}
|
|
for (int i = 0; i < size; i++) {
|
|
if (sparseBooleanArray2.indexOfKey(sparseBooleanArray.keyAt(i)) < 0) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean areSelectionOverridesEqual(SparseArray sparseArray, SparseArray sparseArray2) {
|
|
int size = sparseArray.size();
|
|
if (sparseArray2.size() != size) {
|
|
return false;
|
|
}
|
|
for (int i = 0; i < size; i++) {
|
|
int indexOfKey = sparseArray2.indexOfKey(sparseArray.keyAt(i));
|
|
if (indexOfKey < 0 || !areSelectionOverridesEqual((Map) sparseArray.valueAt(i), (Map) sparseArray2.valueAt(indexOfKey))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean areSelectionOverridesEqual(Map map, Map map2) {
|
|
if (map2.size() != map.size()) {
|
|
return false;
|
|
}
|
|
for (Map.Entry entry : map.entrySet()) {
|
|
TrackGroupArray trackGroupArray = (TrackGroupArray) entry.getKey();
|
|
if (!map2.containsKey(trackGroupArray) || !Util.areEqual(entry.getValue(), map2.get(trackGroupArray))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public static final class SelectionOverride implements Parcelable {
|
|
public static final Parcelable.Creator<SelectionOverride> CREATOR = new Parcelable.Creator() { // from class: com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride.1
|
|
@Override // android.os.Parcelable.Creator
|
|
public SelectionOverride createFromParcel(Parcel parcel) {
|
|
return new SelectionOverride(parcel);
|
|
}
|
|
|
|
@Override // android.os.Parcelable.Creator
|
|
public SelectionOverride[] newArray(int i) {
|
|
return new SelectionOverride[i];
|
|
}
|
|
};
|
|
public final int groupIndex;
|
|
public final int length;
|
|
public final int[] tracks;
|
|
public final int type;
|
|
|
|
@Override // android.os.Parcelable
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
public SelectionOverride(int i, int... iArr) {
|
|
this(i, iArr, 0);
|
|
}
|
|
|
|
public SelectionOverride(int i, int[] iArr, int i2) {
|
|
this.groupIndex = i;
|
|
int[] copyOf = Arrays.copyOf(iArr, iArr.length);
|
|
this.tracks = copyOf;
|
|
this.length = iArr.length;
|
|
this.type = i2;
|
|
Arrays.sort(copyOf);
|
|
}
|
|
|
|
public SelectionOverride(Parcel parcel) {
|
|
this.groupIndex = parcel.readInt();
|
|
int readByte = parcel.readByte();
|
|
this.length = readByte;
|
|
int[] iArr = new int[readByte];
|
|
this.tracks = iArr;
|
|
parcel.readIntArray(iArr);
|
|
this.type = parcel.readInt();
|
|
}
|
|
|
|
public boolean containsTrack(int i) {
|
|
for (int i2 : this.tracks) {
|
|
if (i2 == i) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public int hashCode() {
|
|
return (((this.groupIndex * 31) + Arrays.hashCode(this.tracks)) * 31) + this.type;
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (obj == null || SelectionOverride.class != obj.getClass()) {
|
|
return false;
|
|
}
|
|
SelectionOverride selectionOverride = (SelectionOverride) obj;
|
|
return this.groupIndex == selectionOverride.groupIndex && Arrays.equals(this.tracks, selectionOverride.tracks) && this.type == selectionOverride.type;
|
|
}
|
|
|
|
@Override // android.os.Parcelable
|
|
public void writeToParcel(Parcel parcel, int i) {
|
|
parcel.writeInt(this.groupIndex);
|
|
parcel.writeInt(this.tracks.length);
|
|
parcel.writeIntArray(this.tracks);
|
|
parcel.writeInt(this.type);
|
|
}
|
|
}
|
|
}
|