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