Commit 556a9954 by aquilescanta Committed by Oliver Woodman

Avoid retrying fatal errors

Also clear fatal errors on seek operations

PiperOrigin-RevId: 269780886
parent 73e35abf
...@@ -325,7 +325,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -325,7 +325,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
@Override @Override
public boolean continueLoading(long playbackPositionUs) { public boolean continueLoading(long playbackPositionUs) {
if (loadingFinished || pendingDeferredRetry || (prepared && enabledTrackCount == 0)) { if (loadingFinished
|| loader.hasFatalError()
|| pendingDeferredRetry
|| (prepared && enabledTrackCount == 0)) {
return false; return false;
} }
boolean continuedLoading = loadCondition.open(); boolean continuedLoading = loadCondition.open();
...@@ -410,6 +413,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -410,6 +413,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
if (loader.isLoading()) { if (loader.isLoading()) {
loader.cancelLoading(); loader.cancelLoading();
} else { } else {
loader.clearFatalError();
for (SampleQueue sampleQueue : sampleQueues) { for (SampleQueue sampleQueue : sampleQueues) {
sampleQueue.reset(); sampleQueue.reset();
} }
......
...@@ -141,7 +141,7 @@ import java.util.Arrays; ...@@ -141,7 +141,7 @@ import java.util.Arrays;
@Override @Override
public boolean continueLoading(long positionUs) { public boolean continueLoading(long positionUs) {
if (loadingFinished || loader.isLoading()) { if (loadingFinished || loader.isLoading() || loader.hasFatalError()) {
return false; return false;
} }
DataSource dataSource = dataSourceFactory.createDataSource(); DataSource dataSource = dataSourceFactory.createDataSource();
......
...@@ -338,6 +338,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S ...@@ -338,6 +338,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
if (loader.isLoading()) { if (loader.isLoading()) {
loader.cancelLoading(); loader.cancelLoading();
} else { } else {
loader.clearFatalError();
primarySampleQueue.reset(); primarySampleQueue.reset();
for (SampleQueue embeddedSampleQueue : embeddedSampleQueues) { for (SampleQueue embeddedSampleQueue : embeddedSampleQueues) {
embeddedSampleQueue.reset(); embeddedSampleQueue.reset();
...@@ -549,7 +550,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S ...@@ -549,7 +550,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
@Override @Override
public boolean continueLoading(long positionUs) { public boolean continueLoading(long positionUs) {
if (loadingFinished || loader.isLoading()) { if (loadingFinished || loader.isLoading() || loader.hasFatalError()) {
return false; return false;
} }
...@@ -616,7 +617,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S ...@@ -616,7 +617,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
@Override @Override
public void reevaluateBuffer(long positionUs) { public void reevaluateBuffer(long positionUs) {
if (loader.isLoading() || isPendingReset()) { if (loader.isLoading() || loader.hasFatalError() || isPendingReset()) {
return; return;
} }
......
...@@ -214,6 +214,19 @@ public final class Loader implements LoaderErrorThrower { ...@@ -214,6 +214,19 @@ public final class Loader implements LoaderErrorThrower {
} }
/** /**
* Whether the last call to {@link #startLoading} resulted in a fatal error. Calling {@link
* #maybeThrowError()} will throw the fatal error.
*/
public boolean hasFatalError() {
return fatalError != null;
}
/** Clears any stored fatal error. */
public void clearFatalError() {
fatalError = null;
}
/**
* Starts loading a {@link Loadable}. * Starts loading a {@link Loadable}.
* *
* <p>The calling thread must be a {@link Looper} thread, which is the thread on which the {@link * <p>The calling thread must be a {@link Looper} thread, which is the thread on which the {@link
......
...@@ -1037,6 +1037,9 @@ public final class DashMediaSource extends BaseMediaSource { ...@@ -1037,6 +1037,9 @@ public final class DashMediaSource extends BaseMediaSource {
private void startLoadingManifest() { private void startLoadingManifest() {
handler.removeCallbacks(refreshManifestRunnable); handler.removeCallbacks(refreshManifestRunnable);
if (loader.hasFatalError()) {
return;
}
if (loader.isLoading()) { if (loader.isLoading()) {
manifestLoadPending = true; manifestLoadPending = true;
return; return;
......
...@@ -425,6 +425,7 @@ import java.util.Map; ...@@ -425,6 +425,7 @@ import java.util.Map;
if (loader.isLoading()) { if (loader.isLoading()) {
loader.cancelLoading(); loader.cancelLoading();
} else { } else {
loader.clearFatalError();
resetSampleQueues(); resetSampleQueues();
} }
return true; return true;
...@@ -572,7 +573,7 @@ import java.util.Map; ...@@ -572,7 +573,7 @@ import java.util.Map;
@Override @Override
public boolean continueLoading(long positionUs) { public boolean continueLoading(long positionUs) {
if (loadingFinished || loader.isLoading()) { if (loadingFinished || loader.isLoading() || loader.hasFatalError()) {
return false; return false;
} }
......
...@@ -488,8 +488,8 @@ public final class DefaultHlsPlaylistTracker ...@@ -488,8 +488,8 @@ public final class DefaultHlsPlaylistTracker
public void loadPlaylist() { public void loadPlaylist() {
blacklistUntilMs = 0; blacklistUntilMs = 0;
if (loadPending || mediaPlaylistLoader.isLoading()) { if (loadPending || mediaPlaylistLoader.isLoading() || mediaPlaylistLoader.hasFatalError()) {
// Load already pending or in progress. Do nothing. // Load already pending, in progress, or a fatal error has been encountered. Do nothing.
return; return;
} }
long currentTimeMs = SystemClock.elapsedRealtime(); long currentTimeMs = SystemClock.elapsedRealtime();
......
...@@ -723,6 +723,9 @@ public final class SsMediaSource extends BaseMediaSource ...@@ -723,6 +723,9 @@ public final class SsMediaSource extends BaseMediaSource
} }
private void startLoadingManifest() { private void startLoadingManifest() {
if (manifestLoader.hasFatalError()) {
return;
}
ParsingLoadable<SsManifest> loadable = new ParsingLoadable<>(manifestDataSource, ParsingLoadable<SsManifest> loadable = new ParsingLoadable<>(manifestDataSource,
manifestUri, C.DATA_TYPE_MANIFEST, manifestParser); manifestUri, C.DATA_TYPE_MANIFEST, manifestParser);
long elapsedRealtimeMs = long elapsedRealtimeMs =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment