diff options
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h')
-rw-r--r-- | tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h new file mode 100644 index 00000000..0a641dbb --- /dev/null +++ b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h @@ -0,0 +1,127 @@ +#ifndef __XN_DUMP_WRITERS_H__ +#define __XN_DUMP_WRITERS_H__ + +//--------------------------------------------------------------------------- +// Includes +//--------------------------------------------------------------------------- +#include "XnDump.h" + +//--------------------------------------------------------------------------- +// Types +//--------------------------------------------------------------------------- +typedef struct XnDumpWriterFileHandle +{ + void* pInternal; +} XnDumpWriterFileHandle; + +typedef struct XnDumpWriter +{ + void* pCookie; + XnDumpWriterFileHandle (XN_CALLBACK_TYPE* OpenFile)(void* pCookie, const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName); + void (XN_CALLBACK_TYPE* Write)(void* pCookie, XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize); + void (XN_CALLBACK_TYPE* CloseFile)(void* pCookie, XnDumpWriterFileHandle hFile); +} XnDumpWriter; + +//--------------------------------------------------------------------------- +// Functions +//--------------------------------------------------------------------------- +XN_C_API XnStatus XN_C_DECL xnDumpRegisterWriter(XnDumpWriter* pWriter); + +XN_C_API void XN_C_DECL xnDumpUnregisterWriter(XnDumpWriter* pWriter); + +XN_C_API XnStatus XN_C_DECL xnDumpSetFilesOutput(XnBool bOn); + +//--------------------------------------------------------------------------- +// Helpers +//--------------------------------------------------------------------------- +#ifdef __cplusplus + +class XnDumpWriterBase +{ +public: + XnDumpWriterBase() : m_bRegistered(FALSE) + { + m_cObject.pCookie = this; + m_cObject.OpenFile = OpenFileCallback; + m_cObject.Write = WriteCallback; + m_cObject.CloseFile = CloseFileCallback; + } + + virtual ~XnDumpWriterBase() + { + Unregister(); + } + + XnStatus Register() + { + XnStatus nRetVal = XN_STATUS_OK; + + if (!m_bRegistered) + { + OnRegister(); + + nRetVal = xnDumpRegisterWriter(&m_cObject); + if (nRetVal != XN_STATUS_OK) + { + OnUnregister(); + return (nRetVal); + } + + m_bRegistered = TRUE; + } + + return (XN_STATUS_OK); + } + + void Unregister() + { + if (m_bRegistered) + { + xnDumpUnregisterWriter(&m_cObject); + m_bRegistered = FALSE; + + OnUnregister(); + } + } + + inline XnBool IsRegistered() { return m_bRegistered; } + + virtual XnDumpWriterFileHandle OpenFile(const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName) = 0; + virtual void Write(XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize) = 0; + virtual void CloseFile(XnDumpWriterFileHandle hFile) = 0; + + operator const XnDumpWriter*() const + { + return &m_cObject; + } + +protected: + virtual void OnRegister() {} + virtual void OnUnregister() {} + +private: + static XnDumpWriterFileHandle XN_CALLBACK_TYPE OpenFileCallback(void* pCookie, const XnChar* strDumpName, XnBool bSessionDump, const XnChar* strFileName) + { + XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie; + return pThis->OpenFile(strDumpName, bSessionDump, strFileName); + } + + static void XN_CALLBACK_TYPE WriteCallback(void* pCookie, XnDumpWriterFileHandle hFile, const void* pBuffer, XnUInt32 nBufferSize) + { + XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie; + return pThis->Write(hFile, pBuffer, nBufferSize); + } + + static void XN_CALLBACK_TYPE CloseFileCallback(void* pCookie, XnDumpWriterFileHandle hFile) + { + XnDumpWriterBase* pThis = (XnDumpWriterBase*)pCookie; + return pThis->CloseFile(hFile); + } + + XnDumpWriter m_cObject; + XnBool m_bRegistered; +}; + +#endif + +#endif // __XN_DUMP_WRITERS_H__
\ No newline at end of file |