Add convenience method to DownloadHelper to add selection for single renderer.
This simplifies the DownloadHelper code in the demo app and is generally useful for more specific updates with SelectionOverrides. PiperOrigin-RevId: 238228276
This commit is contained in:
parent
8e80acd18f
commit
d93ee00d19
@ -36,9 +36,6 @@ import com.google.android.exoplayer2.offline.DownloadState;
|
||||
import com.google.android.exoplayer2.offline.DownloadStateCursor;
|
||||
import com.google.android.exoplayer2.offline.StreamKey;
|
||||
import com.google.android.exoplayer2.scheduler.Requirements;
|
||||
import com.google.android.exoplayer2.source.TrackGroupArray;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
|
||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.util.Log;
|
||||
@ -290,37 +287,17 @@ public class DownloadTracker implements DownloadManager.Listener {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
DefaultTrackSelector.ParametersBuilder builder =
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS.buildUpon();
|
||||
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
|
||||
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ true);
|
||||
}
|
||||
for (int i = 0; i < downloadHelper.getPeriodCount(); i++) {
|
||||
downloadHelper.clearTrackSelections(/* periodIndex = */ i);
|
||||
}
|
||||
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
|
||||
if (trackSelectionDialog.getIsDisabled(/* rendererIndex= */ i)) {
|
||||
continue;
|
||||
}
|
||||
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ false);
|
||||
List<SelectionOverride> overrides =
|
||||
trackSelectionDialog.getOverrides(/* rendererIndex= */ i);
|
||||
if (overrides.isEmpty()) {
|
||||
for (int j = 0; j < downloadHelper.getPeriodCount(); j++) {
|
||||
downloadHelper.addTrackSelection(/* periodIndex = */ j, builder.build());
|
||||
for (int periodIndex = 0; periodIndex < downloadHelper.getPeriodCount(); periodIndex++) {
|
||||
downloadHelper.clearTrackSelections(periodIndex);
|
||||
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
|
||||
if (!trackSelectionDialog.getIsDisabled(/* rendererIndex= */ i)) {
|
||||
downloadHelper.addTrackSelectionForSingleRenderer(
|
||||
periodIndex,
|
||||
/* rendererIndex= */ i,
|
||||
DownloadHelper.DEFAULT_TRACK_SELECTOR_PARAMETERS,
|
||||
trackSelectionDialog.getOverrides(/* rendererIndex= */ i));
|
||||
}
|
||||
} else {
|
||||
TrackGroupArray trackGroupArray = mappedTrackInfo.getTrackGroups(/* rendererIndex= */ i);
|
||||
for (int overrideIndex = 0; overrideIndex < overrides.size(); overrideIndex++) {
|
||||
builder.setSelectionOverride(
|
||||
/* rendererIndex= */ i, trackGroupArray, overrides.get(overrideIndex));
|
||||
for (int j = 0; j < downloadHelper.getPeriodCount(); j++) {
|
||||
downloadHelper.addTrackSelection(/* periodIndex = */ j, builder.build());
|
||||
}
|
||||
}
|
||||
builder.clearSelectionOverrides();
|
||||
}
|
||||
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ true);
|
||||
}
|
||||
DownloadAction downloadAction = downloadHelper.getDownloadAction(Util.getUtf8Bytes(name));
|
||||
startDownload(downloadAction);
|
||||
|
@ -38,6 +38,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray;
|
||||
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
|
||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||
import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
|
||||
@ -546,6 +547,38 @@ public final class DownloadHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience method to add a selection of tracks to be downloaded for a single renderer. Must
|
||||
* not be called until after preparation completes.
|
||||
*
|
||||
* @param periodIndex The period index the track selection is added for.
|
||||
* @param rendererIndex The renderer index the track selection is added for.
|
||||
* @param trackSelectorParameters The {@link DefaultTrackSelector.Parameters} to obtain the new
|
||||
* selection of tracks.
|
||||
* @param overrides A list of {@link SelectionOverride SelectionOverrides} to apply to the {@code
|
||||
* trackSelectorParameters}. If empty, {@code trackSelectorParameters} are used as they are.
|
||||
*/
|
||||
public void addTrackSelectionForSingleRenderer(
|
||||
int periodIndex,
|
||||
int rendererIndex,
|
||||
DefaultTrackSelector.Parameters trackSelectorParameters,
|
||||
List<SelectionOverride> overrides) {
|
||||
assertPreparedWithMedia();
|
||||
DefaultTrackSelector.ParametersBuilder builder = trackSelectorParameters.buildUpon();
|
||||
for (int i = 0; i < mappedTrackInfos[periodIndex].getRendererCount(); i++) {
|
||||
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ i != rendererIndex);
|
||||
}
|
||||
if (overrides.isEmpty()) {
|
||||
addTrackSelection(periodIndex, builder.build());
|
||||
} else {
|
||||
TrackGroupArray trackGroupArray = mappedTrackInfos[periodIndex].getTrackGroups(rendererIndex);
|
||||
for (int i = 0; i < overrides.size(); i++) {
|
||||
builder.setSelectionOverride(rendererIndex, trackGroupArray, overrides.get(i));
|
||||
addTrackSelection(periodIndex, builder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds a {@link DownloadAction} for downloading the selected tracks. Must not be called until
|
||||
* after preparation completes.
|
||||
|
Loading…
x
Reference in New Issue
Block a user