From 9e3bee89e1f1a67f189d81b718df7dfc86541dfb Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 21 Aug 2019 15:22:47 +0100 Subject: [PATCH] Prevent NPE in ImaAdsLoader onPositionDiscontinuity. Any seek before the first timeline becomes available will result in a NPE. Change it to handle that case gracefully. Issue:#5831 PiperOrigin-RevId: 264603061 --- .../google/android/exoplayer2/ext/ima/ImaAdsLoader.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java index 11071a7e4b4..f5ec9f120dc 100644 --- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java +++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java @@ -484,6 +484,7 @@ private ImaAdsLoader( pendingContentPositionMs = C.TIME_UNSET; adGroupIndex = C.INDEX_UNSET; contentDurationMs = C.TIME_UNSET; + timeline = Timeline.EMPTY; } /** @@ -967,7 +968,7 @@ public void onTimelineChanged( if (contentDurationUs != C.TIME_UNSET) { adPlaybackState = adPlaybackState.withContentDurationUs(contentDurationUs); } - updateImaStateForPlayerState(); + onPositionDiscontinuity(Player.DISCONTINUITY_REASON_INTERNAL); } @Override @@ -1022,7 +1023,7 @@ public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { } } updateAdPlaybackState(); - } else { + } else if (!timeline.isEmpty()) { long positionMs = player.getCurrentPosition(); timeline.getPeriod(0, period); int newAdGroupIndex = period.getAdGroupIndexForPositionUs(C.msToUs(positionMs)); @@ -1034,9 +1035,8 @@ public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { } } } - } else { - updateImaStateForPlayerState(); } + updateImaStateForPlayerState(); } // Internal methods.