info: hide redundant PROF UUID
This commit is contained in:
parent
6c5536c443
commit
c47e6ee6da
2 changed files with 22 additions and 11 deletions
|
@ -184,9 +184,13 @@ class MetadataHandler(private val context: Context) : MethodCallHandler {
|
||||||
metadataMap["Spherical Video"] = HashMap(GSpherical(bytes).describe())
|
metadataMap["Spherical Video"] = HashMap(GSpherical(bytes).describe())
|
||||||
metadataMap.remove(dirName)
|
metadataMap.remove(dirName)
|
||||||
}
|
}
|
||||||
|
QuickTimeMetadata.PROF_UUID -> {
|
||||||
|
// redundant with info derived on the Dart side
|
||||||
|
metadataMap.remove(dirName)
|
||||||
|
}
|
||||||
QuickTimeMetadata.USMT_UUID -> {
|
QuickTimeMetadata.USMT_UUID -> {
|
||||||
val bytes = dir.getByteArray(Mp4UuidBoxDirectory.TAG_USER_DATA)
|
val bytes = dir.getByteArray(Mp4UuidBoxDirectory.TAG_USER_DATA)
|
||||||
val blocks = QuickTimeMetadata.parseUsmt(bytes)
|
val blocks = QuickTimeMetadata.parseUuidUsmt(bytes)
|
||||||
if (blocks.isNotEmpty()) {
|
if (blocks.isNotEmpty()) {
|
||||||
metadataMap.remove(dirName)
|
metadataMap.remove(dirName)
|
||||||
dirName = "QuickTime User Media"
|
dirName = "QuickTime User Media"
|
||||||
|
|
|
@ -9,31 +9,28 @@ class QuickTimeMetadataBlock(val type: String, val value: String, val language:
|
||||||
object QuickTimeMetadata {
|
object QuickTimeMetadata {
|
||||||
// QuickTime Profile Tags
|
// QuickTime Profile Tags
|
||||||
// cf https://exiftool.org/TagNames/QuickTime.html#Profile
|
// 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"
|
const val PROF_UUID = "50524f46-21d2-4fce-bb88-695cfac9c740"
|
||||||
|
|
||||||
// QuickTime UserMedia Tags
|
// QuickTime UserMedia Tags
|
||||||
// cf https://github.com/sonyxperiadev/MultimediaForAndroidLibrary/blob/master/library/src/main/java/com/sonymobile/android/media/internal/VUParser.java
|
// cf https://exiftool.org/TagNames/QuickTime.html#UserMedia
|
||||||
// cf https://rubenlaguna.com/post/2007-02-25-how-to-read-title-in-sony-psp-mp4-files/
|
|
||||||
const val USMT_UUID = "55534d54-21d2-4fce-bb88-695cfac9c740"
|
const val USMT_UUID = "55534d54-21d2-4fce-bb88-695cfac9c740"
|
||||||
|
|
||||||
private const val METADATA_BOX_ID = "MTDT"
|
private const val METADATA_BOX_ID = "MTDT"
|
||||||
|
|
||||||
fun parseUsmt(data: ByteArray): List<QuickTimeMetadataBlock> {
|
fun parseUuidUsmt(data: ByteArray): List<QuickTimeMetadataBlock> {
|
||||||
val blocks = ArrayList<QuickTimeMetadataBlock>()
|
val blocks = ArrayList<QuickTimeMetadataBlock>()
|
||||||
val boxType = String(data.copyOfRange(4, 8))
|
val boxHeader = BoxHeader(data)
|
||||||
if (boxType == METADATA_BOX_ID) {
|
if (boxHeader.boxType == METADATA_BOX_ID) {
|
||||||
blocks.addAll(parseQuicktimeMtdtBox(data))
|
blocks.addAll(parseQuicktimeMtdtBox(boxHeader, data))
|
||||||
}
|
}
|
||||||
return blocks
|
return blocks
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseQuicktimeMtdtBox(data: ByteArray): List<QuickTimeMetadataBlock> {
|
private fun parseQuicktimeMtdtBox(boxHeader: BoxHeader, data: ByteArray): List<QuickTimeMetadataBlock> {
|
||||||
val blocks = ArrayList<QuickTimeMetadataBlock>()
|
val blocks = ArrayList<QuickTimeMetadataBlock>()
|
||||||
var bytes = data
|
var bytes = data
|
||||||
val boxDataSize = BigInteger(data.copyOfRange(0, 4)).toInt()
|
|
||||||
val blockCount = BigInteger(bytes.copyOfRange(8, 10)).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) {
|
for (i in 0 until blockCount) {
|
||||||
val blockSize = BigInteger(bytes.copyOfRange(0, 2)).toInt()
|
val blockSize = BigInteger(bytes.copyOfRange(0, 2)).toInt()
|
||||||
|
@ -90,3 +87,13 @@ object QuickTimeMetadata {
|
||||||
return "$c1$c2$c3"
|
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))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue