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:
+ *
+ *
+ * - {@link #UNKNOWN}
+ *
- {@link #AC3}
+ *
- {@link #AC4}
+ *
- {@link #ADTS}
+ *
- {@link #AMR}
+ *
- {@link #FLAC}
+ *
- {@link #MATROSKA}
+ *
- {@link #MP3}
+ *
- {@link #MP4}
+ *
- {@link #OGG}
+ *
- {@link #PS}
+ *
- {@link #TS}
+ *
- {@link #WEBVTT}
+ *
- {@link #JPEG}
+ *
- {@link #MIDI}
+ *
- {@link #AVI}
+ *
- {@link #PNG}
+ *
*/
@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();
}