コード例 #1
0
ファイル: gstreamer.py プロジェクト: marietje/maried
    def queue(self, media):
        """ Queues the next media to be played """
        # Check current state
        self.readyEvent.wait()
        got_to_start_playing = False
        with self.idleCond:
            if self.stopped:
                raise Stopped
            if not self.next_media is None:
                raise RuntimeError, \
                    "Another media has been queued already"
            if self.playing_media is None:
                got_to_start_playing = True
            self.next_media = media

        # Get mediafile and set up file descriptor
        self.l.debug('queueing %s' % media)
        try:
            mf = media.mediaFile
        except KeyError:
            self.l.error("%s's mediafile doesn't exist" % media)
            return
        stream = mf.open()
        wrapper = None
        if hasattr(stream, 'fileno'):
            uri = 'fd://%s'%stream.fileno()
        else:
            wrapper = SocketPairWrappedFile(stream)
            self.threadPool.execute_named(wrapper.run,
                '%s wrapper.run %s' % (self.l.name,
                    wrapper.fileno()))
            uri = 'fd://%s'%wrapper.fileno()
        self.next_wrapper = wrapper
        self.next_stream = stream

        # Queue in the playbin
        self.bin.set_property('uri', uri)

        # Inject TRACK_GAIN and TRACK_PEAK tags
        tl = gst.TagList.new_empty()
        tl.add_value(gst.TagMergeMode.APPEND, gst.TAG_TRACK_GAIN,
                media.trackGain)
        tl.add_value(gst.TagMergeMode.APPEND, gst.TAG_TRACK_PEAK,
                media.trackPeak)
        self.rg_event = gst.Event.new_tag(tl)

        # Start playing -- if not already
        if got_to_start_playing or self.in_a_skip:
            if (self.bin.set_state(gst.State.PLAYING)
                    == gst.StateChangeReturn.FAILURE):
                self.mi.l.warn('set_state failed')
            self.idle = False
コード例 #2
0
ファイル: gstreamer.py プロジェクト: Jille/maried
    def queue(self, media):
        """ Queues the next media to be played """
        # Check current state
        self.readyEvent.wait()
        got_to_start_playing = False
        with self.idleCond:
            if self.stopped:
                raise Stopped
            if not self.next_media is None:
                raise RuntimeError, \
                        "Another media has been queued already"
            if self.playing_media is None:
                got_to_start_playing = True
            self.next_media = media

        # Get mediafile and set up file descriptor
        self.l.debug('queueing %s' % media)
        try:
            mf = media.mediaFile
        except KeyError:
            self.l.error("%s's mediafile doesn't exist" % media)
            return
        stream = mf.open()
        wrapper = None
        if hasattr(stream, 'fileno'):
            uri = 'fd://%s' % stream.fileno()
        else:
            wrapper = SocketPairWrappedFile(stream)
            self.threadPool.execute_named(
                wrapper.run,
                '%s wrapper.run %s' % (self.l.name, wrapper.fileno()))
            uri = 'fd://%s' % wrapper.fileno()
        self.next_wrapper = wrapper
        self.next_stream = stream

        # Queue in the playbin
        self.bin.set_property('uri', uri)

        # Inject TRACK_GAIN and TRACK_PEAK tags
        tl = gst.TagList()
        tl[gst.TAG_TRACK_GAIN] = media.trackGain
        tl[gst.TAG_TRACK_PEAK] = media.trackPeak
        self.rg_event = gst.event_new_tag(tl)

        # Start playing -- if not already
        if got_to_start_playing or self.in_a_skip:
            self.bin.set_state(gst.STATE_PLAYING)
            self.idle = False
コード例 #3
0
ファイル: gstreamer.py プロジェクト: sgielen/maried
 def get_info(self, stream):
         wrapper = None
         if hasattr(stream, 'fileno'):
                 uri = 'fd://%s' % stream.fileno()
         else:
                 wrapper = SocketPairWrappedFile(stream)
                 uri = 'fd://%s' % wrapper.fileno()
                 self.threadPool.execute_named(wrapper.run,
                                 '%s wrapper.run %s' % (self.l.name,
                                         wrapper.fileno()))
         j = GstMediaInfo.Job(self, uri)
         with self.lock:
                 self.jobs.add(j)
         j.event.wait()
         with self.lock:
                 self.jobs.remove(j)
         if not wrapper is None:
                 wrapper.close()
         if j.inError:
                 raise ValueError
         return j.result
コード例 #4
0
ファイル: gstreamer.py プロジェクト: Jille/maried
 def get_info(self, stream):
     wrapper = None
     if hasattr(stream, 'fileno'):
         uri = 'fd://%s' % stream.fileno()
     else:
         wrapper = SocketPairWrappedFile(stream)
         uri = 'fd://%s' % wrapper.fileno()
         self.threadPool.execute_named(
             wrapper.run,
             '%s wrapper.run %s' % (self.l.name, wrapper.fileno()))
     j = GstMediaInfo.Job(self, uri)
     with self.lock:
         self.jobs.add(j)
     j.event.wait()
     with self.lock:
         self.jobs.remove(j)
     if not wrapper is None:
         wrapper.close()
     if j.inError:
         raise ValueError
     return j.result