From af5e9b51e19ee0ca27e8e38f061096b655615d18 Mon Sep 17 00:00:00 2001 From: ashilkn Date: Thu, 1 Aug 2024 16:51:36 +0530 Subject: [PATCH] [mob][photos] Fix bug in parsing rotation metadata from video using FFProbe --- mobile/lib/models/ffmpeg/ffprobe_keys.dart | 14 ++++++++++++++ mobile/lib/models/ffmpeg/ffprobe_props.dart | 7 ++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/mobile/lib/models/ffmpeg/ffprobe_keys.dart b/mobile/lib/models/ffmpeg/ffprobe_keys.dart index 5eddee32c8..55c26c29f1 100644 --- a/mobile/lib/models/ffmpeg/ffprobe_keys.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_keys.dart @@ -72,6 +72,7 @@ class FFProbeKeys { static const xiaomiSlowMoment = 'com.xiaomi.slow_moment'; static const sideDataList = 'side_data_list'; static const rotation = 'rotation'; + static const sideDataType = 'side_data_type'; } class MediaStreamTypes { @@ -83,3 +84,16 @@ class MediaStreamTypes { static const unknown = 'unknown'; static const video = 'video'; } + +enum SideDataType { + displayMatrix; + + getString() { + switch (this) { + case SideDataType.displayMatrix: + return 'Display Matrix'; + default: + assert(false, 'Unknown side data type: $this'); + } + } +} diff --git a/mobile/lib/models/ffmpeg/ffprobe_props.dart b/mobile/lib/models/ffmpeg/ffprobe_props.dart index b72c59f5ba..28a92869d1 100644 --- a/mobile/lib/models/ffmpeg/ffprobe_props.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_props.dart @@ -174,7 +174,12 @@ class FFProbeProps { result._codecHeight = stream[key].toString(); parsedData[key] = result._codecHeight; } else if (key == FFProbeKeys.sideDataList) { - result._rotation = stream[key][0][FFProbeKeys.rotation]; + for (Map sideData in stream[key]) { + if (sideData[FFProbeKeys.sideDataType] == + SideDataType.displayMatrix.getString()) { + result._rotation = sideData[FFProbeKeys.rotation]; + } + } } } }