@ -40,12 +40,18 @@ class MediaDescriptorChangeSet():
and ' ignore ' in metadataConfiguration [ ' streams ' ] . keys ( ) else [ ] )
self . __targetTrackDescriptors = targetMediaDescriptor . getTrackDescriptors ( ) if targetMediaDescriptor is not None else [ ]
self . __sourceTrackDescriptors = sourceMediaDescriptor . getTrackDescriptors ( ) if sourceMediaDescriptor is not None else [ ]
targetMediaTags = targetMediaDescriptor . getTags ( ) if targetMediaDescriptor is not None else { }
sourceMediaTags = sourceMediaDescriptor . getTags ( ) if sourceMediaDescriptor is not None else { }
self . __changeSetObj = { }
if targetMediaDescriptor is not None :
#if targetMediaDescriptor is not None:
sourceMediaTags = sourceMediaDescriptor . getTags ( ) if sourceMediaDescriptor is not None else { }
targetMediaTags = targetMediaDescriptor . getTags ( )
#!!#
tagsDiff = dictDiff ( sourceMediaTags ,
@ -57,11 +63,11 @@ class MediaDescriptorChangeSet():
self . __changeSetObj [ MediaDescriptorChangeSet . TAGS_KEY ] = tagsDiff
self . __targetTrackDescriptors = targetMediaDescriptor . getTrackDescriptors ( )
self . __numTargetTracks = len ( self . __targetTrackDescriptors )
# Current track configuration (of file)
self . __sourceTrackDescriptors = sourceMediaDescriptor . getTrackDescriptors ( ) if sourceMediaDescriptor is not None else [ ]
self . __numSourceTracks = len ( self . __sourceTrackDescriptors )
maxNumOfTracks = max ( self . __numSourceTracks , self . __numTargetTracks )
@ -97,7 +103,12 @@ class MediaDescriptorChangeSet():
if ( correspondingSourceTrackDescriptors
and correspondingTargetTrackDescriptors ) :
trackDiff = self . compareTracks ( correspondingSourceTrackDescriptors [ 0 ] , correspondingTargetTrackDescriptors [ 0 ] )
# if correspondingTargetTrackDescriptors[0].getIndex() == 3:
# raise click.ClickException(f"{correspondingSourceTrackDescriptors[0].getDispositionSet()} {correspondingTargetTrackDescriptors[0].getDispositionSet()}")
trackDiff = self . compareTracks ( correspondingTargetTrackDescriptors [ 0 ] ,
correspondingSourceTrackDescriptors [ 0 ] )
if trackDiff :
if DIFF_CHANGED_KEY not in trackCompareResult . keys ( ) :
@ -111,15 +122,11 @@ class MediaDescriptorChangeSet():
def compareTracks ( self ,
targetTrackDescriptor : TrackDescriptor ,
targetTrackDescriptor : TrackDescriptor = None ,
sourceTrackDescriptor : TrackDescriptor = None ) :
if not isinstance ( targetTrackDescriptor , TrackDescriptor ) :
self . __logger . error ( f " MediaDescriptorChangeSet.compareTracks(): Argument targetTrackDescriptor is required to be of type TrackDescriptor " )
raise click . Abort ( )
sourceTrackTags = sourceTrackDescriptor . getTags ( ) if sourceTrackDescriptor is not None else { }
targetTrackTags = targetTrackDescriptor . getTags ( )
targetTrackTags = targetTrackDescriptor . getTags ( ) if targetTrackDescriptor is not None else { }
trackCompareResult = { }
@ -131,17 +138,17 @@ class MediaDescriptorChangeSet():
if tagsDiffResult :
trackCompareResult [ MediaDescriptorChangeSet . TAGS_KEY ] = tagsDiffResult
sourceDisposition s = sourceTrackDescriptor . getDispositionSet ( )
targetDisposition s = targetTrackDescriptor . getDispositionSet ( )
sourceDisposition Set = sourceTrackDescriptor . getDispositionSet ( ) if sourceTrackDescriptor is not None else set ( )
targetDisposition Set = targetTrackDescriptor . getDispositionSet ( ) if targetTrackDescriptor is not None else set ( )
dispositionDiffResult = setDiff ( sourceDispositions , targetDispositions )
# if targetTrackDescriptor.getIndex() == 3:
# raise click.ClickException(f"{sourceDispositionSet} {targetDispositionSet}")
dispositionDiffResult = setDiff ( sourceDispositionSet , targetDispositionSet )
if dispositionDiffResult :
trackCompareResult [ MediaDescriptorChangeSet . DISPOSITION_SET_KEY ] = dispositionDiffResult
if trackCompareResult :
trackCompareResult [ MediaDescriptorChangeSet . TRACK_DESCRIPTOR_KEY ] = targetTrackDescriptor
return trackCompareResult
@ -151,36 +158,55 @@ class MediaDescriptorChangeSet():
"""
dispositionTokens = [ ]
if MediaDescriptorChangeSet . TRACKS_KEY in self . __changeSetObj . keys ( ) :
if DIFF_ADDED_KEY in self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] . keys ( ) :
addedTracks : dict = self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] [ DIFF_ADDED_KEY ]
trackDescriptor : TrackDescriptor
for trackDescriptor in addedTracks . values ( ) :
dispositionSet = trackDescriptor . getDispositionSet ( )
if dispositionSet :
dispositionTokens + = [ f " -disposition: { trackDescriptor . getType ( ) . indicator ( ) } : { trackDescriptor . getSubIndex ( ) } " ,
' + ' . join ( [ d . label ( ) for d in dispositionSet ] ) ]
if DIFF_CHANGED_KEY in self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] . keys ( ) :
changedTracks : dict = self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] [ DIFF_CHANGED_KEY ]
trackDiffObj : dict
for trackDiffObj in changedTracks . values ( ) :
addedDispositions = trackDiffObj [ DIFF_ADDED_KEY ] if DIFF_ADDED_KEY in trackDiffObj . keys ( ) else set ( )
removedDispositions = trackDiffObj [ DIFF_REMOVED_KEY ] if DIFF_REMOVED_KEY in trackDiffObj . keys ( ) else set ( )
unchangedDispositions = trackDiffObj [ DIFF_UNCHANGED_KEY ] if DIFF_UNCHANGED_KEY in trackDiffObj . keys ( ) else set ( )
targetDispositions = addedDispositions | unchangedDispositions
streamIndicator = trackDescriptor . getType ( ) . indicator ( )
subIndex = trackDescriptor . getSubIndex ( )
# if MediaDescriptorChangeSet.TRACKS_KEY in self.__changeSetObj.keys():
#
# if DIFF_ADDED_KEY in self.__changeSetObj[MediaDescriptorChangeSet.TRACKS_KEY].keys():
# addedTracks: dict = self.__changeSetObj[MediaDescriptorChangeSet.TRACKS_KEY][DIFF_ADDED_KEY]
# trackDescriptor: TrackDescriptor
# for trackDescriptor in addedTracks.values():
#
# dispositionSet = trackDescriptor.getDispositionSet()
#
# if dispositionSet:
# dispositionTokens += [f"-disposition:{trackDescriptor.getType().indicator()}:{trackDescriptor.getSubIndex()}",
# '+'.join([d.label() for d in dispositionSet])]
#
# if DIFF_CHANGED_KEY in self.__changeSetObj[MediaDescriptorChangeSet.TRACKS_KEY].keys():
# changedTracks: dict = self.__changeSetObj[MediaDescriptorChangeSet.TRACKS_KEY][DIFF_CHANGED_KEY]
# trackDiffObj: dict
#
#
# for trackIndex, trackDiffObj in changedTracks.items():
#
# if MediaDescriptorChangeSet.DISPOSITION_SET_KEY in trackDiffObj.keys():
#
# dispositionDiffObj: dict = trackDiffObj[MediaDescriptorChangeSet.DISPOSITION_SET_KEY]
#
# addedDispositions = dispositionDiffObj[DIFF_ADDED_KEY] if DIFF_ADDED_KEY in dispositionDiffObj.keys() else set()
# removedDispositions = dispositionDiffObj[DIFF_REMOVED_KEY] if DIFF_REMOVED_KEY in dispositionDiffObj.keys() else set()
# unchangedDispositions = dispositionDiffObj[DIFF_UNCHANGED_KEY] if DIFF_UNCHANGED_KEY in dispositionDiffObj.keys() else set()
#
# targetDispositions = addedDispositions | unchangedDispositions
#
# trackDescriptor = self.__targetTrackDescriptors[trackIndex]
# streamIndicator = trackDescriptor.getType().indicator()
# subIndex = trackDescriptor.getSubIndex()
#
# if targetDispositions:
# dispositionTokens += [f"-disposition:{streamIndicator}:{subIndex}", '+'.join([d.label() for d in targetDispositions])]
# # if not targetDispositions and removedDispositions:
# else:
# dispositionTokens += [f"-disposition:{streamIndicator}:{subIndex}", '0']
for ttd in self . __targetTrackDescriptors :
targetDispositions = ttd . getDispositionSet ( )
streamIndicator = ttd . getType ( ) . indicator ( )
subIndex = ttd . getSubIndex ( )
if targetDispositions :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' + ' . join ( [ d . label ( ) for d in targetDispositions ] ) ]
if not targetDispositions and removedDispositions :
# if not targetDispositions and removedDispositions:
else :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' 0 ' ]
return dispositionTokens
@ -235,21 +261,21 @@ class MediaDescriptorChangeSet():
if DIFF_CHANGED_KEY in self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] . keys ( ) :
changedTracks : dict = self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] [ DIFF_CHANGED_KEY ]
trackDiffObj : dict
for trackDiffObj in changedTracks . values ( ) :
for trackIndex , trackDiffObj in changedTracks . items ( ) :
if MediaDescriptorChangeSet . TAGS_KEY in trackDiffObj . keys ( ) :
addedTrackTags = trackDiffObj [ DIFF_ADDED_KEY ] if DIFF_ADDED_KEY in trackDiffObj . keys ( ) else { }
changedTrackTags = trackDiffObj [ DIFF_CHANGED_KEY ] if DIFF_CHANGED_KEY in trackDiffObj . keys ( ) else { }
removedTrackTags = trackDiffObj [ DIFF_REMOVED_KEY ] if DIFF_REMOVED_KEY in trackDiffObj . keys ( ) else { }
tagsDiffObj = trackDiffObj [ MediaDescriptorChangeSet . TAGS_KEY ]
addedTrackTags = tagsDiffObj [ DIFF_ADDED_KEY ] if DIFF_ADDED_KEY in tagsDiffObj . keys ( ) else { }
changedTrackTags = tagsDiffObj [ DIFF_CHANGED_KEY ] if DIFF_CHANGED_KEY in tagsDiffObj . keys ( ) else { }
removedTrackTags = tagsDiffObj [ DIFF_REMOVED_KEY ] if DIFF_REMOVED_KEY in tagsDiffObj . keys ( ) else { }
# outputTrackTags = {k:v for k,v in (addedTrackTags | changedTrackTags).items() if k not in self.__removeTrackKeys}
outputTrackTags = addedTrackTags | changedTrackTags
for tagKey , tagValue in outputTrackTags . items ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { tagKey } = { tagValue } " ]
trackDescriptor = self . __targetTrackDescriptors [ trackIndex ]
for tagKey , tagValue in changed TrackTags. items ( ) :
for tagKey , tagValue in outputTrackTags . items ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { tagKey } = { tagValue } " ]