Add supportsMimeType API to bitmapLoader
PiperOrigin-RevId: 597942459
This commit is contained in:
parent
6879698d7e
commit
7f087243bb
@ -24,6 +24,10 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||
/** Loads images. */
|
||||
@UnstableApi
|
||||
public interface BitmapLoader {
|
||||
|
||||
/** Returns whether the given {@code mimeType} is supported. */
|
||||
boolean supportsMimeType(String mimeType);
|
||||
|
||||
/** Decodes an image from compressed binary data. */
|
||||
ListenableFuture<Bitmap> decodeBitmap(byte[] data);
|
||||
|
||||
|
@ -3149,6 +3149,25 @@ public final class Util {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the image MIME types that can be decoded and loaded by {@link
|
||||
* android.graphics.BitmapFactory} that Media3 aims to support.
|
||||
*/
|
||||
@UnstableApi
|
||||
public static boolean isBitmapFactorySupportedMimeType(String mimeType) {
|
||||
switch (mimeType) {
|
||||
case MimeTypes.IMAGE_PNG:
|
||||
case MimeTypes.IMAGE_JPEG:
|
||||
case MimeTypes.IMAGE_BMP:
|
||||
case MimeTypes.IMAGE_WEBP:
|
||||
return true;
|
||||
case MimeTypes.IMAGE_HEIF:
|
||||
return Util.SDK_INT >= 26;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of strings representing the {@link C.SelectionFlags} values present in {@code
|
||||
* selectionFlags}.
|
||||
|
@ -17,6 +17,7 @@ package androidx.media3.datasource;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkArgument;
|
||||
import static androidx.media3.common.util.Assertions.checkStateNotNull;
|
||||
import static androidx.media3.common.util.Util.isBitmapFactorySupportedMimeType;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
@ -93,6 +94,11 @@ public final class DataSourceBitmapLoader implements BitmapLoader {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsMimeType(String mimeType) {
|
||||
return isBitmapFactorySupportedMimeType(mimeType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Bitmap> decodeBitmap(byte[] data) {
|
||||
return listeningExecutorService.submit(() -> decode(data, options));
|
||||
|
@ -19,6 +19,7 @@ import static androidx.annotation.VisibleForTesting.PRIVATE;
|
||||
import static androidx.media3.common.util.Assertions.checkArgument;
|
||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
import static androidx.media3.common.util.Assertions.checkState;
|
||||
import static androidx.media3.common.util.Util.isBitmapFactorySupportedMimeType;
|
||||
import static androidx.media3.decoder.DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
@ -31,11 +32,9 @@ import androidx.media3.common.C;
|
||||
import androidx.media3.common.Format;
|
||||
import androidx.media3.common.MimeTypes;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.decoder.DecoderInputBuffer;
|
||||
import androidx.media3.decoder.SimpleDecoder;
|
||||
import androidx.media3.exoplayer.RendererCapabilities;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -69,7 +68,6 @@ public final class BitmapFactoryImageDecoder
|
||||
|
||||
/** A factory for {@link BitmapFactoryImageDecoder} instances. */
|
||||
public static final class Factory implements ImageDecoder.Factory {
|
||||
private static final ImmutableSet<String> SUPPORTED_IMAGE_TYPES = getSupportedMimeTypes();
|
||||
|
||||
private final BitmapDecoder bitmapDecoder;
|
||||
|
||||
@ -91,10 +89,10 @@ public final class BitmapFactoryImageDecoder
|
||||
|
||||
@Override
|
||||
public @RendererCapabilities.Capabilities int supportsFormat(Format format) {
|
||||
if (!MimeTypes.isImage(format.containerMimeType)) {
|
||||
if (format.containerMimeType == null || !MimeTypes.isImage(format.containerMimeType)) {
|
||||
return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE);
|
||||
}
|
||||
return SUPPORTED_IMAGE_TYPES.contains(format.containerMimeType)
|
||||
return isBitmapFactorySupportedMimeType(format.containerMimeType)
|
||||
? RendererCapabilities.create(C.FORMAT_HANDLED)
|
||||
: RendererCapabilities.create(C.FORMAT_UNSUPPORTED_SUBTYPE);
|
||||
}
|
||||
@ -103,16 +101,6 @@ public final class BitmapFactoryImageDecoder
|
||||
public BitmapFactoryImageDecoder createImageDecoder() {
|
||||
return new BitmapFactoryImageDecoder(bitmapDecoder);
|
||||
}
|
||||
|
||||
private static ImmutableSet<String> getSupportedMimeTypes() {
|
||||
ImmutableSet.Builder<String> supportedMimeTypes = ImmutableSet.builder();
|
||||
supportedMimeTypes.add(
|
||||
MimeTypes.IMAGE_PNG, MimeTypes.IMAGE_JPEG, MimeTypes.IMAGE_BMP, MimeTypes.IMAGE_WEBP);
|
||||
if (Util.SDK_INT >= 26) {
|
||||
supportedMimeTypes.add(MimeTypes.IMAGE_HEIF);
|
||||
}
|
||||
return supportedMimeTypes.build();
|
||||
}
|
||||
}
|
||||
|
||||
private final BitmapDecoder bitmapDecoder;
|
||||
|
@ -48,6 +48,11 @@ public final class CacheBitmapLoader implements BitmapLoader {
|
||||
this.bitmapLoader = bitmapLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsMimeType(String mimeType) {
|
||||
return bitmapLoader.supportsMimeType(mimeType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Bitmap> decodeBitmap(byte[] data) {
|
||||
if (lastBitmapLoadRequest != null && lastBitmapLoadRequest.matches(data)) {
|
||||
|
@ -17,6 +17,7 @@ package androidx.media3.session;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkArgument;
|
||||
import static androidx.media3.common.util.Assertions.checkStateNotNull;
|
||||
import static androidx.media3.common.util.Util.isBitmapFactorySupportedMimeType;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
@ -66,6 +67,11 @@ public final class SimpleBitmapLoader implements BitmapLoader {
|
||||
this.executorService = MoreExecutors.listeningDecorator(executorService);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsMimeType(String mimeType) {
|
||||
return isBitmapFactorySupportedMimeType(mimeType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Bitmap> decodeBitmap(byte[] data) {
|
||||
return executorService.submit(() -> decode(data));
|
||||
|
Loading…
x
Reference in New Issue
Block a user