From 1a06f3c8550b73b5280af228893a8ec143c4e8f7 Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 5 May 2021 17:07:48 +0100 Subject: [PATCH] Add missing isPlaceholder forwarding in SinglePeriodAdTimeline Also make future similar issues less likely by adding isPlaceholder to the set method of Period (in case forwarding Timeline implementations use this instead of just updating values selectively) #minor-release PiperOrigin-RevId: 372138523 --- .../google/android/exoplayer2/Timeline.java | 30 ++++++++++++++----- .../exoplayer2/source/MaskingMediaSource.java | 6 ++-- .../source/ads/SinglePeriodAdTimeline.java | 3 +- .../exoplayer2/testutil/FakeTimeline.java | 4 +-- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/Timeline.java b/library/common/src/main/java/com/google/android/exoplayer2/Timeline.java index 4d90c0a268..10e91fc22f 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/Timeline.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/Timeline.java @@ -623,7 +623,14 @@ public abstract class Timeline implements Bundleable { int windowIndex, long durationUs, long positionInWindowUs) { - return set(id, uid, windowIndex, durationUs, positionInWindowUs, AdPlaybackState.NONE); + return set( + id, + uid, + windowIndex, + durationUs, + positionInWindowUs, + AdPlaybackState.NONE, + /* isPlaceholder= */ false); } /** @@ -641,6 +648,8 @@ public abstract class Timeline implements Bundleable { * period is not within the window. * @param adPlaybackState The state of the period's ads, or {@link AdPlaybackState#NONE} if * there are no ads. + * @param isPlaceholder Whether this period contains placeholder information because the real + * information has yet to be loaded. * @return This period, for convenience. */ public Period set( @@ -649,14 +658,15 @@ public abstract class Timeline implements Bundleable { int windowIndex, long durationUs, long positionInWindowUs, - AdPlaybackState adPlaybackState) { + AdPlaybackState adPlaybackState, + boolean isPlaceholder) { this.id = id; this.uid = uid; this.windowIndex = windowIndex; this.durationUs = durationUs; this.positionInWindowUs = positionInWindowUs; this.adPlaybackState = adPlaybackState; - this.isPlaceholder = false; + this.isPlaceholder = isPlaceholder; return this; } @@ -904,8 +914,8 @@ public abstract class Timeline implements Bundleable { windowIndex, durationUs, positionInWindowUs, - adPlaybackState); - period.isPlaceholder = isPlaceholder; + adPlaybackState, + isPlaceholder); return period; } @@ -1485,8 +1495,14 @@ public abstract class Timeline implements Bundleable { @Override public Period getPeriod(int periodIndex, Period period, boolean ignoredSetIds) { Period p = periods.get(periodIndex); - period.set(p.id, p.uid, p.windowIndex, p.durationUs, p.positionInWindowUs, p.adPlaybackState); - period.isPlaceholder = p.isPlaceholder; + period.set( + p.id, + p.uid, + p.windowIndex, + p.durationUs, + p.positionInWindowUs, + p.adPlaybackState, + p.isPlaceholder); return period; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/MaskingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/MaskingMediaSource.java index 0f55b39cb6..e7c27ba95e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/MaskingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/MaskingMediaSource.java @@ -24,6 +24,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline.Window; +import com.google.android.exoplayer2.source.ads.AdPlaybackState; import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.util.Assertions; @@ -400,8 +401,9 @@ public final class MaskingMediaSource extends CompositeMediaSource { /* uid= */ setIds ? MaskingTimeline.MASKING_EXTERNAL_PERIOD_UID : null, /* windowIndex= */ 0, /* durationUs = */ C.TIME_UNSET, - /* positionInWindowUs= */ 0); - period.isPlaceholder = true; + /* positionInWindowUs= */ 0, + /* adPlaybackState= */ AdPlaybackState.NONE, + /* isPlaceholder= */ true); return period; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/SinglePeriodAdTimeline.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/SinglePeriodAdTimeline.java index cc82510a29..c1a655e522 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ads/SinglePeriodAdTimeline.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ads/SinglePeriodAdTimeline.java @@ -52,7 +52,8 @@ public final class SinglePeriodAdTimeline extends ForwardingTimeline { period.windowIndex, durationUs, period.getPositionInWindowUs(), - adPlaybackState); + adPlaybackState, + period.isPlaceholder); return period; } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTimeline.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTimeline.java index ae4073aa48..e8b4317d6a 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTimeline.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTimeline.java @@ -416,8 +416,8 @@ public final class FakeTimeline extends Timeline { windowIndex, periodDurationUs, positionInWindowUs, - windowDefinition.adPlaybackState); - period.isPlaceholder = windowDefinition.isPlaceholder; + windowDefinition.adPlaybackState, + windowDefinition.isPlaceholder); return period; }