74f7a44d71
* patch in upstream fix * build expo-image-picker from source so that patch takes
39 lines
2.3 KiB
Diff
39 lines
2.3 KiB
Diff
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/MediaHandler.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/MediaHandler.kt
|
|
index c863fb8..cde8859 100644
|
|
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/MediaHandler.kt
|
|
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/MediaHandler.kt
|
|
@@ -101,16 +101,30 @@ internal class MediaHandler(
|
|
val fileData = getAdditionalFileData(sourceUri)
|
|
val mimeType = getType(context.contentResolver, sourceUri)
|
|
|
|
+ // Extract basic metadata
|
|
+ var width = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)
|
|
+ var height = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)
|
|
+ val rotation = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION)
|
|
+
|
|
+ // Android returns the encoded width/height which do not take the display rotation into
|
|
+ // account. For videos recorded in portrait mode the encoded dimensions are often landscape
|
|
+ // (e.g. 1920x1080) paired with a 90°/270° rotation flag. iOS adjusts these values before
|
|
+ // reporting them, so to keep the behaviour consistent across platforms we swap the width
|
|
+ // and height when the rotation indicates the video should be displayed in portrait.
|
|
+ if (rotation % 180 != 0) {
|
|
+ width = height.also { height = width }
|
|
+ }
|
|
+
|
|
return ImagePickerAsset(
|
|
type = MediaType.VIDEO,
|
|
uri = outputUri.toString(),
|
|
- width = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH),
|
|
- height = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT),
|
|
+ width = width,
|
|
+ height = height,
|
|
fileName = fileData?.fileName,
|
|
fileSize = fileData?.fileSize,
|
|
mimeType = mimeType,
|
|
duration = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_DURATION),
|
|
- rotation = metadataRetriever.extractInt(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION),
|
|
+ rotation = rotation,
|
|
assetId = sourceUri.getMediaStoreAssetId()
|
|
)
|
|
} catch (cause: FailedToExtractVideoMetadataException) {
|