summaryrefslogtreecommitdiffstats
path: root/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java')
-rw-r--r--mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java
new file mode 100644
index 0000000000..b2fcf5c13c
--- /dev/null
+++ b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/trackselection/TrackSelectionUtil.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mozilla.thirdparty.com.google.android.exoplayer2.trackselection;
+
+import androidx.annotation.Nullable;
+import org.mozilla.thirdparty.com.google.android.exoplayer2.source.TrackGroupArray;
+import org.mozilla.thirdparty.com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
+import org.mozilla.thirdparty.com.google.android.exoplayer2.trackselection.TrackSelection.Definition;
+import org.checkerframework.checker.nullness.compatqual.NullableType;
+
+/** Track selection related utility methods. */
+public final class TrackSelectionUtil {
+
+ private TrackSelectionUtil() {}
+
+ /** Functional interface to create a single adaptive track selection. */
+ public interface AdaptiveTrackSelectionFactory {
+
+ /**
+ * Creates an adaptive track selection for the provided track selection definition.
+ *
+ * @param trackSelectionDefinition A {@link Definition} for the track selection.
+ * @return The created track selection.
+ */
+ TrackSelection createAdaptiveTrackSelection(Definition trackSelectionDefinition);
+ }
+
+ /**
+ * Creates track selections for an array of track selection definitions, with at most one
+ * multi-track adaptive selection.
+ *
+ * @param definitions The list of track selection {@link Definition definitions}. May include null
+ * values.
+ * @param adaptiveTrackSelectionFactory A factory for the multi-track adaptive track selection.
+ * @return The array of created track selection. For null entries in {@code definitions} returns
+ * null values.
+ */
+ public static @NullableType TrackSelection[] createTrackSelectionsForDefinitions(
+ @NullableType Definition[] definitions,
+ AdaptiveTrackSelectionFactory adaptiveTrackSelectionFactory) {
+ TrackSelection[] selections = new TrackSelection[definitions.length];
+ boolean createdAdaptiveTrackSelection = false;
+ for (int i = 0; i < definitions.length; i++) {
+ Definition definition = definitions[i];
+ if (definition == null) {
+ continue;
+ }
+ if (definition.tracks.length > 1 && !createdAdaptiveTrackSelection) {
+ createdAdaptiveTrackSelection = true;
+ selections[i] = adaptiveTrackSelectionFactory.createAdaptiveTrackSelection(definition);
+ } else {
+ selections[i] =
+ new FixedTrackSelection(
+ definition.group, definition.tracks[0], definition.reason, definition.data);
+ }
+ }
+ return selections;
+ }
+
+ /**
+ * Updates {@link DefaultTrackSelector.Parameters} with an override.
+ *
+ * @param parameters The current {@link DefaultTrackSelector.Parameters} to build upon.
+ * @param rendererIndex The renderer index to update.
+ * @param trackGroupArray The {@link TrackGroupArray} of the renderer.
+ * @param isDisabled Whether the renderer should be set disabled.
+ * @param override An optional override for the renderer. If null, no override will be set and an
+ * existing override for this renderer will be cleared.
+ * @return The updated {@link DefaultTrackSelector.Parameters}.
+ */
+ public static DefaultTrackSelector.Parameters updateParametersWithOverride(
+ DefaultTrackSelector.Parameters parameters,
+ int rendererIndex,
+ TrackGroupArray trackGroupArray,
+ boolean isDisabled,
+ @Nullable SelectionOverride override) {
+ DefaultTrackSelector.ParametersBuilder builder =
+ parameters
+ .buildUpon()
+ .clearSelectionOverrides(rendererIndex)
+ .setRendererDisabled(rendererIndex, isDisabled);
+ if (override != null) {
+ builder.setSelectionOverride(rendererIndex, trackGroupArray, override);
+ }
+ return builder.build();
+ }
+}