namespace MagicLeap.Android.NDK.NativeWindow { using System; using System.Runtime.InteropServices; internal static class NativeWindowNativeBindings { public const string kLibraryName = "libnativewindow"; [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern void AHardwareBuffer_acquire(AHardwareBuffer buffer); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern int AHardwareBuffer_allocate(ref AHardwareBuffer.Description description, out AHardwareBuffer buffer); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern void AHardwareBuffer_describe(AHardwareBuffer buffer, out AHardwareBuffer.Description description); #if ANDROID_API_LEVEL_31_OR_NEWER [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern int AHardwareBuffer_getId(AHardwareBuffer buffer, out ulong outId); #endif [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern int AHardwareBuffer_isSupported(ref AHardwareBuffer.Description description); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe int AHardwareBuffer_lock(AHardwareBuffer buffer, AHardwareBuffer.Usage usage, int fence, ARect* rect, out void* virtualAddress); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe int AHardwareBuffer_lockAndGetInfo(AHardwareBuffer buffer, AHardwareBuffer.Usage usage, int fence, ARect* rect, out void* outVirtualAddress, out int outBytesPerPixel, out int outBytesPerStride); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe int AHardwareBuffer_lockPlanes(AHardwareBuffer buffer, AHardwareBuffer.Usage usage, int fenceFd, ARect* rect, out AHardwareBuffer.Planes outPlanes); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern int AHardwareBuffer_recvHandleFromUnixSocket(int socketFd, out AHardwareBuffer buffer); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern void AHardwareBuffer_release(AHardwareBuffer buffer); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern int AHardwareBuffer_sendHandleToUnixSocket(AHardwareBuffer buffer, int socketFd); [DllImport(kLibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern unsafe int AHardwareBuffer_unlock(AHardwareBuffer buffer, int* fence); } }