Public feed #604439

Untitled

public text v1 · immutable
Raw Edit
·published 2007-07-05 15:02 UTC
rendered paste body
class DaapSource(gst.BaseSrc):
    __gsttemplates__ = (
        gst.PadTemplate("src",
                        gst.PAD_SRC,
                        gst.PAD_ALWAYS,
                        gst.caps_new_any()),
        )

    __gstdetails__ = ("DAAP plugin", "Foo/Bar", "Read data on DAAP shares",
                      "Philippe Normand <philippe@fluendo.com>")

    blocksize = 4096
    fd = None

    def __init__(self, name):
        self.__gobject_init__()
        self.curoffset = 0
        self._libs = {}
        self.cnx = daap.DAAPClient()
        self.set_name(name)

    def get_library(self, host, port):
        if (host, port) not in self._libs:
            self.cnx.connect(host, port)
            session = self.cnx.login()
            library = session.library()
            self._libs[(host, port)] = library
        return self._libs.get((host, port))

    def set_property(self, name, value):
        if name == 'uri':
            parsed = media_uri.Uri(value).get_parts()
            port = int(parsed['port'] or  '3689')
            library = self.get_library(parsed['host'], port)
            track_id = int(parsed['params'].get('id','1'))
            track = [ t for t in library.tracks()
                      if t.id == track_id ][0]
            self.fd = track.request()

    def do_create(self, offset, size):
##         if offset != self.curoffset:
##             self.fd.seek(offset, 0)
        data = self.fd.read(self.blocksize)
        if data:
            self.curoffset += len(data)
            return gst.FLOW_OK, gst.Buffer(data)
        else:
            return gst.FLOW_UNEXPECTED, None

gobject.type_register(DaapSource)

r = gst.element_register(type=DaapSource, elementname="daapsrc",
                         rank=gst.RANK_PRIMARY)