diff --git a/bin/ffx/media_descriptor.py b/bin/ffx/media_descriptor.py index cab7054..8f09d76 100644 --- a/bin/ffx/media_descriptor.py +++ b/bin/ffx/media_descriptor.py @@ -8,7 +8,7 @@ class MediaDescriptor(): """This class represents the structural content of a media file including streams and metadata""" TAGS_KEY = 'tags' - TRACK_DESCRIPTORS_KEY = 'track_descriptors' + TRACK_DESCRIPTOR_LIST_KEY = 'track_descriptors' CLEAR_TAGS_KEY = 'clear_tags' FFPROBE_DISPOSITION_KEY = 'disposition' @@ -25,18 +25,18 @@ class MediaDescriptor(): else: self.__mediaTags = {} - if MediaDescriptor.TRACK_DESCRIPTORS_KEY in kwargs.keys(): + if MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY in kwargs.keys(): # if type(kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]) is not List[TrackDescriptor]: # Use List typehint for TrackDescriptor as well if it works # raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type list containing only elements of type TrackDescriptor") - if type(kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]) is not dict: # Use List typehint for TrackDescriptor as well if it works - raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type dict") - # for d in kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]: - # if type(d) is not TrackDescriptor: - # raise TypeError(f"TrackDesciptor.__init__(): All elements of argument set {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type TrackDescriptor") - self.__trackDescriptors = kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY] + if type(kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY]) is not list: # Use List typehint for TrackDescriptor as well if it works + raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY} is required to be of type list") + for d in kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY]: + if type(d) is not TrackDescriptor: + 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] else: - self.__trackDescriptors = set() + self.__trackDescriptors = [] if MediaDescriptor.CLEAR_TAGS_KEY in kwargs.keys(): if type(kwargs[MediaDescriptor.CLEAR_TAGS_KEY]) is not bool: @@ -49,23 +49,31 @@ class MediaDescriptor(): @classmethod def fromFfprobe(cls, formatData, streamData): - trackDescriptors = {} + #trackDescriptors = {} + + kwargs = {} + + if MediaDescriptor.FFPROBE_TAGS_KEY in formatData.keys(): + kwargs[MediaDescriptor.TAGS_KEY] = formatData[MediaDescriptor.FFPROBE_TAGS_KEY] + + kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = [] for streamObj in streamData: - trackType = TrackType.fromLabel(streamObj[MediaDescriptor.FFPROBE_CODEC_TYPE_KEY]) + #trackType = TrackType.fromLabel(streamObj[MediaDescriptor.FFPROBE_CODEC_TYPE_KEY]) - if trackType != TrackType.UNKNOWN: +# if trackType != TrackType.UNKNOWN: +# +# if trackType.label() not in trackDescriptors.keys(): +# trackDescriptors[trackType.label()] = [] +# +# trackDescriptors[trackType.label()].append(TrackDescriptor.fromFfprobe(streamObj)) - if trackType.label() not in trackDescriptors.keys(): - trackDescriptors[trackType.label()] = [] + if TrackType.fromLabel(streamObj[MediaDescriptor.FFPROBE_CODEC_TYPE_KEY]) != TrackType.UNKNOWN: + kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY].append(TrackDescriptor.fromFfprobe(streamObj)) - trackDescriptors[trackType.label()].append(TrackDescriptor.fromFfprobe(streamObj)) - kwargs = {} - if MediaDescriptor.FFPROBE_TAGS_KEY in formatData.keys(): - kwargs[MediaDescriptor.TAGS_KEY] = formatData[MediaDescriptor.FFPROBE_TAGS_KEY] - kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY] = trackDescriptors + # kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = trackDescriptors return cls(**kwargs) @@ -75,7 +83,9 @@ class MediaDescriptor(): def getAudioTracks(self) -> List[TrackDescriptor]: - return self.__trackDescriptors[TrackType.AUDIO.label()] if TrackType.AUDIO.label() in self.__trackDescriptors.keys() else [] + #return self.__trackDescriptors[TrackType.AUDIO.label()] if TrackType.AUDIO.label() in self.__trackDescriptors.keys() else [] + return [d for d in self.__trackDescriptors if d.getType() == TrackType.AUDIO] def getSubtitleTracks(self) -> List[TrackDescriptor]: - return self.__trackDescriptors[TrackType.SUBTITLE.label()] if TrackType.SUBTITLE.label() in self.__trackDescriptors.keys() else [] + #return self.__trackDescriptors[TrackType.SUBTITLE.label()] if TrackType.SUBTITLE.label() in self.__trackDescriptors.keys() else [] + return [d for d in self.__trackDescriptors if d.getType() == TrackType.SUBTITLE] diff --git a/bin/ffx/model/pattern.py b/bin/ffx/model/pattern.py index 1fc1fa1..7742079 100644 --- a/bin/ffx/model/pattern.py +++ b/bin/ffx/model/pattern.py @@ -53,13 +53,16 @@ class Pattern(Base): kwargs = {} kwargs[MediaDescriptor.TAGS_KEY] = self.getTags() - kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY] = {} + kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY] = [] - for track in self.tracks: - - if track.getType() not in kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY].keys(): - kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY][track.getType().label()] = [] +# for track in self.tracks: +# +# if track.getType() not in kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY].keys(): +# kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY][track.getType().label()] = [] +# +# kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY][track.getType().label()].append(track.getDescriptor()) - kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY][track.getType().label()].append(track.getDescriptor()) + for track in self.tracks: + kwargs[MediaDescriptor.TRACK_DESCRIPTOR_LIST_KEY].append(track.getDescriptor()) return MediaDescriptor(**kwargs)