from timeside.api import IEncoder
from timeside.encoder.gstutils import *
-class FlacEncoder(Processor):
+class FlacEncoder(GstEncoder):
""" gstreamer-based FLAC encoder """
implements(IEncoder)
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 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
from timeside.api import IEncoder
from timeside.encoder.gstutils import *
-class AacEncoder(Processor):
+class AacEncoder(GstEncoder):
""" gstreamer-based AAC encoder """
implements(IEncoder)
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
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
''' % 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 '
from timeside.api import IEncoder
from timeside.encoder.gstutils import *
-class VorbisEncoder(Processor):
+class VorbisEncoder(GstEncoder):
""" gstreamer-based vorbis encoder """
implements(IEncoder)
''' % 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():
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
from timeside.api import IEncoder
from timeside.encoder.gstutils import *
-class WavEncoder(Processor):
+class WavEncoder(GstEncoder):
""" gstreamer-based encoder """
implements(IEncoder)
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 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
from timeside.api import IEncoder
from timeside.encoder.gstutils import *
-class WebMEncoder(Processor):
+class WebMEncoder(GstEncoder):
""" gstreamer-based webm encoder and muxer """
implements(IEncoder)
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 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