public Element ElementAdd(Update update, Display display, int layer, Rectangle dest_rect, Resource resource, Rectangle src_rect, Protection protection, Alpha alpha, Clamp clamp, DISPMANX_TRANSFORM_T transform)
        {
            if (update == null)
            {
                throw new ArgumentNullException(nameof(update));
            }
            if (display == null)
            {
                throw new ArgumentNullException(nameof(display));
            }
            if (resource == null)
            {
                throw new ArgumentNullException(nameof(resource));
            }
            if (protection == null)
            {
                throw new ArgumentNullException(nameof(protection));
            }

            VC_RECT_T d = new VC_RECT_T(dest_rect);
            VC_RECT_T s = new VC_RECT_T(src_rect);

            VC_DISPMANX_ALPHA_T nativeAlpha = alpha?.Native;
            DISPMANX_CLAMP_T    nativeClamp = clamp?.Native;

            DISPMANX_ELEMENT_HANDLE_T handle = NativeMethods.ElementAdd(update.Handle, display.Handle, layer, ref d, resource.Handle, ref s, protection.Handle, ref nativeAlpha, ref nativeClamp, transform);

            if (handle.Handle == IntPtr.Zero)
            {
                return(null);
            }
            return(new Element(handle));
        }
Exemplo n.º 2
0
        public void WriteData(VC_IMAGE_TYPE_T type, int pitch, byte[] data, Rectangle rect)
        {
            DISPMANX_STATUS_T ret;
            GCHandle          dataHandle = GCHandle.Alloc(data, GCHandleType.Pinned);

            try
            {
                VC_RECT_T vcrect = new VC_RECT_T
                {
                    x      = rect.X,
                    y      = rect.Y,
                    width  = rect.Width,
                    height = rect.Height
                };
                ret = Native.DispmanxNativeMethods.ResourceWriteData(this.m_handle, type, pitch, dataHandle.AddrOfPinnedObject(), ref vcrect);
                if (ret != DISPMANX_STATUS_T.SUCCESS)
                {
                    throw new DispmanException($"Operation failed : {nameof(Native.DispmanxNativeMethods.ResourceWriteData)} returned {ret}");
                }
            }
            finally
            {
                dataHandle.Free();
            }
        }
Exemplo n.º 3
0
 extern static uint vc_dispmanx_element_add(
     uint update,
     uint display,
     int layer,
     ref VC_RECT_T dest_rect,
     uint src,
     ref VC_RECT_T src_rect,
     DISPMANX_PROTECTION_T protection,
     IntPtr /* ref VC_DISPMANX_ALPHA_T */ alpha,
     IntPtr /* ref DISPMANX_CLAMP_T */ clamp,
     DISPMANX_TRANSFORM_T transform
     );
Exemplo n.º 4
0
        public void ReadData(Rectangle rect, byte[] image, int dest_pitch)
        {
            GCHandle imageHandle = GCHandle.Alloc(image, GCHandleType.Pinned);

            try
            {
                VC_RECT_T vcRect      = new VC_RECT_T(rect);
                IntPtr    dst_address = imageHandle.AddrOfPinnedObject();
                var       ret         = DispmanxNativeMethods.ResourceReadData(this.m_handle, ref vcRect, dst_address, (uint)dest_pitch);
                if (ret != DISPMANX_STATUS_T.SUCCESS)
                {
                    throw new DispmanException($"Operation failed : {nameof(Native.DispmanxNativeMethods.ResourceReadData)} returned {ret}");
                }
            }
            finally
            {
                imageHandle.Free();
            }
        }
Exemplo n.º 5
0
        public static DISPMANX_ELEMENT_HANDLE_T vc_dispmanx_element_add(DISPMANX_UPDATE_HANDLE_T update, DISPMANX_DISPLAY_HANDLE_T display, Int32 layer, VC_RECT_T dest_rect, DISPMANX_RESOURCE_HANDLE_T src, VC_RECT_T src_rect, DISPMANX_PROTECTION_T protection, IntPtr alpha, IntPtr clamp, DISPMANX_TRANSFORM_T transform)
        {
            DISPMANX_ELEMENT_HANDLE_T retvalue;

            GCHandle dest_rectHandle = GCHandle.Alloc(dest_rect, GCHandleType.Pinned);
            GCHandle src_rectHandle  = GCHandle.Alloc(src_rect, GCHandleType.Pinned);

            try {
                Debug.Assert(Delegates.pvc_dispmanx_element_add != null, "vc_dispmanx_element_add not implemented");
                retvalue = Delegates.pvc_dispmanx_element_add(update, display, layer, dest_rectHandle.AddrOfPinnedObject(), src, src_rectHandle.AddrOfPinnedObject(), protection, alpha, clamp, transform);
                LogCommand("vc_dispmanx_element_add", retvalue, update, display, layer, dest_rect, src, src_rect, protection, alpha, clamp, transform);
            } finally {
                dest_rectHandle.Free();
                src_rectHandle.Free();
            }

            return(retvalue);
        }
Exemplo n.º 6
0
 public static unsafe extern IntPtr vc_dispmanx_element_add(IntPtr update, IntPtr display, int layer, VC_RECT_T *dest_rect, IntPtr src, VC_RECT_T *src_rect, uint protection, IntPtr alpha, IntPtr clamp, int transform);