From 8946b57456c03d2bc01ce081208480005f2426d4 Mon Sep 17 00:00:00 2001 From: Javanaut Date: Sat, 31 Jan 2026 12:06:24 +0100 Subject: [PATCH] fix attachement descriptor handling --- src/ffx/ffx_controller.py | 8 +++++--- src/ffx/media_descriptor.py | 25 ++++++++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/ffx/ffx_controller.py b/src/ffx/ffx_controller.py index 0aba684..fb2f1b9 100644 --- a/src/ffx/ffx_controller.py +++ b/src/ffx/ffx_controller.py @@ -45,6 +45,8 @@ class FfxController(): self.__context = context self.__targetMediaDescriptor = targetMediaDescriptor + self.__sourceMediaDescriptor = sourceMediaDescriptor + self.__mdcs = MediaDescriptorChangeSet(context, targetMediaDescriptor, sourceMediaDescriptor) @@ -240,7 +242,7 @@ class FfxController(): commandSequence = (commandTokens + self.__targetMediaDescriptor.getImportFileTokens() - + self.__targetMediaDescriptor.getInputMappingTokens() + + self.__targetMediaDescriptor.getInputMappingTokens(sourceMediaDescriptor = self.__sourceMediaDescriptor) + self.__mdcs.generateDispositionTokens()) # Optional tokens @@ -270,7 +272,7 @@ class FfxController(): commandSequence = (commandTokens + self.__targetMediaDescriptor.getImportFileTokens() - + self.__targetMediaDescriptor.getInputMappingTokens() + + self.__targetMediaDescriptor.getInputMappingTokens(sourceMediaDescriptor = self.__sourceMediaDescriptor) + self.__mdcs.generateDispositionTokens()) # Optional tokens @@ -329,7 +331,7 @@ class FfxController(): commandSequence2 = (commandTokens + self.__targetMediaDescriptor.getImportFileTokens() - + self.__targetMediaDescriptor.getInputMappingTokens() + + self.__targetMediaDescriptor.getInputMappingTokens(sourceMediaDescriptor = self.__sourceMediaDescriptor) + self.__mdcs.generateDispositionTokens()) # Optional tokens diff --git a/src/ffx/media_descriptor.py b/src/ffx/media_descriptor.py index 65cbd0f..5ff74a2 100644 --- a/src/ffx/media_descriptor.py +++ b/src/ffx/media_descriptor.py @@ -20,6 +20,7 @@ class MediaDescriptor: TRACKS_KEY = "tracks" TRACK_DESCRIPTOR_LIST_KEY = "track_descriptors" + ATTACHMENT_DESCRIPTOR_LIST_KEY = "attachment_descriptors" CLEAR_TAGS_FLAG_KEY = "clear_tags" FFPROBE_DISPOSITION_KEY = "disposition" @@ -69,9 +70,9 @@ class MediaDescriptor: raise TypeError( f"TrackDesciptor.__init__(): All elements of argument list {MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY} are required to be of type TrackDescriptor" ) - self.__trackDescriptors = kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] + self.__trackDescriptors: List[TrackDescriptor] = kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] else: - self.__trackDescriptors = [] + self.__trackDescriptors: List[TrackDescriptor] = [] def setTrackLanguage(self, language: str, index: int, trackType: TrackType = None): @@ -352,7 +353,10 @@ class MediaDescriptor: return importFileTokens - def getInputMappingTokens(self, use_sub_index: bool = True, only_video: bool = False): + def getInputMappingTokens(self, + use_sub_index: bool = True, + only_video: bool = False, + sourceMediaDescriptor: Self = None): """Tracks must be reordered for source index order""" inputMappingTokens = [] @@ -375,12 +379,13 @@ class MediaDescriptor: trackType = td.getType() trackCodec = td.getCodec() - if (trackType == TrackType.VIDEO or not only_video): + if (trackType != TrackType.ATTACHMENT + and (trackType == TrackType.VIDEO or not only_video)): importedFilePath = td.getExternalSourceFilePath() - if use_sub_index and not (trackType == TrackType.ATTACHMENT and trackCodec == TrackCodec.TTF): + if use_sub_index: if importedFilePath: @@ -402,6 +407,16 @@ class MediaDescriptor: if not trackCodec in [TrackCodec.PGS, TrackCodec.VOBSUB]: inputMappingTokens += ["-map", f"0:{stdi}"] + if sourceMediaDescriptor: + fontDescriptors = [ftd for ftd in sourceMediaDescriptor.getAttachmentTracks() + if ftd.getCodec() == TrackCodec.TTF] + else: + fontDescriptors = [ftd for ftd in self.__trackDescriptors + if ftd.getType() == TrackType.ATTACHMENT + and ftd.getCodec() == TrackCodec.TTF] + + for ad in sorted(fontDescriptors, key=lambda d: d.getIndex()): + inputMappingTokens += ["-map", f"0:{ad.getIndex()}"] return inputMappingTokens