Ejemplo n.º 1
0
        private unsafe byte[] ProcessCaptureData()
        {
            fixed(InteropVideodev2.V4l2FrameBuffer *buffers = &ApplyFrameBuffers()[0])
            {
                // Start data stream
                InteropVideodev2.v4l2_buf_type type = InteropVideodev2.v4l2_buf_type.V4L2_BUF_TYPE_VIDEO_CAPTURE;
                Interop.ioctl(_deviceFileDescriptor, InteropVideodev2.V4l2Request.VIDIOC_STREAMON, new IntPtr(&type));

                byte[] dataBuffer = GetFrameData(buffers);

                // Close data stream
                Interop.ioctl(_deviceFileDescriptor, InteropVideodev2.V4l2Request.VIDIOC_STREAMOFF, new IntPtr(&type));

                UnmappingFrameBuffers(buffers);

                return(dataBuffer);
            }
        }
Ejemplo n.º 2
0
        public override unsafe void CaptureContinuous(CancellationToken token)
        {
            _capturing = true;
            fixed(InteropVideodev2.V4l2FrameBuffer *buffers = &ApplyFrameBuffers()[0])
            {
                // Start data stream
                InteropVideodev2.v4l2_buf_type type = InteropVideodev2.v4l2_buf_type.V4L2_BUF_TYPE_VIDEO_CAPTURE;
                Interop.ioctl(_deviceFileDescriptor, InteropVideodev2.V4l2Request.VIDIOC_STREAMON, new IntPtr(&type));
                while (!token.IsCancellationRequested)
                {
                    NewImageBufferReady?.Invoke(this, GetFrameDataPooled(buffers));
                }

                // Close data stream
                Interop.ioctl(_deviceFileDescriptor, InteropVideodev2.V4l2Request.VIDIOC_STREAMOFF, new IntPtr(&type));

                UnmappingFrameBuffers(buffers);
            }

            _capturing = false;
        }