From: Paul Brossier Date: Wed, 1 Aug 2012 04:24:21 +0000 (-0600) Subject: timeside/encoder/*.py: use GstEncoder X-Git-Tag: 0.3.4-noleekmp3~19 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=4814bcfae3ec941c4330704826513663dc1fdf28;p=timeside.git timeside/encoder/*.py: use GstEncoder --- diff --git a/timeside/encoder/flac.py b/timeside/encoder/flac.py index cb22a55..aec60be 100644 --- a/timeside/encoder/flac.py +++ b/timeside/encoder/flac.py @@ -23,7 +23,7 @@ from timeside.core import Processor, implements, interfacedoc from timeside.api import IEncoder from timeside.encoder.gstutils import * -class FlacEncoder(Processor): +class FlacEncoder(GstEncoder): """ gstreamer-based FLAC encoder """ implements(IEncoder) @@ -58,21 +58,7 @@ class FlacEncoder(Processor): else: self.pipe += '! appsink name=app sync=False ' - self.pipeline = gst.parse_launch(self.pipe) - # store a pointer to appsrc in our encoder object - self.src = self.pipeline.get_by_name('src') - # store a pointer to appsink in our encoder object - self.app = self.pipeline.get_by_name('app') - - srccaps = gst.Caps("""audio/x-raw-float, - endianness=(int)1234, - channels=(int)%s, - width=(int)32, - rate=(int)%d""" % (int(channels), int(samplerate))) - self.src.set_property("caps", srccaps) - - # start pipeline - self.pipeline.set_state(gst.STATE_PLAYING) + self.start_pipeline(channels, samplerate) @staticmethod @interfacedoc @@ -103,12 +89,3 @@ class FlacEncoder(Processor): def set_metadata(self, metadata): #TODO: pass - - @interfacedoc - def process(self, frames, eod=False): - self.eod = eod - buf = numpy_array_to_gst_buffer(frames) - self.src.emit('push-buffer', buf) - if self.streaming: - self.chunk = self.app.emit('pull-buffer') - return frames, eod diff --git a/timeside/encoder/m4a.py b/timeside/encoder/m4a.py index eb30bac..2e4510d 100644 --- a/timeside/encoder/m4a.py +++ b/timeside/encoder/m4a.py @@ -23,7 +23,7 @@ from timeside.core import Processor, implements, interfacedoc from timeside.api import IEncoder from timeside.encoder.gstutils import * -class AacEncoder(Processor): +class AacEncoder(GstEncoder): """ gstreamer-based AAC encoder """ implements(IEncoder) @@ -39,22 +39,14 @@ class AacEncoder(Processor): super(AacEncoder, self).setup(channels, samplerate, nframes) # TODO open file for writing # the output data format we want - pipeline = gst.parse_launch(''' appsrc name=src + self.streaming = False + self.pipe = ''' appsrc name=src ! audioconvert ! faac - ! filesink location=%s ''' % self.filename) - # store a pointer to appsink in our encoder object - self.src = pipeline.get_by_name('src') - srccaps = gst.Caps("""audio/x-raw-float, - endianness=(int)1234, - channels=(int)%s, - width=(int)32, - rate=(int)%d""" % (int(channels), int(samplerate))) - self.src.set_property("caps", srccaps) + ! filesink location=%s ''' % self.filename # start pipeline - pipeline.set_state(gst.STATE_PLAYING) - self.pipeline = pipeline + self.start_pipeline(channels, samplerate) @staticmethod @interfacedoc @@ -85,10 +77,3 @@ class AacEncoder(Processor): def set_metadata(self, metadata): #TODO pass - - @interfacedoc - def process(self, frames, eod=False): - buf = numpy_array_to_gst_buffer(frames) - self.src.emit('push-buffer', buf) - if eod: self.src.emit('end-of-stream') - return frames, eod diff --git a/timeside/encoder/mp3.py b/timeside/encoder/mp3.py index 9855648..c1455e4 100644 --- a/timeside/encoder/mp3.py +++ b/timeside/encoder/mp3.py @@ -61,7 +61,7 @@ class Mp3Encoder(Processor): ''' % self.filename elif self.filename : - self.pipe += '! filesink location=%s sync=False ' % self.filename + self.pipe += '! filesink location=%s async=False sync=False ' % self.filename else: self.pipe += '! queue ! appsink name=app sync=False ' diff --git a/timeside/encoder/ogg.py b/timeside/encoder/ogg.py index 699e508..113eaba 100644 --- a/timeside/encoder/ogg.py +++ b/timeside/encoder/ogg.py @@ -23,7 +23,7 @@ from timeside.core import Processor, implements, interfacedoc from timeside.api import IEncoder from timeside.encoder.gstutils import * -class VorbisEncoder(Processor): +class VorbisEncoder(GstEncoder): """ gstreamer-based vorbis encoder """ implements(IEncoder) @@ -56,26 +56,13 @@ class VorbisEncoder(Processor): ''' % self.filename elif self.filename : - self.pipe += '! filesink location=%s ' % self.filename + self.pipe += '! filesink async=True location=%s ' % self.filename else: self.pipe += '! appsink name=app sync=False ' - self.pipeline = gst.parse_launch(self.pipe) - # store a pointer to appsrc in our encoder object - self.src = self.pipeline.get_by_name('src') - # store a pointer to appsink in our encoder object - self.app = self.pipeline.get_by_name('app') - - srccaps = gst.Caps("""audio/x-raw-float, - endianness=(int)1234, - channels=(int)%s, - width=(int)32, - rate=(int)%d""" % (int(channels), int(samplerate))) - self.src.set_property("caps", srccaps) - # start pipeline - self.pipeline.set_state(gst.STATE_PLAYING) - + self.start_pipeline(channels, samplerate) + @staticmethod @interfacedoc def id(): @@ -105,12 +92,3 @@ class VorbisEncoder(Processor): def set_metadata(self, metadata): #TODO: pass - - @interfacedoc - def process(self, frames, eod=False): - self.eod = eod - buf = numpy_array_to_gst_buffer(frames) - self.src.emit('push-buffer', buf) - if self.streaming: - self.chunk = self.app.emit('pull-buffer') - return frames, eod diff --git a/timeside/encoder/wav.py b/timeside/encoder/wav.py index b289210..239d238 100644 --- a/timeside/encoder/wav.py +++ b/timeside/encoder/wav.py @@ -24,7 +24,7 @@ from timeside.core import Processor, implements, interfacedoc from timeside.api import IEncoder from timeside.encoder.gstutils import * -class WavEncoder(Processor): +class WavEncoder(GstEncoder): """ gstreamer-based encoder """ implements(IEncoder) @@ -60,21 +60,8 @@ class WavEncoder(Processor): else: self.pipe += '! appsink name=app sync=False' - self.pipeline = gst.parse_launch(self.pipe) - # store a pointer to appsrc in our encoder object - self.src = self.pipeline.get_by_name('src') - # store a pointer to appsink in our encoder object - self.app = self.pipeline.get_by_name('app') - - srccaps = gst.Caps("""audio/x-raw-float, - endianness=(int)1234, - channels=(int)%s, - width=(int)32, - rate=(int)%d""" % (int(channels), int(samplerate))) - self.src.set_property("caps", srccaps) - # start pipeline - self.pipeline.set_state(gst.STATE_PLAYING) + self.start_pipeline(channels, samplerate) @staticmethod @interfacedoc @@ -105,12 +92,3 @@ class WavEncoder(Processor): def set_metadata(self, metadata): #TODO pass - - @interfacedoc - def process(self, frames, eod=False): - self.eod = eod - buf = numpy_array_to_gst_buffer(frames) - self.src.emit('push-buffer', buf) - if self.streaming: - self.chunk = self.app.emit('pull-buffer') - return frames, eod diff --git a/timeside/encoder/webm.py b/timeside/encoder/webm.py index 5a138cd..c3aab8b 100644 --- a/timeside/encoder/webm.py +++ b/timeside/encoder/webm.py @@ -23,7 +23,7 @@ from timeside.core import Processor, implements, interfacedoc from timeside.api import IEncoder from timeside.encoder.gstutils import * -class WebMEncoder(Processor): +class WebMEncoder(GstEncoder): """ gstreamer-based webm encoder and muxer """ implements(IEncoder) @@ -67,21 +67,8 @@ class WebMEncoder(Processor): else: self.pipe += '! appsink name=app sync=False ' - self.pipeline = gst.parse_launch(self.pipe) - # store a pointer to appsrc in our encoder object - self.src = self.pipeline.get_by_name('src') - # store a pointer to appsink in our encoder object - self.app = self.pipeline.get_by_name('app') - - srccaps = gst.Caps("""audio/x-raw-float, - endianness=(int)1234, - channels=(int)%s, - width=(int)32, - rate=(int)%d""" % (int(channels), int(samplerate))) - self.src.set_property("caps", srccaps) - # start pipeline - self.pipeline.set_state(gst.STATE_PLAYING) + self.start_pipeline(channels, samplerate) @staticmethod @interfacedoc @@ -112,12 +99,3 @@ class WebMEncoder(Processor): def set_metadata(self, metadata): #TODO: pass - - @interfacedoc - def process(self, frames, eod=False): - self.eod = eod - buf = numpy_array_to_gst_buffer(frames) - self.src.emit('push-buffer', buf) - if self.streaming: - self.chunk = self.app.emit('pull-buffer') - return frames, eod