From 24305c043e8f4c0ff62b3245eadba0e8a28e3113 Mon Sep 17 00:00:00 2001 From: sheenachhabra Date: Fri, 3 May 2024 03:15:56 -0700 Subject: [PATCH] Remove forCancellation flag from Transformer/Muxer.release() method PiperOrigin-RevId: 630337930 --- .../transformer/TransformerPauseResumeTest.java | 4 ++-- .../androidx/media3/transformer/DefaultMuxer.java | 4 ++-- .../androidx/media3/transformer/FrameworkMuxer.java | 9 ++++----- .../androidx/media3/transformer/InAppMuxer.java | 2 +- .../java/androidx/media3/transformer/Muxer.java | 8 +++----- .../androidx/media3/transformer/MuxerWrapper.java | 13 ++++++++++++- .../androidx/media3/transformer/CapturingMuxer.java | 4 ++-- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerPauseResumeTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerPauseResumeTest.java index b97a96e672..79054176bd 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerPauseResumeTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerPauseResumeTest.java @@ -469,8 +469,8 @@ public class TransformerPauseResumeTest { } @Override - public void release(boolean forCancellation) throws MuxerException { - wrappedMuxer.release(forCancellation); + public void release() throws MuxerException { + wrappedMuxer.release(); } } } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java index 50f3d37386..9273446c12 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultMuxer.java @@ -82,7 +82,7 @@ public final class DefaultMuxer implements Muxer { } @Override - public void release(boolean forCancellation) throws MuxerException { - muxer.release(forCancellation); + public void release() throws MuxerException { + muxer.release(); } } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java index f3a5ab2443..65d78166fd 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/FrameworkMuxer.java @@ -42,6 +42,8 @@ import java.util.Map; /** {@link Muxer} implementation that uses a {@link MediaMuxer}. */ /* package */ final class FrameworkMuxer implements Muxer { + public static final String MUXER_STOPPING_FAILED_ERROR_MESSAGE = "Failed to stop the MediaMuxer"; + // MediaMuxer supported sample formats are documented in MediaMuxer.addTrack(MediaFormat). private static final ImmutableList SUPPORTED_VIDEO_SAMPLE_MIME_TYPES = getSupportedVideoSampleMimeTypes(); @@ -193,7 +195,7 @@ import java.util.Map; } @Override - public void release(boolean forCancellation) throws MuxerException { + public void release() throws MuxerException { if (isReleased) { return; } @@ -218,10 +220,7 @@ import java.util.Map; try { stopMuxer(mediaMuxer); } catch (RuntimeException e) { - // It doesn't matter that stopping the muxer throws if the export is being cancelled. - if (!forCancellation) { - throw new MuxerException("Failed to stop the muxer", e); - } + throw new MuxerException(MUXER_STOPPING_FAILED_ERROR_MESSAGE, e); } finally { mediaMuxer.release(); isReleased = true; diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java index 3dd8e97cbb..aec85a5769 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/InAppMuxer.java @@ -202,7 +202,7 @@ public final class InAppMuxer implements Muxer { } @Override - public void release(boolean forCancellation) throws MuxerException { + public void release() throws MuxerException { writeMetadata(); try { diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java index 3cf37b8dd6..ddc5e787c9 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Muxer.java @@ -31,8 +31,8 @@ import java.nio.ByteBuffer; *

Query whether {@linkplain Factory#getSupportedSampleMimeTypes(int) sample MIME types} are * supported and {@linkplain #addTrack(Format) add all tracks}, then {@linkplain #writeSampleData * write sample data} to mux samples. Once any sample data has been written, it is not possible to - * add tracks. After writing all sample data, {@linkplain #release(boolean) release} the instance to - * finish writing to the output and return any resources to the system. + * add tracks. After writing all sample data, {@linkplain #release() release} the instance to finish + * writing to the output and return any resources to the system. */ @UnstableApi // TODO: b/330695864 - Replace with the Muxer interface from the Muxer module. @@ -99,10 +99,8 @@ public interface Muxer { * *

The muxer cannot be used anymore once this method has been called. * - * @param forCancellation Whether the reason for releasing the resources is the export - * cancellation. * @throws MuxerException If the muxer fails to finish writing the output and {@code * forCancellation} is false. */ - void release(boolean forCancellation) throws MuxerException; + void release() throws MuxerException; } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java index 994e5fe7ac..9f2e947fdf 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -655,7 +655,18 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; isReady = false; abortScheduledExecutorService.shutdownNow(); if (muxer != null) { - muxer.release(releaseReason == MUXER_RELEASE_REASON_CANCELLED); + try { + muxer.release(); + } catch (Muxer.MuxerException e) { + if (releaseReason == MUXER_RELEASE_REASON_CANCELLED + && checkNotNull(e.getMessage()) + .equals(FrameworkMuxer.MUXER_STOPPING_FAILED_ERROR_MESSAGE)) { + // When releasing the muxer, FrameworkMuxer may sometimes fail before the actual release. + // When the release is due to cancellation, swallow this exception. + return; + } + throw e; + } } } diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java b/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java index 4070719ad6..5748c9f44b 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/CapturingMuxer.java @@ -142,9 +142,9 @@ public final class CapturingMuxer implements Muxer, Dumpable { } @Override - public void release(boolean forCancellation) throws MuxerException { + public void release() throws MuxerException { released = true; - wrappedMuxer.release(forCancellation); + wrappedMuxer.release(); } // Dumper.Dumpable implementation.