Merge "Extend MediaScanner and MtpDatabase to support RAW image files"
diff --git a/api/current.txt b/api/current.txt
index 0f3b099..657c7c3 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -22500,6 +22500,7 @@
field public static final int FORMAT_AUDIBLE = 47364; // 0xb904
field public static final int FORMAT_AVI = 12298; // 0x300a
field public static final int FORMAT_BMP = 14340; // 0x3804
+ field public static final int FORMAT_DNG = 14353; // 0x3811
field public static final int FORMAT_DPOF = 12294; // 0x3006
field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003
field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801
diff --git a/api/system-current.txt b/api/system-current.txt
index 360a40b..459dc59 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -24056,6 +24056,7 @@
field public static final int FORMAT_AUDIBLE = 47364; // 0xb904
field public static final int FORMAT_AVI = 12298; // 0x300a
field public static final int FORMAT_BMP = 14340; // 0x3804
+ field public static final int FORMAT_DNG = 14353; // 0x3811
field public static final int FORMAT_DPOF = 12294; // 0x3006
field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003
field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801
diff --git a/api/test-current.txt b/api/test-current.txt
index fb11fcc..d78973f 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -22508,6 +22508,7 @@
field public static final int FORMAT_AUDIBLE = 47364; // 0xb904
field public static final int FORMAT_AVI = 12298; // 0x300a
field public static final int FORMAT_BMP = 14340; // 0x3804
+ field public static final int FORMAT_DNG = 14353; // 0x3811
field public static final int FORMAT_DPOF = 12294; // 0x3006
field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003
field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 526656a..7d76e74 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -52,7 +52,7 @@
public static final int FILE_TYPE_IMY = 13;
private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID;
private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY;
-
+
// Video file types
public static final int FILE_TYPE_MP4 = 21;
public static final int FILE_TYPE_M4V = 22;
@@ -66,7 +66,7 @@
public static final int FILE_TYPE_WEBM = 30;
private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM;
-
+
// More video file types
public static final int FILE_TYPE_MP2PS = 200;
private static final int FIRST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;
@@ -81,7 +81,19 @@
public static final int FILE_TYPE_WEBP = 36;
private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WEBP;
-
+
+ // Raw image file types
+ public static final int FILE_TYPE_DNG = 300;
+ public static final int FILE_TYPE_CR2 = 301;
+ public static final int FILE_TYPE_NEF = 302;
+ public static final int FILE_TYPE_NRW = 303;
+ public static final int FILE_TYPE_ARW = 304;
+ public static final int FILE_TYPE_RW2 = 305;
+ public static final int FILE_TYPE_ORF = 306;
+ public static final int FILE_TYPE_RAF = 307;
+ private static final int FIRST_RAW_IMAGE_FILE_TYPE = FILE_TYPE_DNG;
+ private static final int LAST_RAW_IMAGE_FILE_TYPE = FILE_TYPE_RAF;
+
// Playlist file types
public static final int FILE_TYPE_M3U = 41;
public static final int FILE_TYPE_PLS = 42;
@@ -105,17 +117,17 @@
public static final int FILE_TYPE_MS_EXCEL = 105;
public static final int FILE_TYPE_MS_POWERPOINT = 106;
public static final int FILE_TYPE_ZIP = 107;
-
+
public static class MediaFileType {
public final int fileType;
public final String mimeType;
-
+
MediaFileType(int fileType, String mimeType) {
this.fileType = fileType;
this.mimeType = mimeType;
}
}
-
+
private static final HashMap<String, MediaFileType> sFileTypeMap
= new HashMap<String, MediaFileType>();
private static final HashMap<String, Integer> sMimeTypeMap
@@ -182,7 +194,7 @@
addFileType("AAC", FILE_TYPE_AAC, "audio/aac", MtpConstants.FORMAT_AAC);
addFileType("AAC", FILE_TYPE_AAC, "audio/aac-adts", MtpConstants.FORMAT_AAC);
addFileType("MKA", FILE_TYPE_MKA, "audio/x-matroska");
-
+
addFileType("MID", FILE_TYPE_MID, "audio/midi");
addFileType("MIDI", FILE_TYPE_MID, "audio/midi");
addFileType("XMF", FILE_TYPE_MID, "audio/midi");
@@ -192,7 +204,7 @@
addFileType("RTX", FILE_TYPE_MID, "audio/midi");
addFileType("OTA", FILE_TYPE_MID, "audio/midi");
addFileType("MXMF", FILE_TYPE_MID, "audio/midi");
-
+
addFileType("MPEG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG);
addFileType("MPG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG);
addFileType("MP4", FILE_TYPE_MP4, "video/mp4", MtpConstants.FORMAT_MPEG);
@@ -218,7 +230,16 @@
addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp", MtpConstants.FORMAT_BMP);
addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");
addFileType("WEBP", FILE_TYPE_WEBP, "image/webp");
-
+
+ addFileType("DNG", FILE_TYPE_DNG, "image/x-adobe-dng", MtpConstants.FORMAT_DNG);
+ addFileType("CR2", FILE_TYPE_CR2, "image/x-canon-cr2");
+ addFileType("NEF", FILE_TYPE_NEF, "image/x-nikon-nef");
+ addFileType("NRW", FILE_TYPE_NRW, "image/x-nikon-nrw");
+ addFileType("ARW", FILE_TYPE_ARW, "image/x-sony-arw");
+ addFileType("RW2", FILE_TYPE_RW2, "image/x-panasonic-rw2");
+ addFileType("ORF", FILE_TYPE_ORF, "image/x-olympus-orf");
+ addFileType("RAF", FILE_TYPE_RAF, "image/x-fuji-raf");
+
addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST);
addFileType("M3U", FILE_TYPE_M3U, "application/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST);
addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls", MtpConstants.FORMAT_PLS_PLAYLIST);
@@ -258,7 +279,14 @@
public static boolean isImageFileType(int fileType) {
return (fileType >= FIRST_IMAGE_FILE_TYPE &&
- fileType <= LAST_IMAGE_FILE_TYPE);
+ fileType <= LAST_IMAGE_FILE_TYPE)
+ || (fileType >= FIRST_RAW_IMAGE_FILE_TYPE &&
+ fileType <= LAST_RAW_IMAGE_FILE_TYPE);
+ }
+
+ public static boolean isRawImageFileType(int fileType) {
+ return (fileType >= FIRST_RAW_IMAGE_FILE_TYPE &&
+ fileType <= LAST_RAW_IMAGE_FILE_TYPE);
}
public static boolean isPlayListFileType(int fileType) {
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index dfe024a..78f357f 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -899,7 +899,8 @@
values.put(Audio.Media.IS_ALARM, alarms);
values.put(Audio.Media.IS_MUSIC, music);
values.put(Audio.Media.IS_PODCAST, podcasts);
- } else if (mFileType == MediaFile.FILE_TYPE_JPEG && !mNoMedia) {
+ } else if ((mFileType == MediaFile.FILE_TYPE_JPEG
+ || MediaFile.isRawImageFileType(mFileType)) && !mNoMedia) {
ExifInterface exif = null;
try {
exif = new ExifInterface(entry.mPath);
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index daa5fa5..abd6f4a 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -92,7 +92,8 @@
SizedThumbnailBitmap sizedThumbnailBitmap = new SizedThumbnailBitmap();
Bitmap bitmap = null;
MediaFileType fileType = MediaFile.getFileType(filePath);
- if (fileType != null && fileType.fileType == MediaFile.FILE_TYPE_JPEG) {
+ if (fileType != null && (fileType.fileType == MediaFile.FILE_TYPE_JPEG
+ || MediaFile.isRawImageFileType(fileType.fileType))) {
createThumbnailFromEXIF(filePath, targetSize, maxPixels, sizedThumbnailBitmap);
bitmap = sizedThumbnailBitmap.mBitmap;
}
diff --git a/media/java/android/mtp/MtpConstants.java b/media/java/android/mtp/MtpConstants.java
index b2a5a44..bdd8643 100644
--- a/media/java/android/mtp/MtpConstants.java
+++ b/media/java/android/mtp/MtpConstants.java
@@ -202,6 +202,8 @@
public static final int FORMAT_JP2 = 0x380F;
/** Format code for JPX files */
public static final int FORMAT_JPX = 0x3810;
+ /** Format code for DNG files */
+ public static final int FORMAT_DNG = 0x3811;
/** Format code for firmware files */
public static final int FORMAT_UNDEFINED_FIRMWARE = 0xB802;
/** Format code for Windows image files */
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index bc96e2e..29bcc19 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -587,6 +587,7 @@
MtpConstants.FORMAT_PLS_PLAYLIST,
MtpConstants.FORMAT_XML_DOCUMENT,
MtpConstants.FORMAT_FLAC,
+ MtpConstants.FORMAT_DNG,
};
}
@@ -696,6 +697,7 @@
case MtpConstants.FORMAT_GIF:
case MtpConstants.FORMAT_PNG:
case MtpConstants.FORMAT_BMP:
+ case MtpConstants.FORMAT_DNG:
return IMAGE_PROPERTIES;
default:
return FILE_PROPERTIES;