diff options
Diffstat (limited to 'media/java/android/media/ThumbnailUtils.java')
-rw-r--r-- | media/java/android/media/ThumbnailUtils.java | 32 |
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) { |