From 0bae410f7def9b3b1e4545d3d299dda0cab54b83 Mon Sep 17 00:00:00 2001 From: bachinger Date: Tue, 21 Mar 2023 10:55:44 +0000 Subject: [PATCH] Use final reference to content timeline inside handler message The content timeline field may be updated when the live timeline is refreshed in the looper event preceding the runnable that is posted to the player thread. Hence a new timeline may contain a new period uid that is not present in the ad playback state map. Using a final reference makes sure period and ad playback state match when asserted. PiperOrigin-RevId: 518228165 --- .../source/ads/ServerSideAdInsertionMediaSource.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java index 21d9bda7d8..296cc3a3a6 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource.java @@ -188,6 +188,7 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource if (playbackHandler == null) { this.adPlaybackStates = adPlaybackStates; } else { + Timeline finalContentTimeline = contentTimeline; playbackHandler.post( () -> { for (SharedMediaPeriod mediaPeriod : mediaPeriods.values()) { @@ -206,9 +207,9 @@ public final class ServerSideAdInsertionMediaSource extends BaseMediaSource } } this.adPlaybackStates = adPlaybackStates; - if (contentTimeline != null) { + if (finalContentTimeline != null) { refreshSourceInfo( - new ServerSideAdInsertionTimeline(contentTimeline, adPlaybackStates)); + new ServerSideAdInsertionTimeline(finalContentTimeline, adPlaybackStates)); } }); }