from flac import *
from m4a import *
from webm import *
-
# Author: Guillaume Pellerin <yomguy@parisson.com>
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
@interfacedoc
def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
super(FlacEncoder, self).setup(channels, samplerate, blocksize, totalframes)
- # TODO open file for writing
- # the output data format we want
+
self.pipe = ''' appsrc name=src ! audioconvert
! flacenc '''
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
# Paul Brossier <piem@piem.org>
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
@interfacedoc
def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
super(VorbisEncoder, self).setup(channels, samplerate, blocksize, totalframes)
- # TODO open file for writing
- # the output data format we want
+
self.pipe = ''' appsrc name=src
! audioconvert
! vorbisenc
# Author: Paul Brossier <piem@piem.org>
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
@interfacedoc
def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
super(WavEncoder, self).setup(channels, samplerate, blocksize, totalframes)
- # TODO open file for writing
- # the output data format we want
+
self.pipe = ''' appsrc name=src
! audioconvert
! wavenc
from timeside.core import Processor, implements, interfacedoc
+from timeside.encoder.core import GstEncoder
from timeside.api import IEncoder
from timeside.gstutils import *
@interfacedoc
def setup(self, channels=None, samplerate=None, blocksize=None, totalframes=None):
super(WebMEncoder, self).setup(channels, samplerate, blocksize, totalframes)
- # TODO open file for writing
- # the output data format we want
+
if self.video:
self.pipe = '''videotestsrc pattern=black ! ffmpegcolorspace
! queue ! vp8enc speed=2 threads=4 quality=9.0 ! queue ! mux.
samples = frombuffer(buf.data, dtype='float32')
samples.resize([len(samples)/chan, chan])
return samples
-
-class GstEncoder(Processor):
-
- def release(self):
- while self.bus.have_pending():
- self.bus.pop()
-
- def __del__(self):
- self.release()
-
- def start_pipeline(self, channels, samplerate):
- 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)
- self.src.set_property('emit-signals', True)
-
- self.bus = self.pipeline.get_bus()
- self.bus.add_signal_watch()
- self.bus.connect("message", self.on_message)
-
- # start pipeline
- self.pipeline.set_state(gst.STATE_PLAYING)
-
- def on_message(self, bus, message):
- t = message.type
- if t == gst.MESSAGE_EOS:
- self.pipeline.set_state(gst.STATE_NULL)
- elif t == gst.MESSAGE_ERROR:
- self.pipeline.set_state(gst.STATE_NULL)
- err, debug = message.parse_error()
- print "Error: %s" % err, debug
-
- def process(self, frames, eod=False):
- self.eod = eod
- buf = numpy_array_to_gst_buffer(frames)
- self.src.emit('push-buffer', buf)
- if self.eod:
- self.src.emit('end-of-stream')
- if self.streaming:
- self.chunk = self.app.emit('pull-buffer')
- return frames, eod