From bad11564c674367e344688b93c2b76d329aee1df Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Tue, 4 Feb 2025 21:02:12 +0100 Subject: [PATCH] #1417 do not trust video size and orientation reported by media store --- CHANGELOG.md | 1 + lib/model/entry/extensions/catalog.dart | 4 ++-- lib/model/media/video/metadata.dart | 7 ++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47407e43b..e2d604789 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ All notable changes to this project will be documented in this file. - editing TIFF metadata increasing file size - region decoding for some RAW files +- incorrect video size or orientation as reported by Media Store ## [v1.12.2] - 2025-01-13 diff --git a/lib/model/entry/extensions/catalog.dart b/lib/model/entry/extensions/catalog.dart index 90e9ea4d9..5312f8655 100644 --- a/lib/model/entry/extensions/catalog.dart +++ b/lib/model/entry/extensions/catalog.dart @@ -31,8 +31,8 @@ extension ExtraAvesEntryCatalog on AvesEntry { catalogMetadata = CatalogMetadata(id: id); } else { // pre-processing - if ((isVideo && (!isSized || durationMillis == 0)) || mimeType == MimeTypes.avif) { - // exotic video that is not sized during loading + if (isVideo || mimeType == MimeTypes.avif) { + // on initial loading, original source may report incorrect size, rotation or duration final fields = await VideoMetadataFormatter.getLoadingMetadata(this); // check size as the video interpreter may fail on some AVIF stills final width = fields[EntryFields.width]; diff --git a/lib/model/media/video/metadata.dart b/lib/model/media/video/metadata.dart index b404bd17a..212deb406 100644 --- a/lib/model/media/video/metadata.dart +++ b/lib/model/media/video/metadata.dart @@ -47,7 +47,7 @@ class VideoMetadataFormatter { Codecs.webm: 'WebM', }; - // fetch size and duration + // fetch size, rotation and duration static Future> getLoadingMetadata(AvesEntry entry) async { final mediaInfo = await videoMetadataFetcher.getMetadata(entry); final fields = {}; @@ -63,6 +63,11 @@ class VideoMetadataFormatter { fields[EntryFields.width] = width; fields[EntryFields.height] = height; } + + final rotationDegrees = sizedStream[Keys.rotate]; + if (rotationDegrees is int) { + fields[EntryFields.rotationDegrees] = rotationDegrees; + } } }