Exemple #1
0
 def message_rcvd(bus, message, pipeline, resolution):
     t = message.type
     if t == gst.MESSAGE_STATE_CHANGED:
         if message.src == pipeline:
             old, new, pending = message.parse_state_changed()
             if new == gst.STATE_PLAYING:
                 run_check(pipeline, resolution)
     elif t == gst.MESSAGE_ERROR:
         gerror, debug = message.parse_error()
         # set pipeline state to NULL so worker does not consume
         # unnecessary resources
         pipeline.set_state(gst.STATE_NULL)
         resolution.errback(
             errors.GStreamerGstError(message.src, gerror, debug))
     elif t == gst.MESSAGE_EOS:
         resolution.errback(
             errors.GStreamerError("Unexpected end of stream"))
     else:
         log.debug(
             'check', 'message: %s: %s:' %
             (message.src.get_path_string(), message.type.value_nicks[1]))
         if message.structure:
             log.debug('check',
                       'message:    %s' % message.structure.to_string())
         else:
             log.debug('check', 'message:    (no structure)')
     return True
Exemple #2
0
    def have_error(self, curstate, message):
        # if we have a state change defer that has not yet
        # fired, we should errback it
        changes = [gst.STATE_CHANGE_NULL_TO_READY,
                   gst.STATE_CHANGE_READY_TO_PAUSED,
                   gst.STATE_CHANGE_PAUSED_TO_PLAYING]

        extras = ((gst.STATE_PAUSED, gst.STATE_CHANGE_PLAYING_TO_PAUSED),
                  (gst.STATE_READY, gst.STATE_CHANGE_PAUSED_TO_READY),
                  (gst.STATE_NULL, gst.STATE_CHANGE_READY_TO_NULL))
        for state, change in extras:
            if curstate <= state:
                changes.append(change)

        for change in changes:
            if change in self:
                self.log("We have an error, going to errback pending "
                         "state change defers")
                gerror, debug = message.parse_error()
                for d in self[change]:
                    d.errback(errors.GStreamerGstError(
                        message.src, gerror, debug))
                del self[change]