* 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:
Thomas Vander Stichele
2009-05-24 21:30:21 +00:00
parent 59e8310135
commit c793211f28
6 changed files with 209 additions and 0 deletions

View File

@@ -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:

View File

@@ -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):
"""

View File

@@ -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
View 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

View File

@@ -0,0 +1,8 @@
CD_ROM
// Track 1
TRACK MODE1
NO COPY
DATAFILE "data_1" 27:30:00 // length in bytes: 253440000

View File

@@ -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'