@@ -119,11 +119,11 @@ proc media_def(filedef: XmlNode, url: string, mi: MediaInfo, tl: v3, tb: int64,
119119  filedef.add  mediadef
120120
121121proc  resolve_write_audio (audio: XmlNode , make_filedef: proc (clipitem: XmlNode ,
122-     mi: MediaInfo ), tl: v3) = 
122+     mi: MediaInfo ), tl: v3, ptrToMi:  Table [ ptr   string ,  MediaInfo ] ) = 
123123  for  t, alayer in  tl.a.pairs:
124124    let  track =  newElement (" track"  )
125125    for  j, aclip in  alayer.c.pairs:
126-       let  mi =  initMediaInfo ( aclip.src[]) 
126+       let  mi =  ptrToMi[ aclip.src] 
127127
128128      let  start_val =  $ aclip.start
129129      let  end_val =  $ (aclip.start +  aclip.dur)
@@ -165,7 +165,7 @@ proc resolve_write_audio(audio: XmlNode, make_filedef: proc(clipitem: XmlNode,
165165    audio.add  track
166166
167167proc  premiere_write_audio (audio: XmlNode , make_filedef: proc (clipitem: XmlNode ,
168-     mi: MediaInfo ), tl: v3) = 
168+     mi: MediaInfo ), tl: v3, ptrToMi:  Table [ ptr   string ,  MediaInfo ] ) = 
169169  audio.add  elem (" numOutputChannels"  , " 2"  )
170170  let  aformat =  newElement (" format"  )
171171  let  aschar =  newElement (" samplecharacteristics"  )
@@ -190,7 +190,7 @@ proc premiere_write_audio(audio: XmlNode, make_filedef: proc(clipitem: XmlNode,
190190        track.add  elem (" outputchannelindex"  , $ (channelcount +  1 ))
191191
192192      for  j, aclip in  alayer.c.pairs:
193-         let  src =  initMediaInfo ( aclip.src[]) 
193+         let  src =  ptrToMi[ aclip.src] 
194194
195195        let  start_val =  $ aclip.start
196196        let  end_val =  $ (aclip.start +  aclip.dur)
@@ -243,6 +243,7 @@ proc fcp7_write_xml*(name: string, output: string, resolve: bool, tl: v3) =
243243
244244  var  miToUrl =  initTable [MediaInfo , string ]()
245245  var  miToId =  initTable [MediaInfo , string ]()
246+   var  ptrToMi =  initTable [ptr  string , MediaInfo ]() #  Cache ptr -> MediaInfo lookup
246247  var  fileDefs =  initHashSet [string ]() #  Contains urls
247248
248249  var  id_counter =  0 
@@ -253,6 +254,7 @@ proc fcp7_write_xml*(name: string, output: string, resolve: bool, tl: v3) =
253254    let  mi =  initMediaInfo (src)
254255    miToUrl[mi] =  handlePath (src)
255256    miToId[mi] =  the_id
257+     ptrToMi[ptrSrc] =  mi #  Store ptr -> MediaInfo mapping
256258
257259  proc  make_filedef (clipitem: XmlNode , mi: MediaInfo ) = 
258260    let  pathurl =  miToUrl[mi]
@@ -307,7 +309,7 @@ proc fcp7_write_xml*(name: string, output: string, resolve: bool, tl: v3) =
307309      clipitem.add  elem (" in"  , in_val)
308310      clipitem.add  elem (" out"  , out_val)
309311
310-       let  mi =  initMediaInfo ( clip.src[]) 
312+       let  mi =  ptrToMi[ clip.src] 
311313      make_filedef (clipitem, mi)
312314
313315      clipitem.add  elem (" compositemode"  , " normal"  )
@@ -340,9 +342,9 @@ proc fcp7_write_xml*(name: string, output: string, resolve: bool, tl: v3) =
340342  #  Audio definitions and clips
341343  let  audio =  newElement (" audio"  )
342344  if  resolve:
343-     resolve_write_audio (audio, make_filedef, tl)
345+     resolve_write_audio (audio, make_filedef, tl, ptrToMi )
344346  else :
345-     premiere_write_audio (audio, make_filedef, tl)
347+     premiere_write_audio (audio, make_filedef, tl, ptrToMi )
346348
347349  media.add  audio
348350  sequence.add  media
0 commit comments