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
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)