From f7390faeb0bfbb8629ddd7534b991e2d808e1073 Mon Sep 17 00:00:00 2001 From: tofunmi Date: Tue, 14 May 2024 09:47:13 -0700 Subject: [PATCH] Update supported image formats in line with platform standards This treats heic as a separate mimetype to heif (even though heic files are a subset of heif files). This is in line with other platform classes like android.content.ContentResolver https://developer.android.com/media/platform/supported-formats#image-formats was updated to include avif support or API level 34, so added this MimeType as well and updated our associated util. solves Issue: androidx/media#1373 PiperOrigin-RevId: 633616214 --- RELEASENOTES.md | 3 +++ .../src/main/java/androidx/media3/common/MimeTypes.java | 2 ++ .../src/main/java/androidx/media3/common/util/Util.java | 3 +++ .../src/test/java/androidx/media3/common/MimeTypesTest.java | 2 ++ .../src/main/java/androidx/media3/transformer/ImageUtil.java | 5 +++-- 5 files changed, 13 insertions(+), 2 deletions(-) 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; }