Пример #1
0
    def chainfunc(self, pad, buffer):
        if self.proxy:
            # we are in proxy mode already
            self.srcpad.push(buffer)
            return Gst.FlowReturn.OK

        self.buffer = self.buffer + buffer.data
        if not self.buffer_size:
            try:
                self.buffer_size, a_type = \
                    struct.unpack('>L4s', self.buffer[:8])
            except Exception:
                return Gst.FlowReturn.OK

        if len(self.buffer) < self.buffer_size:
            # we need to buffer more
            return Gst.FlowReturn.OK

        buffer = self.buffer[self.buffer_size:]
        fake_header = self.get_fake_header()
        n_buf = Gst.Buffer(fake_header + buffer)
        self.proxy = True
        self.srcpad.push(n_buf)

        return Gst.FlowReturn.OK
Пример #2
0
def test_basic():
    global result_x
    global result_y

    Gst.init(None)
    loop = GLib.MainLoop()
    pipe_str = "appsrc name=appsrc  ! queue ! appsink name=appsink"
    pipeline = Gst.parse_launch(pipe_str)

    appsrc = pipeline.get_by_name("appsrc")
    appsrc.set_property('do-timestamp', True)

    appsink = pipeline.get_by_name("appsink")
    appsink.set_property('emit-signals', True)
    appsink.set_property("sync", False)
    appsink.connect("new-sample", new_sample)

    bus = pipeline.get_bus()
    watch_id = bus.connect("message", on_message, pipeline, loop, "one")
    bus.add_signal_watch()

    pipeline.set_state(Gst.State.PLAYING)

    buf = Gst.Buffer()
    buf.dts = Gst.CLOCK_TIME_NONE
    buf.pts = Gst.CLOCK_TIME_NONE

    detection = GstCv.CvDetection()
    detection.x = TEST_VAL_X
    detection.y = TEST_VAL_Y

    GstCv.buffer_add_cv_detection_meta(buf, detection)

    appsrc.emit('push-buffer', buf)
    appsrc.emit('end-of-stream')

    try:
        loop.run()
    except:
        print("Error running loop")

    pipeline.set_state(Gst.State.NULL)
    assert (result_x == TEST_VAL_X)
    assert (result_y == TEST_VAL_Y)