]> git.parisson.com Git - timeside.git/commitdiff
timeside/encoder/*.py: use GstEncoder
authorPaul Brossier <piem@piem.org>
Wed, 1 Aug 2012 04:24:21 +0000 (22:24 -0600)
committerPaul Brossier <piem@piem.org>
Wed, 1 Aug 2012 04:24:21 +0000 (22:24 -0600)
timeside/encoder/flac.py
timeside/encoder/m4a.py
timeside/encoder/mp3.py
timeside/encoder/ogg.py
timeside/encoder/wav.py
timeside/encoder/webm.py

index cb22a5551df47118ae3670f88ab9a724ea529473..aec60be25474482098f25decaeb6bb261003a919 100644 (file)
@@ -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
index eb30bac6c4bef490acbde52f60337e497bf66bb6..2e4510dd2ed4ded3cc0b8a574601ae88d77f7b81 100644 (file)
@@ -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
index 9855648be2b9f47808a1618967be0f84ff16a8cd..c1455e47ca62697f522dfa7ada14bac6c382cc57 100644 (file)
@@ -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 '
             
index 699e5089d8949901e455ae6357158227c2890f57..113eaba2328fbc84fe7d6eced9749099e2fe1375 100644 (file)
@@ -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
index b289210a939c49c4879870b82a68649c9a278b81..239d23867a212056419c76f598cbc919798f71fa 100644 (file)
@@ -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
index 5a138cd72958fe7bb215ceacf10e4a46e68b12b1..c3aab8b585874720e59c8d9ef6b7ae0e95728377 100644 (file)
@@ -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