Repository URL to install this package:
|
Version:
3.0.0 ▾
|
{
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.