From 0a96e5dccb3f7177c239f6efefd176ea87850833 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Thu, 15 Nov 2012 22:34:20 +0100 Subject: [PATCH] Update emit_data to take buffers. Simplify emit data method to take Gstreamer buffers. This allows us to more concisely give it buffers with duration, timestamp and other relevant data set. --- mopidy/audio/actor.py | 12 +++--------- mopidy/backends/spotify/session_manager.py | 9 ++++++++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mopidy/audio/actor.py b/mopidy/audio/actor.py index 162e2a05..b422bc67 100644 --- a/mopidy/audio/actor.py +++ b/mopidy/audio/actor.py @@ -225,22 +225,16 @@ class Audio(pykka.ThreadingActor): """ self._playbin.set_property('uri', uri) - def emit_data(self, capabilities, data): + def emit_data(self, buffer_): """ Call this to deliver raw audio data to be played. Note that the uri must be set to ``appsrc://`` for this to work. - :param capabilities: a GStreamer capabilities string - :type capabilities: string - :param data: raw audio data to be played + :param buffer_: buffer to pass to appsrc + :type buffer_: :class:`gst.Buffer` """ - caps = gst.caps_from_string(capabilities) - buffer_ = gst.Buffer(buffer(data)) - buffer_.set_caps(caps) - source = self._playbin.get_property('source') - source.set_property('caps', caps) source.emit('push-buffer', buffer_) def emit_end_of_stream(self): diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index cd3d97db..8032a289 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -1,5 +1,9 @@ from __future__ import unicode_literals +import pygst +pygst.require('0.10') +import gst + import logging import os import threading @@ -108,7 +112,10 @@ class SpotifySessionManager(process.BaseThread, PyspotifySessionManager): 'sample_rate': sample_rate, 'channels': channels, } - self.audio.emit_data(capabilites, bytes(frames)) + buffer_ = gst.Buffer(bytes(frames)) + buffer_.set_caps(gst.caps_from_string(capabilites)) + + self.audio.emit_data(buffer_) return num_frames def play_token_lost(self, session):