* morituri/test/capital.1.toc (added):
* morituri/test/capital.2.toc (added): Add two .toc's for two sessions of a 2 session disc * morituri/image/table.py: Add a merge method to merge in a second session. * morituri/test/Makefile.am: * morituri/test/test_image_toc.py: Add a test for merging the Das Capital sessions, gets the CDDB disc id right.
This commit is contained in:
12
ChangeLog
12
ChangeLog
@@ -1,3 +1,15 @@
|
||||
2009-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||
|
||||
* morituri/test/capital.1.toc (added):
|
||||
* morituri/test/capital.2.toc (added):
|
||||
Add two .toc's for two sessions of a 2 session disc
|
||||
* morituri/image/table.py:
|
||||
Add a merge method to merge in a second session.
|
||||
* morituri/test/Makefile.am:
|
||||
* morituri/test/test_image_toc.py:
|
||||
Add a test for merging the Das Capital sessions, gets
|
||||
the CDDB disc id right.
|
||||
|
||||
2009-05-24 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||
|
||||
* morituri/common/common.py:
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
Wrap Table of Contents.
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
from morituri.common import task, common, log
|
||||
|
||||
# FIXME: taken from libcdio, but no reference found for these
|
||||
@@ -85,6 +87,12 @@ class Track:
|
||||
indexes.sort()
|
||||
return self.indexes[indexes[0]]
|
||||
|
||||
def getLastIndex(self):
|
||||
indexes = self.indexes.keys()
|
||||
indexes.sort()
|
||||
return self.indexes[indexes[-1]]
|
||||
|
||||
|
||||
class Index:
|
||||
"""
|
||||
@ivar counter: counter for the index source; distinguishes between
|
||||
@@ -487,6 +495,46 @@ class Table(object, log.Loggable):
|
||||
except IndexError:
|
||||
break
|
||||
|
||||
def merge(self, other, session=2):
|
||||
"""
|
||||
Merges the given table at the end.
|
||||
The other table is assumed to be from an additional session,
|
||||
|
||||
|
||||
@type other: L{Table}
|
||||
"""
|
||||
# From cdrecord multi-session info:
|
||||
# For the first additional session this is 11250 sectors
|
||||
# lead-out/lead-in overhead + 150 sectors for the pre-gap of the first
|
||||
# track after the lead-in = 11400 sectos.
|
||||
|
||||
# For all further session this is 6750 sectors lead-out/lead-in
|
||||
# overhead + 150 sectors for the pre-gap of the first track after the
|
||||
# lead-in = 6900 sectors.
|
||||
|
||||
gap = 11400
|
||||
if session > 2:
|
||||
gap = 6900
|
||||
|
||||
trackCount = len(self.tracks)
|
||||
sourceCounter = self.tracks[-1].getLastIndex().counter
|
||||
|
||||
for track in other.tracks:
|
||||
t = copy.deepcopy(track)
|
||||
t.number = track.number + trackCount
|
||||
for i in t.indexes.values():
|
||||
if i.absolute is not None:
|
||||
i.absolute += self.leadout + gap
|
||||
self.debug('Fixing track %02d, index %02d, absolute %d' % (
|
||||
t.number, i.number, i.absolute))
|
||||
if i.counter is not None:
|
||||
i.counter += sourceCounter
|
||||
self.debug('Fixing track %02d, index %02d, counter %d' % (
|
||||
t.number, i.number, i.counter))
|
||||
self.tracks.append(t)
|
||||
|
||||
self.leadout += other.leadout + gap # FIXME
|
||||
|
||||
### lookups
|
||||
def getNextTrackIndex(self, track, index):
|
||||
"""
|
||||
|
||||
@@ -16,6 +16,8 @@ EXTRA_DIST = \
|
||||
breeders.cue \
|
||||
breeders.toc \
|
||||
capital.fast.toc \
|
||||
capital.1.toc \
|
||||
capital.2.toc \
|
||||
cure.cue \
|
||||
cure.toc \
|
||||
dBAR-011-0010e284-009228a3-9809ff0b.bin \
|
||||
|
||||
113
morituri/test/capital.1.toc
Normal file
113
morituri/test/capital.1.toc
Normal file
@@ -0,0 +1,113 @@
|
||||
CD_DA
|
||||
|
||||
|
||||
// Track 1
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300350"
|
||||
SILENCE 05:22:20
|
||||
FILE "data.wav" 0 04:32:55
|
||||
START 05:22:20
|
||||
|
||||
|
||||
// Track 2
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300351"
|
||||
FILE "data.wav" 04:32:55 04:16:02
|
||||
START 00:01:05
|
||||
|
||||
|
||||
// Track 3
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300352"
|
||||
FILE "data.wav" 08:48:57 03:03:65
|
||||
START 00:01:38
|
||||
|
||||
|
||||
// Track 4
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300353"
|
||||
FILE "data.wav" 11:52:47 02:16:03
|
||||
START 00:01:43
|
||||
|
||||
|
||||
// Track 5
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300355"
|
||||
FILE "data.wav" 14:08:50 03:32:55
|
||||
START 00:01:50
|
||||
|
||||
|
||||
// Track 6
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300356"
|
||||
FILE "data.wav" 17:41:30 03:09:70
|
||||
START 00:01:20
|
||||
|
||||
|
||||
// Track 7
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300357"
|
||||
FILE "data.wav" 20:51:25 02:27:25
|
||||
START 00:01:00
|
||||
|
||||
|
||||
// Track 8
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300358"
|
||||
FILE "data.wav" 23:18:50 02:46:35
|
||||
START 00:00:35
|
||||
|
||||
|
||||
// Track 9
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300359"
|
||||
FILE "data.wav" 26:05:10 05:02:72
|
||||
START 00:00:60
|
||||
|
||||
|
||||
// Track 10
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300360"
|
||||
FILE "data.wav" 31:08:07 03:50:38
|
||||
START 00:00:60
|
||||
|
||||
|
||||
// Track 11
|
||||
TRACK AUDIO
|
||||
NO COPY
|
||||
NO PRE_EMPHASIS
|
||||
TWO_CHANNEL_AUDIO
|
||||
ISRC "GBAAA0300361"
|
||||
FILE "data.wav" 34:58:45 03:35:10
|
||||
START 00:00:65
|
||||
|
||||
8
morituri/test/capital.2.toc
Normal file
8
morituri/test/capital.2.toc
Normal file
@@ -0,0 +1,8 @@
|
||||
CD_ROM
|
||||
|
||||
|
||||
// Track 1
|
||||
TRACK MODE1
|
||||
NO COPY
|
||||
DATAFILE "data_1" 27:30:00 // length in bytes: 253440000
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
import os
|
||||
import copy
|
||||
import unittest
|
||||
|
||||
from morituri.image import toc
|
||||
@@ -196,3 +197,28 @@ class CapitalTestCase(unittest.TestCase):
|
||||
# b910140c 12 24320 44855 64090 77885 88095 104020 118245 129255 141765 164487 181780 209250 4440
|
||||
testCDDBId.skip = 'not implemented yet'
|
||||
|
||||
class CapitalMergeTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.toc1 = toc.TocFile(os.path.join(os.path.dirname(__file__),
|
||||
'capital.1.toc'))
|
||||
self.toc1.parse()
|
||||
self.assertEquals(len(self.toc1.table.tracks), 11)
|
||||
self.failUnless(self.toc1.table.tracks[-1].audio)
|
||||
|
||||
self.toc2 = toc.TocFile(os.path.join(os.path.dirname(__file__),
|
||||
'capital.2.toc'))
|
||||
self.toc2.parse()
|
||||
self.assertEquals(len(self.toc2.table.tracks), 1)
|
||||
self.failIf(self.toc2.table.tracks[-1].audio)
|
||||
|
||||
self.table = copy.deepcopy(self.toc1.table)
|
||||
self.table.merge(self.toc2.table)
|
||||
|
||||
|
||||
def testCDDBId(self):
|
||||
self.table.absolutize()
|
||||
self.assertEquals(self.table.getCDDBDiscId(), 'b910140c')
|
||||
# output from cd-discid:
|
||||
# b910140c 12 24320 44855 64090 77885 88095 104020 118245 129255 141765 164487 181780 209250 4440
|
||||
testCDDBId.skip = 'not implemented yet'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user