OpenNI 1.3.2
XnModuleCppInterface.h
Go to the documentation of this file.
1 /****************************************************************************
2 * *
3 * OpenNI 1.1 Alpha *
4 * Copyright (C) 2011 PrimeSense Ltd. *
5 * *
6 * This file is part of OpenNI. *
7 * *
8 * OpenNI is free software: you can redistribute it and/or modify *
9 * it under the terms of the GNU Lesser General Public License as published *
10 * by the Free Software Foundation, either version 3 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * OpenNI is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
20 * *
21 ****************************************************************************/
22 #ifndef __XN_MODULE_CPP_INTERFACE_H__
23 #define __XN_MODULE_CPP_INTERFACE_H__
24 
31 //---------------------------------------------------------------------------
32 // Includes
33 //---------------------------------------------------------------------------
34 #include "XnModuleInterface.h"
35 #include "XnList.h"
36 #include "XnCppWrapper.h"
37 
38 //---------------------------------------------------------------------------
39 // Types
40 //---------------------------------------------------------------------------
41 namespace xn
42 {
44 
45  class ModuleProductionNode;
46 
47  class Module
48  {
49  public:
50  Module() {}
51  virtual ~Module() {}
52 
53  virtual XnStatus Load() { return XN_STATUS_OK; }
54  virtual void Unload() {}
55 
56  inline XnStatus AddExportedNode(XnModuleGetExportedInterfacePtr pEntryPoint) { return m_ExportedNodes.AddLast(pEntryPoint); }
57 
58  XnUInt32 GetExportedNodesCount() { return m_ExportedNodes.Size(); }
59 
61  {
62  if (nCount < m_ExportedNodes.Size())
63  {
64  return XN_STATUS_OUTPUT_BUFFER_OVERFLOW;
65  }
66 
67  XnUInt32 i = 0;
68  for (ExportedNodesList::ConstIterator it = m_ExportedNodes.begin();
69  it != m_ExportedNodes.end();
70  ++it, ++i)
71  {
72  aEntryPoints[i] = *it;
73  }
74 
75  return (XN_STATUS_OK);
76  }
77 
78  private:
79  ExportedNodesList m_ExportedNodes;
80  };
81 
82  class ExtensionModule : public Module
83  {
84  public:
85  virtual XnStatus Load()
86  {
87  XnStatus nRetVal = XN_STATUS_OK;
88 
89  nRetVal = Module::Load();
90  XN_IS_STATUS_OK(nRetVal);
91 
92  nRetVal = RegisterNewTypes();
93  XN_IS_STATUS_OK(nRetVal);
94 
95  return (XN_STATUS_OK);
96  }
97 
98  protected:
99  virtual XnStatus RegisterNewTypes() = 0;
100  };
101 
103  {
104  public:
107 
108  virtual void GetDescription(XnProductionNodeDescription* pDescription) = 0;
109  virtual XnStatus EnumerateProductionTrees(Context& context, NodeInfoList& TreesList, EnumerationErrors* pErrors) = 0;
110  virtual XnStatus Create(Context& context, const XnChar* strInstanceName, const XnChar* strCreationInfo, NodeInfoList* pNeededTrees, const XnChar* strConfigurationDir, ModuleProductionNode** ppInstance) = 0;
111  virtual void Destroy(ModuleProductionNode* pInstance) = 0;
112  };
113 
115  {
116  public:
118  virtual XnStatus NotifyExState(XnNodeNotifications* pNotifications, void* pCookie) = 0;
119  virtual void UnregisterExNotifications() = 0;
120  };
121 
123  {
124  public:
126  virtual XnStatus SetLockState(XnBool bLocked) = 0;
127  virtual XnBool GetLockState() = 0;
128  virtual XnStatus RegisterToLockChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
129  virtual void UnregisterFromLockChange(XnCallbackHandle hCallback) = 0;
130  };
131 
133  {
134  public:
136  virtual XnStatus GetErrorState() = 0;
137  virtual XnStatus RegisterToErrorStateChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
138  virtual void UnregisterFromErrorStateChange(XnCallbackHandle hCallback) = 0;
139  };
140 
142  {
143  public:
144  virtual XnStatus GetRange(const XnChar* strCap, XnInt32& nMin, XnInt32& nMax, XnInt32& nStep, XnInt32& nDefault, XnBool& bIsAutoSupported) = 0;
145  virtual XnStatus Get(const XnChar* strCap, XnInt32& nValue) = 0;
146  virtual XnInt32 Set(const XnChar* strCap, XnInt32 nValue) = 0;
147  virtual XnStatus RegisterToValueChange(const XnChar* strCap, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
148  virtual void UnregisterFromValueChange(const XnChar* strCap, XnCallbackHandle hCallback) = 0;
149  };
150 
152  {
153  public:
155  virtual XnBool IsCapabilitySupported(const XnChar* /*strCapabilityName*/) { return FALSE; }
156  virtual XnStatus SetIntProperty(const XnChar* /*strName*/, XnUInt64 /*nValue*/) { return XN_STATUS_ERROR; }
157  virtual XnStatus SetRealProperty(const XnChar* /*strName*/, XnDouble /*dValue*/) { return XN_STATUS_ERROR; }
158  virtual XnStatus SetStringProperty(const XnChar* /*strName*/, const XnChar* /*strValue*/) { return XN_STATUS_ERROR; }
159  virtual XnStatus SetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, const void* /*pBuffer*/) { return XN_STATUS_ERROR; }
160  virtual XnStatus GetIntProperty(const XnChar* /*strName*/, XnUInt64& /*nValue*/) const { return XN_STATUS_ERROR; }
161  virtual XnStatus GetRealProperty(const XnChar* /*strName*/, XnDouble& /*dValue*/) const { return XN_STATUS_ERROR; }
162  virtual XnStatus GetStringProperty(const XnChar* /*strName*/, XnChar* /*csValue*/, XnUInt32 /*nBufSize*/) const { return XN_STATUS_ERROR; }
163  virtual XnStatus GetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, void* /*pBuffer*/) const { return XN_STATUS_ERROR; }
167  virtual ModuleGeneralIntInterface* GetGeneralIntInterface(const XnChar* /*strCap*/) { return NULL; }
168  };
169 
171  {
172  public:
174  virtual XnStatus GetDeviceName(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
175  virtual XnStatus GetVendorSpecificData(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
176  virtual XnStatus GetSerialNumber(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
177  };
178 
179  class ModuleDevice : virtual public ModuleProductionNode
180  {
181  public:
182  virtual ~ModuleDevice() {}
184  };
185 
187  {
188  public:
190  virtual XnStatus SetMirror(XnBool bMirror) = 0;
191  virtual XnBool IsMirrored() = 0;
192  virtual XnStatus RegisterToMirrorChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
193  virtual void UnregisterFromMirrorChange(XnCallbackHandle hCallback) = 0;
194  };
195 
197  {
198  public:
200  virtual XnBool IsViewPointSupported(ProductionNode& other) = 0;
201  virtual XnStatus SetViewPoint(ProductionNode& other) = 0;
202  virtual XnBool IsViewPointAs(ProductionNode& other) = 0;
203  virtual XnStatus ResetViewPoint() = 0;
204  virtual XnStatus RegisterToViewPointChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
205  virtual void UnregisterFromViewPointChange(XnCallbackHandle hCallback) = 0;
206  };
207 
209  {
210  public:
211  virtual XnBool CanFrameSyncWith(ProductionNode& other) = 0;
212  virtual XnStatus FrameSyncWith(ProductionNode& other) = 0;
213  virtual XnStatus StopFrameSyncWith(ProductionNode& other) = 0;
214  virtual XnBool IsFrameSyncedWith(ProductionNode& other) = 0;
215  virtual XnStatus RegisterToFrameSyncChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
216  virtual void UnregisterFromFrameSyncChange(XnCallbackHandle hCallback) = 0;
217  };
218 
219  class ModuleGenerator : virtual public ModuleProductionNode
220  {
221  public:
222  virtual ~ModuleGenerator() {}
223  virtual XnStatus StartGenerating() = 0;
224  virtual XnBool IsGenerating() = 0;
225  virtual void StopGenerating() = 0;
226  virtual XnStatus RegisterToGenerationRunningChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
227  virtual void UnregisterFromGenerationRunningChange(XnCallbackHandle hCallback) = 0;
228  virtual XnStatus RegisterToNewDataAvailable(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
229  virtual void UnregisterFromNewDataAvailable(XnCallbackHandle hCallback) = 0;
230  virtual XnBool IsNewDataAvailable(XnUInt64& nTimestamp) = 0;
231  virtual XnStatus UpdateData() = 0;
232  virtual const void* GetData() = 0;
233  virtual XnUInt32 GetDataSize() = 0;
234  virtual XnUInt64 GetTimestamp() = 0;
235  virtual XnUInt32 GetFrameID() = 0;
236  virtual ModuleMirrorInterface* GetMirrorInterface() { return NULL; }
239  };
240 
242  {
243  public:
245  virtual XnStatus OnNodeAdded(const XnChar* strNodeName, XnProductionNodeType type, XnCodecID compression) = 0;
246  virtual XnStatus OnNodeRemoved(const XnChar* strNodeName) = 0;
247  virtual XnStatus OnNodeIntPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt64 nValue) = 0;
248  virtual XnStatus OnNodeRealPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnDouble dValue) = 0;
249  virtual XnStatus OnNodeStringPropChanged(const XnChar* strNodeName, const XnChar* strPropName, const XnChar* strValue) = 0;
250  virtual XnStatus OnNodeStateReady(const XnChar* strNodeName) = 0;
251  virtual XnStatus OnNodeGeneralPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer) = 0;
252  virtual XnStatus OnNodeNewData(const XnChar* strNodeName, XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize) = 0;
253  };
254 
255  class ModuleRecorder :
256  virtual public ModuleProductionNode,
257  virtual public ModuleNodeNotifications
258  {
259  public:
260  virtual ~ModuleRecorder() {}
261  virtual XnStatus SetOutputStream(void* pCookie, XnRecorderOutputStreamInterface* pStream) = 0;
262  };
263 
264  class ModulePlayer : virtual public ModuleProductionNode
265  {
266  public:
267  virtual ~ModulePlayer() {}
268  virtual XnStatus SetInputStream(void* pStreamCookie, XnPlayerInputStreamInterface* pStream) = 0;
269  virtual XnStatus ReadNext() = 0;
270  virtual XnStatus SetNodeNotifications(void* pNodeNotificationsCookie, XnNodeNotifications* pNodeNotifications) = 0;
271 
272  virtual XnStatus SetRepeat(XnBool bRepeat) = 0;
273  virtual XnStatus SeekToTimeStamp(XnInt64 nTimeOffset, XnPlayerSeekOrigin origin) = 0;
274  virtual XnStatus SeekToFrame(const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin) = 0;
275  virtual XnStatus TellTimestamp(XnUInt64& nTimestamp) = 0;
276  virtual XnStatus TellFrame(const XnChar* strNodeName, XnUInt32& nFrame) = 0;
277  virtual XnUInt32 GetNumFrames(const XnChar* strNodeName, XnUInt32& nFrames) = 0;
278  virtual const XnChar* GetSupportedFormat() = 0;
279  virtual XnBool IsEOF() = 0;
280  virtual XnStatus RegisterToEndOfFileReached(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
281  virtual void UnregisterFromEndOfFileReached(XnCallbackHandle hCallback) = 0;
282  };
283 
285  {
286  public:
288  virtual XnStatus SetCropping(const XnCropping &Cropping) = 0;
289  virtual XnStatus GetCropping(XnCropping &Cropping) = 0;
290  virtual XnStatus RegisterToCroppingChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
291  virtual void UnregisterFromCroppingChange(XnCallbackHandle hCallback) = 0;
292  };
293 
295  {
296  public:
298  virtual XnStatus SetPowerLineFrequency(XnPowerLineFrequency nFrequency) = 0;
300  virtual XnStatus RegisterToPowerLineFrequencyChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
301  virtual void UnregisterFromPowerLineFrequencyChange(XnCallbackHandle hCallback) = 0;
302  };
303 
304  class ModuleMapGenerator : virtual public ModuleGenerator
305  {
306  public:
307  virtual ~ModuleMapGenerator() {}
308  virtual XnUInt32 GetSupportedMapOutputModesCount() = 0;
309  virtual XnStatus GetSupportedMapOutputModes(XnMapOutputMode aModes[], XnUInt32& nCount) = 0;
310  virtual XnStatus SetMapOutputMode(const XnMapOutputMode& Mode) = 0;
311  virtual XnStatus GetMapOutputMode(XnMapOutputMode& Mode) = 0;
312  virtual XnStatus RegisterToMapOutputModeChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
313  virtual void UnregisterFromMapOutputModeChange(XnCallbackHandle hCallback) = 0;
314  virtual XnUInt32 GetBytesPerPixel() = 0;
315  virtual ModuleCroppingInterface* GetCroppingInterface() { return NULL; }
317  };
318 
320  {
321  public:
323  virtual XnUInt32 GetSupportedUserPositionsCount() = 0;
324  virtual XnStatus SetUserPosition(XnUInt32 nIndex, const XnBoundingBox3D& Position) = 0;
325  virtual XnStatus GetUserPosition(XnUInt32 nIndex, XnBoundingBox3D& Position) = 0;
326  virtual XnStatus RegisterToUserPositionChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
327  virtual void UnregisterFromUserPositionChange(XnCallbackHandle hCallback) = 0;
328  };
329 
331  {
332  public:
334  virtual const void* GetData() { return GetDepthMap(); }
335  virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnDepthPixel); }
336  virtual XnDepthPixel* GetDepthMap() = 0;
337  virtual XnDepthPixel GetDeviceMaxDepth() = 0;
338  virtual void GetFieldOfView(XnFieldOfView& FOV) = 0;
339  virtual XnStatus RegisterToFieldOfViewChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
340  virtual void UnregisterFromFieldOfViewChange(XnCallbackHandle hCallback) = 0;
342  };
343 
345  {
346  public:
348  virtual const void* GetData() { return GetImageMap(); }
350  virtual XnUInt8* GetImageMap() = 0;
351  virtual XnBool IsPixelFormatSupported(XnPixelFormat Format) = 0;
352  virtual XnStatus SetPixelFormat(XnPixelFormat Format) = 0;
353  virtual XnPixelFormat GetPixelFormat() = 0;
354  virtual XnStatus RegisterToPixelFormatChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
355  virtual void UnregisterFromPixelFormatChange(XnCallbackHandle hCallback) = 0;
356  };
357 
358  class ModuleIRGenerator : virtual public ModuleMapGenerator
359  {
360  public:
361  virtual ~ModuleIRGenerator() {}
362  virtual const void* GetData() { return GetIRMap(); }
363  virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnIRPixel); }
364  virtual XnIRPixel* GetIRMap() = 0;
365  };
366 
368  {
369  public:
371  virtual const void* GetData() { return NULL; }
372  virtual XnStatus AddGesture(const XnChar* strGesture, XnBoundingBox3D* pArea) = 0;
373  virtual XnStatus RemoveGesture(const XnChar* strGesture) = 0;
374  virtual XnStatus GetActiveGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
375  virtual XnStatus GetAllActiveGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
376  virtual XnStatus EnumerateGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
377  virtual XnStatus EnumerateAllGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
378  virtual XnBool IsGestureAvailable(const XnChar* strGesture) = 0;
379  virtual XnBool IsGestureProgressSupported(const XnChar* strGesture) = 0;
380  virtual XnStatus RegisterGestureCallbacks(XnModuleGestureRecognized RecognizedCB, XnModuleGestureProgress ProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
381  virtual void UnregisterGestureCallbacks(XnCallbackHandle hCallback) = 0;
382  virtual XnStatus RegisterToGestureChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
383  virtual void UnregisterFromGestureChange(XnCallbackHandle hCallback) = 0;
384 
385  virtual XnStatus RegisterToGestureIntermediateStageCompleted(XnModuleGestureIntermediateStageCompleted GestureIntermediateStageCompletedCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
387  virtual XnStatus RegisterToGestureReadyForNextIntermediateStage(XnModuleGestureReadyForNextIntermediateStage ReadyForNextIntermediateStageCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
389  };
390 
392  {
393  public:
394  virtual ~ModuleSceneAnalyzer() {}
395  virtual const void* GetData() { return GetLabelMap(); }
396  virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnLabel); }
397  virtual const XnLabel* GetLabelMap() = 0;
398  virtual XnStatus GetFloor(XnPlane3D& pPlane) = 0;
399  };
400 
402  {
403  public:
405  virtual XnStatus RegisterToHandTouchingFOVEdge(XnModuleHandTouchingFOVEdge TouchingFOVEdgeCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
406  virtual void UnregisterFromHandTouchingFOVEdge(XnCallbackHandle hCallback) = 0;
407  };
408 
409  class ModuleHandsGenerator : virtual public ModuleGenerator
410  {
411  public:
413  virtual const void* GetData() { return NULL; }
414  virtual XnStatus RegisterHandCallbacks(XnModuleHandCreate CreateCB, XnModuleHandUpdate UpdateCB, XnModuleHandDestroy DestroyCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
415  virtual void UnregisterHandCallbacks(XnCallbackHandle hCallback) = 0;
416  virtual XnStatus StopTracking(XnUserID user) = 0;
417  virtual XnStatus StopTrackingAll() = 0;
418  virtual XnStatus StartTracking(const XnPoint3D& ptPosition) = 0;
419  virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
420 
422  };
423 
425  {
426  public:
428  virtual XnBool IsJointAvailable(XnSkeletonJoint eJoint) = 0;
429  virtual XnBool IsProfileAvailable(XnSkeletonProfile eProfile) = 0;
430  virtual XnStatus SetSkeletonProfile(XnSkeletonProfile eProfile) = 0;
431  virtual XnStatus SetJointActive(XnSkeletonJoint eJoint, XnBool bState) = 0;
432  virtual XnBool IsJointActive(XnSkeletonJoint eJoint) = 0;
433  virtual XnStatus RegisterToJointConfigurationChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
434  virtual void UnregisterFromJointConfigurationChange(XnCallbackHandle hCallback) = 0;
435  virtual XnStatus EnumerateActiveJoints(XnSkeletonJoint* pJoints, XnUInt16& nJoints) = 0;
436  virtual XnStatus GetSkeletonJoint(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation& jointTransformation) = 0;
437  virtual XnStatus GetSkeletonJointPosition(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition& pJointPosition) = 0;
438  virtual XnStatus GetSkeletonJointOrientation(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation& pJointOrientation) = 0;
439  virtual XnBool IsTracking(XnUserID user) = 0;
440  virtual XnBool IsCalibrated(XnUserID user) = 0;
441  virtual XnBool IsCalibrating(XnUserID user) = 0;
442  virtual XnStatus RequestCalibration(XnUserID user, XnBool bForce) = 0;
443  virtual XnStatus AbortCalibration(XnUserID user) = 0;
444  virtual XnStatus SaveCalibrationDataToFile(XnUserID user, const XnChar* strFileName) = 0;
445  virtual XnStatus LoadCalibrationDataFromFile(XnUserID user, const XnChar* strFileName) = 0;
446  virtual XnStatus SaveCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
447  virtual XnStatus LoadCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
448  virtual XnStatus ClearCalibrationData(XnUInt32 nSlot) = 0;
449  virtual XnBool IsCalibrationData(XnUInt32 nSlot) = 0;
450  virtual XnStatus StartTracking(XnUserID user) = 0;
451  virtual XnStatus StopTracking(XnUserID user) = 0;
452  virtual XnStatus Reset(XnUserID user) = 0;
453  virtual XnBool NeedPoseForCalibration() = 0;
454  virtual XnStatus GetCalibrationPose(XnChar* strPose) = 0;
455  virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
456  virtual XnStatus RegisterCalibrationCallbacks(XnModuleCalibrationStart CalibrationStartCB, XnModuleCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
457  virtual void UnregisterCalibrationCallbacks(XnCallbackHandle hCallback) = 0;
458 
459  virtual XnStatus RegisterToCalibrationInProgress(XnModuleCalibrationInProgress CalibrationInProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
460  virtual void UnregisterFromCalibrationInProgress(XnCallbackHandle hCallback) = 0;
461  virtual XnStatus RegisterToCalibrationComplete(XnModuleCalibrationComplete CalibrationCompleteCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
462  virtual void UnregisterFromCalibrationComplete(XnCallbackHandle hCallback) = 0;
463 
464  virtual XnStatus RegisterToCalibrationStart(XnModuleCalibrationStart handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
465  virtual void UnregisterFromCalibrationStart(XnCallbackHandle hCallback) = 0;
466  };
467 
469  {
470  public:
472 
473  virtual XnUInt32 GetNumberOfPoses() = 0;
474  virtual XnStatus GetAvailablePoses(XnChar** pstrPoses, XnUInt32& nPoses) = 0;
475  virtual XnStatus GetAllAvailablePoses(XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32& nPoses) = 0;
476 
477  virtual XnStatus StartPoseDetection(const XnChar* strPose, XnUserID user) = 0;
478  virtual XnStatus StopPoseDetection(XnUserID user) = 0;
479 
481  virtual void UnregisterFromPoseDetectionCallbacks(XnCallbackHandle hCallback) = 0;
482 
483  virtual XnStatus RegisterToPoseDetectionInProgress(XnModulePoseDetectionInProgressCallback InProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
484  virtual void UnregisterFromPoseDetectionInProgress(XnCallbackHandle hCallback) = 0;
485 
486  virtual XnStatus RegisterToPoseDetected(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
487  virtual XnStatus RegisterToOutOfPose(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
488  virtual void UnregisterFromPoseDetected(XnCallbackHandle hCallback) = 0;
489  virtual void UnregisterFromOutOfPose(XnCallbackHandle hCallback) = 0;
490  };
491 
492  class ModuleUserGenerator : virtual public ModuleGenerator
493  {
494  public:
495  virtual ~ModuleUserGenerator() {}
496  virtual const void* GetData() { return NULL; }
497  virtual XnUInt16 GetNumberOfUsers() = 0;
498  virtual XnStatus GetUsers(XnUserID* pUsers, XnUInt16& nUsers) = 0;
499  virtual XnStatus GetCoM(XnUserID user, XnPoint3D& com) = 0;
500  virtual XnStatus GetUserPixels(XnUserID user, XnSceneMetaData *pScene) = 0;
501  virtual XnStatus RegisterUserCallbacks(XnModuleUserHandler NewUserCB, XnModuleUserHandler LostUserCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
502  virtual void UnregisterUserCallbacks(XnCallbackHandle hCallback) = 0;
503  virtual ModuleSkeletonInterface* GetSkeletonInterface() { return NULL; }
505 
506  virtual XnStatus RegisterToUserExit(XnModuleUserHandler UserExitCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
507  virtual void UnregisterFromUserExit(XnCallbackHandle hCallback) = 0;
508  virtual XnStatus RegisterToUserReEnter(XnModuleUserHandler UserReEnterCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
509  virtual void UnregisterFromUserReEnter(XnCallbackHandle hCallback) = 0;
510  };
511 
512  class ModuleAudioGenerator : virtual public ModuleGenerator
513  {
514  public:
516  virtual const void* GetData() { return GetAudioBuffer(); }
517  virtual XnUChar* GetAudioBuffer() = 0;
518  virtual XnUInt32 GetSupportedWaveOutputModesCount() = 0;
519  virtual XnStatus GetSupportedWaveOutputModes(XnWaveOutputMode aSupportedModes[], XnUInt32& nCount) = 0;
520  virtual XnStatus SetWaveOutputMode(const XnWaveOutputMode& OutputMode) = 0;
521  virtual XnStatus GetWaveOutputMode(XnWaveOutputMode& OutputMode) = 0;
522  virtual XnStatus RegisterToWaveOutputModeChanges(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
523  virtual void UnregisterFromWaveOutputModeChanges(XnCallbackHandle hCallback) = 0;
524  };
525 
526  class ModuleCodec : virtual public ModuleProductionNode
527  {
528  public:
529  virtual ~ModuleCodec() {}
530  virtual XnCodecID GetCodecID() const = 0;
531  virtual XnStatus Init(const ProductionNode& node) = 0;
532  virtual XnStatus CompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
533  virtual XnStatus DecompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
534  };
535 
536  class ModuleScriptNode : virtual public ModuleProductionNode
537  {
538  public:
539  virtual ~ModuleScriptNode() {}
540  virtual const XnChar* GetSupportedFormat() = 0;
541  virtual XnStatus LoadScriptFromFile(const XnChar* strFileName) = 0;
542  virtual XnStatus LoadScriptFromString(const XnChar* strScript) = 0;
543  virtual XnStatus Run(NodeInfoList& createdNodes, EnumerationErrors& errors) = 0;
544  };
545 }
546 
547 #endif // __XN_MODULE_CPP_INTERFACE_H__