mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Prevent shutter closing for within-window seeks to unprepared periods
Issue: #5507 PiperOrigin-RevId: 315512207
This commit is contained in:
parent
9ef9b56bcd
commit
5aa8a7a507
@ -191,6 +191,10 @@
|
||||
([#6926](https://github.com/google/ExoPlayer/issues/6926)).
|
||||
* Update `TrackSelectionDialogBuilder` to use AndroidX Compat Dialog
|
||||
([#7357](https://github.com/google/ExoPlayer/issues/7357)).
|
||||
* Prevent the video surface going black when seeking to an unprepared
|
||||
period within the current window. For example when seeking over an ad
|
||||
group, or to the next period in a multi-period DASH stream
|
||||
([#5507](https://github.com/google/ExoPlayer/issues/5507)).
|
||||
* Metadata: Add minimal DVB Application Information Table (AIT) support
|
||||
([#6922](https://github.com/google/ExoPlayer/pull/6922)).
|
||||
* Cast extension: Implement playlist API and deprecate the old queue
|
||||
|
@ -48,6 +48,8 @@ import com.google.android.exoplayer2.ExoPlaybackException;
|
||||
import com.google.android.exoplayer2.PlaybackPreparer;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.Player.DiscontinuityReason;
|
||||
import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.Timeline.Period;
|
||||
import com.google.android.exoplayer2.metadata.Metadata;
|
||||
import com.google.android.exoplayer2.metadata.flac.PictureFrame;
|
||||
import com.google.android.exoplayer2.metadata.id3.ApicFrame;
|
||||
@ -1554,6 +1556,13 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider
|
||||
SingleTapListener,
|
||||
PlayerControlView.VisibilityListener {
|
||||
|
||||
private final Period period;
|
||||
private @Nullable Object lastPeriodUidWithTracks;
|
||||
|
||||
public ComponentListener() {
|
||||
period = new Period();
|
||||
}
|
||||
|
||||
// TextOutput implementation
|
||||
|
||||
@Override
|
||||
@ -1602,6 +1611,29 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider
|
||||
|
||||
@Override
|
||||
public void onTracksChanged(TrackGroupArray tracks, TrackSelectionArray selections) {
|
||||
// Suppress the update if transitioning to an unprepared period within the same window. This
|
||||
// is necessary to avoid closing the shutter when such a transition occurs. See:
|
||||
// https://github.com/google/ExoPlayer/issues/5507.
|
||||
Player player = Assertions.checkNotNull(PlayerView.this.player);
|
||||
Timeline timeline = player.getCurrentTimeline();
|
||||
if (timeline.isEmpty()) {
|
||||
lastPeriodUidWithTracks = null;
|
||||
} else if (!player.getCurrentTrackGroups().isEmpty()) {
|
||||
lastPeriodUidWithTracks =
|
||||
timeline.getPeriod(player.getCurrentPeriodIndex(), period, /* setIds= */ true).uid;
|
||||
} else if (lastPeriodUidWithTracks != null) {
|
||||
int lastPeriodIndexWithTracks = timeline.getIndexOfPeriod(lastPeriodUidWithTracks);
|
||||
if (lastPeriodIndexWithTracks != C.INDEX_UNSET) {
|
||||
int lastWindowIndexWithTracks =
|
||||
timeline.getPeriod(lastPeriodIndexWithTracks, period).windowIndex;
|
||||
if (player.getCurrentWindowIndex() == lastWindowIndexWithTracks) {
|
||||
// We're in the same window. Suppress the update.
|
||||
return;
|
||||
}
|
||||
}
|
||||
lastPeriodUidWithTracks = null;
|
||||
}
|
||||
|
||||
updateForCurrentTrackSelections(/* isNewPlayer= */ false);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user