Rabbit-R1/switch port/java/sources/androidx/media3/exoplayer/util/EventLogger.java

442 lines
20 KiB
Java
Raw Normal View History

2024-05-21 16:08:36 -05:00
package androidx.media3.exoplayer.util;
import android.os.SystemClock;
import android.text.TextUtils;
import androidx.media3.common.AudioAttributes;
import androidx.media3.common.Format;
import androidx.media3.common.MediaItem;
import androidx.media3.common.Metadata;
import androidx.media3.common.PlaybackException;
import androidx.media3.common.PlaybackParameters;
import androidx.media3.common.Player;
import androidx.media3.common.Timeline;
import androidx.media3.common.Tracks;
import androidx.media3.common.VideoSize;
import androidx.media3.common.util.Log;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.DecoderCounters;
import androidx.media3.exoplayer.DecoderReuseEvaluation;
import androidx.media3.exoplayer.analytics.AnalyticsListener;
import androidx.media3.exoplayer.source.LoadEventInfo;
import androidx.media3.exoplayer.source.MediaLoadData;
import androidx.media3.exoplayer.trackselection.MappingTrackSelector;
import com.google.common.collect.ImmutableList;
import io.sentry.protocol.SentryThread;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Locale;
/* loaded from: classes2.dex */
public class EventLogger implements AnalyticsListener {
private static final String DEFAULT_TAG = "EventLogger";
private static final int MAX_TIMELINE_ITEM_LINES = 3;
private static final NumberFormat TIME_FORMAT;
private final Timeline.Period period;
private final long startTimeMs;
private final String tag;
private final Timeline.Window window;
private static String getDiscontinuityReasonString(int i) {
return i != 0 ? i != 1 ? i != 2 ? i != 3 ? i != 4 ? i != 5 ? "?" : "INTERNAL" : "REMOVE" : "SKIP" : "SEEK_ADJUSTMENT" : "SEEK" : "AUTO_TRANSITION";
}
private static String getMediaItemTransitionReasonString(int i) {
return i != 0 ? i != 1 ? i != 2 ? i != 3 ? "?" : "PLAYLIST_CHANGED" : "SEEK" : "AUTO" : "REPEAT";
}
private static String getPlayWhenReadyChangeReasonString(int i) {
return i != 1 ? i != 2 ? i != 3 ? i != 4 ? i != 5 ? "?" : "END_OF_MEDIA_ITEM" : "REMOTE" : "AUDIO_BECOMING_NOISY" : "AUDIO_FOCUS_LOSS" : "USER_REQUEST";
}
private static String getPlaybackSuppressionReasonString(int i) {
return i != 0 ? i != 1 ? "?" : "TRANSIENT_AUDIO_FOCUS_LOSS" : "NONE";
}
private static String getRepeatModeString(int i) {
return i != 0 ? i != 1 ? i != 2 ? "?" : "ALL" : "ONE" : "OFF";
}
private static String getStateString(int i) {
return i != 1 ? i != 2 ? i != 3 ? i != 4 ? "?" : "ENDED" : "READY" : "BUFFERING" : "IDLE";
}
private static String getTimelineChangeReasonString(int i) {
return i != 0 ? i != 1 ? "?" : "SOURCE_UPDATE" : "PLAYLIST_CHANGED";
}
private static String getTrackStatusString(boolean z) {
return z ? "[X]" : "[ ]";
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onBandwidthEstimate(AnalyticsListener.EventTime eventTime, int i, long j, long j2) {
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onLoadCanceled(AnalyticsListener.EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onLoadCompleted(AnalyticsListener.EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onLoadStarted(AnalyticsListener.EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData) {
}
static {
NumberFormat numberFormat = NumberFormat.getInstance(Locale.US);
TIME_FORMAT = numberFormat;
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(2);
numberFormat.setGroupingUsed(false);
}
public EventLogger() {
this(DEFAULT_TAG);
}
public EventLogger(String str) {
this.tag = str;
this.window = new Timeline.Window();
this.period = new Timeline.Period();
this.startTimeMs = SystemClock.elapsedRealtime();
}
@Deprecated
public EventLogger(MappingTrackSelector mappingTrackSelector) {
this(DEFAULT_TAG);
}
@Deprecated
public EventLogger(MappingTrackSelector mappingTrackSelector, String str) {
this(str);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onIsLoadingChanged(AnalyticsListener.EventTime eventTime, boolean z) {
logd(eventTime, "loading", Boolean.toString(z));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPlaybackStateChanged(AnalyticsListener.EventTime eventTime, int i) {
logd(eventTime, SentryThread.JsonKeys.STATE, getStateString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPlayWhenReadyChanged(AnalyticsListener.EventTime eventTime, boolean z, int i) {
logd(eventTime, "playWhenReady", z + ", " + getPlayWhenReadyChangeReasonString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPlaybackSuppressionReasonChanged(AnalyticsListener.EventTime eventTime, int i) {
logd(eventTime, "playbackSuppressionReason", getPlaybackSuppressionReasonString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onIsPlayingChanged(AnalyticsListener.EventTime eventTime, boolean z) {
logd(eventTime, "isPlaying", Boolean.toString(z));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onRepeatModeChanged(AnalyticsListener.EventTime eventTime, int i) {
logd(eventTime, "repeatMode", getRepeatModeString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onShuffleModeChanged(AnalyticsListener.EventTime eventTime, boolean z) {
logd(eventTime, "shuffleModeEnabled", Boolean.toString(z));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPositionDiscontinuity(AnalyticsListener.EventTime eventTime, Player.PositionInfo positionInfo, Player.PositionInfo positionInfo2, int i) {
StringBuilder sb = new StringBuilder("reason=");
sb.append(getDiscontinuityReasonString(i)).append(", PositionInfo:old [mediaItem=").append(positionInfo.mediaItemIndex).append(", period=").append(positionInfo.periodIndex).append(", pos=").append(positionInfo.positionMs);
if (positionInfo.adGroupIndex != -1) {
sb.append(", contentPos=").append(positionInfo.contentPositionMs).append(", adGroup=").append(positionInfo.adGroupIndex).append(", ad=").append(positionInfo.adIndexInAdGroup);
}
sb.append("], PositionInfo:new [mediaItem=").append(positionInfo2.mediaItemIndex).append(", period=").append(positionInfo2.periodIndex).append(", pos=").append(positionInfo2.positionMs);
if (positionInfo2.adGroupIndex != -1) {
sb.append(", contentPos=").append(positionInfo2.contentPositionMs).append(", adGroup=").append(positionInfo2.adGroupIndex).append(", ad=").append(positionInfo2.adIndexInAdGroup);
}
sb.append("]");
logd(eventTime, "positionDiscontinuity", sb.toString());
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPlaybackParametersChanged(AnalyticsListener.EventTime eventTime, PlaybackParameters playbackParameters) {
logd(eventTime, "playbackParameters", playbackParameters.toString());
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onTimelineChanged(AnalyticsListener.EventTime eventTime, int i) {
int periodCount = eventTime.timeline.getPeriodCount();
int windowCount = eventTime.timeline.getWindowCount();
logd("timeline [" + getEventTimeString(eventTime) + ", periodCount=" + periodCount + ", windowCount=" + windowCount + ", reason=" + getTimelineChangeReasonString(i));
for (int i2 = 0; i2 < Math.min(periodCount, 3); i2++) {
eventTime.timeline.getPeriod(i2, this.period);
logd(" period [" + getTimeString(this.period.getDurationMs()) + "]");
}
if (periodCount > 3) {
logd(" ...");
}
for (int i3 = 0; i3 < Math.min(windowCount, 3); i3++) {
eventTime.timeline.getWindow(i3, this.window);
logd(" window [" + getTimeString(this.window.getDurationMs()) + ", seekable=" + this.window.isSeekable + ", dynamic=" + this.window.isDynamic + "]");
}
if (windowCount > 3) {
logd(" ...");
}
logd("]");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onMediaItemTransition(AnalyticsListener.EventTime eventTime, MediaItem mediaItem, int i) {
logd("mediaItem [" + getEventTimeString(eventTime) + ", reason=" + getMediaItemTransitionReasonString(i) + "]");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onPlayerError(AnalyticsListener.EventTime eventTime, PlaybackException playbackException) {
loge(eventTime, "playerFailed", playbackException);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onTracksChanged(AnalyticsListener.EventTime eventTime, Tracks tracks) {
Metadata metadata;
logd("tracks [" + getEventTimeString(eventTime));
ImmutableList<Tracks.Group> groups = tracks.getGroups();
for (int i = 0; i < groups.size(); i++) {
Tracks.Group group = groups.get(i);
logd(" group [");
for (int i2 = 0; i2 < group.length; i2++) {
logd(" " + getTrackStatusString(group.isTrackSelected(i2)) + " Track:" + i2 + ", " + Format.toLogString(group.getTrackFormat(i2)) + ", supported=" + Util.getFormatSupportString(group.getTrackSupport(i2)));
}
logd(" ]");
}
boolean z = false;
for (int i3 = 0; !z && i3 < groups.size(); i3++) {
Tracks.Group group2 = groups.get(i3);
for (int i4 = 0; !z && i4 < group2.length; i4++) {
if (group2.isTrackSelected(i4) && (metadata = group2.getTrackFormat(i4).metadata) != null && metadata.length() > 0) {
logd(" Metadata [");
printMetadata(metadata, " ");
logd(" ]");
z = true;
}
}
}
logd("]");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onMetadata(AnalyticsListener.EventTime eventTime, Metadata metadata) {
logd("metadata [" + getEventTimeString(eventTime));
printMetadata(metadata, " ");
logd("]");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioEnabled(AnalyticsListener.EventTime eventTime, DecoderCounters decoderCounters) {
logd(eventTime, "audioEnabled");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioDecoderInitialized(AnalyticsListener.EventTime eventTime, String str, long j) {
logd(eventTime, "audioDecoderInitialized", str);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioInputFormatChanged(AnalyticsListener.EventTime eventTime, Format format, DecoderReuseEvaluation decoderReuseEvaluation) {
logd(eventTime, "audioInputFormat", Format.toLogString(format));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioUnderrun(AnalyticsListener.EventTime eventTime, int i, long j, long j2) {
loge(eventTime, "audioTrackUnderrun", i + ", " + j + ", " + j2, null);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioDecoderReleased(AnalyticsListener.EventTime eventTime, String str) {
logd(eventTime, "audioDecoderReleased", str);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioDisabled(AnalyticsListener.EventTime eventTime, DecoderCounters decoderCounters) {
logd(eventTime, "audioDisabled");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioSessionIdChanged(AnalyticsListener.EventTime eventTime, int i) {
logd(eventTime, "audioSessionId", Integer.toString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onAudioAttributesChanged(AnalyticsListener.EventTime eventTime, AudioAttributes audioAttributes) {
logd(eventTime, "audioAttributes", audioAttributes.contentType + "," + audioAttributes.flags + "," + audioAttributes.usage + "," + audioAttributes.allowedCapturePolicy);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onSkipSilenceEnabledChanged(AnalyticsListener.EventTime eventTime, boolean z) {
logd(eventTime, "skipSilenceEnabled", Boolean.toString(z));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVolumeChanged(AnalyticsListener.EventTime eventTime, float f) {
logd(eventTime, "volume", Float.toString(f));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoEnabled(AnalyticsListener.EventTime eventTime, DecoderCounters decoderCounters) {
logd(eventTime, "videoEnabled");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoDecoderInitialized(AnalyticsListener.EventTime eventTime, String str, long j) {
logd(eventTime, "videoDecoderInitialized", str);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoInputFormatChanged(AnalyticsListener.EventTime eventTime, Format format, DecoderReuseEvaluation decoderReuseEvaluation) {
logd(eventTime, "videoInputFormat", Format.toLogString(format));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDroppedVideoFrames(AnalyticsListener.EventTime eventTime, int i, long j) {
logd(eventTime, "droppedFrames", Integer.toString(i));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoDecoderReleased(AnalyticsListener.EventTime eventTime, String str) {
logd(eventTime, "videoDecoderReleased", str);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoDisabled(AnalyticsListener.EventTime eventTime, DecoderCounters decoderCounters) {
logd(eventTime, "videoDisabled");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onRenderedFirstFrame(AnalyticsListener.EventTime eventTime, Object obj, long j) {
logd(eventTime, "renderedFirstFrame", String.valueOf(obj));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onVideoSizeChanged(AnalyticsListener.EventTime eventTime, VideoSize videoSize) {
logd(eventTime, "videoSize", videoSize.width + ", " + videoSize.height);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onLoadError(AnalyticsListener.EventTime eventTime, LoadEventInfo loadEventInfo, MediaLoadData mediaLoadData, IOException iOException, boolean z) {
printInternalError(eventTime, "loadError", iOException);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onSurfaceSizeChanged(AnalyticsListener.EventTime eventTime, int i, int i2) {
logd(eventTime, "surfaceSize", i + ", " + i2);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onUpstreamDiscarded(AnalyticsListener.EventTime eventTime, MediaLoadData mediaLoadData) {
logd(eventTime, "upstreamDiscarded", Format.toLogString(mediaLoadData.trackFormat));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDownstreamFormatChanged(AnalyticsListener.EventTime eventTime, MediaLoadData mediaLoadData) {
logd(eventTime, "downstreamFormat", Format.toLogString(mediaLoadData.trackFormat));
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmSessionAcquired(AnalyticsListener.EventTime eventTime, int i) {
logd(eventTime, "drmSessionAcquired", "state=" + i);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmSessionManagerError(AnalyticsListener.EventTime eventTime, Exception exc) {
printInternalError(eventTime, "drmSessionManagerError", exc);
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmKeysRestored(AnalyticsListener.EventTime eventTime) {
logd(eventTime, "drmKeysRestored");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmKeysRemoved(AnalyticsListener.EventTime eventTime) {
logd(eventTime, "drmKeysRemoved");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmKeysLoaded(AnalyticsListener.EventTime eventTime) {
logd(eventTime, "drmKeysLoaded");
}
@Override // androidx.media3.exoplayer.analytics.AnalyticsListener
public void onDrmSessionReleased(AnalyticsListener.EventTime eventTime) {
logd(eventTime, "drmSessionReleased");
}
protected void logd(String str) {
Log.d(this.tag, str);
}
protected void loge(String str) {
Log.e(this.tag, str);
}
private void logd(AnalyticsListener.EventTime eventTime, String str) {
logd(getEventString(eventTime, str, null, null));
}
private void logd(AnalyticsListener.EventTime eventTime, String str, String str2) {
logd(getEventString(eventTime, str, str2, null));
}
private void loge(AnalyticsListener.EventTime eventTime, String str, Throwable th) {
loge(getEventString(eventTime, str, null, th));
}
private void loge(AnalyticsListener.EventTime eventTime, String str, String str2, Throwable th) {
loge(getEventString(eventTime, str, str2, th));
}
private void printInternalError(AnalyticsListener.EventTime eventTime, String str, Exception exc) {
loge(eventTime, "internalError", str, exc);
}
private void printMetadata(Metadata metadata, String str) {
for (int i = 0; i < metadata.length(); i++) {
logd(str + metadata.get(i));
}
}
private String getEventString(AnalyticsListener.EventTime eventTime, String str, String str2, Throwable th) {
String str3 = str + " [" + getEventTimeString(eventTime);
if (th instanceof PlaybackException) {
str3 = str3 + ", errorCode=" + ((PlaybackException) th).getErrorCodeName();
}
if (str2 != null) {
str3 = str3 + ", " + str2;
}
String throwableString = Log.getThrowableString(th);
if (!TextUtils.isEmpty(throwableString)) {
str3 = str3 + "\n " + throwableString.replace("\n", "\n ") + '\n';
}
return str3 + "]";
}
private String getEventTimeString(AnalyticsListener.EventTime eventTime) {
String str = "window=" + eventTime.windowIndex;
if (eventTime.mediaPeriodId != null) {
str = str + ", period=" + eventTime.timeline.getIndexOfPeriod(eventTime.mediaPeriodId.periodUid);
if (eventTime.mediaPeriodId.isAd()) {
str = (str + ", adGroup=" + eventTime.mediaPeriodId.adGroupIndex) + ", ad=" + eventTime.mediaPeriodId.adIndexInAdGroup;
}
}
return "eventTime=" + getTimeString(eventTime.realtimeMs - this.startTimeMs) + ", mediaPos=" + getTimeString(eventTime.eventPlaybackPositionMs) + ", " + str;
}
private static String getTimeString(long j) {
return j == -9223372036854775807L ? "?" : TIME_FORMAT.format(((float) j) / 1000.0f);
}
}