@ -40,86 +40,93 @@ 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 ,
targetMediaTags ,
ignoreKeys = self . __ignoreGlobalKeys ,
removeKeys = self . __removeGlobalKeys )
if tagsDiff :
self . __changeSetObj [ MediaDescriptorChangeSet . TAGS_KEY ] = tagsDiff
#!!#
tagsDiff = dictDiff ( sourceMediaTags ,
targetMediaTags ,
ignoreKeys = self . __ignoreGlobalKeys ,
removeKeys = self . __removeGlobalKeys )
if tagsDiff :
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 )
self . __numTargetTracks = len ( self . __targetTrackDescriptors )
maxNumOfTracks = max ( self . __numSourceTracks , self . __numTargetTracks )
# Current track configuration (of file)
self . __numSourceTracks = len ( self . __sourceTrackDescriptors )
trackCompareResult = { }
maxNumOfTracks = max ( self . __numSourceTracks , self . __numTargetTracks )
trackCompareResult = { }
for trackIndex in range ( maxNumOfTracks ) :
for trackIndex in range ( maxNumOfTracks ) :
correspondingSourceTrackDescriptors = [ st for st in self . __sourceTrackDescriptors if st . getIndex ( ) == trackIndex ]
correspondingTargetTrackDescriptors = [ tt for tt in self . __targetTrackDescriptors if tt . getIndex ( ) == trackIndex ]
correspondingSourceTrackDescriptors = [ st for st in self . __sourceTrackDescriptors if st . getIndex ( ) == trackIndex ]
correspondingTargetTrackDescriptors = [ tt for tt in self . __targetTrackDescriptors if tt . getIndex ( ) == trackIndex ]
# Track present in target but not in source
if ( not correspondingSourceTrackDescriptors
and correspondingTargetTrackDescriptors ) :
# Track present in target but not in source
if ( not correspondingSourceTrackDescriptors
and correspondingTargetTrackDescriptors ) :
if DIFF_ADDED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_ADDED_KEY ] = { }
if DIFF_ADDED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_ADDED_KEY ] = { }
trackCompareResult [ DIFF_ADDED_KEY ] [ trackIndex ] = correspondingTargetTrackDescriptors [ 0 ]
continue
trackCompareResult [ DIFF_ADDED_KEY ] [ trackIndex ] = correspondingTargetTrackDescriptors [ 0 ]
continue
# Track present in target but not in source
if ( correspondingSourceTrackDescriptors
and not correspondingTargetTrackDescriptors ) :
# Track present in target but not in source
if ( correspondingSourceTrackDescriptors
and not correspondingTargetTrackDescriptors ) :
if DIFF_REMOVED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_REMOVED_KEY ] = { }
if DIFF_REMOVED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_REMOVED_KEY ] = { }
trackCompareResult [ DIFF_REMOVED_KEY ] [ trackIndex ] = correspondingSourceTrackDescriptors [ 0 ]
continue
trackCompareResult [ DIFF_REMOVED_KEY ] [ trackIndex ] = correspondingSourceTrackDescriptors [ 0 ]
continue
if ( correspondingSourceTrackDescriptors
and correspondingTargetTrackDescriptors ) :
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()}")
if trackDiff :
if DIFF_CHANGED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_CHANGED_KEY ] = { }
trackCompareResult [ DIFF_CHANGED_KEY ] [ trackIndex ] = trackDiff
trackDiff = self . compareTracks ( correspondingTargetTrackDescriptors [ 0 ] ,
correspondingSourceTrackDescriptors [ 0 ] )
if trackDiff :
if DIFF_CHANGED_KEY not in trackCompareResult . keys ( ) :
trackCompareResult [ DIFF_CHANGED_KEY ] = { }
if trackCompareResult :
self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] = trackCompareResult
trackCompareResult [ DIFF_CHANGED_KEY ] [ trackIndex ] = trackDiff
if trackCompareResult :
self . __changeSetObj [ MediaDescriptorChangeSet . TRACKS_KEY ] = trackCompareResult
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,37 +158,56 @@ 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 targetDispositions :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' + ' . join ( [ d . label ( ) for d in targetDispositions ] ) ]
if not targetDispositions and removedDispositions :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' 0 ' ]
# 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:
else :
dispositionTokens + = [ f " -disposition: { streamIndicator } : { subIndex } " , ' 0 ' ]
return dispositionTokens
@ -235,29 +261,29 @@ 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 ]
# outputTrackTags = {k:v for k,v in (addedTrackTags | changedTrackTags).items() if k not in self.__removeTrackKeys}
outputTrackTags = addedTrackTags | changedTrackTags
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 { }
for tagKey , tagValue in outputTrackTags . items ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { tagKey } = { tagValue } " ]
outputTrackTags = addedTrackTags | changedTrackTags
for tagKey , tagValue in changedTrackTags . items ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { tagKey } = { tagValue } " ]
trackDescriptor = self . __targetTrackDescriptors [ trackIndex ]
for tagKey , tagValue in outputTrackTags . items ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { tagKey } = { tagValue } " ]
for removeKey in removedTrackTags . keys ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { removeKey } = " ]
for removeKey in removedTrackTags . keys ( ) :
metadataTokens + = [ f " -metadata:s: { trackDescriptor . getType ( ) . indicator ( ) } "
+ f " : { trackDescriptor . getSubIndex ( ) } " ,
f " { removeKey } = " ]
return metadataTokens