Fix for #85 - appsrc wasn't being linked due to lack of default caps

This commit is contained in:
Thomas Adamcik 2011-04-29 22:17:50 +02:00
parent 8df4505b97
commit e3235e9620

View File

@ -13,6 +13,15 @@ from mopidy.outputs.base import BaseOutput
logger = logging.getLogger('mopidy.outputs.gstreamer')
default_caps = gst.Caps("""
audio/x-raw-int,
endianness=(int)1234,
channels=(int)2,
width=(int)16,
depth=(int)16,
signed=(boolean)true,
rate=(int)44100""")
class GStreamerOutput(ThreadingActor, BaseOutput):
"""
Audio output through `GStreamer <http://gstreamer.freedesktop.org/>`_.
@ -48,6 +57,7 @@ class GStreamerOutput(ThreadingActor, BaseOutput):
uridecodebin = gst.element_factory_make('uridecodebin', 'uri')
uridecodebin.connect('pad-added', self._process_new_pad, pad)
uridecodebin.connect('notify::source', self._process_new_source)
self.gst_pipeline.add(uridecodebin)
# Setup bus and message processor
@ -55,6 +65,13 @@ class GStreamerOutput(ThreadingActor, BaseOutput):
gst_bus.add_signal_watch()
gst_bus.connect('message', self._process_gstreamer_message)
def _process_new_source(self, element, pad):
source = element.get_by_name('source')
try:
source.set_property('caps', default_caps)
except TypeError:
pass
def _process_new_pad(self, source, pad, target_pad):
pad.link(target_pad)