#!/usr/bin/env python3

import sys

for filename in sys.argv[1:]:

	with open(filename, "rb") as file:

		# On va lire le premier marker de notre fichier (SOC)
		marker_soc = file.read(2)
		print(f"SOC: {marker_soc.hex()}")

		# On va boucler sur l'ensemble des KLV
		while True:

			# On va lire chaque marker
			marker = file.read(2)

			# Aucun marker, on arrête de lire
			if not marker:
				break

			# On lit la taille (2 octets)
			length = file.read(2)

			# On convertit en int
			length = int.from_bytes(length, byteorder='big')

			# On n'oublie pas d'enlever les 2 octets en trop
			length -= 2

			if length < 0:
				break

			# On lit les données
			data = file.read(length)

			print(f"{marker.hex()} : {length} bytes = {data.hex()}")

			# Le début d'un Tile-part (SOT)
			# Nous allons donc essayer de lire le Psot
			# qui intègre la taille de la tile-part (SOT+SOD)
			if marker.hex() == "ff90":

				# Tile-part Length se trouve à l'offset 16 
				# et à une taille de 32 bits
				tilepart_length = data[2:6]

				# On convertit en int
				tilepart_length = int.from_bytes(tilepart_length, byteorder='big')

				# tilePart = SOT+SOD
				# keyLength = 16 bits
				# lengthLength = 16 bits
				# (tilePartLength - SOTLength - (keyLength + lengthLength)
				SOD_length = (tilepart_length - len(data) - 4)

				# On lit les données du SOD (avec son marker)
				SOD_data = file.read(SOD_length)
				
				# On affiche le marker de SOD (16 bits), sa taille et ses données
				print(f"{SOD_data[0:2].hex()} : {len(SOD_data)} bytes = {SOD_data[2:].hex()}")
