00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __XN_MODULE_CPP_INTERFACE_H__
00023 #define __XN_MODULE_CPP_INTERFACE_H__
00024
00031
00032
00033
00034 #include "XnModuleInterface.h"
00035 #include "XnList.h"
00036 #include "XnCppWrapper.h"
00037
00038
00039
00040
00041 namespace xn
00042 {
00043 XN_DECLARE_LIST(XnModuleGetExportedInterfacePtr, ExportedNodesList);
00044
00045 class ModuleProductionNode;
00046
00047 class Module
00048 {
00049 public:
00050 Module() {}
00051 virtual ~Module() {}
00052
00053 virtual XnStatus Load() { return XN_STATUS_OK; }
00054 virtual void Unload() {}
00055
00056 inline XnStatus AddExportedNode(XnModuleGetExportedInterfacePtr pEntryPoint) { return m_ExportedNodes.AddLast(pEntryPoint); }
00057
00058 XnUInt32 GetExportedNodesCount() { return m_ExportedNodes.Size(); }
00059
00060 XnStatus GetExportedNodes(XnModuleGetExportedInterfacePtr* aEntryPoints, XnUInt32 nCount)
00061 {
00062 if (nCount < m_ExportedNodes.Size())
00063 {
00064 return XN_STATUS_OUTPUT_BUFFER_OVERFLOW;
00065 }
00066
00067 XnUInt32 i = 0;
00068 for (ExportedNodesList::ConstIterator it = m_ExportedNodes.begin();
00069 it != m_ExportedNodes.end();
00070 ++it, ++i)
00071 {
00072 aEntryPoints[i] = *it;
00073 }
00074
00075 return (XN_STATUS_OK);
00076 }
00077
00078 private:
00079 ExportedNodesList m_ExportedNodes;
00080 };
00081
00082 class ExtensionModule : public Module
00083 {
00084 public:
00085 virtual XnStatus Load()
00086 {
00087 XnStatus nRetVal = XN_STATUS_OK;
00088
00089 nRetVal = Module::Load();
00090 XN_IS_STATUS_OK(nRetVal);
00091
00092 nRetVal = RegisterNewTypes();
00093 XN_IS_STATUS_OK(nRetVal);
00094
00095 return (XN_STATUS_OK);
00096 }
00097
00098 protected:
00099 virtual XnStatus RegisterNewTypes() = 0;
00100 };
00101
00102 class ModuleExportedProductionNode
00103 {
00104 public:
00105 ModuleExportedProductionNode() {}
00106 virtual ~ModuleExportedProductionNode() {}
00107
00108 virtual void GetDescription(XnProductionNodeDescription* pDescription) = 0;
00109 virtual XnStatus EnumerateProductionTrees(Context& context, NodeInfoList& TreesList, EnumerationErrors* pErrors) = 0;
00110 virtual XnStatus Create(Context& context, const XnChar* strInstanceName, const XnChar* strCreationInfo, NodeInfoList* pNeededTrees, const XnChar* strConfigurationDir, ModuleProductionNode** ppInstance) = 0;
00111 virtual void Destroy(ModuleProductionNode* pInstance) = 0;
00112 };
00113
00114 class ModuleExtendedSerializationInterface
00115 {
00116 public:
00117 virtual ~ModuleExtendedSerializationInterface() {}
00118 virtual XnStatus NotifyExState(XnNodeNotifications* pNotifications, void* pCookie) = 0;
00119 virtual void UnregisterExNotifications() = 0;
00120 };
00121
00122 class ModuleLockAwareInterface
00123 {
00124 public:
00125 virtual ~ModuleLockAwareInterface() {}
00126 virtual XnStatus SetLockState(XnBool bLocked) = 0;
00127 virtual XnBool GetLockState() = 0;
00128 virtual XnStatus RegisterToLockChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00129 virtual void UnregisterFromLockChange(XnCallbackHandle hCallback) = 0;
00130 };
00131
00132 class ModuleErrorStateInterface
00133 {
00134 public:
00135 virtual ~ModuleErrorStateInterface() {}
00136 virtual XnStatus GetErrorState() = 0;
00137 virtual XnStatus RegisterToErrorStateChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00138 virtual void UnregisterFromErrorStateChange(XnCallbackHandle hCallback) = 0;
00139 };
00140
00141 class ModuleGeneralIntInterface
00142 {
00143 public:
00144 virtual XnStatus GetRange(const XnChar* strCap, XnInt32& nMin, XnInt32& nMax, XnInt32& nStep, XnInt32& nDefault, XnBool& bIsAutoSupported) = 0;
00145 virtual XnStatus Get(const XnChar* strCap, XnInt32& nValue) = 0;
00146 virtual XnInt32 Set(const XnChar* strCap, XnInt32 nValue) = 0;
00147 virtual XnStatus RegisterToValueChange(const XnChar* strCap, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00148 virtual void UnregisterFromValueChange(const XnChar* strCap, XnCallbackHandle hCallback) = 0;
00149 };
00150
00151 class ModuleProductionNode
00152 {
00153 public:
00154 virtual ~ModuleProductionNode() {}
00155 virtual XnBool IsCapabilitySupported(const XnChar* ) { return FALSE; }
00156 virtual XnStatus SetIntProperty(const XnChar* , XnUInt64 ) { return XN_STATUS_ERROR; }
00157 virtual XnStatus SetRealProperty(const XnChar* , XnDouble ) { return XN_STATUS_ERROR; }
00158 virtual XnStatus SetStringProperty(const XnChar* , const XnChar* ) { return XN_STATUS_ERROR; }
00159 virtual XnStatus SetGeneralProperty(const XnChar* , XnUInt32 , const void* ) { return XN_STATUS_ERROR; }
00160 virtual XnStatus GetIntProperty(const XnChar* , XnUInt64& ) const { return XN_STATUS_ERROR; }
00161 virtual XnStatus GetRealProperty(const XnChar* , XnDouble& ) const { return XN_STATUS_ERROR; }
00162 virtual XnStatus GetStringProperty(const XnChar* , XnChar* , XnUInt32 ) const { return XN_STATUS_ERROR; }
00163 virtual XnStatus GetGeneralProperty(const XnChar* , XnUInt32 , void* ) const { return XN_STATUS_ERROR; }
00164 virtual ModuleExtendedSerializationInterface* GetExtendedSerializationInterface() { return NULL; }
00165 virtual ModuleLockAwareInterface* GetLockAwareInterface() { return NULL; }
00166 virtual ModuleErrorStateInterface* GetErrorStateInterface() { return NULL; }
00167 virtual ModuleGeneralIntInterface* GetGeneralIntInterface(const XnChar* ) { return NULL; }
00168 };
00169
00170 class ModuleDeviceIdentificationInterface
00171 {
00172 public:
00173 virtual ~ModuleDeviceIdentificationInterface() {}
00174 virtual XnStatus GetDeviceName(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
00175 virtual XnStatus GetVendorSpecificData(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
00176 virtual XnStatus GetSerialNumber(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
00177 };
00178
00179 class ModuleDevice : virtual public ModuleProductionNode
00180 {
00181 public:
00182 virtual ~ModuleDevice() {}
00183 virtual ModuleDeviceIdentificationInterface* GetIdentificationInterface() { return NULL; }
00184 };
00185
00186 class ModuleMirrorInterface
00187 {
00188 public:
00189 virtual ~ModuleMirrorInterface() {}
00190 virtual XnStatus SetMirror(XnBool bMirror) = 0;
00191 virtual XnBool IsMirrored() = 0;
00192 virtual XnStatus RegisterToMirrorChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00193 virtual void UnregisterFromMirrorChange(XnCallbackHandle hCallback) = 0;
00194 };
00195
00196 class ModuleAlternativeViewPointInterface
00197 {
00198 public:
00199 virtual ~ModuleAlternativeViewPointInterface() {}
00200 virtual XnBool IsViewPointSupported(ProductionNode& other) = 0;
00201 virtual XnStatus SetViewPoint(ProductionNode& other) = 0;
00202 virtual XnBool IsViewPointAs(ProductionNode& other) = 0;
00203 virtual XnStatus ResetViewPoint() = 0;
00204 virtual XnStatus RegisterToViewPointChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00205 virtual void UnregisterFromViewPointChange(XnCallbackHandle hCallback) = 0;
00206 };
00207
00208 class ModuleFrameSyncInterface
00209 {
00210 public:
00211 virtual XnBool CanFrameSyncWith(ProductionNode& other) = 0;
00212 virtual XnStatus FrameSyncWith(ProductionNode& other) = 0;
00213 virtual XnStatus StopFrameSyncWith(ProductionNode& other) = 0;
00214 virtual XnBool IsFrameSyncedWith(ProductionNode& other) = 0;
00215 virtual XnStatus RegisterToFrameSyncChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00216 virtual void UnregisterFromFrameSyncChange(XnCallbackHandle hCallback) = 0;
00217 };
00218
00219 class ModuleGenerator : virtual public ModuleProductionNode
00220 {
00221 public:
00222 virtual ~ModuleGenerator() {}
00223 virtual XnStatus StartGenerating() = 0;
00224 virtual XnBool IsGenerating() = 0;
00225 virtual void StopGenerating() = 0;
00226 virtual XnStatus RegisterToGenerationRunningChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00227 virtual void UnregisterFromGenerationRunningChange(XnCallbackHandle hCallback) = 0;
00228 virtual XnStatus RegisterToNewDataAvailable(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00229 virtual void UnregisterFromNewDataAvailable(XnCallbackHandle hCallback) = 0;
00230 virtual XnBool IsNewDataAvailable(XnUInt64& nTimestamp) = 0;
00231 virtual XnStatus UpdateData() = 0;
00232 virtual const void* GetData() = 0;
00233 virtual XnUInt32 GetDataSize() = 0;
00234 virtual XnUInt64 GetTimestamp() = 0;
00235 virtual XnUInt32 GetFrameID() = 0;
00236 virtual ModuleMirrorInterface* GetMirrorInterface() { return NULL; }
00237 virtual ModuleAlternativeViewPointInterface* GetAlternativeViewPointInterface() { return NULL; }
00238 virtual ModuleFrameSyncInterface* GetFrameSyncInterface() { return NULL; }
00239 };
00240
00241 class ModuleNodeNotifications
00242 {
00243 public:
00244 virtual ~ModuleNodeNotifications() {}
00245 virtual XnStatus OnNodeAdded(const XnChar* strNodeName, XnProductionNodeType type, XnCodecID compression) = 0;
00246 virtual XnStatus OnNodeRemoved(const XnChar* strNodeName) = 0;
00247 virtual XnStatus OnNodeIntPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt64 nValue) = 0;
00248 virtual XnStatus OnNodeRealPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnDouble dValue) = 0;
00249 virtual XnStatus OnNodeStringPropChanged(const XnChar* strNodeName, const XnChar* strPropName, const XnChar* strValue) = 0;
00250 virtual XnStatus OnNodeStateReady(const XnChar* strNodeName) = 0;
00251 virtual XnStatus OnNodeGeneralPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer) = 0;
00252 virtual XnStatus OnNodeNewData(const XnChar* strNodeName, XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize) = 0;
00253 };
00254
00255 class ModuleRecorder :
00256 virtual public ModuleProductionNode,
00257 virtual public ModuleNodeNotifications
00258 {
00259 public:
00260 virtual ~ModuleRecorder() {}
00261 virtual XnStatus SetOutputStream(void* pCookie, XnRecorderOutputStreamInterface* pStream) = 0;
00262 };
00263
00264 class ModulePlayer : virtual public ModuleProductionNode
00265 {
00266 public:
00267 virtual ~ModulePlayer() {}
00268 virtual XnStatus SetInputStream(void* pStreamCookie, XnPlayerInputStreamInterface* pStream) = 0;
00269 virtual XnStatus ReadNext() = 0;
00270 virtual XnStatus SetNodeNotifications(void* pNodeNotificationsCookie, XnNodeNotifications* pNodeNotifications) = 0;
00271
00272 virtual XnStatus SetRepeat(XnBool bRepeat) = 0;
00273 virtual XnStatus SeekToTimeStamp(XnInt64 nTimeOffset, XnPlayerSeekOrigin origin) = 0;
00274 virtual XnStatus SeekToFrame(const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin) = 0;
00275 virtual XnStatus TellTimestamp(XnUInt64& nTimestamp) = 0;
00276 virtual XnStatus TellFrame(const XnChar* strNodeName, XnUInt32& nFrame) = 0;
00277 virtual XnUInt32 GetNumFrames(const XnChar* strNodeName, XnUInt32& nFrames) = 0;
00278 virtual const XnChar* GetSupportedFormat() = 0;
00279 virtual XnBool IsEOF() = 0;
00280 virtual XnStatus RegisterToEndOfFileReached(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00281 virtual void UnregisterFromEndOfFileReached(XnCallbackHandle hCallback) = 0;
00282 };
00283
00284 class ModuleCroppingInterface
00285 {
00286 public:
00287 virtual ~ModuleCroppingInterface() {}
00288 virtual XnStatus SetCropping(const XnCropping &Cropping) = 0;
00289 virtual XnStatus GetCropping(XnCropping &Cropping) = 0;
00290 virtual XnStatus RegisterToCroppingChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00291 virtual void UnregisterFromCroppingChange(XnCallbackHandle hCallback) = 0;
00292 };
00293
00294 class ModuleAntiFlickerInterface
00295 {
00296 public:
00297 virtual ~ModuleAntiFlickerInterface() {}
00298 virtual XnStatus SetPowerLineFrequency(XnPowerLineFrequency nFrequency) = 0;
00299 virtual XnPowerLineFrequency GetPowerLineFrequency() = 0;
00300 virtual XnStatus RegisterToPowerLineFrequencyChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00301 virtual void UnregisterFromPowerLineFrequencyChange(XnCallbackHandle hCallback) = 0;
00302 };
00303
00304 class ModuleMapGenerator : virtual public ModuleGenerator
00305 {
00306 public:
00307 virtual ~ModuleMapGenerator() {}
00308 virtual XnUInt32 GetSupportedMapOutputModesCount() = 0;
00309 virtual XnStatus GetSupportedMapOutputModes(XnMapOutputMode aModes[], XnUInt32& nCount) = 0;
00310 virtual XnStatus SetMapOutputMode(const XnMapOutputMode& Mode) = 0;
00311 virtual XnStatus GetMapOutputMode(XnMapOutputMode& Mode) = 0;
00312 virtual XnStatus RegisterToMapOutputModeChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00313 virtual void UnregisterFromMapOutputModeChange(XnCallbackHandle hCallback) = 0;
00314 virtual XnUInt32 GetBytesPerPixel() = 0;
00315 virtual ModuleCroppingInterface* GetCroppingInterface() { return NULL; }
00316 virtual ModuleAntiFlickerInterface* GetAntiFlickerInterface() { return NULL; }
00317 };
00318
00319 class ModuleUserPositionInterface
00320 {
00321 public:
00322 virtual ~ModuleUserPositionInterface() {}
00323 virtual XnUInt32 GetSupportedUserPositionsCount() = 0;
00324 virtual XnStatus SetUserPosition(XnUInt32 nIndex, const XnBoundingBox3D& Position) = 0;
00325 virtual XnStatus GetUserPosition(XnUInt32 nIndex, XnBoundingBox3D& Position) = 0;
00326 virtual XnStatus RegisterToUserPositionChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00327 virtual void UnregisterFromUserPositionChange(XnCallbackHandle hCallback) = 0;
00328 };
00329
00330 class ModuleDepthGenerator : virtual public ModuleMapGenerator
00331 {
00332 public:
00333 virtual ~ModuleDepthGenerator() {}
00334 virtual const void* GetData() { return GetDepthMap(); }
00335 virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnDepthPixel); }
00336 virtual XnDepthPixel* GetDepthMap() = 0;
00337 virtual XnDepthPixel GetDeviceMaxDepth() = 0;
00338 virtual void GetFieldOfView(XnFieldOfView& FOV) = 0;
00339 virtual XnStatus RegisterToFieldOfViewChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00340 virtual void UnregisterFromFieldOfViewChange(XnCallbackHandle hCallback) = 0;
00341 virtual ModuleUserPositionInterface* GetUserPositionInterface() { return NULL; }
00342 };
00343
00344 class ModuleImageGenerator : virtual public ModuleMapGenerator
00345 {
00346 public:
00347 virtual ~ModuleImageGenerator() {}
00348 virtual const void* GetData() { return GetImageMap(); }
00349 virtual XnUInt32 GetBytesPerPixel() { return xnGetBytesPerPixelForPixelFormat(GetPixelFormat()); }
00350 virtual XnUInt8* GetImageMap() = 0;
00351 virtual XnBool IsPixelFormatSupported(XnPixelFormat Format) = 0;
00352 virtual XnStatus SetPixelFormat(XnPixelFormat Format) = 0;
00353 virtual XnPixelFormat GetPixelFormat() = 0;
00354 virtual XnStatus RegisterToPixelFormatChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00355 virtual void UnregisterFromPixelFormatChange(XnCallbackHandle hCallback) = 0;
00356 };
00357
00358 class ModuleIRGenerator : virtual public ModuleMapGenerator
00359 {
00360 public:
00361 virtual ~ModuleIRGenerator() {}
00362 virtual const void* GetData() { return GetIRMap(); }
00363 virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnIRPixel); }
00364 virtual XnIRPixel* GetIRMap() = 0;
00365 };
00366
00367 class ModuleGestureGenerator : virtual public ModuleGenerator
00368 {
00369 public:
00370 virtual ~ModuleGestureGenerator() {}
00371 virtual const void* GetData() { return NULL; }
00372 virtual XnStatus AddGesture(const XnChar* strGesture, XnBoundingBox3D* pArea) = 0;
00373 virtual XnStatus RemoveGesture(const XnChar* strGesture) = 0;
00374 virtual XnStatus GetActiveGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
00375 virtual XnStatus GetAllActiveGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
00376 virtual XnStatus EnumerateGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
00377 virtual XnStatus EnumerateAllGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
00378 virtual XnBool IsGestureAvailable(const XnChar* strGesture) = 0;
00379 virtual XnBool IsGestureProgressSupported(const XnChar* strGesture) = 0;
00380 virtual XnStatus RegisterGestureCallbacks(XnModuleGestureRecognized RecognizedCB, XnModuleGestureProgress ProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00381 virtual void UnregisterGestureCallbacks(XnCallbackHandle hCallback) = 0;
00382 virtual XnStatus RegisterToGestureChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00383 virtual void UnregisterFromGestureChange(XnCallbackHandle hCallback) = 0;
00384
00385 virtual XnStatus RegisterToGestureIntermediateStageCompleted(XnModuleGestureIntermediateStageCompleted GestureIntermediateStageCompletedCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00386 virtual void UnregisterFromGestureIntermediateStageCompleted(XnCallbackHandle hCallback) = 0;
00387 virtual XnStatus RegisterToGestureReadyForNextIntermediateStage(XnModuleGestureReadyForNextIntermediateStage ReadyForNextIntermediateStageCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00388 virtual void UnregisterFromGestureReadyForNextIntermediateStage(XnCallbackHandle hCallback) = 0;
00389 };
00390
00391 class ModuleSceneAnalyzer : virtual public ModuleMapGenerator
00392 {
00393 public:
00394 virtual ~ModuleSceneAnalyzer() {}
00395 virtual const void* GetData() { return GetLabelMap(); }
00396 virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnLabel); }
00397 virtual const XnLabel* GetLabelMap() = 0;
00398 virtual XnStatus GetFloor(XnPlane3D& pPlane) = 0;
00399 };
00400
00401 class ModuleHandTouchingFOVEdgeInterface
00402 {
00403 public:
00404 virtual ~ModuleHandTouchingFOVEdgeInterface() {}
00405 virtual XnStatus RegisterToHandTouchingFOVEdge(XnModuleHandTouchingFOVEdge TouchingFOVEdgeCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00406 virtual void UnregisterFromHandTouchingFOVEdge(XnCallbackHandle hCallback) = 0;
00407 };
00408
00409 class ModuleHandsGenerator : virtual public ModuleGenerator
00410 {
00411 public:
00412 virtual ~ModuleHandsGenerator() {}
00413 virtual const void* GetData() { return NULL; }
00414 virtual XnStatus RegisterHandCallbacks(XnModuleHandCreate CreateCB, XnModuleHandUpdate UpdateCB, XnModuleHandDestroy DestroyCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00415 virtual void UnregisterHandCallbacks(XnCallbackHandle hCallback) = 0;
00416 virtual XnStatus StopTracking(XnUserID user) = 0;
00417 virtual XnStatus StopTrackingAll() = 0;
00418 virtual XnStatus StartTracking(const XnPoint3D& ptPosition) = 0;
00419 virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
00420
00421 virtual ModuleHandTouchingFOVEdgeInterface* GetHandTouchingFOVEdgeInterface() { return NULL; }
00422 };
00423
00424 class ModuleSkeletonInterface
00425 {
00426 public:
00427 virtual ~ModuleSkeletonInterface() {}
00428 virtual XnBool IsJointAvailable(XnSkeletonJoint eJoint) = 0;
00429 virtual XnBool IsProfileAvailable(XnSkeletonProfile eProfile) = 0;
00430 virtual XnStatus SetSkeletonProfile(XnSkeletonProfile eProfile) = 0;
00431 virtual XnStatus SetJointActive(XnSkeletonJoint eJoint, XnBool bState) = 0;
00432 virtual XnBool IsJointActive(XnSkeletonJoint eJoint) = 0;
00433 virtual XnStatus RegisterToJointConfigurationChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00434 virtual void UnregisterFromJointConfigurationChange(XnCallbackHandle hCallback) = 0;
00435 virtual XnStatus EnumerateActiveJoints(XnSkeletonJoint* pJoints, XnUInt16& nJoints) = 0;
00436 virtual XnStatus GetSkeletonJoint(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation& jointTransformation) = 0;
00437 virtual XnStatus GetSkeletonJointPosition(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition& pJointPosition) = 0;
00438 virtual XnStatus GetSkeletonJointOrientation(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation& pJointOrientation) = 0;
00439 virtual XnBool IsTracking(XnUserID user) = 0;
00440 virtual XnBool IsCalibrated(XnUserID user) = 0;
00441 virtual XnBool IsCalibrating(XnUserID user) = 0;
00442 virtual XnStatus RequestCalibration(XnUserID user, XnBool bForce) = 0;
00443 virtual XnStatus AbortCalibration(XnUserID user) = 0;
00444 virtual XnStatus SaveCalibrationDataToFile(XnUserID user, const XnChar* strFileName) = 0;
00445 virtual XnStatus LoadCalibrationDataFromFile(XnUserID user, const XnChar* strFileName) = 0;
00446 virtual XnStatus SaveCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
00447 virtual XnStatus LoadCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
00448 virtual XnStatus ClearCalibrationData(XnUInt32 nSlot) = 0;
00449 virtual XnBool IsCalibrationData(XnUInt32 nSlot) = 0;
00450 virtual XnStatus StartTracking(XnUserID user) = 0;
00451 virtual XnStatus StopTracking(XnUserID user) = 0;
00452 virtual XnStatus Reset(XnUserID user) = 0;
00453 virtual XnBool NeedPoseForCalibration() = 0;
00454 virtual XnStatus GetCalibrationPose(XnChar* strPose) = 0;
00455 virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
00456 virtual XnStatus RegisterCalibrationCallbacks(XnModuleCalibrationStart CalibrationStartCB, XnModuleCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00457 virtual void UnregisterCalibrationCallbacks(XnCallbackHandle hCallback) = 0;
00458
00459 virtual XnStatus RegisterToCalibrationInProgress(XnModuleCalibrationInProgress CalibrationInProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00460 virtual void UnregisterFromCalibrationInProgress(XnCallbackHandle hCallback) = 0;
00461 virtual XnStatus RegisterToCalibrationComplete(XnModuleCalibrationComplete CalibrationCompleteCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00462 virtual void UnregisterFromCalibrationComplete(XnCallbackHandle hCallback) = 0;
00463
00464 virtual XnStatus RegisterToCalibrationStart(XnModuleCalibrationStart handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00465 virtual void UnregisterFromCalibrationStart(XnCallbackHandle hCallback) = 0;
00466 };
00467
00468 class ModulePoseDetectionInteface
00469 {
00470 public:
00471 virtual ~ModulePoseDetectionInteface() {}
00472
00473 virtual XnUInt32 GetNumberOfPoses() = 0;
00474 virtual XnStatus GetAvailablePoses(XnChar** pstrPoses, XnUInt32& nPoses) = 0;
00475 virtual XnStatus GetAllAvailablePoses(XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32& nPoses) = 0;
00476
00477 virtual XnStatus StartPoseDetection(const XnChar* strPose, XnUserID user) = 0;
00478 virtual XnStatus StopPoseDetection(XnUserID user) = 0;
00479
00480 virtual XnStatus RegisterToPoseDetectionCallbacks(XnModulePoseDetectionCallback StartPoseCB, XnModulePoseDetectionCallback EndPoseCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00481 virtual void UnregisterFromPoseDetectionCallbacks(XnCallbackHandle hCallback) = 0;
00482
00483 virtual XnStatus RegisterToPoseDetectionInProgress(XnModulePoseDetectionInProgressCallback InProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00484 virtual void UnregisterFromPoseDetectionInProgress(XnCallbackHandle hCallback) = 0;
00485
00486 virtual XnStatus RegisterToPoseDetected(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00487 virtual XnStatus RegisterToOutOfPose(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00488 virtual void UnregisterFromPoseDetected(XnCallbackHandle hCallback) = 0;
00489 virtual void UnregisterFromOutOfPose(XnCallbackHandle hCallback) = 0;
00490 };
00491
00492 class ModuleUserGenerator : virtual public ModuleGenerator
00493 {
00494 public:
00495 virtual ~ModuleUserGenerator() {}
00496 virtual const void* GetData() { return NULL; }
00497 virtual XnUInt16 GetNumberOfUsers() = 0;
00498 virtual XnStatus GetUsers(XnUserID* pUsers, XnUInt16& nUsers) = 0;
00499 virtual XnStatus GetCoM(XnUserID user, XnPoint3D& com) = 0;
00500 virtual XnStatus GetUserPixels(XnUserID user, XnSceneMetaData *pScene) = 0;
00501 virtual XnStatus RegisterUserCallbacks(XnModuleUserHandler NewUserCB, XnModuleUserHandler LostUserCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00502 virtual void UnregisterUserCallbacks(XnCallbackHandle hCallback) = 0;
00503 virtual ModuleSkeletonInterface* GetSkeletonInterface() { return NULL; }
00504 virtual ModulePoseDetectionInteface* GetPoseDetectionInteface() {return NULL;}
00505
00506 virtual XnStatus RegisterToUserExit(XnModuleUserHandler UserExitCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00507 virtual void UnregisterFromUserExit(XnCallbackHandle hCallback) = 0;
00508 virtual XnStatus RegisterToUserReEnter(XnModuleUserHandler UserReEnterCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
00509 virtual void UnregisterFromUserReEnter(XnCallbackHandle hCallback) = 0;
00510 };
00511
00512 class ModuleAudioGenerator : virtual public ModuleGenerator
00513 {
00514 public:
00515 virtual ~ModuleAudioGenerator() {}
00516 virtual const void* GetData() { return GetAudioBuffer(); }
00517 virtual XnUChar* GetAudioBuffer() = 0;
00518 virtual XnUInt32 GetSupportedWaveOutputModesCount() = 0;
00519 virtual XnStatus GetSupportedWaveOutputModes(XnWaveOutputMode aSupportedModes[], XnUInt32& nCount) = 0;
00520 virtual XnStatus SetWaveOutputMode(const XnWaveOutputMode& OutputMode) = 0;
00521 virtual XnStatus GetWaveOutputMode(XnWaveOutputMode& OutputMode) = 0;
00522 virtual XnStatus RegisterToWaveOutputModeChanges(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
00523 virtual void UnregisterFromWaveOutputModeChanges(XnCallbackHandle hCallback) = 0;
00524 };
00525
00526 class ModuleCodec : virtual public ModuleProductionNode
00527 {
00528 public:
00529 virtual ~ModuleCodec() {}
00530 virtual XnCodecID GetCodecID() const = 0;
00531 virtual XnStatus Init(const ProductionNode& node) = 0;
00532 virtual XnStatus CompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
00533 virtual XnStatus DecompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
00534 };
00535
00536 class ModuleScriptNode : virtual public ModuleProductionNode
00537 {
00538 public:
00539 virtual ~ModuleScriptNode() {}
00540 virtual const XnChar* GetSupportedFormat() = 0;
00541 virtual XnStatus LoadScriptFromFile(const XnChar* strFileName) = 0;
00542 virtual XnStatus LoadScriptFromString(const XnChar* strScript) = 0;
00543 virtual XnStatus Run(NodeInfoList& createdNodes, EnumerationErrors& errors) = 0;
00544 };
00545 }
00546
00547 #endif // __XN_MODULE_CPP_INTERFACE_H__