diff --git a/morituri/common/checksum.py b/morituri/common/checksum.py index d0fe2e0..145c7d0 100644 --- a/morituri/common/checksum.py +++ b/morituri/common/checksum.py @@ -6,17 +6,17 @@ # Copyright (C) 2009 Thomas Vander Stichele # This file is part of morituri. -# +# # morituri is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # morituri is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with morituri. If not, see . @@ -143,7 +143,9 @@ class ChecksumTask(log.Loggable, gstreamer.GstPipelineTask): self.debug('scheduled setting to play') def stopped(self): + self.debug('stopped') if not self._last: + self.debug('raising EmptyError') # see http://bugzilla.gnome.org/show_bug.cgi?id=578612 self.debug('not a single buffer gotten, raising') self.setException(common.EmptyError('not a single buffer gotten')) @@ -269,7 +271,7 @@ class AccurateRipChecksumTask(ChecksumTask): return checksum -class TRMTask(gstreamer.GstPipelineTask): +class TRMTask(task.GstPipelineTask): """ I calculate a MusicBrainz TRM fingerprint. diff --git a/morituri/common/encode.py b/morituri/common/encode.py index 6070f89..c8c81f1 100644 --- a/morituri/common/encode.py +++ b/morituri/common/encode.py @@ -26,6 +26,7 @@ import shutil import tempfile from morituri.common import common, log +from morituri.common import task as ctask from morituri.extern.task import task, gstreamer @@ -124,7 +125,7 @@ LOSSY_PROFILES = { ALL_PROFILES = PROFILES.copy() ALL_PROFILES.update(LOSSY_PROFILES) -class EncodeTask(gstreamer.GstPipelineTask): +class EncodeTask(ctask.GstPipelineTask): """ I am a task that encodes a .wav file. I set tags too. @@ -218,6 +219,14 @@ class EncodeTask(gstreamer.GstPipelineTask): bus.connect('message::element', self._message_element_cb) self._level = self.pipeline.get_by_name('level') + + # set an interval that is smaller than the duration + # FIXME: check level and make sure it emits level up to the last + # sample, even if input is small + interval = 1000000000L + if interval < duration: + interval = duration / 2 + self._level.set_property('interval', interval) # add a probe so we can track progress # we connect to level because this gives us offset in samples srcpad = self._level.get_static_pad('src') @@ -268,6 +277,8 @@ class EncodeTask(gstreamer.GstPipelineTask): self.peak = math.sqrt(math.pow(10, self._peakdB / 10.0)) else: self.warning('No peak found, something went wrong!') + # workaround for when the file is too short to have volume ? + # self.peak = 0.0 class TagReadTask(gstreamer.GstPipelineTask): """ diff --git a/morituri/common/task.py b/morituri/common/task.py new file mode 100644 index 0000000..0794b1a --- /dev/null +++ b/morituri/common/task.py @@ -0,0 +1,12 @@ +# -*- Mode: Python -*- +# vi:si:et:sw=4:sts=4:ts=4 + +from morituri.extern.log import log +from morituri.extern.task import task, gstreamer + +# log.Loggable first to get logging +class SyncRunner(log.Loggable, task.SyncRunner): + pass + +class GstPipelineTask(log.Loggable, gstreamer.GstPipelineTask): + pass