diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AssetLoader.java index b601605d91..5a17090c6b 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AssetLoader.java @@ -66,17 +66,21 @@ public interface AssetLoader { EditedMediaItem editedMediaItem, Looper looper, Listener listener); } - /** - * A listener of {@link AssetLoader} events. - * - *
This listener can be called from any thread. - */ + /** A listener of {@link AssetLoader} events. */ interface Listener { - /** Called when the duration of the input media is known. */ + /** + * Called when the duration of the input media is known. + * + *
Can be called from any thread. + */ void onDurationUs(long durationUs); - /** Called when the number of tracks output by the asset loader is known. */ + /** + * Called when the number of tracks output by the asset loader is known. + * + *
Can be called from any thread. + */ void onTrackCount(@IntRange(from = 1) int trackCount); /** @@ -87,6 +91,10 @@ public interface AssetLoader { * *
Must be called once per {@linkplain #onTrackCount(int) declared} track. * + *
Must be called from the thread that will be used to call the returned {@link + * SampleConsumer}'s methods. This thread is generally different from the one used to access the + * {@link AssetLoader} methods. + * * @param format The {@link Format} of the input media (prior to video slow motion flattening or * to decoding). * @param supportedOutputTypes The output {@linkplain SupportedOutputTypes types} supported by @@ -109,6 +117,8 @@ public interface AssetLoader { /** * Called if an error occurs in the asset loader. In this case, the asset loader will be * {@linkplain #release() released} automatically. + * + *
Can be called from any thread.
*/
void onError(ExportException exportException);
}
diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSamplePipeline.java
index fc99c08e41..9663e390a1 100644
--- a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSamplePipeline.java
+++ b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSamplePipeline.java
@@ -37,7 +37,8 @@ import java.util.concurrent.atomic.AtomicLong;
private final Queue Can be called from any thread.
- *
* @param editedMediaItem The {@link MediaItem} with the transformations to apply to it.
* @param durationUs The duration of the {@link MediaItem}, in microseconds.
* @param trackFormat The {@link Format} of the {@link MediaItem} track corresponding to the
diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SampleConsumer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SampleConsumer.java
index 0fffea6c25..f46dfa5512 100644
--- a/libraries/transformer/src/main/java/androidx/media3/transformer/SampleConsumer.java
+++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SampleConsumer.java
@@ -22,11 +22,7 @@ import androidx.media3.common.ColorInfo;
import androidx.media3.common.util.UnstableApi;
import androidx.media3.decoder.DecoderInputBuffer;
-/**
- * Consumer of encoded media samples, raw audio or raw video frames.
- *
- * All the methods in this class can be called from any thread.
- */
+/** Consumer of encoded media samples, raw audio or raw video frames. */
@UnstableApi
public interface SampleConsumer {
diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java
index adf6140358..c630e0d2e9 100644
--- a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java
+++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java
@@ -36,6 +36,11 @@ import java.util.List;
* Pipeline for processing media data.
*
* This pipeline can be used to implement transformations of audio or video samples.
+ *
+ * The {@link SampleConsumer} and {@link OnMediaItemChangedListener} methods must be called from
+ * the same thread. This thread can change when the {@link
+ * OnMediaItemChangedListener#onMediaItemChanged(EditedMediaItem, Format, long) MediaItem} changes,
+ * and can be different from the thread used to call the other {@code SamplePipeline} methods.
*/
/* package */ abstract class SamplePipeline implements SampleConsumer, OnMediaItemChangedListener {