From 9488415ce7246836eae09bb3d7f34d65d150f0d4 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Sun, 5 Apr 2009 16:17:31 +0000 Subject: [PATCH] * morituri/common/task.py: Introduce constants for FRAMES_PER_DISC_FRAME * examples/ARcue.py: Use the constant. Get the CRC right for the last track too. --- ChangeLog | 8 ++++++++ examples/ARcue.py | 3 ++- morituri/common/task.py | 38 ++++++++++++++++++++------------------ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5aa94e9..0c14b05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-04-05 Thomas Vander Stichele + + * morituri/common/task.py: + Introduce constants for FRAMES_PER_DISC_FRAME + * examples/ARcue.py: + Use the constant. + Get the CRC right for the last track too. + 2009-03-26 Thomas Vander Stichele * examples/ARcue.py: diff --git a/examples/ARcue.py b/examples/ARcue.py index 48e08da..73376fa 100644 --- a/examples/ARcue.py +++ b/examples/ARcue.py @@ -51,7 +51,8 @@ def main(path): print 'CRCing %s from CD frame %r for %r' % (path, offset, length) crctask = task.CRCAudioRipTask(path, trackNumber=trackIndex + 1, trackCount=len(cuefile.tracks), - frameStart=offset * 588, frameLength=length * 588) + frameStart=offset * task.FRAMES_PER_DISC_FRAME, + frameLength=length * task.FRAMES_PER_DISC_FRAME) if not crctask: print 'error: path %s not found' % file.path diff --git a/morituri/common/task.py b/morituri/common/task.py index fe6a9de..6186e5b 100644 --- a/morituri/common/task.py +++ b/morituri/common/task.py @@ -28,6 +28,9 @@ import zlib import gobject import gst +FRAMES_PER_DISC_FRAME = 588 +SAMPLES_PER_DISC_FRAME = FRAMES_PER_DISC_FRAME * 4 + class Task(object): description = 'I am doing something.' @@ -158,9 +161,9 @@ class CRCTask(Task): # see http://bugzilla.gnome.org/show_bug.cgi?id=576505 self._adapter.push(buffer) - while self._adapter.available() >= 588 * 4: + while self._adapter.available() >= SAMPLES_PER_DISC_FRAME: # FIXME: in 0.10.14.1, take_buffer leaks a ref - buffer = self._adapter.take_buffer(588 * 4) + buffer = self._adapter.take_buffer(SAMPLES_PER_DISC_FRAME) # self._lake += str(buffer) # i = 0 @@ -175,9 +178,6 @@ class CRCTask(Task): self._crc = self.do_crc_buffer(buffer, self._crc) self._bytes += len(buffer) - print 'after crc', buffer.__grefcount__ - sys.stdout.flush() - del buffer # i += 1 # if i > 0: # self._lake = self._lake[i * 2532:] @@ -221,38 +221,40 @@ class CRCAudioRipTask(CRCTask): CRCTask.__init__(self, path, frameStart, frameLength) self._trackNumber = trackNumber self._trackCount = trackCount - self._frameCounter = 0 + self._discFrameCounter = 0 + print 'TOMAS: track %d of %d' % (trackNumber, trackCount) + print 'THOMAS: frame Length: %d' % self._frameLength def do_crc_buffer(self, buffer, crc): - self._frameCounter += 1 + self._discFrameCounter += 1 # on first track ... if self._trackNumber == 1: # ... skip first 4 CD frames - if self._frameCounter <= 4: - self.debug('skipping frame %d' % self._frameCounter) + if self._discFrameCounter <= 4: + self.debug('skipping frame %d' % self._discFrameCounter) return crc # ... on 5th frame, only use last value - elif self._frameCounter == 5: - values = struct.unpack("= self._frameLength + 6: - self.debug('skipping frame %d' % self._frameCounter) + discFrameLength = self._frameLength / FRAMES_PER_DISC_FRAME + if self._discFrameCounter > discFrameLength - 5: + self.debug('skipping frame %d' % self._discFrameCounter) return crc - values = struct.unpack("<%dI" % (len(buffer) / 4), buffer) for i, value in enumerate(values): crc += (self._bytes / 4 + i + 1) * value crc &= 0xFFFFFFFF offset = self._bytes / 4 + i + 1 - if offset % 588 == 0: + if offset % FRAMES_PER_DISC_FRAME == 0: print 'THOMAS: frame %d, offset %d, value %d, CRC %d' % ( - offset / 588, offset, value, crc) + offset / FRAMES_PER_DISC_FRAME, offset, value, crc) return crc class SyncRunner: