Misc clean-up in ExoPlayerImpl.

This brings listener invocations closer together and removes
unnecessary methods.

Also fixes a bug where a change in track selection parameters only
queued a callback but never flushed it to actually inform the
listeners.

#minor-release

PiperOrigin-RevId: 427201691
This commit is contained in:
tonihei 2022-02-08 16:42:01 +00:00 committed by Ian Baker
parent 6dbf9cac8c
commit 9042aa7c7a

View File

@ -757,29 +757,6 @@ import java.util.concurrent.TimeoutException;
playWhenReady, playerCommand, getPlayWhenReadyChangeReason(playWhenReady, playerCommand)); playWhenReady, playerCommand, getPlayWhenReadyChangeReason(playWhenReady, playerCommand));
} }
public void setPlayWhenReady(
boolean playWhenReady,
@PlaybackSuppressionReason int playbackSuppressionReason,
@PlayWhenReadyChangeReason int playWhenReadyChangeReason) {
if (playbackInfo.playWhenReady == playWhenReady
&& playbackInfo.playbackSuppressionReason == playbackSuppressionReason) {
return;
}
pendingOperationAcks++;
PlaybackInfo playbackInfo =
this.playbackInfo.copyWithPlayWhenReady(playWhenReady, playbackSuppressionReason);
internalPlayer.setPlayWhenReady(playWhenReady, playbackSuppressionReason);
updatePlaybackInfo(
playbackInfo,
/* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
playWhenReadyChangeReason,
/* seekProcessed= */ false,
/* positionDiscontinuity= */ false,
/* ignored */ DISCONTINUITY_REASON_INTERNAL,
/* ignored */ C.TIME_UNSET,
/* ignored */ C.INDEX_UNSET);
}
public boolean getPlayWhenReady() { public boolean getPlayWhenReady() {
verifyApplicationThread(); verifyApplicationThread();
return playbackInfo.playWhenReady; return playbackInfo.playWhenReady;
@ -1201,7 +1178,7 @@ import java.util.concurrent.TimeoutException;
return; return;
} }
trackSelector.setParameters(parameters); trackSelector.setParameters(parameters);
listeners.queueEvent( listeners.sendEvent(
EVENT_TRACK_SELECTION_PARAMETERS_CHANGED, EVENT_TRACK_SELECTION_PARAMETERS_CHANGED,
listener -> listener.onTrackSelectionParametersChanged(parameters)); listener -> listener.onTrackSelectionParametersChanged(parameters));
} }
@ -1211,20 +1188,6 @@ import java.util.concurrent.TimeoutException;
return mediaMetadata; return mediaMetadata;
} }
private void onMetadata(Metadata metadata) {
staticAndDynamicMediaMetadata =
staticAndDynamicMediaMetadata.buildUpon().populateFromMetadata(metadata).build();
MediaMetadata newMediaMetadata = buildUpdatedMediaMetadata();
if (newMediaMetadata.equals(mediaMetadata)) {
return;
}
mediaMetadata = newMediaMetadata;
listeners.sendEvent(
EVENT_MEDIA_METADATA_CHANGED, listener -> listener.onMediaMetadataChanged(mediaMetadata));
}
public MediaMetadata getPlaylistMetadata() { public MediaMetadata getPlaylistMetadata() {
verifyApplicationThread(); verifyApplicationThread();
return playlistMetadata; return playlistMetadata;
@ -2371,7 +2334,7 @@ import java.util.concurrent.TimeoutException;
* *
* <p>{@link MediaItem} {@link MediaMetadata} is prioritized, with any gaps/missing fields * <p>{@link MediaItem} {@link MediaMetadata} is prioritized, with any gaps/missing fields
* populated by metadata from static ({@link TrackGroup} {@link Format}) and dynamic ({@link * populated by metadata from static ({@link TrackGroup} {@link Format}) and dynamic ({@link
* #onMetadata(Metadata)}) sources. * MetadataOutput#onMetadata(Metadata)}) sources.
*/ */
private MediaMetadata buildUpdatedMediaMetadata() { private MediaMetadata buildUpdatedMediaMetadata() {
Timeline timeline = getCurrentTimeline(); Timeline timeline = getCurrentTimeline();
@ -2511,7 +2474,23 @@ import java.util.concurrent.TimeoutException;
playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY
? Player.PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS ? Player.PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS
: Player.PLAYBACK_SUPPRESSION_REASON_NONE; : Player.PLAYBACK_SUPPRESSION_REASON_NONE;
setPlayWhenReady(playWhenReady, playbackSuppressionReason, playWhenReadyChangeReason); if (playbackInfo.playWhenReady == playWhenReady
&& playbackInfo.playbackSuppressionReason == playbackSuppressionReason) {
return;
}
pendingOperationAcks++;
PlaybackInfo playbackInfo =
this.playbackInfo.copyWithPlayWhenReady(playWhenReady, playbackSuppressionReason);
internalPlayer.setPlayWhenReady(playWhenReady, playbackSuppressionReason);
updatePlaybackInfo(
playbackInfo,
/* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
playWhenReadyChangeReason,
/* seekProcessed= */ false,
/* positionDiscontinuity= */ false,
/* ignored */ DISCONTINUITY_REASON_INTERNAL,
/* ignored */ C.TIME_UNSET,
/* ignored */ C.INDEX_UNSET);
} }
private void updateWakeAndWifiLock() { private void updateWakeAndWifiLock() {
@ -2810,7 +2789,15 @@ import java.util.concurrent.TimeoutException;
@Override @Override
public void onMetadata(Metadata metadata) { public void onMetadata(Metadata metadata) {
ExoPlayerImpl.this.onMetadata(metadata); staticAndDynamicMediaMetadata =
staticAndDynamicMediaMetadata.buildUpon().populateFromMetadata(metadata).build();
MediaMetadata newMediaMetadata = buildUpdatedMediaMetadata();
if (!newMediaMetadata.equals(mediaMetadata)) {
mediaMetadata = newMediaMetadata;
listeners.sendEvent(
EVENT_MEDIA_METADATA_CHANGED,
listener -> listener.onMediaMetadataChanged(mediaMetadata));
}
// TODO(internal b/187152483): Events should be dispatched via ListenerSet // TODO(internal b/187152483): Events should be dispatched via ListenerSet
for (Listener listener : listenerArraySet) { for (Listener listener : listenerArraySet) {
listener.onMetadata(metadata); listener.onMetadata(metadata);