diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index 44890bee22914..f216c8cb4ffff 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -79,7 +79,8 @@ import java.util.zip.CRC32; /** * This is a class for reading and writing Exif tags in various image file formats. *

- * Supported for reading: JPEG, PNG, WebP, HEIF, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW, RAF. + * Supported for reading: JPEG, PNG, WebP, HEIF, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW, RAF, + * AVIF. *

* Supported for writing: JPEG, PNG, WebP. *

@@ -543,6 +544,8 @@ public class ExifInterface { private static final byte[] HEIF_TYPE_FTYP = new byte[] {'f', 't', 'y', 'p'}; private static final byte[] HEIF_BRAND_MIF1 = new byte[] {'m', 'i', 'f', '1'}; private static final byte[] HEIF_BRAND_HEIC = new byte[] {'h', 'e', 'i', 'c'}; + private static final byte[] HEIF_BRAND_AVIF = new byte[] {'a', 'v', 'i', 'f'}; + private static final byte[] HEIF_BRAND_AVIS = new byte[] {'a', 'v', 'i', 's'}; // See http://fileformats.archiveteam.org/wiki/Olympus_ORF private static final short ORF_SIGNATURE_1 = 0x4f52; @@ -2662,6 +2665,7 @@ public class ExifInterface { byte[] brand = new byte[4]; boolean isMif1 = false; boolean isHeic = false; + boolean isAvif = false; for (long i = 0; i < chunkDataSize / 4; ++i) { if (signatureInputStream.read(brand) != brand.length) { return false; @@ -2674,8 +2678,11 @@ public class ExifInterface { isMif1 = true; } else if (Arrays.equals(brand, HEIF_BRAND_HEIC)) { isHeic = true; + } else if (Arrays.equals(brand, HEIF_BRAND_AVIF) + || Arrays.equals(brand, HEIF_BRAND_AVIS)) { + isAvif = true; } - if (isMif1 && isHeic) { + if (isMif1 && (isHeic || isAvif)) { return true; } }