From e45345e21b92df65510a64426b4ff031b90b58db Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 7 Aug 2017 13:28:01 -0700 Subject: [PATCH] Fix missing source info refresh notification ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=164502580 --- .../exoplayer2/ExoPlayerImplInternal.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index cb04501fc0..a789dbc1b2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -975,11 +975,10 @@ import java.io.IOException; mediaPeriodInfoSequence.setTimeline(timeline); Object manifest = timelineAndManifest.second; - int processedInitialSeekCount = 0; if (oldTimeline == null) { if (pendingInitialSeekCount > 0) { Pair periodPosition = resolveSeekPosition(pendingSeekPosition); - processedInitialSeekCount = pendingInitialSeekCount; + int processedInitialSeekCount = pendingInitialSeekCount; pendingInitialSeekCount = 0; pendingSeekPosition = null; if (periodPosition == null) { @@ -996,7 +995,7 @@ import java.io.IOException; } } else if (playbackInfo.startPositionUs == C.TIME_UNSET) { if (timeline.isEmpty()) { - handleSourceInfoRefreshEndedPlayback(manifest, processedInitialSeekCount); + handleSourceInfoRefreshEndedPlayback(manifest); } else { Pair defaultPosition = getPeriodPosition(0, C.TIME_UNSET); int periodIndex = defaultPosition.first; @@ -1005,8 +1004,10 @@ import java.io.IOException; startPositionUs); playbackInfo = new PlaybackInfo(periodId, periodId.isAd() ? 0 : startPositionUs, startPositionUs); - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); } + } else { + notifySourceInfoRefresh(manifest); } return; } @@ -1015,7 +1016,7 @@ import java.io.IOException; MediaPeriodHolder periodHolder = playingPeriodHolder != null ? playingPeriodHolder : loadingPeriodHolder; if (periodHolder == null && playingPeriodIndex >= oldTimeline.getPeriodCount()) { - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); return; } Object playingPeriodUid = periodHolder == null @@ -1027,7 +1028,7 @@ import java.io.IOException; int newPeriodIndex = resolveSubsequentPeriod(playingPeriodIndex, oldTimeline, timeline); if (newPeriodIndex == C.INDEX_UNSET) { // We failed to resolve a suitable restart position. - handleSourceInfoRefreshEndedPlayback(manifest, processedInitialSeekCount); + handleSourceInfoRefreshEndedPlayback(manifest); return; } // We resolved a subsequent period. Seek to the default position in the corresponding window. @@ -1055,7 +1056,7 @@ import java.io.IOException; MediaPeriodId periodId = new MediaPeriodId(newPeriodIndex); newPositionUs = seekToPeriodPosition(periodId, newPositionUs); playbackInfo = new PlaybackInfo(periodId, newPositionUs); - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); return; } @@ -1072,14 +1073,14 @@ import java.io.IOException; long newPositionUs = seekToPeriodPosition(periodId, playbackInfo.contentPositionUs); long contentPositionUs = periodId.isAd() ? playbackInfo.contentPositionUs : C.TIME_UNSET; playbackInfo = new PlaybackInfo(periodId, newPositionUs, contentPositionUs); - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); return; } } if (periodHolder == null) { // We don't have any period holders, so we're done. - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); return; } @@ -1117,7 +1118,7 @@ import java.io.IOException; } } - notifySourceInfoRefresh(manifest, processedInitialSeekCount); + notifySourceInfoRefresh(manifest); } private MediaPeriodHolder updatePeriodInfo(MediaPeriodHolder periodHolder, int periodIndex) { @@ -1131,6 +1132,10 @@ import java.io.IOException; } } + private void handleSourceInfoRefreshEndedPlayback(Object manifest) { + handleSourceInfoRefreshEndedPlayback(manifest, 0); + } + private void handleSourceInfoRefreshEndedPlayback(Object manifest, int processedInitialSeekCount) { // Set the playback position to (0,0) for notifying the eventHandler. @@ -1143,6 +1148,10 @@ import java.io.IOException; resetInternal(false); } + private void notifySourceInfoRefresh(Object manifest) { + notifySourceInfoRefresh(manifest, 0); + } + private void notifySourceInfoRefresh(Object manifest, int processedInitialSeekCount) { eventHandler.obtainMessage(MSG_SOURCE_INFO_REFRESHED, new SourceInfo(timeline, manifest, playbackInfo, processedInitialSeekCount)).sendToTarget();