def _spawn(self, args):
     self.start_time = time.time()
     logger.debug(args)
     self._process = subprocess.Popen(args,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.PIPE,
                                      bufsize=1,
                                      universal_newlines=True)
     self.state = "RUNNING"
     self._process.poll()
     while self._process.returncode is None and self.state != "ABORTED":
         next_line = self._process.stderr.readline()
         fps_idx = next_line.rfind('fps=')
         q_idx = next_line.rfind('q=')
         if fps_idx != -1 and q_idx != -1:
             self.fps = int(float(next_line[fps_idx + 4:q_idx].strip()))
         self._process.poll()
     self.stop_time = time.time()
     if self.state == "ABORTED":
         self._process.kill()
     else:
         if self._process.returncode == 0:
             self.state = "COMPLETED"
         else:
             self.state = "ERROR"
     PipelineManager.pipeline_finished()
     self._process = None
Exemplo n.º 2
0
 def stop_running_pipeline(self):
     self.pipeline.set_state(Gst.State.NULL)
     if self.state is "RUNNING":
         self.state = "ABORTED"
         logger.debug(
             "Setting Pipeline {id} State to ABORTED".format(id=self.id))
         self.stop_time = time.time()
         PipelineManager.pipeline_finished()
 def stop(self):
     if self._process:
         self.state = "ABORTED"
         self._process.kill()
         logger.debug("Setting Pipeline {id} State to ABORTED".format(id=self.id))
         PipelineManager.pipeline_finished()
     if self.state is "QUEUED":
         PipelineManager.remove_from_queue(self.id)
         self.state = "ABORTED"
         logger.debug("Setting Pipeline {id} State to ABORTED and removing from the queue".format(id=self.id))
 def shutdown_and_delete_pipeline(self, new_state):
     if not self.pipeline_is_in_terminal_state():
         self.stop_time = time.time()
         logger.debug("Setting Pipeline {id} State to {next_state}".format(
             id=self.id, next_state=new_state))
         self.state = new_state
         self.pipeline.set_state(Gst.State.NULL)
         del self.pipeline
         self.pipeline = None
         PipelineManager.pipeline_finished()
     elif self.state == "QUEUED":
         logger.debug(
             "Setting Pipeline {id} State to {next_state} and removing from queue"
             .format(id=self.id, next_state=new_state))
         self.stop_time = time.time()
         self.state = new_state
Exemplo n.º 5
0
    def bus_call(bus, message, self):
        t = message.type
        if t == Gst.MessageType.EOS:
            logger.info("Pipeline {id} Ended".format(id=self.id))
            self.pipeline.set_state(Gst.State.NULL)
            if self.state is "RUNNING":
                logger.debug("Setting Pipeline {id} State to COMPLETED".format(
                    id=self.id))
                self.state = "COMPLETED"
            self.stop_time = time.time()
            bus.remove_signal_watch()
            if (self.destination):
                del self.destination
                self.destination = None
            del self.pipeline
            self.pipeline = None
            PipelineManager.pipeline_finished()
        elif t == Gst.MessageType.ERROR:
            err, debug = message.parse_error()
            logger.error("Error on Pipeline {id}: {err}".format(id=id,
                                                                err=err))

            if (self.state is None) or (self.state is
                                        "RUNNING") or (self.state is "QUEUED"):
                logger.debug(
                    "Setting Pipeline {id} State to ERROR".format(id=self.id))
                self.stop_time = time.time()
                self.state = "ERROR"
            self.pipeline.set_state(Gst.State.NULL)
            self.stop_time = time.time()
            bus.remove_signal_watch()
            del self.pipeline
            self.pipeline = None
            PipelineManager.pipeline_finished()
        elif t == Gst.MessageType.STATE_CHANGED:
            old_state, new_state, pending_state = message.parse_state_changed()
            if message.src == self.pipeline:
                if old_state == Gst.State.PAUSED and new_state == Gst.State.PLAYING:
                    if self.state is "QUEUED":
                        logger.debug(
                            "Setting Pipeline {id} State to RUNNING".format(
                                id=self.id))
                        self.state = "RUNNING"
        else:
            pass
        return True
Exemplo n.º 6
0
    def stop(self):
        if self.pipeline is not None:
            self.pipeline.set_state(Gst.State.NULL)
            if self.state is "RUNNING":
                self.state = "ABORTED"
                logger.debug("Setting Pipeline {id} State to ABORTED".format(id=self.id))
            self.stop_time = time.time()
            PipelineManager.pipeline_finished()
        if self.state is "QUEUED":
            self.state = "ABORTED"
            PipelineManager.remove_from_queue(self.id)
            logger.debug("Setting Pipeline {id} State to ABORTED and removing from the queue".format(id=self.id))


        del self.pipeline
        self.pipeline = None

        return self.status()