diff --git a/libraries/common/src/main/java/androidx/media3/common/util/Util.java b/libraries/common/src/main/java/androidx/media3/common/util/Util.java index 2d82e993bb..09a6169e38 100644 --- a/libraries/common/src/main/java/androidx/media3/common/util/Util.java +++ b/libraries/common/src/main/java/androidx/media3/common/util/Util.java @@ -117,6 +117,7 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.DataFormatException; @@ -742,6 +743,17 @@ public final class Util { return Executors.newSingleThreadExecutor(runnable -> new Thread(runnable, threadName)); } + /** + * Instantiates a new single threaded scheduled executor whose thread has the specified name. + * + * @param threadName The name of the thread. + * @return The executor. + */ + @UnstableApi + public static ScheduledExecutorService newSingleThreadScheduledExecutor(String threadName) { + return Executors.newSingleThreadScheduledExecutor(runnable -> new Thread(runnable, threadName)); + } + /** * Closes a {@link Closeable}, suppressing any {@link IOException} that may occur. Both {@link * java.io.OutputStream} and {@link InputStream} are {@code Closeable}. 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 18cb6e2621..b2af8efd78 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/MuxerWrapper.java @@ -34,7 +34,6 @@ import androidx.media3.effect.DebugTraceUtil; import com.google.common.collect.ImmutableList; import java.io.File; import java.nio.ByteBuffer; -import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import org.checkerframework.checker.nullness.qual.EnsuresNonNull; @@ -48,6 +47,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; */ /* package */ final class MuxerWrapper { + private static final String TIMER_THREAD_NAME = "Muxer:Timer"; private static final String MUXER_TIMEOUT_ERROR_FORMAT_STRING = "Abort: no output sample written in the last %d milliseconds. DebugTrace: %s"; @@ -93,7 +93,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; trackTypeToInfo = new SparseArray<>(); previousTrackType = C.TRACK_TYPE_NONE; - abortScheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); + abortScheduledExecutorService = Util.newSingleThreadScheduledExecutor(TIMER_THREAD_NAME); } /**