Example #1
0
    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
Example #2
0
 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