diff options
| author | 2016-07-07 09:22:43 +0000 | |
|---|---|---|
| committer | 2016-07-07 09:22:45 +0000 | |
| commit | d63dbfdb6b5bcdcc9ebac24c75fed135302aff13 (patch) | |
| tree | 466d71e988d524cfc93731e4ee029301a801ad45 | |
| parent | bbf97cd121d0949447194f2c81498627de4c15c9 (diff) | |
| parent | 5f0c3a531938c0c1399efab94906aee74eff9108 (diff) | |
Merge "Make MediaScanner extract "date taken" from videos, if present" into nyc-mr1-dev
| -rw-r--r-- | media/java/android/media/MediaScanner.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 5fd85d19b9b9..c8ab5f9bc429 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -60,11 +60,14 @@ import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.text.SimpleDateFormat; +import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Locale; +import java.util.TimeZone; import java.util.concurrent.atomic.AtomicBoolean; /** @@ -451,6 +454,8 @@ public class MediaScanner implements AutoCloseable { private class MyMediaScannerClient implements MediaScannerClient { + private final SimpleDateFormat mDateFormatter; + private String mArtist; private String mAlbumArtist; // use this if mArtist is missing private String mAlbum; @@ -463,6 +468,7 @@ public class MediaScanner implements AutoCloseable { private int mYear; private int mDuration; private String mPath; + private long mDate; private long mLastModified; private long mFileSize; private String mWriter; @@ -472,6 +478,11 @@ public class MediaScanner implements AutoCloseable { private int mWidth; private int mHeight; + public MyMediaScannerClient() { + mDateFormatter = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); + mDateFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); + } + public FileEntry beginFile(String path, String mimeType, long lastModified, long fileSize, boolean isDirectory, boolean noMedia) { mMimeType = mimeType; @@ -537,6 +548,7 @@ public class MediaScanner implements AutoCloseable { mYear = 0; mDuration = 0; mPath = path; + mDate = 0; mLastModified = lastModified; mWriter = null; mCompilation = 0; @@ -627,6 +639,14 @@ public class MediaScanner implements AutoCloseable { return result; } + private long parseDate(String date) { + try { + return mDateFormatter.parse(date).getTime(); + } catch (ParseException e) { + return 0; + } + } + private int parseSubstring(String s, int start, int defaultValue) { int length = s.length(); if (start == length) return defaultValue; @@ -684,6 +704,8 @@ public class MediaScanner implements AutoCloseable { mCompilation = parseSubstring(value, 0, 0); } else if (name.equalsIgnoreCase("isdrm")) { mIsDrm = (parseSubstring(value, 0, 0) == 1); + } else if (name.equalsIgnoreCase("date")) { + mDate = parseDate(value); } else if (name.equalsIgnoreCase("width")) { mWidth = parseSubstring(value, 0, 0); } else if (name.equalsIgnoreCase("height")) { @@ -830,6 +852,9 @@ public class MediaScanner implements AutoCloseable { if (resolution != null) { map.put(Video.Media.RESOLUTION, resolution); } + if (mDate > 0) { + map.put(Video.Media.DATE_TAKEN, mDate); + } } else if (MediaFile.isImageFileType(mFileType)) { // FIXME - add DESCRIPTION } else if (MediaFile.isAudioFileType(mFileType)) { |