Skip to content

Commit 6384e63

Browse files
toniheicopybara-github
authored andcommitted
Remove ExoPlayerImpl.maskingPeriodIndex
This value was always hard coded to zero. This may be misleading if the maskingWindowIndex is updated to a non-zero value because it's not generally possible to have periodIndex=0 and windowIndex>0 in a player state. We can remove the value and since we are just pretending to know the player state after preparation, use the same placeholder value as the already existing maskingWindowIndex. PiperOrigin-RevId: 830881591
1 parent ee3589b commit 6384e63

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,6 @@
243243

244244
// Playback information when there is a pending seek/set source operation.
245245
private int maskingWindowIndex;
246-
private int maskingPeriodIndex;
247246
private long maskingWindowPositionMs;
248247

249248
@SuppressLint("HandlerLeak")
@@ -1170,7 +1169,7 @@ public PlayerMessage createMessage(Target target) {
11701169
public int getCurrentPeriodIndex() {
11711170
verifyApplicationThread();
11721171
if (playbackInfo.timeline.isEmpty()) {
1173-
return maskingPeriodIndex;
1172+
return maskingWindowIndex == C.INDEX_UNSET ? 0 : maskingWindowIndex;
11741173
} else {
11751174
return playbackInfo.timeline.getIndexOfPeriod(playbackInfo.periodId.periodUid);
11761175
}
@@ -2149,7 +2148,6 @@ private void handlePlaybackInfo(ExoPlayerImplInternal.PlaybackInfoUpdate playbac
21492148
// ConcatenatingMediaSource has been cleared.
21502149
maskingWindowIndex = C.INDEX_UNSET;
21512150
maskingWindowPositionMs = 0;
2152-
maskingPeriodIndex = 0;
21532151
}
21542152
if (!newTimeline.isEmpty()) {
21552153
List<Timeline> timelines = ((PlaylistTimeline) newTimeline).getChildTimelines();
@@ -2358,7 +2356,7 @@ private PositionInfo getPreviousPositionInfo(
23582356
@Nullable Object oldWindowUid = null;
23592357
@Nullable Object oldPeriodUid = null;
23602358
int oldMediaItemIndex = oldMaskingMediaItemIndex;
2361-
int oldPeriodIndex = C.INDEX_UNSET;
2359+
int oldPeriodIndex = oldMaskingMediaItemIndex;
23622360
@Nullable MediaItem oldMediaItem = null;
23632361
Timeline.Period oldPeriod = new Timeline.Period();
23642362
if (!oldPlaybackInfo.timeline.isEmpty()) {
@@ -2412,7 +2410,7 @@ private PositionInfo getPositionInfo(long discontinuityWindowStartPositionUs) {
24122410
@Nullable Object newWindowUid = null;
24132411
@Nullable Object newPeriodUid = null;
24142412
int newMediaItemIndex = getCurrentMediaItemIndex();
2415-
int newPeriodIndex = C.INDEX_UNSET;
2413+
int newPeriodIndex = getCurrentPeriodIndex();
24162414
@Nullable MediaItem newMediaItem = null;
24172415
if (!playbackInfo.timeline.isEmpty()) {
24182416
newPeriodUid = playbackInfo.periodId.periodUid;
@@ -2824,7 +2822,6 @@ private Pair<Object, Long> maskWindowPositionMsOrGetPeriodPositionUs(
28242822
// If empty we store the initial seek in the masking variables.
28252823
maskingWindowIndex = windowIndex;
28262824
maskingWindowPositionMs = windowPositionMs == C.TIME_UNSET ? 0 : windowPositionMs;
2827-
maskingPeriodIndex = 0;
28282825
return null;
28292826
}
28302827
if (windowIndex == C.INDEX_UNSET || windowIndex >= timeline.getWindowCount()) {

libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12957,15 +12957,31 @@ public void seekTo_callsOnPositionDiscontinuity() throws Exception {
1295712957
}
1295812958

1295912959
@Test
12960-
public void seekTo_whenTimelineEmpty_callsOnPositionDiscontinuity() {
12960+
public void seekTo_whenTimelineEmpty_callsOnPositionDiscontinuityAndSetsCorrectIndices() {
1296112961
ExoPlayer player = parameterizeTestExoPlayerBuilder(new TestExoPlayerBuilder(context)).build();
1296212962
Player.Listener listener = mock(Player.Listener.class);
1296312963
player.addListener(listener);
1296412964

12965+
int mediaItemIndex0 = player.getCurrentMediaItemIndex();
12966+
int periodIndex0 = player.getCurrentPeriodIndex();
1296512967
player.seekTo(/* positionMs= */ 7 * C.MILLIS_PER_SECOND);
12968+
int mediaItemIndex1 = player.getCurrentMediaItemIndex();
12969+
int periodIndex1 = player.getCurrentPeriodIndex();
1296612970
player.seekTo(/* mediaItemIndex= */ 1, /* positionMs= */ C.MILLIS_PER_SECOND);
12971+
int mediaItemIndex2 = player.getCurrentMediaItemIndex();
12972+
int periodIndex2 = player.getCurrentPeriodIndex();
1296712973
player.seekTo(/* positionMs= */ 5 * C.MILLIS_PER_SECOND);
12968-
12974+
int mediaItemIndex3 = player.getCurrentMediaItemIndex();
12975+
int periodIndex3 = player.getCurrentPeriodIndex();
12976+
12977+
assertThat(mediaItemIndex0).isEqualTo(0);
12978+
assertThat(periodIndex0).isEqualTo(0);
12979+
assertThat(mediaItemIndex1).isEqualTo(0);
12980+
assertThat(periodIndex1).isEqualTo(0);
12981+
assertThat(mediaItemIndex2).isEqualTo(1);
12982+
assertThat(periodIndex2).isEqualTo(1);
12983+
assertThat(mediaItemIndex3).isEqualTo(1);
12984+
assertThat(periodIndex3).isEqualTo(1);
1296912985
ArgumentCaptor<Player.PositionInfo> oldPosition =
1297012986
ArgumentCaptor.forClass(Player.PositionInfo.class);
1297112987
ArgumentCaptor<Player.PositionInfo> newPosition =
@@ -12980,31 +12996,37 @@ public void seekTo_whenTimelineEmpty_callsOnPositionDiscontinuity() {
1298012996
// a seek from initial state to masked seek position
1298112997
assertThat(oldPositions.get(0).windowUid).isNull();
1298212998
assertThat(oldPositions.get(0).mediaItemIndex).isEqualTo(0);
12999+
assertThat(oldPositions.get(0).periodIndex).isEqualTo(0);
1298313000
assertThat(oldPositions.get(0).mediaItem).isNull();
1298413001
assertThat(oldPositions.get(0).positionMs).isEqualTo(0);
1298513002
assertThat(oldPositions.get(0).contentPositionMs).isEqualTo(0);
1298613003
assertThat(newPositions.get(0).mediaItemIndex).isEqualTo(0);
13004+
assertThat(newPositions.get(0).periodIndex).isEqualTo(0);
1298713005
assertThat(newPositions.get(0).windowUid).isNull();
1298813006
assertThat(newPositions.get(0).positionMs).isEqualTo(7_000);
1298913007
assertThat(newPositions.get(0).contentPositionMs).isEqualTo(7_000);
1299013008
// a seek from masked seek position to another masked position across windows
1299113009
assertThat(oldPositions.get(1).windowUid).isNull();
1299213010
assertThat(oldPositions.get(1).mediaItemIndex).isEqualTo(0);
13011+
assertThat(oldPositions.get(1).periodIndex).isEqualTo(0);
1299313012
assertThat(oldPositions.get(1).mediaItem).isNull();
1299413013
assertThat(oldPositions.get(1).positionMs).isEqualTo(7_000);
1299513014
assertThat(oldPositions.get(1).contentPositionMs).isEqualTo(7_000);
1299613015
assertThat(newPositions.get(1).windowUid).isNull();
1299713016
assertThat(newPositions.get(1).mediaItemIndex).isEqualTo(1);
13017+
assertThat(newPositions.get(1).periodIndex).isEqualTo(1);
1299813018
assertThat(newPositions.get(1).positionMs).isEqualTo(1_000);
1299913019
assertThat(newPositions.get(1).contentPositionMs).isEqualTo(1_000);
1300013020
// a seek from masked seek position to another masked position within media item
1300113021
assertThat(oldPositions.get(2).windowUid).isNull();
1300213022
assertThat(oldPositions.get(2).mediaItemIndex).isEqualTo(1);
13023+
assertThat(oldPositions.get(2).periodIndex).isEqualTo(1);
1300313024
assertThat(oldPositions.get(2).mediaItem).isNull();
1300413025
assertThat(oldPositions.get(2).positionMs).isEqualTo(1_000);
1300513026
assertThat(oldPositions.get(2).contentPositionMs).isEqualTo(1_000);
1300613027
assertThat(newPositions.get(2).windowUid).isNull();
1300713028
assertThat(newPositions.get(2).mediaItemIndex).isEqualTo(1);
13029+
assertThat(newPositions.get(2).periodIndex).isEqualTo(1);
1300813030
assertThat(newPositions.get(2).positionMs).isEqualTo(5_000);
1300913031
assertThat(newPositions.get(2).contentPositionMs).isEqualTo(5_000);
1301013032
player.release();

0 commit comments

Comments
 (0)