diff --git a/RELEASENOTES.md b/RELEASENOTES.md index fa567b9389..7e5b46ea26 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -38,6 +38,8 @@ * Replace `androidx.media3.transformer.Muxer` interface with `androidx.media3.muxer.Muxer` and remove `androidx.media3.transformer.Muxer`. + * Fix HEIC image loading from content URI schemes. + ([#1373](https://github.com/androidx/media/issues/1373)). * Track Selection: * Extractors: * MPEG-TS: Roll forward the change ensuring the last frame is rendered by @@ -74,6 +76,7 @@ * Image: * Add support for non-square DASH thumbnail grids ([#1300](https://github.com/androidx/media/pull/1300)). + * Add AVIF decoding support for API 34+. * DRM: * Allow setting a `LoadErrorHandlingPolicy` on `DefaultDrmSessionManagerProvider` diff --git a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java index d2fc3173b2..9f11899885 100644 --- a/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java +++ b/libraries/common/src/main/java/androidx/media3/common/MimeTypes.java @@ -164,6 +164,8 @@ public final class MimeTypes { @UnstableApi public static final String IMAGE_JPEG_R = BASE_TYPE_IMAGE + "/jpeg_r"; @UnstableApi public static final String IMAGE_PNG = BASE_TYPE_IMAGE + "/png"; @UnstableApi public static final String IMAGE_HEIF = BASE_TYPE_IMAGE + "/heif"; + @UnstableApi public static final String IMAGE_HEIC = BASE_TYPE_IMAGE + "/heic"; + @UnstableApi public static final String IMAGE_AVIF = BASE_TYPE_IMAGE + "/avif"; @UnstableApi public static final String IMAGE_BMP = BASE_TYPE_IMAGE + "/bmp"; @UnstableApi public static final String IMAGE_WEBP = BASE_TYPE_IMAGE + "/webp"; @UnstableApi public static final String IMAGE_RAW = BASE_TYPE_IMAGE + "/raw"; 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 12f9388982..6ddc479a45 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 @@ -3230,7 +3230,10 @@ public final class Util { case MimeTypes.IMAGE_WEBP: return true; case MimeTypes.IMAGE_HEIF: + case MimeTypes.IMAGE_HEIC: return Util.SDK_INT >= 26; + case MimeTypes.IMAGE_AVIF: + return Util.SDK_INT >= 34; default: return false; } diff --git a/libraries/common/src/test/java/androidx/media3/common/MimeTypesTest.java b/libraries/common/src/test/java/androidx/media3/common/MimeTypesTest.java index 6852147614..7c2ec51e2a 100644 --- a/libraries/common/src/test/java/androidx/media3/common/MimeTypesTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/MimeTypesTest.java @@ -120,6 +120,8 @@ public final class MimeTypesTest { assertThat(MimeTypes.isImage(MimeTypes.IMAGE_JPEG)).isTrue(); assertThat(MimeTypes.isImage(MimeTypes.IMAGE_PNG)).isTrue(); assertThat(MimeTypes.isImage(MimeTypes.IMAGE_HEIF)).isTrue(); + assertThat(MimeTypes.isImage(MimeTypes.IMAGE_HEIC)).isTrue(); + assertThat(MimeTypes.isImage(MimeTypes.IMAGE_AVIF)).isTrue(); assertThat(MimeTypes.isImage(MimeTypes.IMAGE_BMP)).isTrue(); assertThat(MimeTypes.isImage(MimeTypes.IMAGE_WEBP)).isTrue(); assertThat(MimeTypes.isImage("image/custom")).isTrue(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ImageUtil.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ImageUtil.java index a2a380bcc8..ea3803bb87 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ImageUtil.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ImageUtil.java @@ -47,8 +47,9 @@ public final class ImageUtil { case "dib": return MimeTypes.IMAGE_BMP; case "heif": - case "heic": return MimeTypes.IMAGE_HEIF; + case "heic": + return MimeTypes.IMAGE_HEIC; case "jpg": case "jpeg": case "jpe": @@ -76,7 +77,7 @@ public final class ImageUtil { case "ico": return "image/x-icon"; case "avif": - return "image/avif"; + return MimeTypes.IMAGE_AVIF; default: return null; }