[SCM] morituri/master: fix so first FILE goes before TRACK 01 and possible PREGAP
js at users.alioth.debian.org
js at users.alioth.debian.org
Sun Oct 19 20:10:13 UTC 2014
The following commit has been merged in the master branch:
commit 354bd7744f7dee547133499555b70d677656a9ad
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Sat Aug 24 13:58:21 2013 +0200
fix so first FILE goes before TRACK 01 and possible PREGAP
diff --git a/morituri/image/table.py b/morituri/image/table.py
index 0386d49..c3cd570 100644
--- a/morituri/image/table.py
+++ b/morituri/image/table.py
@@ -523,11 +523,15 @@ class Table(object, log.Loggable):
@rtype: C{unicode}
"""
+ self.debug('generating .cue for cuePath %r', cuePath)
+
lines = []
def writeFile(path):
targetPath = common.getRelativePath(path, cuePath)
- lines.append('FILE "%s" WAVE' % targetPath)
+ line = 'FILE "%s" WAVE' % targetPath
+ lines.append(line)
+ self.debug('writeFile: %r' % line)
# header
main = ['PERFORMER', 'TITLE']
@@ -547,57 +551,91 @@ class Table(object, log.Loggable):
if key in self.cdtext:
lines.append('%s "%s"' % (key, self.cdtext[key]))
+ # FIXME:
+ # - the first FILE statement goes before the first TRACK, even if
+ # there is a non-file-using PREGAP
+ # - the following FILE statements come after the last INDEX that
+ # use that FILE; so before a next TRACK, PREGAP silence, ...
+
# add the first FILE line; EAC always puts the first FILE
- # statement before TRACK 01
+ # statement before TRACK 01 and any possible PRE-GAP
firstTrack = self.tracks[0]
+ index = firstTrack.getFirstIndex()
indexOne = firstTrack.getIndex(1)
+ counter = index.counter
+ track = firstTrack
- firstIndex = firstTrack.getFirstIndex()
- path = indexOne.path
- counter = indexOne.counter
-
- assert path, "No path on TRACK 01 INDEX 01"
- writeFile(path)
+ while not index.path:
+ t, i = self.getNextTrackIndex(track.number, index.number)
+ track = self.tracks[t - 1]
+ index = track.getIndex(i)
+ counter = index.counter
+ if index.path:
+ self.debug('counter %d, writeFile' % counter)
+ writeFile(index.path)
for i, track in enumerate(self.tracks):
+ self.debug('track i %r, track %r' % (i, track))
# FIXME: skip data tracks for now
if not track.audio:
continue
- # if there is no index 0, but there is a new file, advance
- # FILE line here
- if not 0 in track.indexes:
- index = track.indexes[1]
- if index.counter != counter:
- writeFile(index.path)
- counter = index.counter
- lines.append(" TRACK %02d %s" % (i + 1, 'AUDIO'))
- for key in CDTEXT_FIELDS:
- if key in track.cdtext:
- lines.append(' %s "%s"' % (key, track.cdtext[key]))
-
- if track.isrc is not None:
- lines.append(" ISRC %s" % track.isrc)
-
indexes = track.indexes.keys()
indexes.sort()
+ wroteTrack = False
+
for number in indexes:
index = track.indexes[number]
- # handle TRACK 01 INDEX 00 specially
- if i == 0 and number == 0:
- # if we have a silent pre-gap, output it
- if not index.path:
- length = indexOne.absolute - index.absolute
- lines.append(" PREGAP %s" % common.framesToMSF(length))
- continue
-
- if index.counter != counter:
- writeFile(index.path)
+ self.debug('index %r, %r' % (number, index))
+
+ # any time the source counter changes to a higher value,
+ # write a FILE statement
+ # it has to be higher, because we can run into the HTOA
+ # at counter 0 here
+ if index.counter > counter:
+ if index.path:
+ self.debug('counter %d, writeFile' % counter)
+ writeFile(index.path)
+ self.debug('setting counter to index.counter %r' %
+ index.counter)
counter = index.counter
- lines.append(" INDEX %02d %s" % (number,
- common.framesToMSF(index.relative)))
+
+ # any time we hit the first index, write a TRACK statement
+ if not wroteTrack:
+ wroteTrack = True
+ line = " TRACK %02d %s" % (i + 1, 'AUDIO')
+ lines.append(line)
+ self.debug('%r' % line)
+
+ for key in CDTEXT_FIELDS:
+ if key in track.cdtext:
+ lines.append(' %s "%s"' % (
+ key, track.cdtext[key]))
+
+ if track.isrc is not None:
+ lines.append(" ISRC %s" % track.isrc)
+
+ # handle TRACK 01 INDEX 00 specially
+ if 0 in indexes:
+ index00 = track.indexes[0]
+ if i == 0:
+ # if we have a silent pre-gap, output it
+ if not index00.path:
+ length = indexOne.absolute - index00.absolute
+ lines.append(" PREGAP %s" %
+ common.framesToMSF(length))
+ continue
+
+ # handle any other INDEX 00 after its TRACK
+ lines.append(" INDEX %02d %s" % (0,
+ common.framesToMSF(index00.relative)))
+
+ if number > 0:
+ # index 00 is output after TRACK up above
+ lines.append(" INDEX %02d %s" % (number,
+ common.framesToMSF(index.relative)))
lines.append("")
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list