From aa570621991904c18291369d9e804c94351cad70 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 27 Feb 2018 13:57:18 +0000 Subject: [PATCH] Restore equivalence --- README.md | 4 +- .../extractor/mkv/MatroskaExtractor.java | 18 +- .../exoplayer2/offline/DownloadService.java | 1 + .../upstream/DefaultHttpDataSource.java | 4 +- .../android/exoplayer2/util/EventLogger.java | 243 +++++++++++------- 5 files changed, 166 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index 8755ac588d..13dfaddab3 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ repositories { } ``` -Next add a gradle compile dependency to the `build.gradle` file of your app -module. The following will add a dependency to the full library: +Next add a dependency in the `build.gradle` file of your app module. The +following will add a dependency to the full library: ```gradle implementation 'com.google.android.exoplayer:exoplayer:2.X.X' diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java index c2b3735265..79537e1c24 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java @@ -1929,12 +1929,12 @@ public final class MatroskaExtractor implements Extractor { /** * Builds initialization data for a {@link Format} from FourCC codec private data. - *

- * VC1 and H263 are the only supported compression types. * - * @return A pair object with the first object being the codec mime type - * and the second object the initialization data for the {@link Format}, - * or null if the compression type is not a currently supported type (VC1 or H263). + *

VC1 and H263 are the only supported compression types. + * + * @return The codec mime type and initialization data. If the compression type is not supported + * then the mime type is set to {@link MimeTypes#VIDEO_UNKNOWN} and the initialization data + * is {@code null}. * @throws ParserException If the initialization data could not be built. */ private static Pair> parseFourCcPrivate(ParsableByteArray buffer) @@ -1944,14 +1944,16 @@ public final class MatroskaExtractor implements Extractor { long compression = buffer.readLittleEndianUnsignedInt(); if (compression == FOURCC_COMPRESSION_DIVX) { return new Pair<>(MimeTypes.VIDEO_H263, null); - } else if (compression == FOURCC_COMPRESSION_VC1) { + } else if (compression == FOURCC_COMPRESSION_VC1) { // Search for the initialization data from the end of the BITMAPINFOHEADER. The last 20 // bytes of which are: sizeImage(4), xPel/m (4), yPel/m (4), clrUsed(4), clrImportant(4). int startOffset = buffer.getPosition() + 20; byte[] bufferData = buffer.data; for (int offset = startOffset; offset < bufferData.length - 4; offset++) { - if (bufferData[offset] == 0x00 && bufferData[offset + 1] == 0x00 - && bufferData[offset + 2] == 0x01 && bufferData[offset + 3] == 0x0F) { + if (bufferData[offset] == 0x00 + && bufferData[offset + 1] == 0x00 + && bufferData[offset + 2] == 0x01 + && bufferData[offset + 3] == 0x0F) { // We've found the initialization data. byte[] initializationData = Arrays.copyOfRange(bufferData, offset, bufferData.length); return new Pair<>(MimeTypes.VIDEO_VC1, Collections.singletonList(initializationData)); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java index 0a6bc062f1..a5656ec109 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java @@ -289,6 +289,7 @@ public abstract class DownloadService extends Service implements DownloadManager @Override public void onIdle(DownloadManager downloadManager) { // Make sure startForeground is called before stopping. + // Workaround for https://buganizer.corp.google.com/issues/69424260 if (Util.SDK_INT >= 26) { Builder notificationBuilder = new Builder(this, getNotificationChannelId()); Notification foregroundNotification = notificationBuilder.build(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java index e8b7f00a56..d45b7182c4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java @@ -614,8 +614,8 @@ public class DefaultHttpDataSource implements HttpDataSource { } String className = inputStream.getClass().getName(); if ("com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream".equals(className) - || "com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream".equals( - className)) { + || "com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream" + .equals(className)) { Class superclass = inputStream.getClass().getSuperclass(); Method unexpectedEndOfInput = superclass.getDeclaredMethod("unexpectedEndOfInput"); unexpectedEndOfInput.setAccessible(true); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java b/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java index 1cac8958c4..df555b824a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java @@ -89,173 +89,207 @@ public class EventLogger @Override public void onLoadingChanged(boolean isLoading) { - logd(TAG, "loading [" + isLoading + "]"); + logd("loading [" + isLoading + "]"); } @Override public void onPlayerStateChanged(boolean playWhenReady, int state) { - logd(TAG, "state [" + getSessionTimeString() + ", " + playWhenReady + ", " - + getStateString(state) + "]"); + logd( + "state [" + + getSessionTimeString() + + ", " + + playWhenReady + + ", " + + getStateString(state) + + "]"); } @Override public void onRepeatModeChanged(@Player.RepeatMode int repeatMode) { - logd(TAG, "repeatMode [" + getRepeatModeString(repeatMode) + "]"); + logd("repeatMode [" + getRepeatModeString(repeatMode) + "]"); } @Override public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) { - logd(TAG, "shuffleModeEnabled [" + shuffleModeEnabled + "]"); + logd("shuffleModeEnabled [" + shuffleModeEnabled + "]"); } @Override public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { - logd(TAG, "positionDiscontinuity [" + getDiscontinuityReasonString(reason) + "]"); + logd("positionDiscontinuity [" + getDiscontinuityReasonString(reason) + "]"); } @Override public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) { - logd(TAG, "playbackParameters " + String.format( - "[speed=%.2f, pitch=%.2f]", playbackParameters.speed, playbackParameters.pitch)); + logd( + "playbackParameters " + + String.format( + "[speed=%.2f, pitch=%.2f]", playbackParameters.speed, playbackParameters.pitch)); } @Override - public void onTimelineChanged(Timeline timeline, Object manifest, - @Player.TimelineChangeReason int reason) { + public void onTimelineChanged( + Timeline timeline, Object manifest, @Player.TimelineChangeReason int reason) { int periodCount = timeline.getPeriodCount(); int windowCount = timeline.getWindowCount(); - logd(TAG, "timelineChanged [periodCount=" + periodCount + ", windowCount=" + windowCount - + ", reason=" + getTimelineChangeReasonString(reason)); + logd( + "timelineChanged [periodCount=" + + periodCount + + ", windowCount=" + + windowCount + + ", reason=" + + getTimelineChangeReasonString(reason)); for (int i = 0; i < Math.min(periodCount, MAX_TIMELINE_ITEM_LINES); i++) { timeline.getPeriod(i, period); - logd(TAG, " " + "period [" + getTimeString(period.getDurationMs()) + "]"); + logd(" " + "period [" + getTimeString(period.getDurationMs()) + "]"); } if (periodCount > MAX_TIMELINE_ITEM_LINES) { - logd(TAG, " ..."); + logd(" ..."); } for (int i = 0; i < Math.min(windowCount, MAX_TIMELINE_ITEM_LINES); i++) { timeline.getWindow(i, window); - logd(TAG, " " + "window [" + getTimeString(window.getDurationMs()) + ", " - + window.isSeekable + ", " + window.isDynamic + "]"); + logd( + " " + + "window [" + + getTimeString(window.getDurationMs()) + + ", " + + window.isSeekable + + ", " + + window.isDynamic + + "]"); } if (windowCount > MAX_TIMELINE_ITEM_LINES) { - logd(TAG, " ..."); + logd(" ..."); } - logd(TAG, "]"); + logd("]"); } @Override public void onPlayerError(ExoPlaybackException e) { - loge(TAG, "playerFailed [" + getSessionTimeString() + "]", e); + loge("playerFailed [" + getSessionTimeString() + "]", e); } @Override public void onTracksChanged(TrackGroupArray ignored, TrackSelectionArray trackSelections) { MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); if (mappedTrackInfo == null) { - logd(TAG, "Tracks []"); + logd("Tracks []"); return; } - logd(TAG, "Tracks ["); + logd("Tracks ["); // Log tracks associated to renderers. for (int rendererIndex = 0; rendererIndex < mappedTrackInfo.length; rendererIndex++) { TrackGroupArray rendererTrackGroups = mappedTrackInfo.getTrackGroups(rendererIndex); TrackSelection trackSelection = trackSelections.get(rendererIndex); if (rendererTrackGroups.length > 0) { - logd(TAG, " Renderer:" + rendererIndex + " ["); + logd(" Renderer:" + rendererIndex + " ["); for (int groupIndex = 0; groupIndex < rendererTrackGroups.length; groupIndex++) { TrackGroup trackGroup = rendererTrackGroups.get(groupIndex); - String adaptiveSupport = getAdaptiveSupportString(trackGroup.length, - mappedTrackInfo.getAdaptiveSupport(rendererIndex, groupIndex, false)); - logd(TAG, " Group:" + groupIndex + ", adaptive_supported=" + adaptiveSupport + " ["); + String adaptiveSupport = + getAdaptiveSupportString( + trackGroup.length, + mappedTrackInfo.getAdaptiveSupport(rendererIndex, groupIndex, false)); + logd(" Group:" + groupIndex + ", adaptive_supported=" + adaptiveSupport + " ["); for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) { String status = getTrackStatusString(trackSelection, trackGroup, trackIndex); - String formatSupport = getFormatSupportString( - mappedTrackInfo.getTrackFormatSupport(rendererIndex, groupIndex, trackIndex)); - logd(TAG, " " + status + " Track:" + trackIndex + ", " - + Format.toLogString(trackGroup.getFormat(trackIndex)) - + ", supported=" + formatSupport); + String formatSupport = + getFormatSupportString( + mappedTrackInfo.getTrackFormatSupport(rendererIndex, groupIndex, trackIndex)); + logd( + " " + + status + + " Track:" + + trackIndex + + ", " + + Format.toLogString(trackGroup.getFormat(trackIndex)) + + ", supported=" + + formatSupport); } - logd(TAG, " ]"); + logd(" ]"); } // Log metadata for at most one of the tracks selected for the renderer. if (trackSelection != null) { for (int selectionIndex = 0; selectionIndex < trackSelection.length(); selectionIndex++) { Metadata metadata = trackSelection.getFormat(selectionIndex).metadata; if (metadata != null) { - logd(TAG, " Metadata ["); + logd(" Metadata ["); printMetadata(metadata, " "); - logd(TAG, " ]"); + logd(" ]"); break; } } } - logd(TAG, " ]"); + logd(" ]"); } } // Log tracks not associated with a renderer. TrackGroupArray unassociatedTrackGroups = mappedTrackInfo.getUnassociatedTrackGroups(); if (unassociatedTrackGroups.length > 0) { - logd(TAG, " Renderer:None ["); + logd(" Renderer:None ["); for (int groupIndex = 0; groupIndex < unassociatedTrackGroups.length; groupIndex++) { - logd(TAG, " Group:" + groupIndex + " ["); + logd(" Group:" + groupIndex + " ["); TrackGroup trackGroup = unassociatedTrackGroups.get(groupIndex); for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) { String status = getTrackStatusString(false); - String formatSupport = getFormatSupportString( - RendererCapabilities.FORMAT_UNSUPPORTED_TYPE); - logd(TAG, " " + status + " Track:" + trackIndex + ", " - + Format.toLogString(trackGroup.getFormat(trackIndex)) - + ", supported=" + formatSupport); + String formatSupport = + getFormatSupportString(RendererCapabilities.FORMAT_UNSUPPORTED_TYPE); + logd( + " " + + status + + " Track:" + + trackIndex + + ", " + + Format.toLogString(trackGroup.getFormat(trackIndex)) + + ", supported=" + + formatSupport); } - logd(TAG, " ]"); + logd(" ]"); } - logd(TAG, " ]"); + logd(" ]"); } - logd(TAG, "]"); + logd("]"); } @Override public void onSeekProcessed() { - logd(TAG, "seekProcessed"); + logd("seekProcessed"); } // MetadataOutput @Override public void onMetadata(Metadata metadata) { - logd(TAG, "onMetadata ["); + logd("onMetadata ["); printMetadata(metadata, " "); - logd(TAG, "]"); + logd("]"); } // AudioRendererEventListener @Override public void onAudioEnabled(DecoderCounters counters) { - logd(TAG, "audioEnabled [" + getSessionTimeString() + "]"); + logd("audioEnabled [" + getSessionTimeString() + "]"); } @Override public void onAudioSessionId(int audioSessionId) { - logd(TAG, "audioSessionId [" + audioSessionId + "]"); + logd("audioSessionId [" + audioSessionId + "]"); } @Override - public void onAudioDecoderInitialized(String decoderName, long elapsedRealtimeMs, - long initializationDurationMs) { - logd(TAG, "audioDecoderInitialized [" + getSessionTimeString() + ", " + decoderName + "]"); + public void onAudioDecoderInitialized( + String decoderName, long elapsedRealtimeMs, long initializationDurationMs) { + logd("audioDecoderInitialized [" + getSessionTimeString() + ", " + decoderName + "]"); } @Override public void onAudioInputFormatChanged(Format format) { - logd(TAG, "audioFormatChanged [" + getSessionTimeString() + ", " + Format.toLogString(format) - + "]"); + logd("audioFormatChanged [" + getSessionTimeString() + ", " + Format.toLogString(format) + "]"); } @Override public void onAudioDisabled(DecoderCounters counters) { - logd(TAG, "audioDisabled [" + getSessionTimeString() + "]"); + logd("audioDisabled [" + getSessionTimeString() + "]"); } @Override @@ -268,40 +302,39 @@ public class EventLogger @Override public void onVideoEnabled(DecoderCounters counters) { - logd(TAG, "videoEnabled [" + getSessionTimeString() + "]"); + logd("videoEnabled [" + getSessionTimeString() + "]"); } @Override - public void onVideoDecoderInitialized(String decoderName, long elapsedRealtimeMs, - long initializationDurationMs) { - logd(TAG, "videoDecoderInitialized [" + getSessionTimeString() + ", " + decoderName + "]"); + public void onVideoDecoderInitialized( + String decoderName, long elapsedRealtimeMs, long initializationDurationMs) { + logd("videoDecoderInitialized [" + getSessionTimeString() + ", " + decoderName + "]"); } @Override public void onVideoInputFormatChanged(Format format) { - logd(TAG, "videoFormatChanged [" + getSessionTimeString() + ", " + Format.toLogString(format) - + "]"); + logd("videoFormatChanged [" + getSessionTimeString() + ", " + Format.toLogString(format) + "]"); } @Override public void onVideoDisabled(DecoderCounters counters) { - logd(TAG, "videoDisabled [" + getSessionTimeString() + "]"); + logd("videoDisabled [" + getSessionTimeString() + "]"); } @Override public void onDroppedFrames(int count, long elapsed) { - logd(TAG, "droppedFrames [" + getSessionTimeString() + ", " + count + "]"); + logd("droppedFrames [" + getSessionTimeString() + ", " + count + "]"); } @Override - public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, - float pixelWidthHeightRatio) { - logd(TAG, "videoSizeChanged [" + width + ", " + height + "]"); + public void onVideoSizeChanged( + int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) { + logd("videoSizeChanged [" + width + ", " + height + "]"); } @Override public void onRenderedFirstFrame(Surface surface) { - logd(TAG, "renderedFirstFrame [" + surface + "]"); + logd("renderedFirstFrame [" + surface + "]"); } // DefaultDrmSessionManager.EventListener @@ -313,17 +346,17 @@ public class EventLogger @Override public void onDrmKeysRestored() { - logd(TAG, "drmKeysRestored [" + getSessionTimeString() + "]"); + logd("drmKeysRestored [" + getSessionTimeString() + "]"); } @Override public void onDrmKeysRemoved() { - logd(TAG, "drmKeysRemoved [" + getSessionTimeString() + "]"); + logd("drmKeysRemoved [" + getSessionTimeString() + "]"); } @Override public void onDrmKeysLoaded() { - logd(TAG, "drmKeysLoaded [" + getSessionTimeString() + "]"); + logd("drmKeysLoaded [" + getSessionTimeString() + "]"); } // MediaSourceEventListener @@ -397,10 +430,29 @@ public class EventLogger // Do nothing. } + /** + * Logs a debug message. + * + * @param msg The message to log. + */ + protected void logd(String msg) { + Log.d(TAG, msg); + } + + /** + * Logs an error message and exception. + * + * @param msg The message to log. + * @param tr The exception to log. + */ + protected void loge(String msg, Throwable tr) { + Log.e(TAG, msg, tr); + } + // Internal methods private void printInternalError(String type, Exception e) { - loge(TAG, "internalError [" + getSessionTimeString() + ", " + type + "]", e); + loge("internalError [" + getSessionTimeString() + ", " + type + "]", e); } private void printMetadata(Metadata metadata, String prefix) { @@ -408,37 +460,51 @@ public class EventLogger Metadata.Entry entry = metadata.get(i); if (entry instanceof TextInformationFrame) { TextInformationFrame textInformationFrame = (TextInformationFrame) entry; - logd(TAG, prefix + String.format("%s: value=%s", textInformationFrame.id, - textInformationFrame.value)); + logd( + prefix + + String.format( + "%s: value=%s", textInformationFrame.id, textInformationFrame.value)); } else if (entry instanceof UrlLinkFrame) { UrlLinkFrame urlLinkFrame = (UrlLinkFrame) entry; - logd(TAG, prefix + String.format("%s: url=%s", urlLinkFrame.id, urlLinkFrame.url)); + logd(prefix + String.format("%s: url=%s", urlLinkFrame.id, urlLinkFrame.url)); } else if (entry instanceof PrivFrame) { PrivFrame privFrame = (PrivFrame) entry; - logd(TAG, prefix + String.format("%s: owner=%s", privFrame.id, privFrame.owner)); + logd(prefix + String.format("%s: owner=%s", privFrame.id, privFrame.owner)); } else if (entry instanceof GeobFrame) { GeobFrame geobFrame = (GeobFrame) entry; - logd(TAG, prefix + String.format("%s: mimeType=%s, filename=%s, description=%s", - geobFrame.id, geobFrame.mimeType, geobFrame.filename, geobFrame.description)); + logd( + prefix + + String.format( + "%s: mimeType=%s, filename=%s, description=%s", + geobFrame.id, geobFrame.mimeType, geobFrame.filename, geobFrame.description)); } else if (entry instanceof ApicFrame) { ApicFrame apicFrame = (ApicFrame) entry; - logd(TAG, prefix + String.format("%s: mimeType=%s, description=%s", - apicFrame.id, apicFrame.mimeType, apicFrame.description)); + logd( + prefix + + String.format( + "%s: mimeType=%s, description=%s", + apicFrame.id, apicFrame.mimeType, apicFrame.description)); } else if (entry instanceof CommentFrame) { CommentFrame commentFrame = (CommentFrame) entry; - logd(TAG, prefix + String.format("%s: language=%s, description=%s", commentFrame.id, - commentFrame.language, commentFrame.description)); + logd( + prefix + + String.format( + "%s: language=%s, description=%s", + commentFrame.id, commentFrame.language, commentFrame.description)); } else if (entry instanceof Id3Frame) { Id3Frame id3Frame = (Id3Frame) entry; - logd(TAG, prefix + String.format("%s", id3Frame.id)); + logd(prefix + id3Frame.id); } else if (entry instanceof EventMessage) { EventMessage eventMessage = (EventMessage) entry; - logd(TAG, prefix + String.format("EMSG: scheme=%s, id=%d, value=%s", - eventMessage.schemeIdUri, eventMessage.id, eventMessage.value)); + logd( + prefix + + String.format( + "EMSG: scheme=%s, id=%d, value=%s", + eventMessage.schemeIdUri, eventMessage.id, eventMessage.value)); } else if (entry instanceof SpliceCommand) { String description = String.format("SCTE-35 splice command: type=%s.", entry.getClass().getSimpleName()); - logd(TAG, prefix + description); + logd(prefix + description); } } } @@ -555,11 +621,4 @@ public class EventLogger } } - protected void logd(String tag, String msg) { - Log.d(tag, msg); - } - - protected void loge(String tag, String msg, Throwable tr) { - Log.e(tag, msg, tr); - } }