Add PngExtractor to DefaultExtractorsFactory

PiperOrigin-RevId: 552506545
This commit is contained in:
tofunmi 2023-07-31 17:35:02 +01:00 committed by Rohit Singh
parent b8e6f27caf
commit 87a020a154
3 changed files with 41 additions and 6 deletions

View file

@ -35,16 +35,34 @@ import java.util.Map;
public final class FileTypes { public final class FileTypes {
/** /**
* File types. One of {@link #UNKNOWN}, {@link #AC3}, {@link #AC4}, {@link #ADTS}, {@link #AMR}, * File types. One of the following:
* {@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}. * <ul>
* <li>{@link #UNKNOWN}
* <li>{@link #AC3}
* <li>{@link #AC4}
* <li>{@link #ADTS}
* <li>{@link #AMR}
* <li>{@link #FLAC}
* <li>{@link #MATROSKA}
* <li>{@link #MP3}
* <li>{@link #MP4}
* <li>{@link #OGG}
* <li>{@link #PS}
* <li>{@link #TS}
* <li>{@link #WEBVTT}
* <li>{@link #JPEG}
* <li>{@link #MIDI}
* <li>{@link #AVI}
* <li>{@link #PNG}
* </ul>
*/ */
@Documented @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@Target(TYPE_USE) @Target(TYPE_USE)
@IntDef({ @IntDef({
UNKNOWN, AC3, AC4, ADTS, AMR, FLAC, FLV, MATROSKA, MP3, MP4, OGG, PS, TS, WAV, WEBVTT, JPEG, UNKNOWN, AC3, AC4, ADTS, AMR, FLAC, FLV, MATROSKA, MP3, MP4, OGG, PS, TS, WAV, WEBVTT, JPEG,
MIDI, AVI MIDI, AVI, PNG
}) })
public @interface Type {} public @interface Type {}
@ -102,6 +120,9 @@ public final class FileTypes {
/** File type for the AVI format. */ /** File type for the AVI format. */
public static final int AVI = 16; 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"; @VisibleForTesting /* package */ static final String HEADER_CONTENT_TYPE = "Content-Type";
private static final String EXTENSION_AC3 = ".ac3"; 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_JPG = ".jpg";
private static final String EXTENSION_JPEG = ".jpeg"; private static final String EXTENSION_JPEG = ".jpeg";
private static final String EXTENSION_AVI = ".avi"; private static final String EXTENSION_AVI = ".avi";
private static final String EXTENSION_PNG = ".png";
private FileTypes() {} private FileTypes() {}
@ -202,6 +224,8 @@ public final class FileTypes {
return FileTypes.JPEG; return FileTypes.JPEG;
case MimeTypes.VIDEO_AVI: case MimeTypes.VIDEO_AVI:
return FileTypes.AVI; return FileTypes.AVI;
case MimeTypes.IMAGE_PNG:
return FileTypes.PNG;
default: default:
return FileTypes.UNKNOWN; return FileTypes.UNKNOWN;
} }
@ -269,6 +293,8 @@ public final class FileTypes {
return FileTypes.JPEG; return FileTypes.JPEG;
} else if (filename.endsWith(EXTENSION_AVI)) { } else if (filename.endsWith(EXTENSION_AVI)) {
return FileTypes.AVI; return FileTypes.AVI;
} else if (filename.endsWith(EXTENSION_PNG)) {
return FileTypes.PNG;
} else { } else {
return FileTypes.UNKNOWN; return FileTypes.UNKNOWN;
} }

View file

@ -38,6 +38,7 @@ import androidx.media3.extractor.mp3.Mp3Extractor;
import androidx.media3.extractor.mp4.FragmentedMp4Extractor; import androidx.media3.extractor.mp4.FragmentedMp4Extractor;
import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor;
import androidx.media3.extractor.ogg.OggExtractor; import androidx.media3.extractor.ogg.OggExtractor;
import androidx.media3.extractor.png.PngExtractor;
import androidx.media3.extractor.text.DefaultSubtitleParserFactory; import androidx.media3.extractor.text.DefaultSubtitleParserFactory;
import androidx.media3.extractor.text.SubtitleParser; import androidx.media3.extractor.text.SubtitleParser;
import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import androidx.media3.extractor.text.SubtitleTranscodingExtractor;
@ -85,6 +86,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* the FLAC extension or the FFmpeg extension. * the FLAC extension or the FFmpeg extension.
* </ul> * </ul>
* <li>JPEG ({@link JpegExtractor}) * <li>JPEG ({@link JpegExtractor})
* <li>PNG ({@link PngExtractor})
* <li>MIDI, if available, the MIDI extension's {@code androidx.media3.decoder.midi.MidiExtractor} * <li>MIDI, if available, the MIDI extension's {@code androidx.media3.decoder.midi.MidiExtractor}
* is used. * is used.
* </ul> * </ul>
@ -116,6 +118,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
FileTypes.AVI, FileTypes.AVI,
FileTypes.MIDI, FileTypes.MIDI,
FileTypes.JPEG, FileTypes.JPEG,
FileTypes.PNG,
}; };
private static final ExtensionLoader FLAC_EXTENSION_LOADER = private static final ExtensionLoader FLAC_EXTENSION_LOADER =
@ -506,6 +509,9 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
case FileTypes.AVI: case FileTypes.AVI:
extractors.add(new AviExtractor()); extractors.add(new AviExtractor());
break; break;
case FileTypes.PNG:
extractors.add(new PngExtractor());
break;
case FileTypes.WEBVTT: case FileTypes.WEBVTT:
case FileTypes.UNKNOWN: case FileTypes.UNKNOWN:
default: default:

View file

@ -30,6 +30,7 @@ import androidx.media3.extractor.mp3.Mp3Extractor;
import androidx.media3.extractor.mp4.FragmentedMp4Extractor; import androidx.media3.extractor.mp4.FragmentedMp4Extractor;
import androidx.media3.extractor.mp4.Mp4Extractor; import androidx.media3.extractor.mp4.Mp4Extractor;
import androidx.media3.extractor.ogg.OggExtractor; import androidx.media3.extractor.ogg.OggExtractor;
import androidx.media3.extractor.png.PngExtractor;
import androidx.media3.extractor.text.SubtitleTranscodingExtractor; import androidx.media3.extractor.text.SubtitleTranscodingExtractor;
import androidx.media3.extractor.ts.Ac3Extractor; import androidx.media3.extractor.ts.Ac3Extractor;
import androidx.media3.extractor.ts.Ac4Extractor; import androidx.media3.extractor.ts.Ac4Extractor;
@ -74,7 +75,8 @@ public final class DefaultExtractorsFactoryTest {
Ac4Extractor.class, Ac4Extractor.class,
Mp3Extractor.class, Mp3Extractor.class,
AviExtractor.class, AviExtractor.class,
JpegExtractor.class) JpegExtractor.class,
PngExtractor.class)
.inOrder(); .inOrder();
} }
@ -117,7 +119,8 @@ public final class DefaultExtractorsFactoryTest {
Ac3Extractor.class, Ac3Extractor.class,
Ac4Extractor.class, Ac4Extractor.class,
AviExtractor.class, AviExtractor.class,
JpegExtractor.class) JpegExtractor.class,
PngExtractor.class)
.inOrder(); .inOrder();
} }