summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chong Zhang <chz@google.com> 2019-07-09 12:15:07 -0700
committer Chong Zhang <chz@google.com> 2019-07-09 12:20:53 -0700
commit0da7cdc1038da05f67c2edba7c983886bf0e553b (patch)
treeb7487d7c61d094c18db3d05b1b6e2637c4c79607
parent1cac4fada87c563980ef75990b1f799d177a97df (diff)
Fix ThumbnailUtils thumbnail pts calculation
bug: 137113185 test: manual test the clip attached in the bug in Download app. Change-Id: I824cf1a5c5e08b87e7534a4c2287286134838917
-rw-r--r--media/java/android/media/MediaMetadataRetriever.java2
-rw-r--r--media/java/android/media/ThumbnailUtils.java10
2 files changed, 7 insertions, 5 deletions
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index 813e4744fc77..0346010f4587 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -800,7 +800,7 @@ public class MediaMetadataRetriever implements AutoCloseable {
*/
public static final int METADATA_KEY_YEAR = 8;
/**
- * The metadata key to retrieve the playback duration of the data source.
+ * The metadata key to retrieve the playback duration (in ms) of the data source.
*/
public static final int METADATA_KEY_DURATION = 9;
/**
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 534d63b4cca0..fb581b532dd2 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -356,19 +356,21 @@ public class ThumbnailUtils {
return ImageDecoder.decodeBitmap(ImageDecoder.createSource(raw), resizer);
}
- // Fall back to middle of video
final int width = Integer.parseInt(mmr.extractMetadata(METADATA_KEY_VIDEO_WIDTH));
final int height = Integer.parseInt(mmr.extractMetadata(METADATA_KEY_VIDEO_HEIGHT));
- final long duration = Long.parseLong(mmr.extractMetadata(METADATA_KEY_DURATION));
+ // Fall back to middle of video
+ // Note: METADATA_KEY_DURATION unit is in ms, not us.
+ final long thumbnailTimeUs =
+ Long.parseLong(mmr.extractMetadata(METADATA_KEY_DURATION)) * 1000 / 2;
// If we're okay with something larger than native format, just
// return a frame without up-scaling it
if (size.getWidth() > width && size.getHeight() > height) {
return Objects.requireNonNull(
- mmr.getFrameAtTime(duration / 2, OPTION_CLOSEST_SYNC));
+ mmr.getFrameAtTime(thumbnailTimeUs, OPTION_CLOSEST_SYNC));
} else {
return Objects.requireNonNull(
- mmr.getScaledFrameAtTime(duration / 2, OPTION_CLOSEST_SYNC,
+ mmr.getScaledFrameAtTime(thumbnailTimeUs, OPTION_CLOSEST_SYNC,
size.getWidth(), size.getHeight()));
}
} catch (RuntimeException e) {