summaryrefslogtreecommitdiff
path: root/media/java/android/media/ThumbnailUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'media/java/android/media/ThumbnailUtils.java')
-rw-r--r--media/java/android/media/ThumbnailUtils.java32
1 files changed, 19 insertions, 13 deletions
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 07ab06934eb3..fd1406078e7a 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -23,15 +23,13 @@ import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
-import android.media.MediaMetadataRetriever;
-import android.media.MediaFile.MediaFileType;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore.Images;
import android.util.Log;
-import java.io.FileInputStream;
import java.io.FileDescriptor;
+import java.io.FileInputStream;
import java.io.IOException;
/**
@@ -94,15 +92,15 @@ public class ThumbnailUtils {
: MAX_NUM_PIXELS_MICRO_THUMBNAIL;
SizedThumbnailBitmap sizedThumbnailBitmap = new SizedThumbnailBitmap();
Bitmap bitmap = null;
- MediaFileType fileType = MediaFile.getFileType(filePath);
- if (fileType != null) {
- if (fileType.fileType == MediaFile.FILE_TYPE_JPEG
- || MediaFile.isRawImageFileType(fileType.fileType)) {
- createThumbnailFromEXIF(filePath, targetSize, maxPixels, sizedThumbnailBitmap);
- bitmap = sizedThumbnailBitmap.mBitmap;
- } else if (fileType.fileType == MediaFile.FILE_TYPE_HEIF) {
- bitmap = createThumbnailFromMetadataRetriever(filePath, targetSize, maxPixels);
- }
+ String mimeType = MediaFile.getMimeTypeForFile(filePath);
+ if (mimeType.equals("image/heif")
+ || mimeType.equals("image/heif-sequence")
+ || mimeType.equals("image/heic")
+ || mimeType.equals("image/heic-sequence")) {
+ bitmap = createThumbnailFromMetadataRetriever(filePath, targetSize, maxPixels);
+ } else if (MediaFile.isExifMimeType(mimeType)) {
+ createThumbnailFromEXIF(filePath, targetSize, maxPixels, sizedThumbnailBitmap);
+ bitmap = sizedThumbnailBitmap.mBitmap;
}
if (bitmap == null) {
@@ -162,7 +160,15 @@ public class ThumbnailUtils {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(filePath);
- bitmap = retriever.getFrameAtTime(-1);
+ // First retrieve album art in metadata if set.
+ byte[] embeddedPicture = retriever.getEmbeddedPicture();
+ if (embeddedPicture != null && embeddedPicture.length > 0) {
+ bitmap = BitmapFactory.decodeByteArray(embeddedPicture, 0, embeddedPicture.length);
+ }
+ // Fall back to first frame of the video.
+ if (bitmap == null) {
+ bitmap = retriever.getFrameAtTime(-1);
+ }
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {