diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt index f4645ee64..895c58eda 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MetadataHandler.kt @@ -184,9 +184,13 @@ class MetadataHandler(private val context: Context) : MethodCallHandler { metadataMap["Spherical Video"] = HashMap(GSpherical(bytes).describe()) metadataMap.remove(dirName) } + QuickTimeMetadata.PROF_UUID -> { + // redundant with info derived on the Dart side + metadataMap.remove(dirName) + } QuickTimeMetadata.USMT_UUID -> { val bytes = dir.getByteArray(Mp4UuidBoxDirectory.TAG_USER_DATA) - val blocks = QuickTimeMetadata.parseUsmt(bytes) + val blocks = QuickTimeMetadata.parseUuidUsmt(bytes) if (blocks.isNotEmpty()) { metadataMap.remove(dirName) dirName = "QuickTime User Media" diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/QuickTimeMetadata.kt b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/QuickTimeMetadata.kt index 0bbd57eda..6341ffe53 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/metadata/QuickTimeMetadata.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/metadata/QuickTimeMetadata.kt @@ -9,31 +9,28 @@ class QuickTimeMetadataBlock(val type: String, val value: String, val language: object QuickTimeMetadata { // QuickTime Profile Tags // cf https://exiftool.org/TagNames/QuickTime.html#Profile - // cf https://www.ffmpeg.org/doxygen/1.1/movenc_8c_source.html#l02839 const val PROF_UUID = "50524f46-21d2-4fce-bb88-695cfac9c740" // QuickTime UserMedia Tags - // cf https://github.com/sonyxperiadev/MultimediaForAndroidLibrary/blob/master/library/src/main/java/com/sonymobile/android/media/internal/VUParser.java - // cf https://rubenlaguna.com/post/2007-02-25-how-to-read-title-in-sony-psp-mp4-files/ + // cf https://exiftool.org/TagNames/QuickTime.html#UserMedia const val USMT_UUID = "55534d54-21d2-4fce-bb88-695cfac9c740" private const val METADATA_BOX_ID = "MTDT" - fun parseUsmt(data: ByteArray): List { + fun parseUuidUsmt(data: ByteArray): List { val blocks = ArrayList() - val boxType = String(data.copyOfRange(4, 8)) - if (boxType == METADATA_BOX_ID) { - blocks.addAll(parseQuicktimeMtdtBox(data)) + val boxHeader = BoxHeader(data) + if (boxHeader.boxType == METADATA_BOX_ID) { + blocks.addAll(parseQuicktimeMtdtBox(boxHeader, data)) } return blocks } - private fun parseQuicktimeMtdtBox(data: ByteArray): List { + private fun parseQuicktimeMtdtBox(boxHeader: BoxHeader, data: ByteArray): List { val blocks = ArrayList() var bytes = data - val boxDataSize = BigInteger(data.copyOfRange(0, 4)).toInt() val blockCount = BigInteger(bytes.copyOfRange(8, 10)).toInt() - bytes = bytes.copyOfRange(10, boxDataSize) + bytes = bytes.copyOfRange(10, boxHeader.boxDataSize) for (i in 0 until blockCount) { val blockSize = BigInteger(bytes.copyOfRange(0, 2)).toInt() @@ -90,3 +87,13 @@ object QuickTimeMetadata { return "$c1$c2$c3" } } + +class BoxHeader(bytes: ByteArray) { + var boxDataSize: Int = 0 + var boxType: String + + init { + boxDataSize = BigInteger(bytes.copyOfRange(0, 4)).toInt() + boxType = String(bytes.copyOfRange(4, 8)) + } +} \ No newline at end of file