OpenNI 1.3.2
XnModuleCppInterface.h
Go to the documentation of this file.
00001 /****************************************************************************
00002 *                                                                           *
00003 *  OpenNI 1.1 Alpha                                                         *
00004 *  Copyright (C) 2011 PrimeSense Ltd.                                       *
00005 *                                                                           *
00006 *  This file is part of OpenNI.                                             *
00007 *                                                                           *
00008 *  OpenNI is free software: you can redistribute it and/or modify           *
00009 *  it under the terms of the GNU Lesser General Public License as published *
00010 *  by the Free Software Foundation, either version 3 of the License, or     *
00011 *  (at your option) any later version.                                      *
00012 *                                                                           *
00013 *  OpenNI is distributed in the hope that it will be useful,                *
00014 *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00015 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the             *
00016 *  GNU Lesser General Public License for more details.                      *
00017 *                                                                           *
00018 *  You should have received a copy of the GNU Lesser General Public License *
00019 *  along with OpenNI. If not, see <http://www.gnu.org/licenses/>.           *
00020 *                                                                           *
00021 ****************************************************************************/
00022 #ifndef __XN_MODULE_CPP_INTERFACE_H__
00023 #define __XN_MODULE_CPP_INTERFACE_H__
00024 
00031 //---------------------------------------------------------------------------
00032 // Includes
00033 //---------------------------------------------------------------------------
00034 #include "XnModuleInterface.h"
00035 #include "XnList.h"
00036 #include "XnCppWrapper.h"
00037 
00038 //---------------------------------------------------------------------------
00039 // Types
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* /*strCapabilityName*/) { return FALSE; }
00156         virtual XnStatus SetIntProperty(const XnChar* /*strName*/, XnUInt64 /*nValue*/) { return XN_STATUS_ERROR; }
00157         virtual XnStatus SetRealProperty(const XnChar* /*strName*/, XnDouble /*dValue*/) { return XN_STATUS_ERROR; }
00158         virtual XnStatus SetStringProperty(const XnChar* /*strName*/, const XnChar* /*strValue*/) { return XN_STATUS_ERROR; }
00159         virtual XnStatus SetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, const void* /*pBuffer*/) { return XN_STATUS_ERROR; }
00160         virtual XnStatus GetIntProperty(const XnChar* /*strName*/, XnUInt64& /*nValue*/) const { return XN_STATUS_ERROR; }
00161         virtual XnStatus GetRealProperty(const XnChar* /*strName*/, XnDouble& /*dValue*/) const { return XN_STATUS_ERROR; }
00162         virtual XnStatus GetStringProperty(const XnChar* /*strName*/, XnChar* /*csValue*/, XnUInt32 /*nBufSize*/) const { return XN_STATUS_ERROR; }
00163         virtual XnStatus GetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, void* /*pBuffer*/) 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* /*strCap*/) { 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__