From 6287a2228502ba009991736f7e90b8bef88bac59 Mon Sep 17 00:00:00 2001 From: Colin Kho Date: Fri, 8 Nov 2024 10:32:53 -0800 Subject: [PATCH 1/2] Added getter methods to ContainerMediaChunk & a callback method whenever a load loop is finished --- .../source/chunk/ContainerMediaChunk.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java index b2dff4d01e..c9164134ad 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java @@ -135,6 +135,7 @@ public class ContainerMediaChunk extends BaseMediaChunk { nextLoadPosition = input.getPosition() - dataSpec.position; } } finally { + onLoadIterationEnded(); DataSourceUtil.closeQuietly(dataSource); } loadCompleted = !loadCanceled; @@ -151,6 +152,30 @@ public class ContainerMediaChunk extends BaseMediaChunk { return baseMediaChunkOutput; } + /** + * Method that is called to signal that a {@link #load()} has concluded. This is called in both + * successful and error scenarios. + */ + protected void onLoadIterationEnded() {} + + /** + * Returns whether the current chunk's load has been canceled from {@link #cancelLoad()} + * + * @return true if {@link #cancelLoad()} was invoked + */ + public final boolean isLoadCanceled() { + return loadCanceled; + } + + /** + * Retrieves the next position to load in the chunk on a {@link #load()} + * + * @return the position to load from + */ + public final long getNextLoadPosition() { + return nextLoadPosition; + } + private void maybeWriteEmptySamples(BaseMediaChunkOutput output) { if (!MimeTypes.isImage(trackFormat.containerMimeType)) { return; From 1c044c98ad10d49b010bfa804f2ea4e770aae2b4 Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 18 Dec 2024 12:54:27 +0000 Subject: [PATCH 2/2] Formatting fixes --- .../source/chunk/ContainerMediaChunk.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java index c9164134ad..ae00933fd8 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/chunk/ContainerMediaChunk.java @@ -29,6 +29,7 @@ import androidx.media3.extractor.DefaultExtractorInput; import androidx.media3.extractor.Extractor; import androidx.media3.extractor.ExtractorInput; import androidx.media3.extractor.TrackOutput; +import com.google.errorprone.annotations.ForOverride; import java.io.IOException; /** A {@link BaseMediaChunk} that uses an {@link Extractor} to decode sample data. */ @@ -135,7 +136,7 @@ public class ContainerMediaChunk extends BaseMediaChunk { nextLoadPosition = input.getPosition() - dataSpec.position; } } finally { - onLoadIterationEnded(); + onLoadEnded(); DataSourceUtil.closeQuietly(dataSource); } loadCompleted = !loadCanceled; @@ -154,24 +155,17 @@ public class ContainerMediaChunk extends BaseMediaChunk { /** * Method that is called to signal that a {@link #load()} has concluded. This is called in both - * successful and error scenarios. + * successful and error scenarios before the {@link DataSource} is closed. */ - protected void onLoadIterationEnded() {} + @ForOverride + protected void onLoadEnded() {} - /** - * Returns whether the current chunk's load has been canceled from {@link #cancelLoad()} - * - * @return true if {@link #cancelLoad()} was invoked - */ + /** Returns whether the current chunk's load has been canceled from {@link #cancelLoad()}. */ public final boolean isLoadCanceled() { return loadCanceled; } - /** - * Retrieves the next position to load in the chunk on a {@link #load()} - * - * @return the position to load from - */ + /** Returns the next position to load in the chunk on a {@link #load()}. */ public final long getNextLoadPosition() { return nextLoadPosition; }