Skip to content

Commit cb78d6b

Browse files
Tayfun MavzerTayfun Mavzer
Tayfun Mavzer
authored and
Tayfun Mavzer
committed
Fix getPriorityCount and getPriorityCountAfterExclusion not counting base urls when no dvb namespace is declared in the manifest
1 parent bf2e338 commit cb78d6b

File tree

2 files changed

+92
-2
lines changed

2 files changed

+92
-2
lines changed

libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/BaseUrlExclusionList.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,11 @@ public int getPriorityCountAfterExclusion(List<BaseUrl> baseUrls) {
126126
Set<Integer> priorities = new HashSet<>();
127127
List<BaseUrl> includedBaseUrls = applyExclusions(baseUrls);
128128
for (int i = 0; i < includedBaseUrls.size(); i++) {
129-
priorities.add(includedBaseUrls.get(i).priority);
129+
int priority = includedBaseUrls.get(i).priority;
130+
if (priority == BaseUrl.PRIORITY_UNSET) {
131+
return includedBaseUrls.size();
132+
}
133+
priorities.add(priority);
130134
}
131135
return priorities.size();
132136
}
@@ -140,7 +144,11 @@ public int getPriorityCountAfterExclusion(List<BaseUrl> baseUrls) {
140144
public static int getPriorityCount(List<BaseUrl> baseUrls) {
141145
Set<Integer> priorities = new HashSet<>();
142146
for (int i = 0; i < baseUrls.size(); i++) {
143-
priorities.add(baseUrls.get(i).priority);
147+
int priority = baseUrls.get(i).priority;
148+
if (priority == BaseUrl.PRIORITY_UNSET) {
149+
return baseUrls.size();
150+
}
151+
priorities.add(priority);
144152
}
145153
return priorities.size();
146154
}

libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/BaseUrlExclusionListTest.java

+82
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static androidx.media3.exoplayer.dash.manifest.BaseUrl.DEFAULT_DVB_PRIORITY;
1919
import static androidx.media3.exoplayer.dash.manifest.BaseUrl.DEFAULT_WEIGHT;
20+
import static androidx.media3.exoplayer.dash.manifest.BaseUrl.PRIORITY_UNSET;
2021
import static androidx.media3.exoplayer.upstream.DefaultLoadErrorHandlingPolicy.DEFAULT_LOCATION_EXCLUSION_MS;
2122
import static com.google.common.truth.Truth.assertThat;
2223
import static org.mockito.ArgumentMatchers.anyInt;
@@ -274,4 +275,85 @@ public void getPriorityCount_correctPriorityCount() {
274275
assertThat(BaseUrlExclusionList.getPriorityCount(baseUrls)).isEqualTo(3);
275276
assertThat(BaseUrlExclusionList.getPriorityCount(ImmutableList.of())).isEqualTo(0);
276277
}
278+
279+
@Test
280+
public void getPriorityCountAfterExclusion_priorityUnset_correctPriorityCount() {
281+
List<BaseUrl> baseUrls =
282+
ImmutableList.of(
283+
new BaseUrl(
284+
/* url= */ "a",
285+
/* serviceLocation= */ "a",
286+
/* priority= */ PRIORITY_UNSET,
287+
/* weight= */ 1),
288+
new BaseUrl(
289+
/* url= */ "b",
290+
/* serviceLocation= */ "b",
291+
/* priority= */ PRIORITY_UNSET,
292+
/* weight= */ 1),
293+
new BaseUrl(
294+
/* url= */ "c",
295+
/* serviceLocation= */ "c",
296+
/* priority= */ PRIORITY_UNSET,
297+
/* weight= */ 1),
298+
new BaseUrl(
299+
/* url= */ "d",
300+
/* serviceLocation= */ "d",
301+
/* priority= */ PRIORITY_UNSET,
302+
/* weight= */ 1),
303+
new BaseUrl(
304+
/* url= */ "e",
305+
/* serviceLocation= */ "e",
306+
/* priority= */ PRIORITY_UNSET,
307+
/* weight= */ 1));
308+
BaseUrlExclusionList baseUrlExclusionList = new BaseUrlExclusionList();
309+
310+
// Empty base URL list.
311+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(ImmutableList.of()))
312+
.isEqualTo(0);
313+
314+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(5);
315+
// Exclude base urls.
316+
baseUrlExclusionList.exclude(baseUrls.get(0), DEFAULT_LOCATION_EXCLUSION_MS);
317+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(4);
318+
baseUrlExclusionList.exclude(baseUrls.get(1), 2 * DEFAULT_LOCATION_EXCLUSION_MS);
319+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(3);
320+
baseUrlExclusionList.exclude(baseUrls.get(3), 3 * DEFAULT_LOCATION_EXCLUSION_MS);
321+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(2);
322+
// Time passes.
323+
ShadowSystemClock.advanceBy(Duration.ofMillis(DEFAULT_LOCATION_EXCLUSION_MS));
324+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(3);
325+
ShadowSystemClock.advanceBy(Duration.ofMillis(DEFAULT_LOCATION_EXCLUSION_MS));
326+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(4);
327+
ShadowSystemClock.advanceBy(Duration.ofMillis(DEFAULT_LOCATION_EXCLUSION_MS));
328+
assertThat(baseUrlExclusionList.getPriorityCountAfterExclusion(baseUrls)).isEqualTo(5);
329+
}
330+
331+
@Test
332+
public void getPriorityCount_priorityUnset_correctPriorityCount() {
333+
List<BaseUrl> baseUrls =
334+
ImmutableList.of(
335+
new BaseUrl(
336+
/* url= */ "a",
337+
/* serviceLocation= */ "a",
338+
/* priority= */ PRIORITY_UNSET,
339+
/* weight= */ 1),
340+
new BaseUrl(
341+
/* url= */ "b",
342+
/* serviceLocation= */ "b",
343+
/* priority= */ PRIORITY_UNSET,
344+
/* weight= */ 1),
345+
new BaseUrl(
346+
/* url= */ "c",
347+
/* serviceLocation= */ "c",
348+
/* priority= */ PRIORITY_UNSET,
349+
/* weight= */ 1),
350+
new BaseUrl(
351+
/* url= */ "d",
352+
/* serviceLocation= */ "d",
353+
/* priority= */ PRIORITY_UNSET,
354+
/* weight= */ 1));
355+
356+
assertThat(BaseUrlExclusionList.getPriorityCount(baseUrls)).isEqualTo(4);
357+
assertThat(BaseUrlExclusionList.getPriorityCount(ImmutableList.of())).isEqualTo(0);
358+
}
277359
}

0 commit comments

Comments
 (0)