diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 961f064a41..e834a7305e 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -23,6 +23,8 @@ `EditedMediaItemSequence.Builder`. If the gap is in the middle of the sequence, then this flag is not required. * Move `Muxer` interface from `media3-transformer` to `media3-muxer`. + * Make setting `MediaItem.Builder().setImageDuration(long)` mandatory to + import a media item as an image. * Track Selection: * Extractors: * MP3: Use duration and data size from unseekable Xing, VBRI and similar diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java index 3e8ed85ce8..21b249c6bd 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java @@ -191,6 +191,9 @@ public final class DefaultAssetLoaderFactory implements AssetLoader.Factory { MediaItem mediaItem = editedMediaItem.mediaItem; if (isImage(context, mediaItem) && checkNotNull(mediaItem.localConfiguration).imageDurationMs != C.TIME_UNSET) { + // Checks that mediaItem.localConfiguration.imageDurationMs is explicitly set. + // This is particularly important for motion photos, where setting imageDurationMs ensures + // that the motion photo is handled as an image. if (imageAssetLoaderFactory == null) { imageAssetLoaderFactory = new ImageAssetLoader.Factory(context, bitmapLoader); }