DownloadHelper: Support multiple track selection overrides
addTrackSelectionForSingleRenderer takes a list of legacy overrides, which are then set on the supplied parameters one at a time to run track selection. This allows multiple overrides for a single track type to be applied in the download use case, despite it not being possible to place such overrides directly into a single parameters. For new style overrides, multiple overrides for the same track type can be placed directly into a single parameters. Therefore we'll be able to replace use of addTrackSelectionForSingleRenderer with use of addTrackSelection, which is a much cleaner API. For this to work, we need to make DownloadHelper apply multiple overrides in this case. PiperOrigin-RevId: 432459834
This commit is contained in:
parent
039de75f1f
commit
b83c2cb8cb
@ -50,6 +50,7 @@ import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
|||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride;
|
||||||
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
||||||
|
import com.google.android.exoplayer2.trackselection.TrackSelectionOverride;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
|
import com.google.android.exoplayer2.trackselection.TrackSelectorResult;
|
||||||
import com.google.android.exoplayer2.upstream.Allocator;
|
import com.google.android.exoplayer2.upstream.Allocator;
|
||||||
@ -602,8 +603,9 @@ public final class DownloadHelper {
|
|||||||
*/
|
*/
|
||||||
public void replaceTrackSelections(
|
public void replaceTrackSelections(
|
||||||
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
||||||
|
assertPreparedWithMedia();
|
||||||
clearTrackSelections(periodIndex);
|
clearTrackSelections(periodIndex);
|
||||||
addTrackSelection(periodIndex, trackSelectionParameters);
|
addTrackSelectionInternal(periodIndex, trackSelectionParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -617,8 +619,7 @@ public final class DownloadHelper {
|
|||||||
public void addTrackSelection(
|
public void addTrackSelection(
|
||||||
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
trackSelector.setParameters(trackSelectionParameters);
|
addTrackSelectionInternal(periodIndex, trackSelectionParameters);
|
||||||
runTrackSelection(periodIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -649,7 +650,7 @@ public final class DownloadHelper {
|
|||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
parametersBuilder.setPreferredAudioLanguage(language).build();
|
parametersBuilder.setPreferredAudioLanguage(language).build();
|
||||||
for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) {
|
for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) {
|
||||||
addTrackSelection(periodIndex, parameters);
|
addTrackSelectionInternal(periodIndex, parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -686,7 +687,7 @@ public final class DownloadHelper {
|
|||||||
TrackSelectionParameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
parametersBuilder.setPreferredTextLanguage(language).build();
|
parametersBuilder.setPreferredTextLanguage(language).build();
|
||||||
for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) {
|
for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) {
|
||||||
addTrackSelection(periodIndex, parameters);
|
addTrackSelectionInternal(periodIndex, parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -713,12 +714,12 @@ public final class DownloadHelper {
|
|||||||
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ i != rendererIndex);
|
builder.setRendererDisabled(/* rendererIndex= */ i, /* disabled= */ i != rendererIndex);
|
||||||
}
|
}
|
||||||
if (overrides.isEmpty()) {
|
if (overrides.isEmpty()) {
|
||||||
addTrackSelection(periodIndex, builder.build());
|
addTrackSelectionInternal(periodIndex, builder.build());
|
||||||
} else {
|
} else {
|
||||||
TrackGroupArray trackGroupArray = mappedTrackInfos[periodIndex].getTrackGroups(rendererIndex);
|
TrackGroupArray trackGroupArray = mappedTrackInfos[periodIndex].getTrackGroups(rendererIndex);
|
||||||
for (int i = 0; i < overrides.size(); i++) {
|
for (int i = 0; i < overrides.size(); i++) {
|
||||||
builder.setSelectionOverride(rendererIndex, trackGroupArray, overrides.get(i));
|
builder.setSelectionOverride(rendererIndex, trackGroupArray, overrides.get(i));
|
||||||
addTrackSelection(periodIndex, builder.build());
|
addTrackSelectionInternal(periodIndex, builder.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -770,8 +771,28 @@ public final class DownloadHelper {
|
|||||||
return requestBuilder.setStreamKeys(streamKeys).build();
|
return requestBuilder.setStreamKeys(streamKeys).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialization of array of Lists.
|
@RequiresNonNull({
|
||||||
@SuppressWarnings("unchecked")
|
"trackGroupArrays",
|
||||||
|
"trackSelectionsByPeriodAndRenderer",
|
||||||
|
"mediaPreparer",
|
||||||
|
"mediaPreparer.timeline"
|
||||||
|
})
|
||||||
|
private void addTrackSelectionInternal(
|
||||||
|
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
||||||
|
trackSelector.setParameters(trackSelectionParameters);
|
||||||
|
runTrackSelection(periodIndex);
|
||||||
|
// TrackSelectionParameters can contain multiple overrides for each track type. The track
|
||||||
|
// selector will only use one of them (because it's designed for playback), but for downloads we
|
||||||
|
// want to use all of them. Run selection again with each override being the only one of its
|
||||||
|
// type, to ensure that all of the desired tracks are included.
|
||||||
|
for (TrackSelectionOverride override : trackSelectionParameters.overrides.values()) {
|
||||||
|
trackSelector.setParameters(
|
||||||
|
trackSelectionParameters.buildUpon().setOverrideForType(override).build());
|
||||||
|
runTrackSelection(periodIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked") // Initialization of array of Lists.
|
||||||
private void onMediaPrepared() {
|
private void onMediaPrepared() {
|
||||||
checkNotNull(mediaPreparer);
|
checkNotNull(mediaPreparer);
|
||||||
checkNotNull(mediaPreparer.mediaPeriods);
|
checkNotNull(mediaPreparer.mediaPeriods);
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.offline;
|
package com.google.android.exoplayer2.offline;
|
||||||
|
|
||||||
|
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
|
import static org.robolectric.shadows.ShadowLooper.shadowMainLooper;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
@ -37,9 +37,12 @@ import com.google.android.exoplayer2.testutil.FakeMediaSource;
|
|||||||
import com.google.android.exoplayer2.testutil.FakeRenderer;
|
import com.google.android.exoplayer2.testutil.FakeRenderer;
|
||||||
import com.google.android.exoplayer2.testutil.FakeTimeline;
|
import com.google.android.exoplayer2.testutil.FakeTimeline;
|
||||||
import com.google.android.exoplayer2.testutil.FakeTimeline.TimelineWindowDefinition;
|
import com.google.android.exoplayer2.testutil.FakeTimeline.TimelineWindowDefinition;
|
||||||
|
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||||
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
||||||
|
import com.google.android.exoplayer2.trackselection.TrackSelectionOverride;
|
||||||
|
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters;
|
||||||
import com.google.android.exoplayer2.upstream.Allocator;
|
import com.google.android.exoplayer2.upstream.Allocator;
|
||||||
import com.google.android.exoplayer2.util.MimeTypes;
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -63,12 +66,8 @@ public class DownloadHelperTest {
|
|||||||
new Object[] {TEST_MANIFEST},
|
new Object[] {TEST_MANIFEST},
|
||||||
new TimelineWindowDefinition(/* periodCount= */ 2, /* id= */ new Object()));
|
new TimelineWindowDefinition(/* periodCount= */ 2, /* id= */ new Object()));
|
||||||
|
|
||||||
private static final Format VIDEO_FORMAT_LOW = createVideoFormat(/* bitrate= */ 200_000);
|
private static TrackGroup trackGroupVideoLow;
|
||||||
private static final Format VIDEO_FORMAT_HIGH = createVideoFormat(/* bitrate= */ 800_000);
|
private static TrackGroup trackGroupVideoLowAndHigh;
|
||||||
|
|
||||||
private static final TrackGroup TRACK_GROUP_VIDEO_BOTH =
|
|
||||||
new TrackGroup(VIDEO_FORMAT_LOW, VIDEO_FORMAT_HIGH);
|
|
||||||
private static final TrackGroup TRACK_GROUP_VIDEO_SINGLE = new TrackGroup(VIDEO_FORMAT_LOW);
|
|
||||||
private static TrackGroup trackGroupAudioUs;
|
private static TrackGroup trackGroupAudioUs;
|
||||||
private static TrackGroup trackGroupAudioZh;
|
private static TrackGroup trackGroupAudioZh;
|
||||||
private static TrackGroup trackGroupTextUs;
|
private static TrackGroup trackGroupTextUs;
|
||||||
@ -80,25 +79,29 @@ public class DownloadHelperTest {
|
|||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void staticSetUp() {
|
public static void staticSetUp() {
|
||||||
Format audioFormatUs = createAudioFormat(/* language= */ "US");
|
Format videoFormatLow = createVideoFormat(/* bitrate= */ 200_000);
|
||||||
Format audioFormatZh = createAudioFormat(/* language= */ "ZH");
|
Format videoFormatHigh = createVideoFormat(/* bitrate= */ 800_000);
|
||||||
Format textFormatUs = createTextFormat(/* language= */ "US");
|
Format audioFormatEn = createAudioFormat(/* language= */ "en");
|
||||||
Format textFormatZh = createTextFormat(/* language= */ "ZH");
|
Format audioFormatDe = createAudioFormat(/* language= */ "de");
|
||||||
|
Format textFormatEn = createTextFormat(/* language= */ "en");
|
||||||
|
Format textFormatDe = createTextFormat(/* language= */ "de");
|
||||||
|
|
||||||
trackGroupAudioUs = new TrackGroup(audioFormatUs);
|
trackGroupVideoLow = new TrackGroup(videoFormatLow);
|
||||||
trackGroupAudioZh = new TrackGroup(audioFormatZh);
|
trackGroupVideoLowAndHigh = new TrackGroup(videoFormatLow, videoFormatHigh);
|
||||||
trackGroupTextUs = new TrackGroup(textFormatUs);
|
trackGroupAudioUs = new TrackGroup(audioFormatEn);
|
||||||
trackGroupTextZh = new TrackGroup(textFormatZh);
|
trackGroupAudioZh = new TrackGroup(audioFormatDe);
|
||||||
|
trackGroupTextUs = new TrackGroup(textFormatEn);
|
||||||
|
trackGroupTextZh = new TrackGroup(textFormatDe);
|
||||||
|
|
||||||
TrackGroupArray trackGroupArrayAll =
|
TrackGroupArray trackGroupArrayAll =
|
||||||
new TrackGroupArray(
|
new TrackGroupArray(
|
||||||
TRACK_GROUP_VIDEO_BOTH,
|
trackGroupVideoLowAndHigh,
|
||||||
trackGroupAudioUs,
|
trackGroupAudioUs,
|
||||||
trackGroupAudioZh,
|
trackGroupAudioZh,
|
||||||
trackGroupTextUs,
|
trackGroupTextUs,
|
||||||
trackGroupTextZh);
|
trackGroupTextZh);
|
||||||
TrackGroupArray trackGroupArraySingle =
|
TrackGroupArray trackGroupArraySingle =
|
||||||
new TrackGroupArray(TRACK_GROUP_VIDEO_SINGLE, trackGroupAudioUs);
|
new TrackGroupArray(trackGroupVideoLow, trackGroupAudioUs);
|
||||||
trackGroupArrays = new TrackGroupArray[] {trackGroupArrayAll, trackGroupArraySingle};
|
trackGroupArrays = new TrackGroupArray[] {trackGroupArrayAll, trackGroupArraySingle};
|
||||||
|
|
||||||
testMediaItem =
|
testMediaItem =
|
||||||
@ -126,18 +129,14 @@ public class DownloadHelperTest {
|
|||||||
public void getManifest_returnsManifest() throws Exception {
|
public void getManifest_returnsManifest() throws Exception {
|
||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
|
|
||||||
Object manifest = downloadHelper.getManifest();
|
assertThat(downloadHelper.getManifest()).isEqualTo(TEST_MANIFEST);
|
||||||
|
|
||||||
assertThat(manifest).isEqualTo(TEST_MANIFEST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPeriodCount_returnsPeriodCount() throws Exception {
|
public void getPeriodCount_returnsPeriodCount() throws Exception {
|
||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
|
|
||||||
int periodCount = downloadHelper.getPeriodCount();
|
assertThat(downloadHelper.getPeriodCount()).isEqualTo(2);
|
||||||
|
|
||||||
assertThat(periodCount).isEqualTo(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -174,7 +173,7 @@ public class DownloadHelperTest {
|
|||||||
assertThat(mappedTracks0.getTrackGroups(/* rendererIndex= */ 1).get(/* index= */ 1))
|
assertThat(mappedTracks0.getTrackGroups(/* rendererIndex= */ 1).get(/* index= */ 1))
|
||||||
.isEqualTo(trackGroupAudioZh);
|
.isEqualTo(trackGroupAudioZh);
|
||||||
assertThat(mappedTracks0.getTrackGroups(/* rendererIndex= */ 2).get(/* index= */ 0))
|
assertThat(mappedTracks0.getTrackGroups(/* rendererIndex= */ 2).get(/* index= */ 0))
|
||||||
.isEqualTo(TRACK_GROUP_VIDEO_BOTH);
|
.isEqualTo(trackGroupVideoLowAndHigh);
|
||||||
|
|
||||||
assertThat(mappedTracks1.getRendererCount()).isEqualTo(3);
|
assertThat(mappedTracks1.getRendererCount()).isEqualTo(3);
|
||||||
assertThat(mappedTracks1.getRendererType(/* rendererIndex= */ 0)).isEqualTo(C.TRACK_TYPE_TEXT);
|
assertThat(mappedTracks1.getRendererType(/* rendererIndex= */ 0)).isEqualTo(C.TRACK_TYPE_TEXT);
|
||||||
@ -186,7 +185,7 @@ public class DownloadHelperTest {
|
|||||||
assertThat(mappedTracks1.getTrackGroups(/* rendererIndex= */ 1).get(/* index= */ 0))
|
assertThat(mappedTracks1.getTrackGroups(/* rendererIndex= */ 1).get(/* index= */ 0))
|
||||||
.isEqualTo(trackGroupAudioUs);
|
.isEqualTo(trackGroupAudioUs);
|
||||||
assertThat(mappedTracks1.getTrackGroups(/* rendererIndex= */ 2).get(/* index= */ 0))
|
assertThat(mappedTracks1.getTrackGroups(/* rendererIndex= */ 2).get(/* index= */ 0))
|
||||||
.isEqualTo(TRACK_GROUP_VIDEO_SINGLE);
|
.isEqualTo(trackGroupVideoLow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -208,11 +207,11 @@ public class DownloadHelperTest {
|
|||||||
|
|
||||||
assertSingleTrackSelectionEquals(selectedText0, trackGroupTextUs, 0);
|
assertSingleTrackSelectionEquals(selectedText0, trackGroupTextUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedAudio0, trackGroupAudioUs, 0);
|
assertSingleTrackSelectionEquals(selectedAudio0, trackGroupAudioUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo0, TRACK_GROUP_VIDEO_BOTH, 1);
|
assertSingleTrackSelectionEquals(selectedVideo0, trackGroupVideoLowAndHigh, 1);
|
||||||
|
|
||||||
assertThat(selectedText1).isEmpty();
|
assertThat(selectedText1).isEmpty();
|
||||||
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
assertSingleTrackSelectionEquals(selectedVideo1, trackGroupVideoLow, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -241,7 +240,7 @@ public class DownloadHelperTest {
|
|||||||
// Verify
|
// Verify
|
||||||
assertThat(selectedText1).isEmpty();
|
assertThat(selectedText1).isEmpty();
|
||||||
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
assertSingleTrackSelectionEquals(selectedVideo1, trackGroupVideoLow, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -249,9 +248,9 @@ public class DownloadHelperTest {
|
|||||||
throws Exception {
|
throws Exception {
|
||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
DefaultTrackSelector.Parameters parameters =
|
DefaultTrackSelector.Parameters parameters =
|
||||||
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
|
new DefaultTrackSelector.ParametersBuilder(getApplicationContext())
|
||||||
.setPreferredAudioLanguage("ZH")
|
.setPreferredAudioLanguage("de")
|
||||||
.setPreferredTextLanguage("ZH")
|
.setPreferredTextLanguage("de")
|
||||||
.setRendererDisabled(/* rendererIndex= */ 2, true)
|
.setRendererDisabled(/* rendererIndex= */ 2, true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -276,7 +275,7 @@ public class DownloadHelperTest {
|
|||||||
|
|
||||||
assertThat(selectedText1).isEmpty();
|
assertThat(selectedText1).isEmpty();
|
||||||
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
assertSingleTrackSelectionEquals(selectedVideo1, trackGroupVideoLow, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -285,10 +284,10 @@ public class DownloadHelperTest {
|
|||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
// Select parameters to require some merging of track groups because the new parameters add
|
// Select parameters to require some merging of track groups because the new parameters add
|
||||||
// all video tracks to initial video single track selection.
|
// all video tracks to initial video single track selection.
|
||||||
DefaultTrackSelector.Parameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
|
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||||
.setPreferredAudioLanguage("ZH")
|
.setPreferredAudioLanguage("de")
|
||||||
.setPreferredTextLanguage("US")
|
.setPreferredTextLanguage("en")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// Add only to one period selection to verify second period selection is untouched.
|
// Add only to one period selection to verify second period selection is untouched.
|
||||||
@ -310,11 +309,11 @@ public class DownloadHelperTest {
|
|||||||
assertThat(selectedAudio0).hasSize(2);
|
assertThat(selectedAudio0).hasSize(2);
|
||||||
assertTrackSelectionEquals(selectedAudio0.get(0), trackGroupAudioUs, 0);
|
assertTrackSelectionEquals(selectedAudio0.get(0), trackGroupAudioUs, 0);
|
||||||
assertTrackSelectionEquals(selectedAudio0.get(1), trackGroupAudioZh, 0);
|
assertTrackSelectionEquals(selectedAudio0.get(1), trackGroupAudioZh, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo0, TRACK_GROUP_VIDEO_BOTH, 0, 1);
|
assertSingleTrackSelectionEquals(selectedVideo0, trackGroupVideoLowAndHigh, 0, 1);
|
||||||
|
|
||||||
assertThat(selectedText1).isEmpty();
|
assertThat(selectedText1).isEmpty();
|
||||||
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
assertSingleTrackSelectionEquals(selectedAudio1, trackGroupAudioUs, 0);
|
||||||
assertSingleTrackSelectionEquals(selectedVideo1, TRACK_GROUP_VIDEO_SINGLE, 0);
|
assertSingleTrackSelectionEquals(selectedVideo1, trackGroupVideoLow, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -325,7 +324,7 @@ public class DownloadHelperTest {
|
|||||||
downloadHelper.clearTrackSelections(/* periodIndex= */ 1);
|
downloadHelper.clearTrackSelections(/* periodIndex= */ 1);
|
||||||
|
|
||||||
// Add a non-default language, and a non-existing language (which will select the default).
|
// Add a non-default language, and a non-existing language (which will select the default).
|
||||||
downloadHelper.addAudioLanguagesToSelection("ZH", "Klingonese");
|
downloadHelper.addAudioLanguagesToSelection("de", "Klingonese");
|
||||||
List<ExoTrackSelection> selectedText0 =
|
List<ExoTrackSelection> selectedText0 =
|
||||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
||||||
List<ExoTrackSelection> selectedAudio0 =
|
List<ExoTrackSelection> selectedAudio0 =
|
||||||
@ -359,7 +358,7 @@ public class DownloadHelperTest {
|
|||||||
|
|
||||||
// Add a non-default language, and a non-existing language (which will select the default).
|
// Add a non-default language, and a non-existing language (which will select the default).
|
||||||
downloadHelper.addTextLanguagesToSelection(
|
downloadHelper.addTextLanguagesToSelection(
|
||||||
/* selectUndeterminedTextLanguage= */ true, "ZH", "Klingonese");
|
/* selectUndeterminedTextLanguage= */ true, "de", "Klingonese");
|
||||||
List<ExoTrackSelection> selectedText0 =
|
List<ExoTrackSelection> selectedText0 =
|
||||||
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
downloadHelper.getTrackSelections(/* periodIndex= */ 0, /* rendererIndex= */ 0);
|
||||||
List<ExoTrackSelection> selectedAudio0 =
|
List<ExoTrackSelection> selectedAudio0 =
|
||||||
@ -389,14 +388,13 @@ public class DownloadHelperTest {
|
|||||||
prepareDownloadHelper(downloadHelper);
|
prepareDownloadHelper(downloadHelper);
|
||||||
// Ensure we have track groups with multiple indices, renderers with multiple track groups and
|
// Ensure we have track groups with multiple indices, renderers with multiple track groups and
|
||||||
// also renderers without any track groups.
|
// also renderers without any track groups.
|
||||||
DefaultTrackSelector.Parameters parameters =
|
TrackSelectionParameters parameters =
|
||||||
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
|
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||||
.setPreferredAudioLanguage("ZH")
|
.setPreferredAudioLanguage("de")
|
||||||
.setPreferredTextLanguage("US")
|
.setPreferredTextLanguage("en")
|
||||||
.build();
|
.build();
|
||||||
downloadHelper.addTrackSelection(/* periodIndex= */ 0, parameters);
|
downloadHelper.addTrackSelection(/* periodIndex= */ 0, parameters);
|
||||||
byte[] data = new byte[10];
|
byte[] data = TestUtil.buildTestData(10);
|
||||||
Arrays.fill(data, (byte) 123);
|
|
||||||
|
|
||||||
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(data);
|
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(data);
|
||||||
|
|
||||||
@ -407,13 +405,37 @@ public class DownloadHelperTest {
|
|||||||
assertThat(downloadRequest.data).isEqualTo(data);
|
assertThat(downloadRequest.data).isEqualTo(data);
|
||||||
assertThat(downloadRequest.streamKeys)
|
assertThat(downloadRequest.streamKeys)
|
||||||
.containsExactly(
|
.containsExactly(
|
||||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 0, /* trackIndex= */ 0),
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 0, /* streamIndex= */ 0),
|
||||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 0, /* trackIndex= */ 1),
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 0, /* streamIndex= */ 1),
|
||||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 1, /* trackIndex= */ 0),
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 1, /* streamIndex= */ 0),
|
||||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 2, /* trackIndex= */ 0),
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 2, /* streamIndex= */ 0),
|
||||||
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 3, /* trackIndex= */ 0),
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 3, /* streamIndex= */ 0),
|
||||||
new StreamKey(/* periodIndex= */ 1, /* groupIndex= */ 0, /* trackIndex= */ 0),
|
new StreamKey(/* periodIndex= */ 1, /* groupIndex= */ 0, /* streamIndex= */ 0),
|
||||||
new StreamKey(/* periodIndex= */ 1, /* groupIndex= */ 1, /* trackIndex= */ 0));
|
new StreamKey(/* periodIndex= */ 1, /* groupIndex= */ 1, /* streamIndex= */ 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getDownloadRequest_createsDownloadRequest_withMultipleOverridesOfSameType()
|
||||||
|
throws Exception {
|
||||||
|
prepareDownloadHelper(downloadHelper);
|
||||||
|
|
||||||
|
TrackSelectionParameters parameters =
|
||||||
|
new TrackSelectionParameters.Builder(getApplicationContext())
|
||||||
|
.addOverride(new TrackSelectionOverride(trackGroupAudioUs, /* trackIndex= */ 0))
|
||||||
|
.addOverride(new TrackSelectionOverride(trackGroupAudioZh, /* trackIndex= */ 0))
|
||||||
|
.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, /* disabled= */ true)
|
||||||
|
.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, /* disabled= */ true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
downloadHelper.replaceTrackSelections(/* periodIndex= */ 0, parameters);
|
||||||
|
downloadHelper.clearTrackSelections(/* periodIndex= */ 1);
|
||||||
|
|
||||||
|
DownloadRequest downloadRequest = downloadHelper.getDownloadRequest(/* data= */ null);
|
||||||
|
|
||||||
|
assertThat(downloadRequest.streamKeys)
|
||||||
|
.containsExactly(
|
||||||
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 1, /* streamIndex= */ 0),
|
||||||
|
new StreamKey(/* periodIndex= */ 0, /* groupIndex= */ 2, /* streamIndex= */ 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void prepareDownloadHelper(DownloadHelper downloadHelper) throws Exception {
|
private static void prepareDownloadHelper(DownloadHelper downloadHelper) throws Exception {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user