diff options
-rw-r--r-- | package.json | 3 | ||||
-rw-r--r-- | patches/expo-image-picker+16.1.4.patch | 38 | ||||
-rw-r--r-- | patches/expo-image-picker+16.1.4.patch.md | 5 |
3 files changed, 45 insertions, 1 deletions
diff --git a/package.json b/package.json index cd7c48215..d397eb9fd 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "buildFromSource": [ "expo-notifications", "expo-haptics", - "expo-media-library" + "expo-media-library", + "expo-image-picker" ] } } diff --git a/patches/expo-image-picker+16.1.4.patch b/patches/expo-image-picker+16.1.4.patch new file mode 100644 index 000000000..0396fecbc --- /dev/null +++ b/patches/expo-image-picker+16.1.4.patch @@ -0,0 +1,38 @@ +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) { diff --git a/patches/expo-image-picker+16.1.4.patch.md b/patches/expo-image-picker+16.1.4.patch.md new file mode 100644 index 000000000..7855e8621 --- /dev/null +++ b/patches/expo-image-picker+16.1.4.patch.md @@ -0,0 +1,5 @@ +# Expo Image Picker patch + +Cherry-picked https://github.com/expo/expo/pull/37849 + +Remove when we update to a version that includes this commit. |