Browse Source

* Added LibKinect10.pp

git-svn-id: trunk@26730 -
michael 11 years ago
parent
commit
2e912b6c68

+ 1 - 0
.gitattributes

@@ -7275,6 +7275,7 @@ packages/winunits-base/src/htmlhelp.pp svneol=native#text/plain
 packages/winunits-base/src/imagehlp.pp svneol=native#text/plain
 packages/winunits-base/src/imm.pas svneol=native#text/plain
 packages/winunits-base/src/imm_dyn.pas svneol=native#text/plain
+packages/winunits-base/src/libkinect10.pp svneol=native#text/plain
 packages/winunits-base/src/mmsystem.pp svneol=native#text/plain
 packages/winunits-base/src/multimon.pp svneol=native#text/plain
 packages/winunits-base/src/nb30.pp svneol=native#text/plain

+ 2 - 0
packages/winunits-base/fpmake.pp

@@ -66,6 +66,7 @@ begin
 		  AddUnit('stdole2');
 		  AddUnit('eventsink');
 		  AddUnit('typelib');
+		  AddUnit('libkinect10');
         end;
     T:=P.Targets.AddImplicitUnit('activex.pp');
     T:=P.Targets.AddImplicitUnit('comconst.pp');
@@ -99,6 +100,7 @@ begin
 	T:=P.Targets.AddImplicitUnit('stdole2.pas');
 	T:=P.Targets.AddImplicitUnit('eventsink.pp');
 	T:=P.Targets.AddImplicitUnit('typelib.pas');
+	T:=P.Targets.AddImplicitUnit('libkinect10.pas');
     T.Dependencies.AddInclude('tmschema.inc');
     P.ExamplePath.Add('tests/');
     P.Targets.AddExampleProgram('testcom1.pp');

+ 1 - 1
packages/winunits-base/src/buildwinutilsbase.pp

@@ -25,7 +25,7 @@ uses
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
     comserv, winspool, imm, imm_dyn, nb30, win9xwsmanager, stdole2, 
-	eventsink, typelib;
+	eventsink, typelib, libkinect10;
 
 implementation
 

+ 629 - 0
packages/winunits-base/src/libkinect10.pp

@@ -0,0 +1,629 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2013 by the Free Pascal development team
+
+    Microsoft Kinect SDK import.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{
+  Original C++ Microsoft headers are (c) Microsoft:
+  NuiSensor.h, NuiApi.h, NuiSkeleton.h and NuiImageCamera.h
+}
+
+{$MODE objfpc}
+{$H+}
+{$PACKRECORDS C}
+
+unit libkinect10;
+
+interface
+
+uses sysutils, windows;
+
+const
+  LibKinect = 'kinect10.dll';
+
+Const
+  NUI_INITIALIZE_FLAG_USES_AUDIO                  = $10000000;
+  NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX = $00000001;
+  NUI_INITIALIZE_FLAG_USES_COLOR                  = $00000002;
+  NUI_INITIALIZE_FLAG_USES_SKELETON               = $00000008;
+  NUI_INITIALIZE_FLAG_USES_DEPTH                  = $00000020;
+  NUI_INITIALIZE_FLAG_USES_HIGH_QUALITY_COLOR     = $00000040;
+  NUI_INITIALIZE_DEFAULT_HARDWARE_THREAD          = $FFFFFFFF;
+
+  ERROR_DEVICE_NOT_CONNECTED  = 1167;
+  E_NUI_DEVICE_NOT_CONNECTED  = ERROR_DEVICE_NOT_CONNECTED;
+  E_NUI_DEVICE_NOT_READY      = ERROR_NOT_READY;
+  E_NUI_ALREADY_INITIALIZED   = ERROR_ALREADY_INITIALIZED;
+  E_NUI_NO_MORE_ITEMS         = ERROR_NO_MORE_ITEMS;
+
+  FACILITY_NUI                       = $301;
+  S_NUI_INITIALIZING                 = $03010001;
+  E_NUI_FRAME_NO_DATA                = $83010001;
+  E_NUI_STREAM_NOT_ENABLED           = $83010002;
+  E_NUI_IMAGE_STREAM_IN_USE          = $83010003;
+  E_NUI_FRAME_LIMIT_EXCEEDED         = $83010004;
+  E_NUI_FEATURE_NOT_INITIALIZED      = $83010005;
+  E_NUI_NOTGENUINE                   = $83010006;
+  E_NUI_INSUFFICIENTBANDWIDTH        = $83010007;
+  E_NUI_NOTSUPPORTED                 = $83010008;
+  E_NUI_DEVICE_IN_USE                = $83010009;
+  E_NUI_DATABASE_NOT_FOUND           = $8301000D;
+  E_NUI_DATABASE_VERSION_MISMATCH    = $8301000E;
+  E_NUI_HARDWARE_FEATURE_UNAVAILABLE = $8301000F;
+  E_NUI_NOTCONNECTED                 = $83010014;
+  E_NUI_NOTREADY                     = $83010015;
+  E_NUI_SKELETAL_ENGINE_BUSY         = $830100AA;
+  E_NUI_NOTPOWERED                   = $8301027F;
+  E_NUI_BADINDEX                     = $83010585;
+  E_NUI_BADIINDEX                    = E_NUI_BADINDEX;
+
+
+  MICARRAY_ADAPTIVE_BEAM = $1100;
+  MAX_DEV_STR_LEN        = 512;
+  NUI_SKELETON_COUNT     = 6;
+
+  NUI_SKELETON_POSITION_HIP_CENTER       = 0;
+  NUI_SKELETON_POSITION_SPINE            = NUI_SKELETON_POSITION_HIP_CENTER+1;
+  NUI_SKELETON_POSITION_SHOULDER_CENTER  = NUI_SKELETON_POSITION_SPINE+1;
+  NUI_SKELETON_POSITION_HEAD             = NUI_SKELETON_POSITION_SHOULDER_CENTER+1;
+  NUI_SKELETON_POSITION_SHOULDER_LEFT    = NUI_SKELETON_POSITION_HEAD+1;
+  NUI_SKELETON_POSITION_ELBOW_LEFT       = NUI_SKELETON_POSITION_SHOULDER_LEFT+1;
+  NUI_SKELETON_POSITION_WRIST_LEFT       = NUI_SKELETON_POSITION_ELBOW_LEFT+1;
+  NUI_SKELETON_POSITION_HAND_LEFT        = NUI_SKELETON_POSITION_WRIST_LEFT+1;
+  NUI_SKELETON_POSITION_SHOULDER_RIGHT   = NUI_SKELETON_POSITION_HAND_LEFT+1;
+  NUI_SKELETON_POSITION_ELBOW_RIGHT      = NUI_SKELETON_POSITION_SHOULDER_RIGHT+1;
+  NUI_SKELETON_POSITION_WRIST_RIGHT      = NUI_SKELETON_POSITION_ELBOW_RIGHT+1;
+  NUI_SKELETON_POSITION_HAND_RIGHT       = NUI_SKELETON_POSITION_WRIST_RIGHT+1;
+  NUI_SKELETON_POSITION_HIP_LEFT         = NUI_SKELETON_POSITION_HAND_RIGHT+1;
+  NUI_SKELETON_POSITION_KNEE_LEFT        = NUI_SKELETON_POSITION_HIP_LEFT+1;
+  NUI_SKELETON_POSITION_ANKLE_LEFT       = NUI_SKELETON_POSITION_KNEE_LEFT+1;
+  NUI_SKELETON_POSITION_FOOT_LEFT        = NUI_SKELETON_POSITION_ANKLE_LEFT+1;
+  NUI_SKELETON_POSITION_HIP_RIGHT        = NUI_SKELETON_POSITION_FOOT_LEFT+1;
+  NUI_SKELETON_POSITION_KNEE_RIGHT       = NUI_SKELETON_POSITION_HIP_RIGHT+1;
+  NUI_SKELETON_POSITION_ANKLE_RIGHT      = NUI_SKELETON_POSITION_KNEE_RIGHT+1;
+  NUI_SKELETON_POSITION_FOOT_RIGHT       = NUI_SKELETON_POSITION_ANKLE_RIGHT+1;
+  NUI_SKELETON_POSITION_COUNT            = NUI_SKELETON_POSITION_FOOT_RIGHT+1;
+
+  NUI_IMAGE_RESOLUTION_INVALID   = -1;
+  NUI_IMAGE_RESOLUTION_80x60     = 0;
+  NUI_IMAGE_RESOLUTION_320x240   = NUI_IMAGE_RESOLUTION_80x60+1;
+  NUI_IMAGE_RESOLUTION_640x480   = NUI_IMAGE_RESOLUTION_320x240+1;
+  NUI_IMAGE_RESOLUTION_1280x960  = NUI_IMAGE_RESOLUTION_640x480+1;
+
+  NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX = 0;
+  NUI_IMAGE_TYPE_COLOR                  = NUI_IMAGE_TYPE_DEPTH_AND_PLAYER_INDEX+1;
+  NUI_IMAGE_TYPE_COLOR_YUV              = NUI_IMAGE_TYPE_COLOR+1;
+  NUI_IMAGE_TYPE_COLOR_RAW_YUV          = NUI_IMAGE_TYPE_COLOR_YUV+1;
+  NUI_IMAGE_TYPE_DEPTH                  = NUI_IMAGE_TYPE_COLOR_RAW_YUV+1;
+
+  NUI_SKELETON_POSITION_NOT_TRACKED = 0;
+  NUI_SKELETON_POSITION_INFERRED    = NUI_SKELETON_POSITION_NOT_TRACKED+1;
+  NUI_SKELETON_POSITION_TRACKED     = NUI_SKELETON_POSITION_INFERRED+1;
+
+  NUI_SKELETON_NOT_TRACKED   = 0;
+  NUI_SKELETON_POSITION_ONLY = NUI_SKELETON_NOT_TRACKED+1;
+  NUI_SKELETON_TRACKED       = NUI_SKELETON_POSITION_ONLY+1;
+
+  NUI_IMAGE_PLAYER_INDEX_SHIFT      = 3;
+  NUI_IMAGE_PLAYER_INDEX_MASK       = (1 shl NUI_IMAGE_PLAYER_INDEX_SHIFT)-1;
+  NUI_IMAGE_DEPTH_MAXIMUM           = (4000 shl NUI_IMAGE_PLAYER_INDEX_SHIFT) or NUI_IMAGE_PLAYER_INDEX_MASK;
+  NUI_IMAGE_DEPTH_MINIMUM           = 800 shl NUI_IMAGE_PLAYER_INDEX_SHIFT;
+  NUI_IMAGE_DEPTH_MAXIMUM_NEAR_MODE = (3000 shl NUI_IMAGE_PLAYER_INDEX_SHIFT) or NUI_IMAGE_PLAYER_INDEX_MASK;
+  NUI_IMAGE_DEPTH_MINIMUM_NEAR_MODE = 400 shl NUI_IMAGE_PLAYER_INDEX_SHIFT;
+  NUI_IMAGE_DEPTH_NO_VALUE          = 0;
+  NUI_IMAGE_DEPTH_TOO_FAR_VALUE     = $0fff shl NUI_IMAGE_PLAYER_INDEX_SHIFT;
+  NUI_DEPTH_DEPTH_UNKNOWN_VALUE     = $1fff shl NUI_IMAGE_PLAYER_INDEX_SHIFT;
+
+  NUI_CAMERA_DEPTH_NOMINAL_FOCAL_LENGTH_IN_PIXELS         = 285.63;
+  NUI_CAMERA_DEPTH_NOMINAL_INVERSE_FOCAL_LENGTH_IN_PIXELS = 3.501e-3;
+  NUI_CAMERA_DEPTH_NOMINAL_DIAGONAL_FOV                   = 70.0;
+  NUI_CAMERA_DEPTH_NOMINAL_HORIZONTAL_FOV                 = 58.5;
+  NUI_CAMERA_DEPTH_NOMINAL_VERTICAL_FOV                   = 45.6;
+
+  NUI_CAMERA_COLOR_NOMINAL_FOCAL_LENGTH_IN_PIXELS         = 531.15;
+  NUI_CAMERA_COLOR_NOMINAL_INVERSE_FOCAL_LENGTH_IN_PIXELS = 1.83e-3;
+  NUI_CAMERA_COLOR_NOMINAL_DIAGONAL_FOV                   = 73.9;
+  NUI_CAMERA_COLOR_NOMINAL_HORIZONTAL_FOV                 = 62.0;
+  NUI_CAMERA_COLOR_NOMINAL_VERTICAL_FOV                   = 48.6;
+
+  NUI_IMAGE_FRAME_FLAG_NONE              = $00000000;
+  NUI_IMAGE_FRAME_FLAG_VIEW_AREA_UNKNOWN = $00000001;
+
+  NUI_IMAGE_STREAM_FLAG_SUPPRESS_NO_FRAME_DATA          = $00010000;
+  NUI_IMAGE_STREAM_FLAG_ENABLE_NEAR_MODE                = $00020000;
+  NUI_IMAGE_STREAM_FLAG_DISTINCT_OVERFLOW_DEPTH_VALUES  = $00040000;
+  NUI_IMAGE_STREAM_FRAME_LIMIT_MAXIMUM                  = 4;
+  NUI_CAMERA_ELEVATION_MAXIMUM                          = 27;
+  NUI_CAMERA_ELEVATION_MINIMUM                          = -27;
+
+  FLT_EPSILON                                           = 1.192092896e-07;
+
+  NUI_SKELETON_MAX_TRACKED_COUNT                          = 2;
+  NUI_SKELETON_INVALID_TRACKING_ID                        = 0;
+  NUI_SKELETON_QUALITY_CLIPPED_RIGHT                      = $00000001;
+  NUI_SKELETON_QUALITY_CLIPPED_LEFT                       = $00000002;
+  NUI_SKELETON_QUALITY_CLIPPED_TOP                        = $00000004;
+  NUI_SKELETON_QUALITY_CLIPPED_BOTTOM                     = $00000008;
+  NUI_SKELETON_FRAME_FLAG_SEATED_SUPPORT_ENABLED          = $00000008;
+  NUI_SKELETON_TRACKING_FLAG_SUPPRESS_NO_FRAME_DATA       = $00000001;
+  NUI_SKELETON_TRACKING_FLAG_TITLE_SETS_TRACKED_SKELETONS = $00000002;
+  NUI_SKELETON_TRACKING_FLAG_ENABLE_SEATED_SUPPORT        = $00000004;
+  NUI_SKELETON_TRACKING_FLAG_ENABLE_IN_NEAR_RANGE         = $00000008;
+
+  NUI_CAMERA_DEPTH_IMAGE_TO_SKELETON_MULTIPLIER_320x240 = NUI_CAMERA_DEPTH_NOMINAL_INVERSE_FOCAL_LENGTH_IN_PIXELS;
+  NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240 = NUI_CAMERA_DEPTH_NOMINAL_FOCAL_LENGTH_IN_PIXELS;
+
+type
+  Vector4 = record
+    x,y,z,w : Single;
+  end;
+  PVector4 = ^Vector4;
+  TVector4 = Vector4;
+
+  Matrix4 = record
+    M11, M12, M13, M14,
+    M21, M22, M23, M24,
+    M31, M32, M33, M34,
+    M41, M42, M43, M44 : Single;
+  end;
+  PMatrix4 = ^Matrix4;
+  TMatrix4 = Matrix4;
+
+  NUI_SKELETON_POSITION_INDEX = Type Integer;
+  PNUI_SKELETON_POSITION_INDEX = ^NUI_SKELETON_POSITION_INDEX;
+  TNUI_SKELETON_POSITION_INDEX = NUI_SKELETON_POSITION_INDEX;
+
+  NUI_IMAGE_TYPE = Type Integer;
+  PNUI_IMAGE_TYPE = ^NUI_IMAGE_TYPE;
+  TNUI_IMAGE_TYPE = NUI_IMAGE_TYPE;
+
+  NUI_IMAGE_RESOLUTION = Type integer;
+  PNUI_IMAGE_RESOLUTION = ^NUI_IMAGE_RESOLUTION;
+  TNUI_IMAGE_RESOLUTION = NUI_IMAGE_RESOLUTION;
+
+  NUI_IMAGE_VIEW_AREA = record
+    eDigitalZoom : integer;
+    lCenterX : Longint;
+    lCenterY : Longint;
+  end;
+  PNUI_IMAGE_VIEW_AREA = ^NUI_IMAGE_VIEW_AREA;
+  TNUI_IMAGE_VIEW_AREA = NUI_IMAGE_VIEW_AREA;
+
+  NUI_TRANSFORM_SMOOTH_PARAMETERS = record
+    fSmoothing,
+    fCorrection,
+    fPrediction,
+    fJitterRadius,
+    fMaxDeviationRadius : single;
+  end;
+  PNUI_TRANSFORM_SMOOTH_PARAMETERS = ^NUI_TRANSFORM_SMOOTH_PARAMETERS;
+  TNUI_TRANSFORM_SMOOTH_PARAMETERS = NUI_TRANSFORM_SMOOTH_PARAMETERS;
+
+  NUI_SURFACE_DESC = record
+    Width : cardinal;
+    Height : cardinal;
+  end;
+  PNUI_SURFACE_DESC = ^NUI_SURFACE_DESC;
+  TNUI_SURFACE_DESC = NUI_SURFACE_DESC;
+
+  NUI_SKELETON_POSITION_TRACKING_STATE = Type integer;
+  PNUI_SKELETON_POSITION_TRACKING_STATE = ^NUI_SKELETON_POSITION_TRACKING_STATE;
+  TNUI_SKELETON_POSITION_TRACKING_STATE = NUI_SKELETON_POSITION_TRACKING_STATE;
+
+  NUI_SKELETON_TRACKING_STATE = Type integer;
+  PNUI_SKELETON_TRACKING_STATE = ^NUI_SKELETON_TRACKING_STATE;
+  TNUI_SKELETON_TRACKING_STATE = NUI_SKELETON_TRACKING_STATE;
+
+  NUI_SKELETON_DATA = record
+    eTrackingState : NUI_SKELETON_TRACKING_STATE;
+    dwTrackingID,
+    dwEnrollmentIndex,
+    dwUserIndex : DWORD;
+    Position : Vector4;
+    SkeletonPositions : array[0..19] of Vector4;
+    eSkeletonPositionTrackingState : array[0..19] of NUI_SKELETON_POSITION_TRACKING_STATE;
+    dwQualityFlags : DWORD;
+  end;
+  PNUI_SKELETON_DATA = ^NUI_SKELETON_DATA;
+  TNUI_SKELETON_DATA = NUI_SKELETON_DATA;
+
+  NUI_SKELETON_FRAME = record
+    liTimeStamp : int64;
+    dwFrameNumber,
+    dwFlags : DWORD;
+    vFloorClipPlane,
+    vNormalToGravity : Vector4;
+    SkeletonData : array[0..NUI_SKELETON_COUNT-1] of NUI_SKELETON_DATA;
+  end;
+  PNUI_SKELETON_FRAME = ^NUI_SKELETON_FRAME;
+  TNUI_SKELETON_FRAME = NUI_SKELETON_FRAME;
+
+  NUI_SKELETON_BONE_ROTATION = record
+    rotationMatrix : Matrix4;
+    rotationQuaternion : Vector4;
+  end;
+  PNUI_SKELETON_BONE_ROTATION = ^NUI_SKELETON_BONE_ROTATION;
+  TNUI_SKELETON_BONE_ROTATION = NUI_SKELETON_BONE_ROTATION;
+
+  NUI_SKELETON_BONE_ORIENTATION = record
+    endJoint : NUI_SKELETON_POSITION_INDEX;
+    startJoint : NUI_SKELETON_POSITION_INDEX;
+    hierarchicalRotation : NUI_SKELETON_BONE_ROTATION;
+    absoluteRotation : NUI_SKELETON_BONE_ROTATION;
+  end;
+  PNUI_SKELETON_BONE_ORIENTATION = ^NUI_SKELETON_BONE_ORIENTATION;
+  TNUI_SKELETON_BONE_ORIENTATION = NUI_SKELETON_BONE_ORIENTATION;
+
+  NUI_LOCKED_RECT = record
+    Pitch : integer;
+    size : integer;
+    pBits : pointer;
+  end;
+  PNUI_LOCKED_RECT = ^NUI_LOCKED_RECT;
+  TNUI_LOCKED_RECT = NUI_LOCKED_RECT;
+
+  INuiAudioBeam = interface(IUnknown)['{8c3cebfa-a35d-497e-bc9a-e9752a8155e0}']
+    Function GetBeam(out angle : double) : HRESULT; stdcall;
+    Function SetBeam(angle : double) : HRESULT; stdcall;
+    Function GetPosition(out angle, confidence : double) : HRESULT; stdcall;
+  end;
+
+  INuiFrameTexture = interface(IUnknown)['{13ea17f5-ff2e-4670-9ee5-1297a6e880d1}']
+    Function BufferLen : integer; stdcall;
+    Function Pitch : integer; stdcall;
+    Function LockRect(Level : UINT; pLockedRect : PNUI_LOCKED_RECT; pRect : PRECT; Flags : DWORD ) : HRESULT; stdcall;
+    Function GetLevelDesc(Level : UINT; out desc : NUI_SURFACE_DESC) : HRESULT; stdcall;
+    Function UnlockRect(Level: UINT) : HRESULT; stdcall;
+  end;
+
+  NUI_IMAGE_FRAME = record
+    liTimeStamp : int64;
+    dwFrameNumber : DWORD;
+    eImageType : NUI_IMAGE_TYPE;
+    eResolution : NUI_IMAGE_RESOLUTION;
+    pFrameTexture : INuiFrameTexture;
+    dwFrameFlags : DWORD;
+    ViewArea : NUI_IMAGE_VIEW_AREA;
+  end;
+  PNUI_IMAGE_FRAME = ^NUI_IMAGE_FRAME;
+  TNUI_IMAGE_FRAME = NUI_IMAGE_FRAME;
+
+  NUI_MICROPHONE_ARRAY_DEVICE = record
+    szDeviceName : array[0..MAX_DEV_STR_LEN - 1] of WideChar;
+    szDeviceID : array[0..MAX_DEV_STR_LEN - 1] of WideChar;
+    iDeviceIndex : integer;
+  end;
+  PNUI_MICROPHONE_ARRAY_DEVICE = ^NUI_MICROPHONE_ARRAY_DEVICE;
+  TNUI_MICROPHONE_ARRAY_DEVICE = NUI_MICROPHONE_ARRAY_DEVICE;
+
+  TNuiGetMicrophoneArrayDevices = Function(param1: PNUI_MICROPHONE_ARRAY_DEVICE; param2 : integer; out param3: integer) : HRESULT; stdcall;
+
+  NUI_SPEAKER_DEVICE = record
+    szDeviceName : array[0..MAX_DEV_STR_LEN - 1] of widechar;
+    iDeviceIndex : integer;
+    fDefault : boolean;
+  end;
+  PNUI_SPEAKER_DEVICE = ^NUI_SPEAKER_DEVICE;
+  TNUI_SPEAKER_DEVICE = NUI_SPEAKER_DEVICE;
+
+  INuiSensor = interface(IUnknown)['{1f5e088c-a8c7-41d3-9957-209677a13e85}']
+    Function NuiInitialize(dwFlags : DWORD) : HRESULT; stdcall;
+    Procedure NuiShutdown; stdcall;
+    Function NuiSetFrameEndEvent(hEvent : THandle; dwFrameEventFlag : DWORD) : HRESULT; stdcall;
+    Function NuiImageStreamOpen(eImageType : NUI_IMAGE_TYPE; eResolution : NUI_IMAGE_RESOLUTION; dwImageFrameFlags : DWORD; dwFrameLimit : DWORD; hNextFrameEvent : THandle; out phStreamHandle : THandle) : HRESULT; stdcall;
+    Function NuiImageStreamSetImageFrameFlags(hStream : THandle; dwImageFrameFlags : DWORD) : HRESULT; stdcall;
+    Function NuiImageStreamGetImageFrameFlags(hStream : THandle; pdwImageFrameFlags : PDWORD) : HRESULT; stdcall;
+    Function NuiImageStreamGetNextFrame(hStream : THandle; dwMillisecondsToWait : DWORD; pImageFrame : PNUI_IMAGE_FRAME) : HRESULT; stdcall;
+    Function NuiImageStreamReleaseFrame(hStream : THandle; pImageFrame : PNUI_IMAGE_FRAME) : HRESULT; stdcall;
+    Function NuiImageGetColorPixelCoordinatesFromDepthPixel(eColorResolution : NUI_IMAGE_RESOLUTION; const pcViewArea : PNUI_IMAGE_VIEW_AREA; lDepthX : longint;lDepthY : longint; usDepthValue : word; plColorX : PLongint; plColorY : PLongint) : HRESULT; stdcall;
+    Function NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution(eColorResolution : NUI_IMAGE_RESOLUTION;eDepthResolution : NUI_IMAGE_RESOLUTION; const pcViewArea : PNUI_IMAGE_VIEW_AREA; lDepthX : longint; lDepthY : longint; usDepthValue : word; plColorX : PLongint; plColorY : PLongint) : HRESULT; stdcall;
+    Function NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution(eColorResolution : NUI_IMAGE_RESOLUTION; eDepthResolution : NUI_IMAGE_RESOLUTION; cDepthValues : DWORD; pDepthValues : PWORD; cColorCoordinates : DWORD; pColorCoordinates : PLongint) : HRESULT; stdcall;
+    Function NuiCameraElevationSetAngle(lAngleDegrees : longint) : HRESULT; stdcall;
+    Function NuiCameraElevationGetAngle(plAngleDegrees : PLongint) : HRESULT; stdcall;
+    Function NuiSkeletonTrackingEnable(hNextFrameEvent : THandle; dwFlags : DWORD ) : HRESULT; stdcall;
+    Function NuiSkeletonTrackingDisable : HRESULT; stdcall;
+    Function NuiSkeletonSetTrackedSkeletons(TrackingIDs : PDWORD) : HRESULT; stdcall;
+    Function NuiSkeletonGetNextFrame(dwMillisecondsToWait : DWORD;pSkeletonFrame : PNUI_SKELETON_FRAME) : HRESULT; stdcall;
+    Function NuiTransformSmooth(pSkeletonFrame : PNUI_SKELETON_FRAME; const pSmoothingParams : PNUI_TRANSFORM_SMOOTH_PARAMETERS) : HRESULT; stdcall;
+    Function NuiGetAudioSource(out ppDmo : INuiAudioBeam) : HRESULT; stdcall;
+    Function NuiInstanceIndex : integer; stdcall;
+    Function NuiDeviceConnectionId : PWideString; stdcall;
+    Function NuiUniqueId : PWideString; stdcall;
+    Function NuiAudioArrayId : PWideString; stdcall;
+    Function NuiStatus : HRESULT; stdcall;
+    Function NuiInitializationFlags : DWORD; stdcall;
+  end;
+
+  IID_INuiSensor = INuiSensor;
+  IID_INuiFrameTexture = INuiFrameTexture;
+  IID_INuiAudioBeam = INuiAudioBeam;
+
+  TNuiGetSensorCount = Function (out count : integer) : HRESULT; stdcall;
+  TNuiCreateSensorByIndex = Function (index : integer; out ppNuiSensor : INuiSensor) : HRESULT; stdcall;
+  TNuiCreateSensorById = Function (const strInstanceId : PWideString; out ppNuiSensor : INuiSensor) : HRESULT; stdcall;
+  TNuiGetAudioSource = Function (out ppDmo : INuiAudioBeam) : HRESULT; stdcall;
+  TNuiStatusProc = Procedure (hrStatus : HRESULT; const instanceName : PWideString; const uniqueDeviceName : PWideString; pUserData : pointer); stdcall;
+  TNuiSetDeviceStatusCallback = Procedure (callback : TNuiStatusProc; pUserData : pointer); stdcall;
+  TNuiGetSpeakerDevices = Function (pDeviceInfo : PNUI_SPEAKER_DEVICE; size : integer; out piDeviceCount : integer) : HRESULT; stdcall;
+
+  Procedure NuiImageResolutionToSize(res : NUI_IMAGE_RESOLUTION;out refWidth, refHeight : DWORD);
+
+
+  Function NuiDepthPixelToDepth(packedPixel: WORD) : WORD;
+  Function NuiDepthPixelToPlayerIndex(packedPixel : WORD) : WORD;
+
+Type
+  NUI_IMAGE_DIGITALZOOM = (NUI_IMAGE_DIGITAL_ZOOM_1X = 0);
+  TNUI_IMAGE_DIGITALZOOM = NUI_IMAGE_DIGITALZOOM;
+
+  TNuiImageStreamSetImageFrameFlags = Function (hStream : THANDLE; dwImageFrameFlags : DWORD) : HRESULT; stdcall;
+  TNuiImageStreamGetImageFrameFlags = Function (hStream : THANDLE; pdwImageFrameFlags : PDWORD) : HRESULT; stdcall;
+  TNuiSetFrameEndEvent = Function (hEvent : THANDLE; dwFrameEventFlag : DWORD) : HRESULT; stdcall;
+  TNuiImageStreamOpen = Function (eImageType : NUI_IMAGE_TYPE; eResolution : NUI_IMAGE_RESOLUTION; dwImageFrameFlags : DWORD; dwFrameLimit : DWORD; hNextFrameEvent : THANDLE; out phStreamHandle : THANDLE) : HRESULT; stdcall;
+  TNuiImageStreamGetNextFrame = Function (hStream : THANDLE; dwMillisecondsToWait : DWORD;out ppcImageFrame : PNUI_IMAGE_FRAME) : HRESULT; stdcall;
+  TNuiImageStreamReleaseFrame = Function (hStream : THANDLE; CONST pImageFrame : PNUI_IMAGE_FRAME) : HRESULT; stdcall;
+  TNuiImageGetColorPixelCoordinatesFromDepthPixel = Function (eColorResolution : NUI_IMAGE_RESOLUTION;CONST pcViewArea : PNUI_IMAGE_VIEW_AREA;lDepthX : LONGINT;lDepthY : LONGINT; usDepthValue : WORD; out plColorX : LONGINT; out plColorY : LONGINT) : HRESULT; stdcall;
+  TNuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution = Function (eColorResolution : NUI_IMAGE_RESOLUTION;eDepthResolution : NUI_IMAGE_RESOLUTION;CONST pcViewArea : PNUI_IMAGE_VIEW_AREA;lDepthX : LONGINT; lDepthY : LONGINT; usDepthValue : WORD; out plColorX : LONGINT; out plColorY : LONGINT) : HRESULT; stdcall;
+  TNuiCameraElevationGetAngle = Function (out plAngleDegrees : LONGINT) : HRESULT; stdcall;
+  TNuiCameraElevationSetAngle = Function (lAngleDegrees : LONGINT) : HRESULT; stdcall;
+
+  TTrackingIDsArray = array[0..NUI_SKELETON_MAX_TRACKED_COUNT-1] of DWORD;
+  
+  TNuiSkeletonTrackingEnable = Function (hNextFrameEvent : THandle;dwFlags : DWORD) : HRESULT; stdcall;
+  TNuiSkeletonTrackingDisable = Function : HRESULT; stdcall;
+  TNuiSkeletonGetNextFrame = Function (dwMillisecondsToWait : DWORD; pSkeletonFrame : PNUI_SKELETON_FRAME) : HRESULT; stdcall;
+  TNuiSkeletonSetTrackedSkeletons = Function (TrackingIDs : TTrackingIDsArray) : HRESULT; stdcall;
+  TNuiTransformSmooth = Function (pSkeletonFrame : PNUI_SKELETON_FRAME;CONST pSmoothingParams : PNUI_TRANSFORM_SMOOTH_PARAMETERS) : HRESULT; stdcall;
+  TNuiSkeletonCalculateBoneOrientations = Function (const pSkeletonData : PNUI_SKELETON_DATA; pBoneOrientations : PNUI_SKELETON_BONE_ORIENTATION) : Integer; stdcall;
+
+// Converted macros
+
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out lDepthX : Integer;out lDepthY : Integer; out usDepthValue : word; eResolution : NUI_IMAGE_RESOLUTION); inline;overload;
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out lDepthX : Integer;out lDepthY : Integer; out usDepthValue : word); inline;overload;
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out fDepthX : single;out fDepthY : single; eResolution : NUI_IMAGE_RESOLUTION); inline;overload;
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out fDepthX : single;out fDepthY : single); inline;overload;
+Function NuiTransformDepthImageToSkeleton(lDepthX : Integer;lDepthY : Integer; usDepthValue : word; eResolution : NUI_IMAGE_RESOLUTION) : TVector4; inline;overload;
+Function NuiTransformDepthImageToSkeleton(lDepthX, lDepthY : Integer; usDepthValue : word) : TVector4; inline;overload;
+Function HasSkeletalEngine(pNuiSensor : INuiSensor) : boolean;
+
+type
+  TNuiInitialize = Function (dwFlags : DWORD) : HRESULT; stdcall;
+  TNuiShutdown = Procedure; stdcall;
+
+var
+  NuiInitialize : TNuiInitialize = nil;
+  NuiShutdown : TNuiShutdown = nil;
+  NuiGetSensorCount : TNuiGetSensorCount = nil;
+  NuiCreateSensorByIndex : TNuiCreateSensorByIndex = nil;
+  NuiCreateSensorById : TNuiCreateSensorById = nil;
+  NuiGetAudioSource : TNuiGetAudioSource = nil;
+  NuiSetDeviceStatusCallback : TNuiSetDeviceStatusCallback = nil;
+  NuiSkeletonTrackingEnable : TNuiSkeletonTrackingEnable = nil;
+  NuiSkeletonTrackingDisable : TNuiSkeletonTrackingDisable = nil;
+  NuiSkeletonGetNextFrame : TNuiSkeletonGetNextFrame = nil;
+  NuiSkeletonSetTrackedSkeletons : TNuiSkeletonSetTrackedSkeletons = nil;
+  NuiTransformSmooth : TNuiTransformSmooth = nil;
+  NuiSkeletonCalculateBoneOrientations : TNuiSkeletonCalculateBoneOrientations = nil;
+  NuiImageStreamSetImageFrameFlags : TNuiImageStreamSetImageFrameFlags = nil;
+  NuiImageStreamGetImageFrameFlags : TNuiImageStreamGetImageFrameFlags = nil;
+  NuiSetFrameEndEvent : TNuiSetFrameEndEvent = nil;
+  NuiImageStreamOpen : TNuiImageStreamOpen = nil;
+  NuiImageStreamGetNextFrame : TNuiImageStreamGetNextFrame = nil;
+  NuiImageStreamReleaseFrame : TNuiImageStreamReleaseFrame = nil;
+  NuiImageGetColorPixelCoordinatesFromDepthPixel : TNuiImageGetColorPixelCoordinatesFromDepthPixel = nil;
+  NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution : TNuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution = nil;
+  NuiCameraElevationGetAngle : TNuiCameraElevationGetAngle = nil;
+  NuiCameraElevationSetAngle : TNuiCameraElevationSetAngle = nil;
+
+Function LoadNuiLibrary(Const Filename : string = LibKinect) : Integer;
+Procedure UnloadNuiLibrary;
+
+implementation
+
+uses dynlibs;
+
+var
+  LoadedLib : String;
+  HLib : TLibHandle = NilHandle;
+  ARefCount : Integer = 0;
+
+Function LoadNuiLibrary(Const Filename : string = LibKinect) : Integer;
+begin
+  If (ARefCount>0) then
+    begin
+    If (LoadedLib<>FileName) then
+      Raise Exception.CreateFmt('NUI Library "%s" is already loaded as "%s"',[FileName,LoadedLib]);
+    Inc(ArefCount);
+    Exit;  
+    end;
+  HLib:=LoadLibrary(Filename);
+  if HLib=NilHandle then 
+    Raise Exception.CreateFmt('Failed to load NUI Library "%s"',[FileName]);
+  Pointer(NuiCameraElevationGetAngle):=GetProcAddress(HLib, 'NuiCameraElevationGetAngle');
+  Pointer(NuiCameraElevationSetAngle):=GetProcAddress(HLib, 'NuiCameraElevationSetAngle');
+  Pointer(NuiCreateSensorById):=GetProcAddress(HLib, 'NuiCreateSensorById');
+  Pointer(NuiCreateSensorByIndex):=GetProcAddress(HLib,'NuiCreateSensorByIndex');
+  Pointer(NuiGetAudioSource):=GetProcAddress(HLib, 'NuiGetAudioSource');
+  Pointer(NuiGetSensorCount):=GetProcAddress(HLib,'NuiGetSensorCount');
+  Pointer(NuiImageGetColorPixelCoordinatesFromDepthPixel):=GetProcAddress(HLib, 'NuiImageGetColorPixelCoordinatesFromDepthPixel');
+  Pointer(NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution):=GetProcAddress(HLib, 'NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution');
+  Pointer(NuiImageStreamGetImageFrameFlags):=GetProcAddress(HLib, 'NuiImageStreamGetImageFrameFlags');
+  Pointer(NuiImageStreamGetNextFrame):=GetProcAddress(HLib, 'NuiImageStreamGetNextFrame');
+  Pointer(NuiImageStreamOpen):=GetProcAddress(HLib, 'NuiImageStreamOpen');
+  Pointer(NuiImageStreamReleaseFrame):=GetProcAddress(HLib, 'NuiImageStreamReleaseFrame');
+  Pointer(NuiImageStreamSetImageFrameFlags):=GetProcAddress(HLib, 'NuiImageStreamSetImageFrameFlags');
+  Pointer(NuiInitialize):=GetProcAddress(HLib,'NuiInitialize');
+  Pointer(NuiSetDeviceStatusCallback):=GetProcAddress(HLib, 'NuiSetDeviceStatusCallback');
+  Pointer(NuiSetFrameEndEvent):=GetProcAddress(HLib, 'NuiSetFrameEndEvent');
+  Pointer(NuiShutdown):=GetProcAddress(HLib,'NuiShutdown');
+  Pointer(NuiSkeletonCalculateBoneOrientations):=GetProcAddress(HLib, 'NuiSkeletonCalculateBoneOrientations');
+  Pointer(NuiSkeletonGetNextFrame):=GetProcAddress(HLib, 'NuiSkeletonGetNextFrame');
+  Pointer(NuiSkeletonSetTrackedSkeletons):=GetProcAddress(HLib, 'NuiSkeletonSetTrackedSkeletons');
+  Pointer(NuiSkeletonTrackingDisable):=GetProcAddress(HLib, 'NuiSkeletonTrackingDisable');
+  Pointer(NuiSkeletonTrackingEnable):=GetProcAddress(HLib, 'NuiSkeletonTrackingEnable');
+  Pointer(NuiTransformSmooth):=GetProcAddress(HLib, 'NuiTransformSmooth');
+  ARefCount:=1;
+end;
+
+Procedure UnloadNuiLibrary;
+begin
+  Dec(ARefcount);
+  If ARefCount>0 then 
+    Exit;
+  NuiCameraElevationGetAngle:=nil;
+  NuiCameraElevationSetAngle:=nil;
+  NuiCreateSensorById:=nil;
+  NuiCreateSensorByIndex:=nil;
+  NuiGetAudioSource:=nil;
+  NuiGetSensorCount:=nil;
+  NuiImageGetColorPixelCoordinatesFromDepthPixel:=nil;
+  NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution:=nil;
+  NuiImageStreamGetImageFrameFlags:=nil;
+  NuiImageStreamGetNextFrame:=nil;
+  NuiImageStreamOpen:=nil;
+  NuiImageStreamReleaseFrame:=nil;
+  NuiImageStreamSetImageFrameFlags:=nil;
+  NuiInitialize:=nil;
+  NuiSetDeviceStatusCallback:=nil;
+  NuiSetFrameEndEvent:=nil;
+  NuiShutdown:=nil;
+  NuiSkeletonCalculateBoneOrientations:=nil;
+  NuiSkeletonGetNextFrame:=nil;
+  NuiSkeletonSetTrackedSkeletons:=nil;
+  NuiSkeletonTrackingDisable:=nil;
+  NuiSkeletonTrackingEnable:=nil;
+  NuiTransformSmooth:=nil;
+  FreeLibrary(HLib);
+  HLib:=NilHandle;
+end;
+
+Procedure NuiImageResolutionToSize(res : NUI_IMAGE_RESOLUTION; out refWidth, refHeight : DWORD);
+begin
+  case res of
+  NUI_IMAGE_RESOLUTION_80x60: 
+    begin
+    refWidth := 80;
+    refHeight := 60;
+    end;
+  NUI_IMAGE_RESOLUTION_320x240: 
+    begin
+    refWidth := 320;
+    refHeight := 240;
+    end;
+  NUI_IMAGE_RESOLUTION_640x480: 
+    begin
+    refWidth := 640;
+    refHeight := 480;
+    end;
+  NUI_IMAGE_RESOLUTION_1280x960: 
+    begin
+    refWidth := 1280;
+    refHeight := 960;
+    end;
+  else
+    refWidth := 0;
+    refHeight := 0;
+  end;
+end;
+
+Function NuiDepthPixelToDepth(packedPixel: WORD) : WORD;
+begin
+  Result:=packedPixel shr NUI_IMAGE_PLAYER_INDEX_SHIFT;
+end;
+
+Function NuiDepthPixelToPlayerIndex(packedPixel : WORD) : WORD;
+begin
+  Result:=packedPixel and NUI_IMAGE_PLAYER_INDEX_MASK;
+end;
+
+Function HasSkeletalEngine(pNuiSensor : INuiSensor) : boolean;
+
+begin
+  if Not assigned(pNuiSensor) then 
+    Result:=False
+  else
+    Result := ((pNuiSensor.NuiInitializationFlags() and NUI_INITIALIZE_FLAG_USES_SKELETON)<>0) or
+              ((pNuiSensor.NuiInitializationFlags() and NUI_INITIALIZE_FLAG_USES_DEPTH_AND_PLAYER_INDEX)<>0);
+end;
+
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out lDepthX : Integer;out lDepthY : Integer;out usDepthValue : word; eResolution : NUI_IMAGE_RESOLUTION);inline;
+
+var
+  w, h : DWORD;
+  
+begin
+  if (vPoint.z>FLT_EPSILON) then 
+    begin
+    NuiImageResolutionToSize(eResolution,w,h);
+    lDepthX:=round(w/2+vPoint.x*(w/320.0)*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240/vPoint.z+0.5);
+    lDepthY:=round(h/2-vPoint.y*(h/240.0)*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240/vPoint.z+0.5);
+    usDepthValue := round(vPoint.z *1000) shl 3;
+    end 
+  else 
+    begin
+    lDepthX := 0;
+    lDepthY := 0;
+    usDepthValue := 0;
+    end;
+end;
+
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out lDepthX : Integer; out lDepthY : Integer;out usDepthValue : word); inline;
+begin
+  NuiTransformSkeletonToDepthImage(vPoint,lDepthX,lDepthY,usDepthValue,NUI_IMAGE_RESOLUTION_320x240);
+end;
+
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out fDepthX : single;out fDepthY : single; eResolution : NUI_IMAGE_RESOLUTION); inline;
+
+var
+  w, h : DWORD;
+  
+begin
+  if (vPoint.z>FLT_EPSILON) then
+    begin
+    NuiImageResolutionToSize(eResolution,w,h);
+    fDepthX:=w/2+vPoint.x*(w/320.0)*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240/vPoint.z;
+    fDepthY:=h/2-vPoint.y*(h/240.0)*NUI_CAMERA_SKELETON_TO_DEPTH_IMAGE_MULTIPLIER_320x240/vPoint.z;
+    end 
+  else 
+    begin
+    fDepthX:=0.0;
+    fDepthY:=0.0;
+    end;
+end;
+
+Procedure NuiTransformSkeletonToDepthImage(vPoint : TVector4;out fDepthX : single;out fDepthY : single);
+begin
+  NuiTransformSkeletonToDepthImage(vPoint, fDepthX, fDepthY,NUI_IMAGE_RESOLUTION_320x240);
+end;
+
+Function NuiTransformDepthImageToSkeleton(lDepthX : Integer;lDepthY : Integer; usDepthValue : word;eResolution : NUI_IMAGE_RESOLUTION) : TVector4;  inline;
+
+var
+  w,h : DWORD;
+  Z : single;
+  
+begin
+  NuiImageResolutionToSize(eResolution,w,h);
+  Z:=(usDepthValue shr 3)/1000.0;
+  result.Z:=Z;
+  result.X:=(lDepthX-w/2.0)*(320.0/w)*NUI_CAMERA_DEPTH_IMAGE_TO_SKELETON_MULTIPLIER_320x240*Z;
+  result.Y:=-(lDepthY-h/2.0)*(240.0/h)*NUI_CAMERA_DEPTH_IMAGE_TO_SKELETON_MULTIPLIER_320x240*Z;
+  result.W:=1.0;
+end;
+
+Function NuiTransformDepthImageToSkeleton(lDepthX,lDepthY : Integer;usDepthValue : word) : TVector4;  inline;
+begin
+  result:=NuiTransformDepthImageToSkeleton(lDepthX,lDepthY,usDepthValue,NUI_IMAGE_RESOLUTION_320x240);
+end;
+
+end.