From fc2168eb617bf8b9ec5e61d8d8905115b8d762e6 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Wed, 27 Jun 2018 08:33:33 -0700 Subject: [PATCH] Add an errorCount argument to onLoadError ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=202313695 --- .../exoplayer2/source/ExtractorMediaPeriod.java | 6 +++++- .../exoplayer2/source/SingleSampleMediaPeriod.java | 8 +++++--- .../exoplayer2/source/chunk/ChunkSampleStream.java | 6 +++++- .../google/android/exoplayer2/upstream/Loader.java | 14 +++++++++----- .../exoplayer2/source/dash/DashMediaSource.java | 6 ++++-- .../source/hls/HlsSampleStreamWrapper.java | 6 +++++- .../hls/playlist/DefaultHlsPlaylistTracker.java | 6 ++++-- .../source/smoothstreaming/SsMediaSource.java | 3 ++- 8 files changed, 39 insertions(+), 16 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java index 8719ec1660..37b3ee4c53 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaPeriod.java @@ -534,7 +534,11 @@ import java.util.Arrays; @Override public LoadErrorAction onLoadError( - ExtractingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error) { + ExtractingLoadable loadable, + long elapsedRealtimeMs, + long loadDurationMs, + IOException error, + int errorCount) { boolean isErrorFatal = isLoadableExceptionFatal(error); eventDispatcher.loadError( loadable.dataSpec, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java index 33bae0bd4d..43f09e4a67 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java @@ -62,7 +62,6 @@ import java.util.Arrays; /* package */ boolean loadingSucceeded; /* package */ byte[] sampleData; /* package */ int sampleSize; - private int errorCount; public SingleSampleMediaPeriod( DataSpec dataSpec, @@ -230,8 +229,11 @@ import java.util.Arrays; @Override public LoadErrorAction onLoadError( - SourceLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error) { - errorCount++; + SourceLoadable loadable, + long elapsedRealtimeMs, + long loadDurationMs, + IOException error, + int errorCount) { boolean cancel = treatLoadErrorsAsEndOfStream && errorCount >= minLoadableRetryCount; eventDispatcher.loadError( loadable.dataSpec, diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java index 5afcf9a564..2d183ac1e0 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java @@ -411,7 +411,11 @@ public class ChunkSampleStream implements SampleStream, S @Override public LoadErrorAction onLoadError( - Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error) { + Chunk loadable, + long elapsedRealtimeMs, + long loadDurationMs, + IOException error, + int errorCount) { long bytesLoaded = loadable.bytesLoaded(); boolean isMediaChunk = isMediaChunk(loadable); int lastChunkIndex = mediaChunks.size() - 1; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java index 6c6b2708cb..b4b378c152 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/Loader.java @@ -111,12 +111,13 @@ public final class Loader implements LoaderErrorThrower { * @param elapsedRealtimeMs {@link SystemClock#elapsedRealtime} when the error occurred. * @param loadDurationMs The duration of the load up to the point at which the error occurred. * @param error The load error. + * @param errorCount The number of errors this load has encountered, including this one. * @return The desired error handling action. One of {@link Loader#RETRY}, {@link * Loader#RETRY_RESET_ERROR_COUNT}, {@link Loader#DONT_RETRY}, {@link * Loader#DONT_RETRY_FATAL} or a retry action created by {@link #createRetryAction}. */ LoadErrorAction onLoadError( - T loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error); + T loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error, int errorCount); } /** @@ -164,7 +165,7 @@ public final class Loader implements LoaderErrorThrower { /** * Action that can be taken in response to {@link Callback#onLoadError(Loadable, long, long, - * IOException)}. + * IOException, int)}. */ public static final class LoadErrorAction { @@ -445,12 +446,15 @@ public final class Loader implements LoaderErrorThrower { break; case MSG_IO_EXCEPTION: currentError = (IOException) msg.obj; - LoadErrorAction action = callback.onLoadError(loadable, nowMs, durationMs, currentError); + errorCount++; + LoadErrorAction action = + callback.onLoadError(loadable, nowMs, durationMs, currentError, errorCount); if (action.type == ACTION_TYPE_DONT_RETRY_FATAL) { fatalError = currentError; } else if (action.type != ACTION_TYPE_DONT_RETRY) { - errorCount = - action.type == ACTION_TYPE_RETRY_AND_RESET_ERROR_COUNT ? 1 : errorCount + 1; + if (action.type == ACTION_TYPE_RETRY_AND_RESET_ERROR_COUNT) { + errorCount = 1; + } start( action.retryDelayMillis != C.TIME_UNSET ? action.retryDelayMillis diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index f30375823c..530c41684d 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -1175,7 +1175,8 @@ public final class DashMediaSource extends BaseMediaSource { ParsingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, - IOException error) { + IOException error, + int errorCount) { return onManifestLoadError(loadable, elapsedRealtimeMs, loadDurationMs, error); } @@ -1200,7 +1201,8 @@ public final class DashMediaSource extends BaseMediaSource { ParsingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, - IOException error) { + IOException error, + int errorCount) { return onUtcTimestampLoadError(loadable, elapsedRealtimeMs, loadDurationMs, error); } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 079df69ffe..f55fc78b60 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -604,7 +604,11 @@ import java.util.Arrays; @Override public LoadErrorAction onLoadError( - Chunk loadable, long elapsedRealtimeMs, long loadDurationMs, IOException error) { + Chunk loadable, + long elapsedRealtimeMs, + long loadDurationMs, + IOException error, + int errorCount) { long bytesLoaded = loadable.bytesLoaded(); boolean isMediaChunk = isMediaChunk(loadable); boolean cancelable = !isMediaChunk || bytesLoaded == 0; diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java index 7aad08cf9e..15136236eb 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java @@ -234,7 +234,8 @@ public final class DefaultHlsPlaylistTracker ParsingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, - IOException error) { + IOException error, + int errorCount) { boolean isFatal = error instanceof ParserException; eventDispatcher.loadError( loadable.dataSpec, @@ -490,7 +491,8 @@ public final class DefaultHlsPlaylistTracker ParsingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, - IOException error) { + IOException error, + int errorCount) { boolean isFatal = error instanceof ParserException; eventDispatcher.loadError( loadable.dataSpec, diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index a0b31ae494..7da0e92739 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -545,7 +545,8 @@ public final class SsMediaSource extends BaseMediaSource ParsingLoadable loadable, long elapsedRealtimeMs, long loadDurationMs, - IOException error) { + IOException error, + int errorCount) { boolean isFatal = error instanceof ParserException; manifestEventDispatcher.loadError( loadable.dataSpec,