Don't allow cancelation of non-cancelable loads
Issue: #3441 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=175011804
This commit is contained in:
parent
367bb64ba0
commit
ed2e4dd91e
@ -15,6 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.source.chunk;
|
package com.google.android.exoplayer2.source.chunk;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.FormatHolder;
|
import com.google.android.exoplayer2.FormatHolder;
|
||||||
@ -38,6 +40,8 @@ import java.util.List;
|
|||||||
public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, SequenceableLoader,
|
public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, SequenceableLoader,
|
||||||
Loader.Callback<Chunk>, Loader.ReleaseCallback {
|
Loader.Callback<Chunk>, Loader.ReleaseCallback {
|
||||||
|
|
||||||
|
private static final String TAG = "ChunkSampleStream";
|
||||||
|
|
||||||
private final int primaryTrackType;
|
private final int primaryTrackType;
|
||||||
private final int[] embeddedTrackTypes;
|
private final int[] embeddedTrackTypes;
|
||||||
private final boolean[] embeddedTracksSelected;
|
private final boolean[] embeddedTracksSelected;
|
||||||
@ -318,6 +322,9 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||||||
boolean cancelable = bytesLoaded == 0 || !isMediaChunk || !haveReadFromLastMediaChunk();
|
boolean cancelable = bytesLoaded == 0 || !isMediaChunk || !haveReadFromLastMediaChunk();
|
||||||
boolean canceled = false;
|
boolean canceled = false;
|
||||||
if (chunkSource.onChunkLoadError(loadable, cancelable, error)) {
|
if (chunkSource.onChunkLoadError(loadable, cancelable, error)) {
|
||||||
|
if (!cancelable) {
|
||||||
|
Log.w(TAG, "Ignoring attempt to cancel non-cancelable load.");
|
||||||
|
} else {
|
||||||
canceled = true;
|
canceled = true;
|
||||||
if (isMediaChunk) {
|
if (isMediaChunk) {
|
||||||
BaseMediaChunk removed = mediaChunks.removeLast();
|
BaseMediaChunk removed = mediaChunks.removeLast();
|
||||||
@ -331,6 +338,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
eventDispatcher.loadError(loadable.dataSpec, loadable.type, primaryTrackType,
|
eventDispatcher.loadError(loadable.dataSpec, loadable.type, primaryTrackType,
|
||||||
loadable.trackFormat, loadable.trackSelectionReason, loadable.trackSelectionData,
|
loadable.trackFormat, loadable.trackSelectionReason, loadable.trackSelectionData,
|
||||||
loadable.startTimeUs, loadable.endTimeUs, elapsedRealtimeMs, loadDurationMs, bytesLoaded,
|
loadable.startTimeUs, loadable.endTimeUs, elapsedRealtimeMs, loadDurationMs, bytesLoaded,
|
||||||
|
@ -85,7 +85,8 @@ public interface ChunkSource {
|
|||||||
* @param chunk The chunk whose load encountered the error.
|
* @param chunk The chunk whose load encountered the error.
|
||||||
* @param cancelable Whether the load can be canceled.
|
* @param cancelable Whether the load can be canceled.
|
||||||
* @param e The error.
|
* @param e The error.
|
||||||
* @return Whether the load should be canceled.
|
* @return Whether the load should be canceled. Should always be false if {@code cancelable} is
|
||||||
|
* false.
|
||||||
*/
|
*/
|
||||||
boolean onChunkLoadError(Chunk chunk, boolean cancelable, Exception e);
|
boolean onChunkLoadError(Chunk chunk, boolean cancelable, Exception e);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user