Files
rr3-apk/decompiled-community/sources/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
Daniel Elliott c080f0d97f Add Discord community version (64-bit only)
- 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
2026-02-18 15:48:36 -08:00

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);
}
}
}