diff options
| author | 2019-07-09 22:53:50 +0000 | |
|---|---|---|
| committer | 2019-07-09 22:53:50 +0000 | |
| commit | dfb94f02fc4dffd1887f5fc7f83a4342eb9b79c2 (patch) | |
| tree | 1d419ef7416acf24801c6bf1fa35714e216c056e | |
| parent | 1b676f4314635f64499c89b1603b946b5e57dc4d (diff) | |
| parent | 0da7cdc1038da05f67c2edba7c983886bf0e553b (diff) | |
Merge "Fix ThumbnailUtils thumbnail pts calculation"
| -rw-r--r-- | media/java/android/media/MediaMetadataRetriever.java | 2 | ||||
| -rw-r--r-- | media/java/android/media/ThumbnailUtils.java | 10 |
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) { |