From bab04ebf2c9199608f43b1cc02f1d1afb41fc292 Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 9 Aug 2023 09:51:56 +0000 Subject: [PATCH] Verify source is not released before updating ad playback state Updates to the ad playback state are posted on the main handler, so they may arrive after the source has already been released (=the internal MediaSource is null). This can cause NPEs. PiperOrigin-RevId: 555102426 (cherry picked from commit 20d2ce7ce80c5e29c50438a6d581c1c36c1b0771) --- .../exoplayer/ima/ImaServerSideAdInsertionMediaSource.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java index 7c2751ce91..1d9eb0c9f8 100644 --- a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java @@ -698,7 +698,9 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou @MainThread private void invalidateServerSideAdInsertionAdPlaybackState() { - if (!adPlaybackState.equals(AdPlaybackState.NONE) && contentTimeline != null) { + if (!adPlaybackState.equals(AdPlaybackState.NONE) + && contentTimeline != null + && serverSideAdInsertionMediaSource != null) { Timeline contentTimeline = checkNotNull(this.contentTimeline); ImmutableMap splitAdPlaybackStates; if (Objects.equals(streamRequest.getFormat(), StreamFormat.DASH)) {