From a435bfdf277f19d5350fde938445da9bb8ed167e Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Thu, 27 Apr 2023 18:12:04 +0200 Subject: [PATCH] fixed parsing videos with skippable boxes in `meta` box --- CHANGELOG.md | 1 + android/app/build.gradle | 4 ++-- .../app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt | 4 ---- lib/widgets/viewer/info/metadata/metadata_section.dart | 2 ++ 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9c24ab23..506c65b1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. - Viewer: multi-page context update when removing burst entries - prevent editing item when Exif editing changes mime type +- parsing videos with skippable boxes in `meta` box ## [v1.8.5] - 2023-04-18 diff --git a/android/app/build.gradle b/android/app/build.gradle index eb4d5cce7..1feb2d8d6 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -216,8 +216,8 @@ dependencies { // - https://jitpack.io/p/deckerst/mp4parser // - https://jitpack.io/p/deckerst/pixymeta-android implementation 'com.github.deckerst:Android-TiffBitmapFactory:876e53870a' - implementation 'com.github.deckerst.mp4parser:isoparser:7b698ab674' - implementation 'com.github.deckerst.mp4parser:muxer:7b698ab674' + implementation 'com.github.deckerst.mp4parser:isoparser:42f2cdc087' + implementation 'com.github.deckerst.mp4parser:muxer:42f2cdc087' implementation 'com.github.deckerst:pixymeta-android:706bd73d6e' // huawei flavor only diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt index cb721c9c1..47d2b75f2 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/XMP.kt @@ -152,10 +152,6 @@ object XMP { pfd.use { FileInputStream(it.fileDescriptor).use { stream -> stream.channel.use { channel -> - // TODO TLAD [mp4] `IsoFile` init may fail if a skipped box has a `org.mp4parser.boxes.iso14496.part12.MetaBox` as parent, - // because `MetaBox.parse()` changes the argument `dataSource` to a `RewindableReadableByteChannel`, - // so it is no longer a seekable `FileChannel`, which is a requirement to skip boxes. - // creating `IsoFile` with a `File` or a `File.inputStream()` yields `No such device` IsoFile(channel, Mp4ParserHelper.metadataBoxParser()).use { isoFile -> isoFile.processBoxes(UserBox::class.java, true) { box, _ -> diff --git a/lib/widgets/viewer/info/metadata/metadata_section.dart b/lib/widgets/viewer/info/metadata/metadata_section.dart index 8c4777cb2..c040b20b4 100644 --- a/lib/widgets/viewer/info/metadata/metadata_section.dart +++ b/lib/widgets/viewer/info/metadata/metadata_section.dart @@ -142,6 +142,8 @@ class _MetadataSectionSliverState extends State { } Future _getMetadata() async { + if (!mounted) return; + final titledDirectories = await entry.getMetadataDirectories(context); metadataNotifier.value = Map.fromEntries(titledDirectories); _expandedDirectoryNotifier.value = null;