diff --git a/libraries/common/src/main/java/androidx/media3/common/FileTypes.java b/libraries/common/src/main/java/androidx/media3/common/FileTypes.java index ab06a48b89..0c84ed1035 100644 --- a/libraries/common/src/main/java/androidx/media3/common/FileTypes.java +++ b/libraries/common/src/main/java/androidx/media3/common/FileTypes.java @@ -35,16 +35,34 @@ import java.util.Map; public final class FileTypes { /** - * File types. One of {@link #UNKNOWN}, {@link #AC3}, {@link #AC4}, {@link #ADTS}, {@link #AMR}, - * {@link #FLAC}, {@link #FLV}, {@link #MATROSKA}, {@link #MP3}, {@link #MP4}, {@link #OGG}, - * {@link #PS}, {@link #TS}, {@link #WAV}, {@link #WEBVTT}, {@link #JPEG} and {@link #MIDI}. + * File types. One of the following: + * + * */ @Documented @Retention(RetentionPolicy.SOURCE) @Target(TYPE_USE) @IntDef({ UNKNOWN, AC3, AC4, ADTS, AMR, FLAC, FLV, MATROSKA, MP3, MP4, OGG, PS, TS, WAV, WEBVTT, JPEG, - MIDI, AVI + MIDI, AVI, PNG }) public @interface Type {} @@ -102,6 +120,9 @@ public final class FileTypes { /** File type for the AVI format. */ public static final int AVI = 16; + /** File type for the PNG format. */ + public static final int PNG = 17; + @VisibleForTesting /* package */ static final String HEADER_CONTENT_TYPE = "Content-Type"; private static final String EXTENSION_AC3 = ".ac3"; @@ -137,6 +158,7 @@ public final class FileTypes { private static final String EXTENSION_JPG = ".jpg"; private static final String EXTENSION_JPEG = ".jpeg"; private static final String EXTENSION_AVI = ".avi"; + private static final String EXTENSION_PNG = ".png"; private FileTypes() {} @@ -202,6 +224,8 @@ public final class FileTypes { return FileTypes.JPEG; case MimeTypes.VIDEO_AVI: return FileTypes.AVI; + case MimeTypes.IMAGE_PNG: + return FileTypes.PNG; default: return FileTypes.UNKNOWN; } @@ -269,6 +293,8 @@ public final class FileTypes { return FileTypes.JPEG; } else if (filename.endsWith(EXTENSION_AVI)) { return FileTypes.AVI; + } else if (filename.endsWith(EXTENSION_PNG)) { + return FileTypes.PNG; } else { return FileTypes.UNKNOWN; } diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java b/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java index 2e6bd85ab9..cff473237c 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/DefaultExtractorsFactory.java @@ -38,6 +38,7 @@ import androidx.media3.extractor.mp3.Mp3Extractor; import androidx.media3.extractor.mp4.FragmentedMp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.ogg.OggExtractor; +import androidx.media3.extractor.png.PngExtractor; import androidx.media3.extractor.text.DefaultSubtitleParserFactory; import androidx.media3.extractor.text.SubtitleParser; import androidx.media3.extractor.text.SubtitleTranscodingExtractor; @@ -85,6 +86,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * the FLAC extension or the FFmpeg extension. * *
  • JPEG ({@link JpegExtractor}) + *
  • PNG ({@link PngExtractor}) *
  • MIDI, if available, the MIDI extension's {@code androidx.media3.decoder.midi.MidiExtractor} * is used. * @@ -116,6 +118,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory { FileTypes.AVI, FileTypes.MIDI, FileTypes.JPEG, + FileTypes.PNG, }; private static final ExtensionLoader FLAC_EXTENSION_LOADER = @@ -506,6 +509,9 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory { case FileTypes.AVI: extractors.add(new AviExtractor()); break; + case FileTypes.PNG: + extractors.add(new PngExtractor()); + break; case FileTypes.WEBVTT: case FileTypes.UNKNOWN: default: diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java index ed189e8143..3e60aa0512 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/DefaultExtractorsFactoryTest.java @@ -30,6 +30,7 @@ import androidx.media3.extractor.mp3.Mp3Extractor; import androidx.media3.extractor.mp4.FragmentedMp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.ogg.OggExtractor; +import androidx.media3.extractor.png.PngExtractor; import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import androidx.media3.extractor.ts.Ac3Extractor; import androidx.media3.extractor.ts.Ac4Extractor; @@ -74,7 +75,8 @@ public final class DefaultExtractorsFactoryTest { Ac4Extractor.class, Mp3Extractor.class, AviExtractor.class, - JpegExtractor.class) + JpegExtractor.class, + PngExtractor.class) .inOrder(); } @@ -117,7 +119,8 @@ public final class DefaultExtractorsFactoryTest { Ac3Extractor.class, Ac4Extractor.class, AviExtractor.class, - JpegExtractor.class) + JpegExtractor.class, + PngExtractor.class) .inOrder(); }