123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629 |
- {
- 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.
|