예제 #1
0
    private void UpdateImageContainer()
    {
        CameraDeviceImpl instance = (CameraDeviceImpl)CameraDevice.Instance;

        if ((this.mNumImageHeaders != instance.GetAllImages().Count) || ((instance.GetAllImages().Count > 0) && (this.mImageHeaderData == IntPtr.Zero)))
        {
            this.mNumImageHeaders = instance.GetAllImages().Count;
            Marshal.FreeHGlobal(this.mImageHeaderData);
            this.mImageHeaderData = Marshal.AllocHGlobal((int)(Marshal.SizeOf(typeof(ImageHeaderData)) * this.mNumImageHeaders));
        }
        int num = 0;

        foreach (ImageImpl impl2 in instance.GetAllImages().Values)
        {
            IntPtr          ptr       = new IntPtr(this.mImageHeaderData.ToInt32() + (num * Marshal.SizeOf(typeof(ImageHeaderData))));
            ImageHeaderData structure = new ImageHeaderData {
                width        = impl2.Width,
                height       = impl2.Height,
                stride       = impl2.Stride,
                bufferWidth  = impl2.BufferWidth,
                bufferHeight = impl2.BufferHeight,
                format       = (int)impl2.PixelFormat,
                reallocate   = 0,
                updated      = 0,
                data         = impl2.UnmanagedData
            };
            Marshal.StructureToPtr(structure, ptr, false);
            num++;
        }
    }
예제 #2
0
    private void UpdateCameraFrame()
    {
        int num = 0;
        CameraDeviceImpl instance = (CameraDeviceImpl)CameraDevice.Instance;

        foreach (ImageImpl impl2 in instance.GetAllImages().Values)
        {
            IntPtr          ptr  = new IntPtr(this.mImageHeaderData.ToInt32() + (num * Marshal.SizeOf(typeof(ImageHeaderData))));
            ImageHeaderData data = (ImageHeaderData)Marshal.PtrToStructure(ptr, typeof(ImageHeaderData));
            impl2.Width        = data.width;
            impl2.Height       = data.height;
            impl2.Stride       = data.stride;
            impl2.BufferWidth  = data.bufferWidth;
            impl2.BufferHeight = data.bufferHeight;
            impl2.PixelFormat  = (Image.PIXEL_FORMAT)data.format;
            if (data.reallocate == 1)
            {
                impl2.Pixels = new byte[QCARWrapper.Instance.QcarGetBufferSize(impl2.BufferWidth, impl2.BufferHeight, (int)impl2.PixelFormat)];
                Marshal.FreeHGlobal(impl2.UnmanagedData);
                impl2.UnmanagedData = Marshal.AllocHGlobal(QCARWrapper.Instance.QcarGetBufferSize(impl2.BufferWidth, impl2.BufferHeight, (int)impl2.PixelFormat));
            }
            else if (data.updated == 1)
            {
                impl2.CopyPixelsFromUnmanagedBuffer();
            }
            num++;
        }
    }
예제 #3
0
    // Unmarshal the camera images for this frame
    private void UpdateCameraFrame()
    {
        // Unmarshal the image data:
        int i = 0;
        CameraDeviceImpl cameraDeviceImpl = (CameraDeviceImpl)CameraDevice.Instance;

        foreach (ImageImpl image in cameraDeviceImpl.GetAllImages().Values)
        {
            IntPtr imagePtr = new IntPtr(mImageHeaderData.ToInt32() + i *
                                         Marshal.SizeOf(typeof(ImageHeaderData)));
            ImageHeaderData imageHeader = (ImageHeaderData)
                                          Marshal.PtrToStructure(imagePtr, typeof(ImageHeaderData));

            // Copy info back to managed Image instance:
            image.Width        = imageHeader.width;
            image.Height       = imageHeader.height;
            image.Stride       = imageHeader.stride;
            image.BufferWidth  = imageHeader.bufferWidth;
            image.BufferHeight = imageHeader.bufferHeight;
            image.PixelFormat  = (Image.PIXEL_FORMAT)imageHeader.format;

            // Reallocate if required:
            if (imageHeader.reallocate == 1)
            {
                image.Pixels = new byte[QCARWrapper.Instance.QcarGetBufferSize(image.BufferWidth,
                                                                               image.BufferHeight,
                                                                               (int)image.PixelFormat)];

                Marshal.FreeHGlobal(image.UnmanagedData);

                image.UnmanagedData = Marshal.AllocHGlobal(QCARWrapper.Instance.QcarGetBufferSize(image.BufferWidth,
                                                                                                  image.BufferHeight,
                                                                                                  (int)image.PixelFormat));

                // Note we don't copy the data this frame as the unmanagedVirtualButtonBehaviour
                // buffer was not filled.
            }
            else if (imageHeader.updated == 1)
            {
                // Copy data:
                image.CopyPixelsFromUnmanagedBuffer();
            }

            ++i;
        }
    }
예제 #4
0
    // Update the image container for the currently registered formats
    private void UpdateImageContainer()
    {
        CameraDeviceImpl cameraDeviceImpl = (CameraDeviceImpl)CameraDevice.Instance;

        // Reallocate the data container if the number of requested images has
        // changed, or if the container is not allocated
        if (mNumImageHeaders != cameraDeviceImpl.GetAllImages().Count ||
            (cameraDeviceImpl.GetAllImages().Count > 0 && mImageHeaderData == IntPtr.Zero))
        {
            mNumImageHeaders = cameraDeviceImpl.GetAllImages().Count;

            Marshal.FreeHGlobal(mImageHeaderData);
            mImageHeaderData = Marshal.AllocHGlobal(Marshal.SizeOf(
                                                        typeof(ImageHeaderData)) * mNumImageHeaders);
        }

        // Update the image info:
        int i = 0;

        foreach (ImageImpl image in cameraDeviceImpl.GetAllImages().Values)
        {
            IntPtr imagePtr = new IntPtr(mImageHeaderData.ToInt32() + i *
                                         Marshal.SizeOf(typeof(ImageHeaderData)));

            ImageHeaderData imageHeader = new ImageHeaderData();
            imageHeader.width        = image.Width;
            imageHeader.height       = image.Height;
            imageHeader.stride       = image.Stride;
            imageHeader.bufferWidth  = image.BufferWidth;
            imageHeader.bufferHeight = image.BufferHeight;
            imageHeader.format       = (int)image.PixelFormat;
            imageHeader.reallocate   = 0;
            imageHeader.updated      = 0;
            imageHeader.data         = image.UnmanagedData;

            Marshal.StructureToPtr(imageHeader, imagePtr, false);
            ++i;
        }
    }
예제 #5
0
    // Update the image container for the currently registered formats
    private void UpdateImageContainer()
    {
        CameraDeviceImpl cameraDeviceImpl = (CameraDeviceImpl)CameraDevice.Instance;

        // Reallocate the data container if the number of requested images has
        // changed, or if the container is not allocated
        if (mNumImageHeaders != cameraDeviceImpl.GetAllImages().Count ||
           (cameraDeviceImpl.GetAllImages().Count > 0 && mImageHeaderData == IntPtr.Zero))
        {

            mNumImageHeaders = cameraDeviceImpl.GetAllImages().Count;

            Marshal.FreeHGlobal(mImageHeaderData);
            mImageHeaderData = Marshal.AllocHGlobal(Marshal.SizeOf(
                                typeof(ImageHeaderData)) * mNumImageHeaders);
        }

        // Update the image info:
        int i = 0;
        foreach (ImageImpl image in cameraDeviceImpl.GetAllImages().Values)
        {
            IntPtr imagePtr = new IntPtr(mImageHeaderData.ToInt32() + i *
                   Marshal.SizeOf(typeof(ImageHeaderData)));

            ImageHeaderData imageHeader = new ImageHeaderData();
            imageHeader.width = image.Width;
            imageHeader.height = image.Height;
            imageHeader.stride = image.Stride;
            imageHeader.bufferWidth = image.BufferWidth;
            imageHeader.bufferHeight = image.BufferHeight;
            imageHeader.format = (int)image.PixelFormat;
            imageHeader.reallocate = 0;
            imageHeader.updated = 0;
            imageHeader.data = image.UnmanagedData;

            Marshal.StructureToPtr(imageHeader, imagePtr, false);
            ++i;
        }
    }