summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2016-01-11 17:08:02 +0200
committerMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2016-01-13 09:36:43 +0000
commit6e7fa62347dde5592e8c0694b2d66c3018d08ba6 (patch)
tree07826fe5943bebff55893faf0fdeb55db8a95947
parent25fa07daf70b8b00cd6832a9e180dfa517da4b8b (diff)
Remove some manual test apps
Removed - Kinectsurface - Has 3rd party code. - qmlcamera - Ugly mess and kinda pointless. - qmlmultiwindow - Test is not relevant and is buggy. - spectrum - Has 3rd party code. Change-Id: Ic28ffddf9e45f51a5320d4ebd0e2b7b373452cb7 Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com>
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/00openni_notes.txt2
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnOSARC.h166
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnPlatformARC.h194
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Android-Arm/XnPlatformAndroid-Arm.h49
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/IXnNodeAllocator.h53
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-Arm/XnPlatformLinux-Arm.h37
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnOSLinux-x86.h165
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnPlatformLinux-x86.h195
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/MacOSX/XnPlatformMacOSX.h43
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnOSWin32.h157
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnPlatformWin32.h255
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/usb100.h270
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnAlgorithms.h81
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnArray.h313
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBaseNode.h59
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBitSet.h135
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCallback.h41
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCodecIDs.h34
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnContext.h569
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCppWrapper.h10100
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicQueueT.h79
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicStackT.h80
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDataTypes.h120
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDerivedCast.h80
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDump.h202
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h127
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEnumerationErrors.h142
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEvent.h301
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEventT.h393
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnFPSCalculator.h72
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnGeneralBuffer.h119
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHash.h1014
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h668
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnInternalDefs.h27
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLicensing.h72
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnList.h749
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnListT.h556
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLog.h545
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogTypes.h80
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogWriterBase.h128
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnMacros.h128
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCFunctions.h1995
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppInterface.h605
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppRegistratration.h303
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleInterface.h1351
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNode.h76
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNodeAllocator.h46
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOS.h784
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h163
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSMemory.h47
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSStrings.h47
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOpenNI.h50
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPlatform.h124
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNode.h2614
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfo.h126
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h226
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnProfiling.h131
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPropNames.h62
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueries.h159
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueue.h198
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueueT.h63
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnScheduler.h92
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStack.h151
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStackT.h58
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatus.h110
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusCodes.h81
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusRegister.h81
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHash.h118
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h90
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h156
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h1188
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSB.h128
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSBDevice.h117
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUtils.h427
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnVersion.h58
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnOSLinux-x86.h165
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnPlatformLinux-x86.h196
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.cpp283
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.h117
-rw-r--r--tests/manual/kinectsurface/QtKinectWrapper/config.pro60
-rw-r--r--tests/manual/kinectsurface/kinectsurface.pro71
-rw-r--r--tests/manual/kinectsurface/main.cpp187
-rw-r--r--tests/manual/kinectsurface/surfacedata.cpp403
-rw-r--r--tests/manual/kinectsurface/surfacedata.h106
-rw-r--r--tests/manual/manual.pro8
-rw-r--r--tests/manual/qmlcamera/main.cpp48
-rw-r--r--tests/manual/qmlcamera/qml/qmlcamera/Axes.qml49
-rw-r--r--tests/manual/qmlcamera/qml/qmlcamera/ControlSurface.qml56
-rw-r--r--tests/manual/qmlcamera/qml/qmlcamera/Data.qml144
-rw-r--r--tests/manual/qmlcamera/qml/qmlcamera/main.qml238
-rw-r--r--tests/manual/qmlcamera/qmlcamera.pro10
-rw-r--r--tests/manual/qmlcamera/qmlcamera.qrc12
-rw-r--r--tests/manual/qmlcamera/shuttle.obj6349
-rw-r--r--tests/manual/qmlcamera/shuttle.pngbin1361 -> 0 bytes
-rw-r--r--tests/manual/qmlmultiwindow/main.cpp50
-rw-r--r--tests/manual/qmlmultiwindow/qml/qmlmultiwindow/Data.qml51
-rw-r--r--tests/manual/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml55
-rw-r--r--tests/manual/qmlmultiwindow/qml/qmlmultiwindow/main.qml263
-rw-r--r--tests/manual/qmlmultiwindow/qmlmultiwindow.pro12
-rw-r--r--tests/manual/qmlmultiwindow/qmlmultiwindow.qrc7
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/Array.h97
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/Array.hpp98
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/DynArray.h100
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/DynArray.hpp143
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsp273
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsw29
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTReal.h142
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTReal.hpp916
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.h130
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp322
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h93
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.h96
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp204
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.h101
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp229
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.h77
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.hpp62
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h101
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp91
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/OscSinCos.h106
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/OscSinCos.hpp122
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.h105
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.hpp472
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.h93
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp93
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.h94
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.hpp99
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestSpeed.h95
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestSpeed.hpp223
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h95
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp91
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/def.h60
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/fftreal.pas661
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/fftreal.pro44
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp54
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.h63
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/license.txt459
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/readme.txt242
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/test.cpp267
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/test_fnc.h53
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/test_fnc.hpp56
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/test_settings.h45
-rw-r--r--tests/manual/spectrum/3rdparty/fftreal/testapp.dpr150
-rw-r--r--tests/manual/spectrum/README.txt103
-rw-r--r--tests/manual/spectrum/spectrum.pri18
-rw-r--r--tests/manual/spectrum/spectrum.pro16
-rw-r--r--tests/manual/spectrum/spectrumapp/engine.cpp622
-rw-r--r--tests/manual/spectrum/spectrumapp/engine.h250
-rw-r--r--tests/manual/spectrum/spectrumapp/frequencyspectrum.cpp70
-rw-r--r--tests/manual/spectrum/spectrumapp/frequencyspectrum.h79
-rw-r--r--tests/manual/spectrum/spectrumapp/main.cpp212
-rw-r--r--tests/manual/spectrum/spectrumapp/soundFiles/Rockhop.wavbin1059308 -> 0 bytes
-rw-r--r--tests/manual/spectrum/spectrumapp/soundFiles/futurebells_beat.wavbin352084 -> 0 bytes
-rw-r--r--tests/manual/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wavbin1055502 -> 0 bytes
-rw-r--r--tests/manual/spectrum/spectrumapp/spectrum.h114
-rw-r--r--tests/manual/spectrum/spectrumapp/spectrum.qrc7
-rw-r--r--tests/manual/spectrum/spectrumapp/spectrumanalyser.cpp212
-rw-r--r--tests/manual/spectrum/spectrumapp/spectrumanalyser.h153
-rw-r--r--tests/manual/spectrum/spectrumapp/spectrumapp.pro73
-rw-r--r--tests/manual/spectrum/spectrumapp/utils.cpp120
-rw-r--r--tests/manual/spectrum/spectrumapp/utils.h93
-rw-r--r--tests/manual/spectrum/spectrumapp/wavfile.cpp132
-rw-r--r--tests/manual/spectrum/spectrumapp/wavfile.h47
163 files changed, 1 insertions, 49031 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/00openni_notes.txt b/tests/manual/kinectsurface/QtKinectWrapper/00openni_notes.txt
deleted file mode 100644
index 2487a1ff..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/00openni_notes.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenNI/Include: contains includes of OpenNI-1.5.4
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnOSARC.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnOSARC.h
deleted file mode 100644
index 0a183724..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnOSARC.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_OSLINUX_X86_H_
-#define _XN_OSLINUX_X86_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <sys/types.h>
-#include <stdarg.h>
-#include <time.h>
-#include <stdio.h>
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** A generic handle type. */
-typedef void* XN_HANDLE;
-
-/** A file handle type. */
-typedef FILE* XN_FILE_HANDLE;
-
-/** The value of an invalid file handle. */
-#define XN_INVALID_FILE_HANDLE NULL
-
-/** A string that specifies the current directory. */
-#define XN_FILE_LOCAL_DIR "./"
-
-/** The file directory separator. */
-#define XN_FILE_DIR_SEP "/"
-
-/** The file extension separator. */
-#define XN_FILE_EXT_SEP "."
-
-/** The file "all" wildcard. */
-#define XN_FILE_ALL_WILDCARD "*"
-
-/** The newline separation string. */
-#define XN_NEW_LINE_SEP "\n"
-
-//---------------------------------------------------------------------------
-// INI Files
-//---------------------------------------------------------------------------
-/** A string that specifies the extension of INI files. */
-#define XN_INI_FILE_EXT "ini"
-
-/** The maximum allowed INI string length (in bytes). */
-// Note: This must always be big enough to contain a 32-bit number!
-#define XN_INI_MAX_LEN 256
-
-//---------------------------------------------------------------------------
-// Shared Libraries
-//---------------------------------------------------------------------------
-/** A shared library handle type. */
-typedef void* XN_LIB_HANDLE;
-
-/** A string that specifies the prefix of shared library files. */
-#define XN_SHARED_LIBRARY_PREFIX "lib"
-
-/** A string that specifies the postfix of shared library files. */
-#define XN_SHARED_LIBRARY_POSTFIX ".so"
-
-//---------------------------------------------------------------------------
-// Threads
-//---------------------------------------------------------------------------
-/** A Xiron thread type. */
-typedef int XN_THREAD_HANDLE;
-
-/** A Xiron thread ID. */
-typedef int XN_THREAD_ID;
-
-/** A Xiron process ID. */
-typedef int XN_PROCESS_ID;
-
-/** The thread entry point function prototype. */
-typedef void* (*XN_THREAD_PROC_PROTO)(void* arg);
-
-/** The thread entry point function definition. */
-#define XN_THREAD_PROC void*
-
-/** The thread return function. */
-#define XN_THREAD_PROC_RETURN(ret) return((void*)ret)
-
-/** The thread passable data pointer type. */
-typedef void* XN_THREAD_PARAM;
-
-//---------------------------------------------------------------------------
-// Time Outs
-//---------------------------------------------------------------------------
-/** The mutex lock infinite timeout. */
-#define XN_WAIT_INFINITE 0xFFFFFFFF
-
-//---------------------------------------------------------------------------
-// Mutex
-//---------------------------------------------------------------------------
-/** A Xiron mutex type. */
-struct XnMutex;
-typedef struct XnMutex* XN_MUTEX_HANDLE;
-
-//---------------------------------------------------------------------------
-// Critical Sections
-//---------------------------------------------------------------------------
-/** A Xiron critical sections type. */
-typedef XN_MUTEX_HANDLE XN_CRITICAL_SECTION_HANDLE;
-
-//---------------------------------------------------------------------------
-// Events
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnEvent;
-typedef struct _XnEvent *XN_EVENT_HANDLE;
-
-//---------------------------------------------------------------------------
-// Semaphores
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnSemaphore;
-typedef struct _XnSemaphore *XN_SEMAPHORE_HANDLE;
-
-//---------------------------------------------------------------------------
-// Timer
-//---------------------------------------------------------------------------
-/** The Xiron OS timer structure. */
-typedef struct XnOSTimer
-{
- XnUInt64 nStartTick;
-} XnOSTimer;
-
-//---------------------------------------------------------------------------
-// Network
-//---------------------------------------------------------------------------
-/** The network host name and port separator. */
-#define XN_NETWORK_HOST_PORT_SEP ":"
-
-//---------------------------------------------------------------------------
-// Swaps
-//---------------------------------------------------------------------------
-#define XN_PREPARE_VAR16_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR32_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR64_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR_FLOAT_IN_BUFFER(var) (var)
-
-#define XN_IMPLEMENT_OS \
- printf("Not Implemented: %s at %s(%u)\n", __FUNCTION__, __FILE__, __LINE__); \
- _brk();
-
-#endif //_XN_OSLINUX_X86_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnPlatformARC.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnPlatformARC.h
deleted file mode 100644
index 01bebafe..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/ARC/XnPlatformARC.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_ARC_H_
-#define _XN_PLATFORM_ARC_H_
-
-//---------------------------------------------------------------------------
-// Prerequisites
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#define XN_PLATFORM XN_PLATFORM_ARC
-#define XN_PLATFORM_STRING "ARC"
-
-//---------------------------------------------------------------------------
-// Platform Capabilities
-//---------------------------------------------------------------------------
-#define XN_PLATFORM_ENDIAN_TYPE XN_PLATFORM_IS_LITTLE_ENDIAN
-#define XN_PLATFORM_VAARGS_TYPE XN_PLATFORM_USE_ARC_VAARGS_STYLE
-#define XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS 0
-
-//---------------------------------------------------------------------------
-// Basic Types
-//---------------------------------------------------------------------------
-/** Boolean TRUE/FALSE type. */
-typedef unsigned int XnBool;
-
-/** Signed character for strings. */
-typedef char XnChar;
-/** Unsigned character for strings. */
-typedef unsigned char XnUChar;
-
-/** Signed wide character for strings. */
-typedef wchar_t XnWChar;
-
-/** 8-bit signed integer. */
-typedef signed char XnInt8;
-/** 8-bit unsigned integer. */
-typedef unsigned char XnUInt8;
-
-/** 16-bit signed integer. */
-typedef short XnInt16;
-/** 16-bit unsigned integer. */
-typedef unsigned short XnUInt16;
-
-/** 32-bit signed integer. */
-typedef int XnInt32;
-/** 32-bit unsigned integer. */
-typedef unsigned int XnUInt32;
-
-/** 64-bit signed integer. */
-typedef long long XnInt64;
-/** 64-bit unsigned integer. */
-typedef unsigned long long XnUInt64;
-
-/** natural signed integer. */
-typedef int XnInt;
-/** natural unsigned integer. */
-typedef unsigned int XnUInt;
-
-/** Float (32bit) */
-typedef float XnFloat;
-/** Double (64bit) */
-typedef double XnDouble;
-
-/** Far procedures type (for shared libraries functions). */
-typedef void (*XnFarProc)(void *);
-
-/** Size type. */
-typedef size_t XnSizeT;
-
-/** Max unsigned 8-bit value */
-#define XN_MAX_UINT8 255
-/** Max unsigned 16-bit value */
-#define XN_MAX_UINT16 65535
-/** Max unsigned 32-bit value */
-#define XN_MAX_UINT32 4294967295UL
-/** Max unsigned 64-bit value */
-#define XN_MAX_UINT64 18446744073709551615ULL
-
-/** Min signed 8-bit value */
-#define XN_MIN_INT8 -128
-/** Min signed 16-bit value */
-#define XN_MIN_INT16 -32768
-/** Min signed 32-bit value */
-#define XN_MIN_INT32 -2147483648
-/** Min signed 64-bit value */
-#define XN_MIN_INT64 -9223372036854775808LL
-
-/** Max signed 8-bit value */
-#define XN_MAX_INT8 127
-/** Max signed 16-bit value */
-#define XN_MAX_INT16 32767
-/** Max signed 32-bit value */
-#define XN_MAX_INT32 2147483647
-/** Max signed 64-bit value */
-#define XN_MAX_INT64 9223372036854775807LL
-
-//---------------------------------------------------------------------------
-// Memory
-//---------------------------------------------------------------------------
-/** The default memory alignment. */
-#define XN_DEFAULT_MEM_ALIGN 16
-
-/** The thread static declarator (using TLS). */
-#define XN_THREAD_STATIC __declspec(thread)
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** The maximum allowed file path size (in bytes). */
-#define XN_FILE_MAX_PATH 256
-
-//---------------------------------------------------------------------------
-// Call back
-//---------------------------------------------------------------------------
-/** The std call type. */
-#define XN_STDCALL __stdcall
-
-/** The call back calling convention. */
-#define XN_CALLBACK_TYPE
-
-/** The C and C++ calling convension. */
-#define XN_C_DECL
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-/** Returns the date and time at compile time. */
-#define XN_TIMESTAMP __DATE__ " " __TIME__
-
-/** Converts n into a pre-processor string. */
-#define XN_STRINGIFY(n) XN_STRINGIFY_HELPER(n)
-#define XN_STRINGIFY_HELPER(n) #n
-
-/** Asserts an expression, only on Debug build. */
-#define XN_ASSERT(x)
-
-//---------------------------------------------------------------------------
-// API Export/Import Macros
-//---------------------------------------------------------------------------
-/** Indicates an exported shared library function. */
-#define XN_API_EXPORT
-
-/** Indicates an imported shared library function. */
-#define XN_API_IMPORT
-
-/** Indicates a deprecated function */
-#define XN_API_DEPRECATED(msg)
-
-#define XN_DEPRECATED_WARNING_IDS
-#define XN_HIDES_PARENT_METHOD_WARNING_ID
-#define XN_CONDITION_IS_CONST_WARNING_ID
-#define XN_INHERITS_VIA_DOMINANCE_WARNING_ID
-#define XN_UNALIGNED_ADDRESS_WARNING_ID
-#define XN_STRUCT_PADDED_WARNING_ID
-
-#define XN_PRAGMA_START_DISABLED_WARNING_SECTION(warnings)
-#define XN_PRAGMA_STOP_DISABLED_WARNING_SECTION
-
-/** Declares a global shared library export function. */
-#define XN_API_EXPORT_INIT()
-
-#endif //_XN_PLATFORM_ARC_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Android-Arm/XnPlatformAndroid-Arm.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Android-Arm/XnPlatformAndroid-Arm.h
deleted file mode 100644
index 948a47ea..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Android-Arm/XnPlatformAndroid-Arm.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_ANDROID_ARM_H_
-#define _XN_PLATFORM_ANDROID_ARM_H_
-
-// Start with Linux-x86, and override what's different
-#include "../Linux-x86/XnPlatformLinux-x86.h"
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#undef XN_PLATFORM
-#undef XN_PLATFORM_STRING
-
-#define XN_PLATFORM XN_PLATFORM_ANDROID_ARM
-#define XN_PLATFORM_STRING "Android-Arm"
-
-#define XN_PLATFORM_HAS_NO_TIMED_OPS
-#define XN_PLATFORM_HAS_NO_CLOCK_GETTIME
-#define XN_PLATFORM_HAS_NO_SCHED_PARAM
-#define XN_PLATFORM_HAS_BUILTIN_SEMUN
-
-#define XN_PLATFORM_LINUX_NO_GLIBC
-#define XN_PLATFORM_LINUX_NO_SYSV
-#define XN_PLATFORM_LINUX_NO_GLOB
-#define XN_PLATFORM_LINUX_NO_POSIX_MEMALIGN
-#define XN_PLATFORM_LINUX_NO_SHM
-#define XN_PLATFORM_LINUX_NO_PTHREAD_CANCEL
-
-#endif //_XN_PLATFORM_LINUX_ARM_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/IXnNodeAllocator.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/IXnNodeAllocator.h
deleted file mode 100644
index 1571e881..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/IXnNodeAllocator.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _ININODEALLOCATOR_H
-#define _ININODEALLOCATOR_H
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-class XnNode;
-
-/**
- * Node Allocator - general interface for node allocation and deallocation.
- */
-class INiNodeAllocator
-{
-public:
- virtual ~INiNodeAllocator() {}
-
- /**
- * Allocate a new XnNode
- *
- * @return NULL if allocating a new node failed
- */
- virtual XnNode *Allocate() = 0;
-
- /**
- * Release an XnNode
- *
- * @param pNode [in] The node to deallocate
- */
- virtual void Deallocate(XnNode *pNode) = 0;
-};
-
-#endif //_ININODEALLOCATOR_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-Arm/XnPlatformLinux-Arm.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-Arm/XnPlatformLinux-Arm.h
deleted file mode 100644
index 877e4e72..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-Arm/XnPlatformLinux-Arm.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_LINUX_ARM_H_
-#define _XN_PLATFORM_LINUX_ARM_H_
-
-// Start with Linux-x86, and override what's different
-#include "../Linux-x86/XnPlatformLinux-x86.h"
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#undef XN_PLATFORM
-#undef XN_PLATFORM_STRING
-#define XN_PLATFORM XN_PLATFORM_LINUX_ARM
-#define XN_PLATFORM_STRING "Linux-Arm"
-
-#endif //_XN_PLATFORM_LINUX_ARM_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnOSLinux-x86.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnOSLinux-x86.h
deleted file mode 100644
index 0cbd12fc..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnOSLinux-x86.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_OSLINUX_X86_H_
-#define _XN_OSLINUX_X86_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <sys/types.h>
-#include <stdarg.h>
-#include <time.h>
-#include <pthread.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** A generic handle type. */
-typedef void* XN_HANDLE;
-
-/** A file handle type. */
-typedef XnInt XN_FILE_HANDLE;
-
-/** The value of an invalid file handle. */
-#define XN_INVALID_FILE_HANDLE -1
-
-/** A string that specifies the current directory. */
-#define XN_FILE_LOCAL_DIR "./"
-
-/** The file directory separator. */
-#define XN_FILE_DIR_SEP "/"
-
-/** The file extension separator. */
-#define XN_FILE_EXT_SEP "."
-
-/** The file "all" wildcard. */
-#define XN_FILE_ALL_WILDCARD "*"
-
-/** The newline separation string. */
-#define XN_NEW_LINE_SEP "\n"
-
-//---------------------------------------------------------------------------
-// INI Files
-//---------------------------------------------------------------------------
-/** A string that specifies the extension of INI files. */
-#define XN_INI_FILE_EXT "ini"
-
-/** The maximum allowed INI string length (in bytes). */
-// Note: This must always be big enough to contain a 32-bit number!
-#define XN_INI_MAX_LEN 256
-
-//---------------------------------------------------------------------------
-// Shared Libraries
-//---------------------------------------------------------------------------
-/** A shared library handle type. */
-typedef void* XN_LIB_HANDLE;
-
-/** A string that specifies the prefix of shared library files. */
-#define XN_SHARED_LIBRARY_PREFIX "lib"
-
-/** A string that specifies the postfix of shared library files. */
-#define XN_SHARED_LIBRARY_POSTFIX ".so"
-
-//---------------------------------------------------------------------------
-// Threads
-//---------------------------------------------------------------------------
-/** A Xiron thread type. */
-typedef pthread_t* XN_THREAD_HANDLE;
-
-/** A Xiron thread ID. */
-typedef pthread_t XN_THREAD_ID;
-
-/** A Xiron process ID. */
-typedef pid_t XN_PROCESS_ID;
-
-/** The thread entry point function prototype. */
-typedef void* (*XN_THREAD_PROC_PROTO)(void* arg);
-
-/** The thread entry point function definition. */
-#define XN_THREAD_PROC void*
-
-/** The thread return function. */
-#define XN_THREAD_PROC_RETURN(ret) return((void*)ret)
-
-/** The thread passable data pointer type. */
-typedef void* XN_THREAD_PARAM;
-
-//---------------------------------------------------------------------------
-// Time Outs
-//---------------------------------------------------------------------------
-/** The mutex lock infinite timeout. */
-#define XN_WAIT_INFINITE 0xFFFFFFFF
-
-//---------------------------------------------------------------------------
-// Mutex
-//---------------------------------------------------------------------------
-/** A Xiron mutex type. */
-struct XnMutex;
-typedef struct XnMutex* XN_MUTEX_HANDLE;
-
-//---------------------------------------------------------------------------
-// Critical Sections
-//---------------------------------------------------------------------------
-/** A Xiron critical sections type. */
-typedef XN_MUTEX_HANDLE XN_CRITICAL_SECTION_HANDLE;
-
-//---------------------------------------------------------------------------
-// Events
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnEvent;
-typedef struct _XnEvent _XnEvent, *XN_EVENT_HANDLE ;
-
-//---------------------------------------------------------------------------
-// Semaphores
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnSemaphore;
-typedef struct _XnSemaphore *XN_SEMAPHORE_HANDLE;
-
-//---------------------------------------------------------------------------
-// Timer
-//---------------------------------------------------------------------------
-/** The Xiron OS timer structure. */
-typedef struct XnOSTimer
-{
- struct timespec tStartTime;
- XnBool bHighRes;
-} XnOSTimer;
-
-//---------------------------------------------------------------------------
-// Network
-//---------------------------------------------------------------------------
-/** The network host name and port separator. */
-#define XN_NETWORK_HOST_PORT_SEP ":"
-
-//---------------------------------------------------------------------------
-// Swaps
-//---------------------------------------------------------------------------
-#define XN_PREPARE_VAR16_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR32_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR64_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR_FLOAT_IN_BUFFER(var) (var)
-
-#endif //_XN_OSLINUX_X86_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnPlatformLinux-x86.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnPlatformLinux-x86.h
deleted file mode 100644
index 1b91a388..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Linux-x86/XnPlatformLinux-x86.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_LINUX_X86_H_
-#define _XN_PLATFORM_LINUX_X86_H_
-
-//---------------------------------------------------------------------------
-// Prerequisites
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <limits.h>
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#define XN_PLATFORM XN_PLATFORM_LINUX_X86
-#define XN_PLATFORM_STRING "Linux-x86"
-
-//---------------------------------------------------------------------------
-// Platform Capabilities
-//---------------------------------------------------------------------------
-#define XN_PLATFORM_ENDIAN_TYPE XN_PLATFORM_IS_LITTLE_ENDIAN
-#define XN_PLATFORM_VAARGS_TYPE XN_PLATFORM_USE_GCC_VAARGS_STYLE
-#define XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS 1
-
-//---------------------------------------------------------------------------
-// Basic Types
-//---------------------------------------------------------------------------
-/** Boolean TRUE/FALSE type. */
-typedef unsigned int XnBool;
-
-/** Signed character for strings. */
-typedef char XnChar;
-/** Unsigned character for strings. */
-typedef unsigned char XnUChar;
-
-/** Signed wide character for strings. */
-typedef wchar_t XnWChar;
-
-/** 8-bit signed integer. */
-typedef signed char XnInt8;
-/** 8-bit unsigned integer. */
-typedef unsigned char XnUInt8;
-
-/** 16-bit signed integer. */
-typedef short XnInt16;
-/** 16-bit unsigned integer. */
-typedef unsigned short XnUInt16;
-
-/** 32-bit signed integer. */
-typedef int XnInt32;
-/** 32-bit unsigned integer. */
-typedef unsigned int XnUInt32;
-
-/** 64-bit signed integer. */
-typedef long long XnInt64;
-/** 64-bit unsigned integer. */
-typedef unsigned long long XnUInt64;
-
-/** natural signed integer. */
-typedef int XnInt;
-/** natural unsigned integer. */
-typedef unsigned int XnUInt;
-
-/** Float (32bit) */
-typedef float XnFloat;
-/** Double (64bit) */
-typedef double XnDouble;
-
-/** Far procedures type (for shared libraries functions). */
-typedef void (*XnFarProc)(void *);
-
-/** Size type. */
-typedef size_t XnSizeT;
-
-/** Max unsigned 8-bit value */
-#define XN_MAX_UINT8 UCHAR_MAX
-/** Max unsigned 16-bit value */
-#define XN_MAX_UINT16 USHRT_MAX
-/** Max unsigned 32-bit value */
-#define XN_MAX_UINT32 UINT_MAX
-/** Max unsigned 64-bit value */
-#define XN_MAX_UINT64 ULLONG_MAX
-
-/** Min signed 8-bit value */
-#define XN_MIN_INT8 SCHAR_MIN
-/** Min signed 16-bit value */
-#define XN_MIN_INT16 SHRT_MIN
-/** Min signed 32-bit value */
-#define XN_MIN_INT32 INT_MIN
-/** Min signed 64-bit value */
-#define XN_MIN_INT64 LLONG_MIN
-
-/** Max signed 8-bit value */
-#define XN_MAX_INT8 SCHAR_MAX
-/** Max signed 16-bit value */
-#define XN_MAX_INT16 SHRT_MAX
-/** Max signed 32-bit value */
-#define XN_MAX_INT32 INT_MAX
-/** Max signed 64-bit value */
-#define XN_MAX_INT64 LLONG_MAX
-
-//---------------------------------------------------------------------------
-// Memory
-//---------------------------------------------------------------------------
-/** The default memory alignment. */
-#define XN_DEFAULT_MEM_ALIGN 16
-
-/** The thread static declarator (using TLS). */
-#define XN_THREAD_STATIC __thread
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** The maximum allowed file path size (in bytes). */
-#define XN_FILE_MAX_PATH 256
-
-//---------------------------------------------------------------------------
-// Call back
-//---------------------------------------------------------------------------
-/** The std call type. */
-#define XN_STDCALL __stdcall
-
-/** The call back calling convention. */
-#define XN_CALLBACK_TYPE
-
-/** The C and C++ calling convension. */
-#define XN_C_DECL
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-/** Returns the date and time at compile time. */
-#define XN_TIMESTAMP __DATE__ " " __TIME__
-
-/** Converts n into a pre-processor string. */
-#define XN_STRINGIFY(n) XN_STRINGIFY_HELPER(n)
-#define XN_STRINGIFY_HELPER(n) #n
-
-/** Asserts an expression, only on Debug build. */
-#define XN_ASSERT(x)
-
-//---------------------------------------------------------------------------
-// API Export/Import Macros
-//---------------------------------------------------------------------------
-/** Indicates an exported shared library function. */
-#define XN_API_EXPORT __attribute__ ((visibility("default")))
-
-/** Indicates an imported shared library function. */
-#define XN_API_IMPORT
-
-/** Indicates a deprecated function */
-#define XN_API_DEPRECATED(msg) __attribute__((warning("This function is deprecated: " msg)))
-
-#define XN_DEPRECATED_WARNING_IDS
-#define XN_HIDES_PARENT_METHOD_WARNING_ID
-#define XN_CONDITION_IS_CONST_WARNING_ID
-#define XN_INHERITS_VIA_DOMINANCE_WARNING_ID
-#define XN_UNALIGNED_ADDRESS_WARNING_ID
-#define XN_STRUCT_PADDED_WARNING_ID
-
-#define XN_PRAGMA_START_DISABLED_WARNING_SECTION(warnings)
-#define XN_PRAGMA_STOP_DISABLED_WARNING_SECTION
-
-/** Declares a global shared library export function. */
-#define XN_API_EXPORT_INIT()
-
-#endif //_XN_PLATFORM_LINUX_X86_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/MacOSX/XnPlatformMacOSX.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/MacOSX/XnPlatformMacOSX.h
deleted file mode 100644
index cb46dd7d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/MacOSX/XnPlatformMacOSX.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_MACOSX_H_
-#define _XN_PLATFORM_MACOSX_H_
-
-// Start with Linux-x86, and override what's different
-#include "../Linux-x86/XnPlatformLinux-x86.h"
-
-#include <sys/time.h>
-
-#undef XN_PLATFORM
-#undef XN_PLATFORM_STRING
-#define XN_PLATFORM XN_PLATFORM_MACOSX
-#define XN_PLATFORM_STRING "MacOSX"
-
-#define XN_PLATFORM_HAS_NO_TIMED_OPS
-#define XN_PLATFORM_HAS_NO_CLOCK_GETTIME
-#define XN_PLATFORM_HAS_NO_SCHED_PARAM
-#define XN_PLATFORM_HAS_BUILTIN_SEMUN
-
-#undef XN_THREAD_STATIC
-#define XN_THREAD_STATIC
-
-#endif //_XN_PLATFORM_MACOSX_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnOSWin32.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnOSWin32.h
deleted file mode 100644
index c821744d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnOSWin32.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_OS_WIN32_H__
-#define __XN_OS_WIN32_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnPlatform.h>
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** A generic handle type. */
-typedef HANDLE XN_HANDLE;
-
-/** A file handle type. */
-typedef HANDLE XN_FILE_HANDLE;
-
-/** The value of an invalid file handle. */
-#define XN_INVALID_FILE_HANDLE INVALID_HANDLE_VALUE
-
-/** A string that specifies the current directory. */
-#define XN_FILE_LOCAL_DIR ".\\"
-
-/** The file directory separator. */
-#define XN_FILE_DIR_SEP "\\"
-
-/** The file extension separator. */
-#define XN_FILE_EXT_SEP "."
-
-/** The file "all" wildcard. */
-#define XN_FILE_ALL_WILDCARD "*"
-
-/** The newline separation string. */
-#define XN_NEW_LINE_SEP "\r\n"
-
-//---------------------------------------------------------------------------
-// INI Files
-//---------------------------------------------------------------------------
-/** A string that specifies the extension of INI files. */
-#define XN_INI_FILE_EXT "ini"
-
-/** The maximum allowed INI string length (in bytes). */
-// Note: This must always be big enough to contain a 32-bit number!
-#define XN_INI_MAX_LEN 256
-
-//---------------------------------------------------------------------------
-// Shared Libraries
-//---------------------------------------------------------------------------
-/** A shared library handle type. */
-typedef HMODULE XN_LIB_HANDLE;
-
-/** A string that specifies the prefix of shared library files. */
-#define XN_SHARED_LIBRARY_PREFIX ""
-
-/** A string that specifies the postfix of shared library files. */
-#define XN_SHARED_LIBRARY_POSTFIX ".dll"
-
-//---------------------------------------------------------------------------
-// Threads
-//---------------------------------------------------------------------------
-/** A Xiron thread type. */
-typedef HANDLE XN_THREAD_HANDLE;
-
-/** A Xiron thread ID. */
-typedef DWORD XN_THREAD_ID;
-
-/** A Xiron process ID. */
-typedef DWORD XN_PROCESS_ID;
-
-/** The thread entry point function prototype. */
-typedef LPTHREAD_START_ROUTINE XN_THREAD_PROC_PROTO;
-
-/** The thread entry point function definition. */
-#define XN_THREAD_PROC DWORD WINAPI
-
-/** The thread return function. */
-#define XN_THREAD_PROC_RETURN(ret) return(ret)
-
-/** The thread passable data pointer type. */
-typedef LPVOID XN_THREAD_PARAM;
-
-//---------------------------------------------------------------------------
-// Time Outs
-//---------------------------------------------------------------------------
-/** The mutex lock infinite timeout. */
-#define XN_WAIT_INFINITE INFINITE
-
-//---------------------------------------------------------------------------
-// Mutex
-//---------------------------------------------------------------------------
-/** A Xiron mutex type. */
-typedef HANDLE XN_MUTEX_HANDLE;
-
-//---------------------------------------------------------------------------
-// Critical Sections
-//---------------------------------------------------------------------------
-/** A Xiron critical sections type. */
-typedef CRITICAL_SECTION* XN_CRITICAL_SECTION_HANDLE;
-
-//---------------------------------------------------------------------------
-// Events
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-typedef HANDLE XN_EVENT_HANDLE;
-
-//---------------------------------------------------------------------------
-// Semaphores
-//---------------------------------------------------------------------------
-/** A Xiron semaphore type. */
-typedef HANDLE XN_SEMAPHORE_HANDLE;
-
-//---------------------------------------------------------------------------
-// Timer
-//---------------------------------------------------------------------------
-/** The Xiron OS timer structure. */
-typedef struct XnOSTimer
-{
- XnDouble dTicksPerTimeUnit;
- LARGE_INTEGER nStartTick;
-} XnOSTimer;
-
-//---------------------------------------------------------------------------
-// Network
-//---------------------------------------------------------------------------
-/** The network host name and port separator. */
-#define XN_NETWORK_HOST_PORT_SEP ":"
-
-//---------------------------------------------------------------------------
-// Swaps
-//---------------------------------------------------------------------------
-#define XN_PREPARE_VAR16_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR32_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR64_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR_FLOAT_IN_BUFFER(var) (var)
-
-#endif //__XN_OS_WIN32_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnPlatformWin32.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnPlatformWin32.h
deleted file mode 100644
index efc26ead..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/XnPlatformWin32.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_WIN32_H_
-#define _XN_PLATFORM_WIN32_H_
-
-//---------------------------------------------------------------------------
-// Prerequisites
-//---------------------------------------------------------------------------
-#ifndef WINVER // Allow use of features specific to Windows XP or later
- #define WINVER 0x0501
-#endif
-#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later
- #define _WIN32_WINNT 0x0501
-#endif
-#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later
- #define _WIN32_WINDOWS 0x0410
-#endif
-#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later
- #define _WIN32_IE 0x0600
-#endif
-#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
-
-// Undeprecate CRT functions
-#ifndef _CRT_SECURE_NO_DEPRECATE
- #define _CRT_SECURE_NO_DEPRECATE 1
-#endif
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <windows.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <malloc.h>
-#include <io.h>
-#include <time.h>
-#include <assert.h>
-#include <float.h>
-#include <crtdbg.h>
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#define XN_PLATFORM XN_PLATFORM_WIN32
-#define XN_PLATFORM_STRING "Win32"
-
-//---------------------------------------------------------------------------
-// Platform Capabilities
-//---------------------------------------------------------------------------
-#define XN_PLATFORM_ENDIAN_TYPE XN_PLATFORM_IS_LITTLE_ENDIAN
-
-#if _MSC_VER < 1400 // Before VS2005 there was no support for the vaargs macro...
- #define XN_PLATFORM_VAARGS_TYPE XN_PLATFORM_USE_NO_VAARGS
-#else
- #define XN_PLATFORM_VAARGS_TYPE XN_PLATFORM_USE_WIN32_VAARGS_STYLE
-#endif
-
-#define XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS 1
-
-//---------------------------------------------------------------------------
-// Basic Types
-//---------------------------------------------------------------------------
-/** Boolean TRUE/FALSE type. */
-typedef BOOL XnBool;
-
-/** Signed character for strings. */
-typedef char XnChar;
-/** Unsigned character for strings. */
-typedef unsigned char XnUChar;
-
-/** Signed wide character for strings. */
-typedef wchar_t XnWChar;
-
-/** 8-bit signed integer. */
-typedef signed char XnInt8;
-/** 8-bit unsigned integer. */
-typedef unsigned char XnUInt8;
-
-/** 16-bit signed integer. */
-typedef short XnInt16;
-/** 16-bit unsigned integer. */
-typedef unsigned short XnUInt16;
-
-/** 32-bit signed integer. */
-typedef int XnInt32;
-/** 32-bit unsigned integer. */
-typedef unsigned int XnUInt32;
-
-/** 64-bit signed integer. */
-typedef __int64 XnInt64;
-/** 64-bit unsigned integer. */
-typedef unsigned __int64 XnUInt64;
-
-/** natural signed integer. */
-typedef int XnInt;
-/** natural unsigned integer. */
-typedef unsigned int XnUInt;
-
-/** Float (32bit) */
-typedef float XnFloat;
-/** Double (64bit) */
-typedef double XnDouble;
-
-/** Far procedures type (for shared libraries functions). */
-typedef FARPROC XnFarProc;
-
-/** Size type. */
-typedef size_t XnSizeT;
-
-/** Max unsigned 8-bit value */
-#define XN_MAX_UINT8 _UI8_MAX
-/** Max unsigned 16-bit value */
-#define XN_MAX_UINT16 _UI16_MAX
-/** Max unsigned 32-bit value */
-#define XN_MAX_UINT32 _UI32_MAX
-/** Max unsigned 64-bit value */
-#define XN_MAX_UINT64 _UI64_MAX
-
-/** Min signed 8-bit value */
-#define XN_MIN_INT8 _I8_MIN
-/** Min signed 16-bit value */
-#define XN_MIN_INT16 _I16_MIN
-/** Min signed 32-bit value */
-#define XN_MIN_INT32 _I32_MIN
-/** Min signed 64-bit value */
-#define XN_MIN_INT64 _I64_MIN
-
-/** Max signed 8-bit value */
-#define XN_MAX_INT8 _I8_MAX
-/** Max signed 16-bit value */
-#define XN_MAX_INT16 _I16_MAX
-/** Max signed 32-bit value */
-#define XN_MAX_INT32 _I32_MAX
-/** Max signed 64-bit value */
-#define XN_MAX_INT64 _I64_MAX
-
-/** Min double value */
-#define XN_MIN_DOUBLE DBL_MIN
-/** Max double value */
-#define XN_MAX_DOUBLE DBL_MAX
-
-//---------------------------------------------------------------------------
-// Memory
-//---------------------------------------------------------------------------
-/** The default memory alignment. */
-#define XN_DEFAULT_MEM_ALIGN 16
-
-/** The thread static declarator (using TLS). */
-#define XN_THREAD_STATIC __declspec(thread)
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** The maximum allowed file path size (in bytes). */
-#define XN_FILE_MAX_PATH MAX_PATH
-
-//---------------------------------------------------------------------------
-// Call backs
-//---------------------------------------------------------------------------
-/** The std call type. */
-#define XN_STDCALL __stdcall
-
-/** The call back calling convention. */
-#define XN_CALLBACK_TYPE XN_STDCALL
-
-/** The C and C++ calling convension. */
-#define XN_C_DECL __cdecl
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-/** Returns the date and time at compile time. */
-#define XN_TIMESTAMP __DATE__ " " __TIME__
-
-/** Converts n into a pre-processor string. */
-#define XN_STRINGIFY(n) XN_STRINGIFY_HELPER(n)
-#define XN_STRINGIFY_HELPER(n) #n
-
-/** Asserts an expression, only on Debug build. */
-#define XN_ASSERT(x) _ASSERTE(x)
-
-//---------------------------------------------------------------------------
-// API Export/Import Macros
-//---------------------------------------------------------------------------
-/** Indicates an exported shared library function. */
-#define XN_API_EXPORT __declspec(dllexport)
-
-/** Indicates an imported shared library function. */
-#define XN_API_IMPORT __declspec(dllimport)
-
-/** Indicates a deprecated function */
-#if _MSC_VER < 1400 // Before VS2005 there was no support for declspec deprecated...
- #define XN_API_DEPRECATED(msg)
-#else
- #define XN_API_DEPRECATED(msg) __declspec(deprecated(msg))
-#endif
-
-#ifdef __INTEL_COMPILER
- #define XN_DEPRECATED_WARNING_IDS 1786
- #define XN_HIDES_PARENT_METHOD_WARNING_ID 1125
- #define XN_CONDITION_IS_CONST_WARNING_ID
- #define XN_INHERITS_VIA_DOMINANCE_WARNING_ID
- #define XN_UNALIGNED_ADDRESS_WARNING_ID
- #define XN_STRUCT_PADDED_WARNING_ID
-#else
- #define XN_DEPRECATED_WARNING_IDS 4995 4996
- #define XN_HIDES_PARENT_METHOD_WARNING_ID
- #define XN_CONDITION_IS_CONST_WARNING_ID 4127
- #define XN_INHERITS_VIA_DOMINANCE_WARNING_ID 4250
- #define XN_UNALIGNED_ADDRESS_WARNING_ID 4366
- #define XN_STRUCT_PADDED_WARNING_ID 4324
-#endif
-
-#define XN_PRAGMA_START_DISABLED_WARNING_SECTION(warnings) \
- __pragma(warning(push)) \
- __pragma(warning(disable: warnings))
-
-#define XN_PRAGMA_STOP_DISABLED_WARNING_SECTION \
- __pragma(warning(pop))
-
-/** Declares a global shared library export function. */
-#define XN_API_EXPORT_INIT() \
- BOOL APIENTRY DllMain (HMODULE /*hModule*/, DWORD nReasonForCall, LPVOID /*lpReserved*/) \
- { \
- switch (nReasonForCall) \
- { \
- case DLL_PROCESS_ATTACH: \
- case DLL_THREAD_ATTACH: \
- case DLL_THREAD_DETACH: \
- case DLL_PROCESS_DETACH: \
- break; \
- } \
- return TRUE; \
- }
-
-#endif //_XN_PLATFORM_WIN32_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/usb100.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/usb100.h
deleted file mode 100644
index 63c87b58..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/Win32/usb100.h
+++ /dev/null
@@ -1,270 +0,0 @@
-#ifndef __USB100_H__
-#define __USB100_H__
-
-
-#include <PSHPACK1.H>
-
-
-//bmRequest.Dir
-#define BMREQUEST_HOST_TO_DEVICE 0
-#define BMREQUEST_DEVICE_TO_HOST 1
-
-//bmRequest.Type
-#define BMREQUEST_STANDARD 0
-#define BMREQUEST_CLASS 1
-#define BMREQUEST_VENDOR 2
-
-//bmRequest.Recipient
-#define BMREQUEST_TO_DEVICE 0
-#define BMREQUEST_TO_INTERFACE 1
-#define BMREQUEST_TO_ENDPOINT 2
-#define BMREQUEST_TO_OTHER 3
-
-
-#define MAXIMUM_USB_STRING_LENGTH 255
-
-// values for the bits returned by the USB GET_STATUS command
-#define USB_GETSTATUS_SELF_POWERED 0x01
-#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02
-
-
-#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
-#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
-#define USB_STRING_DESCRIPTOR_TYPE 0x03
-#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
-#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
-
-// descriptor types defined by DWG documents
-#define USB_RESERVED_DESCRIPTOR_TYPE 0x06
-#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
-#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
-
-#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d<<8 | i))
-
-//
-// Values for bmAttributes field of an
-// endpoint descriptor
-//
-
-#define USB_ENDPOINT_TYPE_MASK 0x03
-
-#define USB_ENDPOINT_TYPE_CONTROL 0x00
-#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
-#define USB_ENDPOINT_TYPE_BULK 0x02
-#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
-
-
-//
-// definitions for bits in the bmAttributes field of a
-// configuration descriptor.
-//
-#define USB_CONFIG_POWERED_MASK 0xc0
-
-#define USB_CONFIG_BUS_POWERED 0x80
-#define USB_CONFIG_SELF_POWERED 0x40
-#define USB_CONFIG_REMOTE_WAKEUP 0x20
-
-//
-// Endpoint direction bit, stored in address
-//
-
-#define USB_ENDPOINT_DIRECTION_MASK 0x80
-
-// test direction bit in the bEndpointAddress field of
-// an endpoint descriptor.
-#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK))
-#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK)
-
-//
-// USB defined request codes
-// see chapter 9 of the USB 1.0 specifcation for
-// more information.
-//
-
-// These are the correct values based on the USB 1.0
-// specification
-
-#define USB_REQUEST_GET_STATUS 0x00
-#define USB_REQUEST_CLEAR_FEATURE 0x01
-
-#define USB_REQUEST_SET_FEATURE 0x03
-
-#define USB_REQUEST_SET_ADDRESS 0x05
-#define USB_REQUEST_GET_DESCRIPTOR 0x06
-#define USB_REQUEST_SET_DESCRIPTOR 0x07
-#define USB_REQUEST_GET_CONFIGURATION 0x08
-#define USB_REQUEST_SET_CONFIGURATION 0x09
-#define USB_REQUEST_GET_INTERFACE 0x0A
-#define USB_REQUEST_SET_INTERFACE 0x0B
-#define USB_REQUEST_SYNC_FRAME 0x0C
-
-
-//
-// defined USB device classes
-//
-
-
-#define USB_DEVICE_CLASS_RESERVED 0x00
-#define USB_DEVICE_CLASS_AUDIO 0x01
-#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02
-#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03
-#define USB_DEVICE_CLASS_MONITOR 0x04
-#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
-#define USB_DEVICE_CLASS_POWER 0x06
-#define USB_DEVICE_CLASS_PRINTER 0x07
-#define USB_DEVICE_CLASS_STORAGE 0x08
-#define USB_DEVICE_CLASS_HUB 0x09
-#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
-
-//
-// USB Core defined Feature selectors
-//
-
-#define USB_FEATURE_ENDPOINT_STALL 0x0000
-#define USB_FEATURE_REMOTE_WAKEUP 0x0001
-
-//
-// USB DWG defined Feature selectors
-//
-
-#define USB_FEATURE_INTERFACE_POWER_D0 0x0002
-#define USB_FEATURE_INTERFACE_POWER_D1 0x0003
-#define USB_FEATURE_INTERFACE_POWER_D2 0x0004
-#define USB_FEATURE_INTERFACE_POWER_D3 0x0005
-
-typedef struct _USB_DEVICE_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- USHORT bcdUSB;
- UCHAR bDeviceClass;
- UCHAR bDeviceSubClass;
- UCHAR bDeviceProtocol;
- UCHAR bMaxPacketSize0;
- USHORT idVendor;
- USHORT idProduct;
- USHORT bcdDevice;
- UCHAR iManufacturer;
- UCHAR iProduct;
- UCHAR iSerialNumber;
- UCHAR bNumConfigurations;
-} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
-
-typedef struct _USB_ENDPOINT_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- UCHAR bEndpointAddress;
- UCHAR bmAttributes;
- USHORT wMaxPacketSize;
- UCHAR bInterval;
-} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
-
-typedef struct _USB_CONFIGURATION_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- USHORT wTotalLength;
- UCHAR bNumInterfaces;
- UCHAR bConfigurationValue;
- UCHAR iConfiguration;
- UCHAR bmAttributes;
- UCHAR MaxPower;
-} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
-
-typedef struct _USB_INTERFACE_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- UCHAR bInterfaceNumber;
- UCHAR bAlternateSetting;
- UCHAR bNumEndpoints;
- UCHAR bInterfaceClass;
- UCHAR bInterfaceSubClass;
- UCHAR bInterfaceProtocol;
- UCHAR iInterface;
-} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
-
-typedef struct _USB_STRING_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- WCHAR bString[1];
-} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
-
-typedef struct _USB_COMMON_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
-} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
-
-
-//
-// Standard USB HUB definitions
-//
-// See Chapter 11 USB core specification
-//
-
-typedef struct _USB_HUB_DESCRIPTOR {
- UCHAR bDescriptorLength; // Length of this descriptor
- UCHAR bDescriptorType; // Hub configuration type
- UCHAR bNumberOfPorts; // number of ports on this hub
- USHORT wHubCharacteristics; // Hub Charateristics
- UCHAR bPowerOnToPowerGood; // port power on till power good in 2ms
- UCHAR bHubControlCurrent; // max current in mA
- //
- // room for 255 ports power control and removable bitmask
- UCHAR bRemoveAndPowerMask[64];
-} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
-
-
-//
-// Structures defined by various DWG feature documents
-//
-
-
-//
-// See DWG USB Feature Specification: Interface Power Management
-//
-
-#define USB_SUPPORT_D0_COMMAND 0x01
-#define USB_SUPPORT_D1_COMMAND 0x02
-#define USB_SUPPORT_D2_COMMAND 0x04
-#define USB_SUPPORT_D3_COMMAND 0x08
-
-#define USB_SUPPORT_D1_WAKEUP 0x10
-#define USB_SUPPORT_D2_WAKEUP 0x20
-
-
-typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- UCHAR SelfPowerConsumedD0[3];
- UCHAR bPowerSummaryId;
- UCHAR bBusPowerSavingD1;
- UCHAR bSelfPowerSavingD1;
- UCHAR bBusPowerSavingD2;
- UCHAR bSelfPowerSavingD2;
- UCHAR bBusPowerSavingD3;
- UCHAR bSelfPowerSavingD3;
- USHORT TransitionTimeFromD1;
- USHORT TransitionTimeFromD2;
- USHORT TransitionTimeFromD3;
-} USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
-
-
-typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
- UCHAR bLength;
- UCHAR bDescriptorType;
- UCHAR bmCapabilitiesFlags;
- UCHAR bBusPowerSavingD1;
- UCHAR bSelfPowerSavingD1;
- UCHAR bBusPowerSavingD2;
- UCHAR bSelfPowerSavingD2;
- UCHAR bBusPowerSavingD3;
- UCHAR bSelfPowerSavingD3;
- USHORT TransitionTimeFromD1;
- USHORT TransitionTimeFromD2;
- USHORT TransitionTimeFromD3;
-} USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;
-
-
-#include <POPPACK.H>
-
-
-#endif /* __USB100_H__ */
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnAlgorithms.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnAlgorithms.h
deleted file mode 100644
index a829bcbb..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnAlgorithms.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_ALGORITHMS_H__
-#define __XN_ALGORITHMS_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnPlatform.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-template<class T>
-XnBool DefaultComparer(const T& arg1, const T& arg2)
-{
- return arg1 < arg2;
-}
-
-class XnAlgorithms
-{
-public:
- template<class T, class Comparer>
- static void BubbleSort(T elements[], XnUInt32 nCount, Comparer comp)
- {
- XnUInt32 n = nCount;
- XnBool bSwapped;
- T temp;
-
- if (nCount == 0)
- return;
-
- do
- {
- bSwapped = FALSE;
- for (XnUInt32 i = 0; i < n - 1; ++i)
- {
- if (!comp(elements[i], elements[i+1]))
- {
- // swap
- temp = elements[i];
- elements[i] = elements[i+1];
- elements[i+1] = temp;
-
- bSwapped = TRUE;
- }
- }
-
- n -= 1;
-
- } while (bSwapped);
- }
-
- template<class T>
- static void BubbleSort(T elements[], XnUInt32 nCount)
- {
- BubbleSort(elements, nCount, DefaultComparer);
- }
-
-};
-
-#endif // __XN_ALGORITHMS_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnArray.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnArray.h
deleted file mode 100644
index d90cff0c..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnArray.h
+++ /dev/null
@@ -1,313 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XNARRAY_H__
-#define __XNARRAY_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-template <typename T>
-class XnArray
-{
-public:
- enum {BASE_SIZE = 8};
-
- /** An iterator object that allows you to iterate over members in the array. **/
- typedef T* Iterator;
-
- /** A constant iterator object that allows you to iterate over members in the array as read-only values. **/
- typedef const T* ConstIterator;
-
- /** Default constructor. Initializes the array to BASE_SIZE. **/
- XnArray(XnUInt32 nBaseSize = BASE_SIZE)
- {
- Init(nBaseSize);
- }
-
- /** Copy constructor. Initializes this array from another array of the same type. **/
- XnArray(const XnArray& other) : m_pData(NULL), m_nSize(0), m_nAllocatedSize(0)
- {
- *this = other;
- }
-
- /** Destructor. Deallocates data in this array. **/
- virtual ~XnArray()
- {
- XN_DELETE_ARR(m_pData);
- }
-
- /** Assignment operator. Copies data from another array of the same type. **/
- XnArray& operator=(const XnArray& other)
- {
- CopyFrom(other);
- return *this;
- }
-
- /** Copies data from another array of the same type. **/
- XnStatus CopyFrom(const XnArray& other)
- {
- if (this != &other)
- {
- XnStatus nRetVal = SetData(other.m_pData, other.m_nSize);
- XN_IS_STATUS_OK(nRetVal);
- }
- return XN_STATUS_OK;
- }
-
- /** Copies data from a raw buffer of the same type pointed to by pData, and sets size to nSize. **/
- XnStatus SetData(const T* pData, XnUInt32 nSize)
- {
- Clear();
- XnStatus nRetVal = SetSize(nSize);
- XN_IS_STATUS_OK(nRetVal);
- for (XnUInt32 i = 0; i < nSize; i++)
- {
- m_pData[i] = pData[i];
- }
- return XN_STATUS_OK;
- }
-
- /** @returns the raw data of this array as a read-only buffer. **/
- const T* GetData() const
- {
- return m_pData;
- }
-
- /** @returns the raw data of this array as a modifiable buffer. **/
- T* GetData()
- {
- return m_pData;
- }
-
- /** Reserves space in this array for the specified number of elements.
- This saves you re-allocations and data copies if you know the size in advance. **/
- XnStatus Reserve(XnUInt32 nReservedSize)
- {
- if (nReservedSize > m_nAllocatedSize)
- {
- //Calculate next power of 2 after nReservedSize
- nReservedSize--;
- nReservedSize = (nReservedSize >> 1) | nReservedSize;
- nReservedSize = (nReservedSize >> 2) | nReservedSize;
- nReservedSize = (nReservedSize >> 4) | nReservedSize;
- nReservedSize = (nReservedSize >> 8) | nReservedSize;
- nReservedSize = (nReservedSize >> 16) | nReservedSize;
- nReservedSize++; // nReservedSize is now the next power of 2.
-
- //Allocate new data
- T* pNewData = XN_NEW_ARR(T, nReservedSize);
- XN_VALIDATE_ALLOC_PTR(pNewData);
-
- //Copy old data into new data
- for (XnUInt32 i = 0; i < m_nSize; i++)
- {
- pNewData[i] = m_pData[i];
- }
-
- //Delete old data
- XN_DELETE_ARR(m_pData);
-
- //Point to new data
- m_pData = pNewData;
- m_nAllocatedSize = nReservedSize;
- }
- return XN_STATUS_OK;
- }
-
- /** @returns TRUE if this array is empty, FALSE otherwise. **/
- XnBool IsEmpty() const
- {
- return (m_nSize == 0);
- }
-
- /** @returns The number of elements in this array. **/
- XnUInt32 GetSize() const
- {
- return m_nSize;
- }
-
- /** Sets the size of this array to the specified number of elements.
- Note that for primitive types, the data is uninitialized. **/
- XnStatus SetSize(XnUInt32 nSize)
- {
- //TODO: Shrink allocated array if new size is smaller
- XnStatus nRetVal = SetMinSize(nSize);
- XN_IS_STATUS_OK(nRetVal);
- m_nSize = nSize;
- return XN_STATUS_OK;
- }
-
- /** Sets the size of this array to the specified number of elements, initializing all elements with the
- value specified by fillVal. **/
- XnStatus SetSize(XnUInt32 nSize, const T& fillVal)
- {
- //TODO: Shrink allocated array if new size is smaller
- XnStatus nRetVal = SetMinSize(nSize, fillVal);
- XN_IS_STATUS_OK(nRetVal);
- m_nSize = nSize;
- return XN_STATUS_OK;
- }
-
- /** Makes sure the array has at least nSize elements.
- If nSize is less than the current size, there is no effect.
- Note that for primitive types, any added elements are uninitialized. **/
- XnStatus SetMinSize(XnUInt32 nSize)
- {
- if (nSize > m_nSize)
- {
- XnStatus nRetVal = Reserve(nSize);
- XN_IS_STATUS_OK(nRetVal);
- m_nSize = nSize;
- }
- return XN_STATUS_OK;
- }
-
- /** Makes sure the array has at least nSize elements.
- If nSize is less than the current size, there is no effect.
- Any added elements are initialized by the value specified by fillVal. **/
- XnStatus SetMinSize(XnUInt32 nSize, const T& fillVal)
- {
- if (nSize > m_nSize)
- {
- XnStatus nRetVal = Reserve(nSize);
- XN_IS_STATUS_OK(nRetVal);
- for (XnUInt32 i = m_nSize; i < nSize; i++)
- {
- m_pData[i] = fillVal;
- }
- m_nSize = nSize;
- }
-
- return XN_STATUS_OK;
- }
-
- /** @returns The allocated size of this array. This is the maximum number of elements that the array can hold
- without re-allocating and copying data. **/
- XnUInt32 GetAllocatedSize() const
- {
- return m_nAllocatedSize;
- }
-
- /** Sets value at specified index, grows array if needed.
- Note that when dealing with primitive types and adding beyond the current size of the array,
- any added values that fill the gap are uninitialized**/
- XnStatus Set(XnUInt32 nIndex, const T& val)
- {
- XnStatus nRetVal = SetMinSize(nIndex+1);
- XN_IS_STATUS_OK(nRetVal);
- m_pData[nIndex] = val;
- return XN_STATUS_OK;
- }
-
- /** Sets value at specified index and grows array if needed, filling any resulting blank elements with fillVal. **/
- XnStatus Set(XnUInt32 nIndex, const T& val, const T& fillVal)
- {
- XnStatus nRetVal = SetMinSize(nIndex+1, fillVal);
- XN_IS_STATUS_OK(nRetVal);
- m_pData[nIndex] = val;
- return XN_STATUS_OK;
- }
-
- /** Adds one element to the end of this array. **/
- XnStatus AddLast(const T& val)
- {
- return Set(m_nSize, val);
- }
-
- /** Adds a range of values to the end of this array. **/
- XnStatus AddLast(const T* aValues, XnUInt32 nCount)
- {
- XN_VALIDATE_INPUT_PTR(aValues);
- XnUInt32 nOffset = GetSize();
- XnStatus nRetVal = SetMinSize(GetSize() + nCount);
- XN_IS_STATUS_OK(nRetVal);
- for (XnUInt32 i = 0; i < nCount; ++i)
- {
- m_pData[nOffset + i] = aValues[i];
- }
- return XN_STATUS_OK;
- }
-
- /** Resets the data of this array and sets its size to 0. **/
- void Clear()
- {
- XN_DELETE_ARR(m_pData);
- Init();
- }
-
- /** Element access operator. Returns a modifiable reference to the element at specified index. **/
- T& operator[](XnUInt32 nIndex)
- {
- XN_ASSERT(nIndex < m_nSize);
- return m_pData[nIndex];
- }
-
- /** Element access operator. Returns a const reference to the element at specified index. **/
- const T& operator[](XnUInt32 nIndex) const
- {
- XN_ASSERT(nIndex < m_nSize);
- return m_pData[nIndex];
- }
-
- /** @returns a modifiable iterator pointing to the beginning of this array. **/
- Iterator begin()
- {
- return &m_pData[0];
- }
-
- /** @returns a const iterator pointing to the beginning of this array. **/
- ConstIterator begin() const
- {
- return &m_pData[0];
- }
-
- /** @returns a modifiable itertor pointing to the end of this array. **/
- Iterator end()
- {
- return m_pData + m_nSize;
- }
-
- /** @returns a const itertor pointing to the end of this array. **/
- ConstIterator end() const
- {
- return m_pData + m_nSize;
- }
-
-private:
- void Init(XnUInt32 nBaseSize = BASE_SIZE)
- {
- m_pData = XN_NEW_ARR(T, nBaseSize);
- m_nAllocatedSize = nBaseSize;
- m_nSize = 0;
- }
-
- T* m_pData;
- XnUInt32 m_nSize;
- XnUInt32 m_nAllocatedSize;
-};
-
-#endif // __XNARRAY_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBaseNode.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBaseNode.h
deleted file mode 100644
index a4df6c11..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBaseNode.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _NINODEALLOC_H
-#define _NINODEALLOC_H
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnDataTypes.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
- * The base of the building block of the data types - XnBaseNode
- */
-typedef struct XnBaseNode
-{
- /** the next XnNode */
- XnBaseNode* m_pNext;
- /** the previous XnNode */
- XnBaseNode* m_pPrevious;
- /** the value of the XnNode */
- XnValue m_Data;
-} XnBaseNode;
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-/**
- * Provide an available xnBaseNode from the node pool.
- */
-XN_C_API XnBaseNode* XN_C_DECL xnAllocateBaseNode();
-
-/**
- * Release an xnBaseNode to the node pool.
- * @param pNode [in] The base node to return to the pool.
- */
-XN_C_API void XN_C_DECL xnDeallocateBaseNode(XnBaseNode* pNode);
-
-#endif //_NINODEALLOC_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBitSet.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBitSet.h
deleted file mode 100644
index 89ad6450..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnBitSet.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XNBITSET_H__
-#define __XNBITSET_H__
-
-#include <XnArray.h>
-
-class XnBitSet
-{
-public:
- XnBitSet() : m_nSize(0) {}
-
- /** Reserves space in this bitset for the specified number of bits.
- This saves you re-allocations and data copies if you know the size in advance. **/
- XnStatus Reserve(XnUInt32 nBits)
- {
- return m_array.Reserve((nBits >> 5) + 1);
- }
-
- /** Sets the size of the bitset to the specified number of bits and sets them all to 0. **/
- XnStatus SetSize(XnUInt32 nBits)
- {
- return m_array.SetSize((nBits >> 5) + 1, 0);
- }
-
- /** Sets the bit at nIndex to bValue. **/
- XnStatus Set(XnUInt32 nIndex, XnBool bValue)
- {
- XnUInt32 nArrayIndex = (nIndex >> 5);
- XnUInt32 nMask = (1 << ((~nIndex) & 0x1F));
- XnUInt32 nOldVal = nArrayIndex < m_array.GetSize() ? m_array[nArrayIndex] : 0;
- XnUInt32 nNewVal = bValue ? (nOldVal | nMask) : (nOldVal & (~nMask));
- XnStatus nRetVal = m_array.Set(nArrayIndex, nNewVal, 0);
- XN_IS_STATUS_OK(nRetVal);
- m_nSize = XN_MAX(m_nSize, nIndex + 1);
- return XN_STATUS_OK;
- }
-
- /** @returns the value of the bit specified by nIndex. **/
- XnBool IsSet(XnUInt32 nIndex) const
- {
- XnUInt32 nArrayIndex = (nIndex >> 5);
- if (nArrayIndex >= m_array.GetSize())
- {
- return FALSE;
- }
- return (m_array[nArrayIndex] & (1 << ((~nIndex) & 0x1F))) ? TRUE : FALSE;
- }
-
- /** Copies raw data from a buffer of dwords to this bitset. **/
- XnStatus SetData(const XnUInt32* pData, XnUInt32 nSizeInDwords)
- {
- XnStatus nRetVal = m_array.SetData(pData, nSizeInDwords);
- XN_IS_STATUS_OK(nRetVal);
- m_nSize = (nSizeInDwords << 5);
- return XN_STATUS_OK;
- }
-
- /** Copies raw data from a buffer of bytes to this bitset. **/
- XnStatus SetDataBytes(const XnUInt8* pData, XnUInt32 nSizeInBytes)
- {
- //XnStatus nRetVal = m_array.SetData(reinterpret_cast<const XnUInt32*>(pData), XN_MAX(1, nSizeInBytes >> 2));
- XnUInt32 nSizeInDwords = XN_MAX(1, nSizeInBytes >> 2);
- XnStatus nRetVal = m_array.SetSize(nSizeInDwords);
- XN_IS_STATUS_OK(nRetVal);
- for (XnUInt32 nDwordIdx = 0, nByteIdx = 0; nDwordIdx < nSizeInDwords; nDwordIdx++, nByteIdx += 4)
- {
- m_array[nDwordIdx] = ((pData[nByteIdx] << 24) | (pData[nByteIdx + 1] << 16) | (pData[nByteIdx + 2] << 8) | pData[nByteIdx + 3] );
- }
- m_nSize = (nSizeInBytes << 3);
- return XN_STATUS_OK;
- }
-
- /** @returns The raw data of this bitset as a buffer of dwords. **/
- const XnUInt32* GetData() const
- {
- return m_array.GetData();
- }
-
- /** @returns The raw data of this bitset as a buffer of dwords. Allows modification of underlying data. **/
- XnUInt32* GetData()
- {
- return m_array.GetData();
- }
-
- /** @returns size in bytes of this bitset. **/
- XnUInt32 GetDataSize() const
- {
- return m_array.GetSize();
- }
-
- /** @returns size in bits of this bitset. **/
- XnUInt32 GetSize() const
- {
- return m_nSize;
- }
-
- /** Clears data in this bitset and sets size to 0. **/
- void Clear()
- {
- m_array.Clear();
- m_nSize = 0;
- }
-
- /** @returns TRUE if this bitset is empty, FALSE otherwise. **/
- XnBool IsEmpty() const
- {
- return m_array.IsEmpty();
- }
-
-private:
- XnArray<XnUInt32> m_array;
- XnUInt32 m_nSize;
-};
-
-#endif // __XNBITSET_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCallback.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCallback.h
deleted file mode 100644
index 4d2418c8..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCallback.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_CALLBACK_H__
-#define __XN_CALLBACK_H__
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
-* Holds a pair of function pointer and user cookie to be used as callbacks.
-*/
-struct XnCallback
-{
- XnCallback() : pFuncPtr(NULL), pCookie(NULL) {}
- XnCallback(XnFuncPtr pFuncPtr, void* pCookie) : pFuncPtr(pFuncPtr), pCookie(pCookie) {}
- void Set(XnFuncPtr pFuncPtr, void* pCookie) { this->pFuncPtr = pFuncPtr; this->pCookie = pCookie; }
-
- XnFuncPtr pFuncPtr;
- void* pCookie;
-};
-
-#endif //__XN_CALLBACK_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCodecIDs.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCodecIDs.h
deleted file mode 100644
index f90025d0..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCodecIDs.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __NICODECIDS_H__
-#define __NICODECIDS_H__
-
-#include "XnTypes.h"
-
-#define XN_CODEC_NULL XN_CODEC_ID(0, 0, 0, 0)
-#define XN_CODEC_UNCOMPRESSED XN_CODEC_ID('N','O','N','E')
-#define XN_CODEC_JPEG XN_CODEC_ID('J','P','E','G')
-#define XN_CODEC_16Z XN_CODEC_ID('1','6','z','P')
-#define XN_CODEC_16Z_EMB_TABLES XN_CODEC_ID('1','6','z','T')
-#define XN_CODEC_8Z XN_CODEC_ID('I','m','8','z')
-
-#endif // __NICODECIDS_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnContext.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnContext.h
deleted file mode 100644
index fb6414c4..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnContext.h
+++ /dev/null
@@ -1,569 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_CONTEXT_H__
-#define __XN_CONTEXT_H__
-
-/**
- * @ingroup cref
- * @defgroup context Context
- * This page details functions for managing an OpenNI context.
- *
- * @section init Initializing and Deinitializing OpenNI Context
- *
- * Initialization must be performed before using any OpenNI functionality, and similarly you
- * must not call any OpenNI functions after deinitialization.
- *
- * @section trees Enumerating and Creating Production Trees
- *
- * A production tree is composed of a production node, and optionally a list of other
- * production trees needed for this production node. Each production node has a type (one of
- * the types defined by OpenNI spec), a vendor name, and a specific name (unique for this type
- * and vendor), with a version.
- * For example, a User generator may need a Depth generator, which in turn might need a Device node.
- *
- * @subsection results Enumeration Results
- *
- * The results from an enumeration operation is a pointer to the first node of a linked list, representing
- * all the different possibilities to get data of the requested type. A single possibility contains
- * the provider description, an optional instance name (that can be used by the provider as proprietary
- * information, like a device S/N), and the bExists field, which tells if this node already exists in
- * the context (and as such, doesn't need to be created) or not, and a list of needed nodes by this node.
- *
- * @subsection enumex Enumerating Example
- *
- * For example, let's take a look at an application in need of depth maps:
- * @code
-// Enumerate for production trees that can produce depth
-XnNodeInfoList* pNodesList;
-nRetVal = xnEnumerateProductionTrees(pNiteCtx, XN_NODE_TYPE_DEPTH, NULL, &pNodesList);
-CHECK_RC(nRetVal, "Enumerate");
-
-// choose a tree (for simplicity, take first one)
-XnNodeInfoListIterator itChosen = xnNodeInfoListGetFirst(pNodesList);
-XnNodeInfo* pChosen = xnNodeInfoListGetCurrent(itChosen);
-
-// create first one
-XnNodeHandle hDepth;
-nRetVal = xnCreateProductionTree(pNiteCtx, pChosen, &hDepth);
-CHECK_RC(nRetVal, "Create");
-
-// free the list (it is no longer needed)
-xnNodeInfoListFree(pNodesList);
-
-// TODO: use handle for configuration and data extraction
- * @endcode
- *
- * @{
-*/
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-#include <XnQueries.h>
-#include <XnPrdNodeInfoList.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/** @name Initialization
- * Functions for initializing and shutting down an OpenNI context.
- * @{
- */
-
-/**
- * @brief Initializes the OpenNI library.
- *
- * This function must be called before calling any other OpenNI function (except for @ref xnInitFromXmlFile())
- *
- * @param ppContext [out] Output location for context pointer.
- */
-XN_C_API XnStatus XN_C_DECL xnInit(XnContext** ppContext);
-
-/**
- * @brief Runs an XML script in the given context.
- *
- * @param pContext [in] The context to be configured.
- * @param strFileName [in] The name of the file containing the script. for a full description of the XML structure, see @ref xmlscripts.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- * @param phScriptNode [out] Handle to a node holding all the nodes created from the script. When no longer
- * needed, the node can be released, causing all those nodes to dec ref.
- */
-XN_C_API XnStatus XN_C_DECL xnContextRunXmlScriptFromFileEx(XnContext* pContext, const XnChar* strFileName, XnEnumerationErrors* pErrors, XnNodeHandle* phScriptNode);
-
-/**
- * @brief Runs an XML script in the given context.
- * NOTE: when using this function, the context will be the owner of the created nodes, so those nodes and
- * the context will only be destroyed if calling @ref xnShutdown(). It is highly suggested to use
- * @ref xnContextRunXmlScriptFromFileEx() instead, which returns a node referencing created nodes, making the caller
- * owner of those nodes.
- *
- * @param pContext [in] The context to be configured.
- * @param strFileName [in] The name of the file containing the script. for a full description of the XML structure, see @ref xmlscripts.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- */
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnContextRunXmlScriptFromFileEx() instead") xnContextRunXmlScriptFromFile(XnContext* pContext, const XnChar* strFileName, XnEnumerationErrors* pErrors);
-
-/**
- * @brief Runs an XML script in the given context.
- *
- * @param pContext [in] The context.
- * @param xmlScript [in] A string representation of the XML script. for a full description of the XML structure, see @ref xmlscripts.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- * @param phScriptNode [out] Handle to a node holding all the nodes created from the script. When no longer
- * needed, the node can be released, causing all those nodes to dec ref.
- */
-XN_C_API XnStatus XN_C_DECL xnContextRunXmlScriptEx(XnContext* pContext, const XnChar* xmlScript, XnEnumerationErrors* pErrors, XnNodeHandle* phScriptNode);
-
-/**
- * @brief Runs an XML script in the given context.
- * NOTE: when using this function, the context will be the owner of the created nodes, so those nodes and
- * the context will only be destroyed if calling @ref xnShutdown(). It is highly suggested to use
- * @ref xnContextRunXmlScriptEx() instead, which returns a node referencing created nodes, making the caller
- * owner of those nodes.
- *
- * @param pContext [in] The context.
- * @param xmlScript [in] A string representation of the XML script. for a full description of the XML structure, see @ref xmlscripts.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- */
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnContextRunXmlScriptEx() instead") XN_C_DECL xnContextRunXmlScript(XnContext* pContext, const XnChar* xmlScript, XnEnumerationErrors* pErrors);
-
-/**
- * @brief Initializes OpenNI context, and then configures it using the given file.
- *
- * @param strFileName [in] The name of the file to read configuration from.
- * @param ppContext [out] Output location for context pointer.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- * @param phScriptNode [out] Handle to a node holding all the nodes created from the script. When no longer
- * needed, the node can be released, causing all those nodes to dec ref.
- */
-XN_C_API XnStatus XN_C_DECL xnInitFromXmlFileEx(const XnChar* strFileName, XnContext** ppContext, XnEnumerationErrors* pErrors, XnNodeHandle* phScriptNode);
-
-/**
- * @brief Initializes OpenNI context, and then configures it using the given file.
- * NOTE: when using this function, the context will be the owner of the created nodes, so those nodes and
- * the context will only be destroyed if calling @ref xnShutdown(). It is highly suggested to use
- * @ref xnInitFromXmlFileEx() instead, which returns a node referencing created nodes, making the caller
- * owner of those nodes.
- *
- * @param strFileName [in] The name of the file to read configuration from.
- * @param ppContext [out] Output location for context pointer.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- */
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnInitFromXmlFileEx() instead") XN_C_DECL xnInitFromXmlFile(const XnChar* strFileName, XnContext** ppContext, XnEnumerationErrors* pErrors);
-
-/**
- * @brief Opens a recording file, adding all nodes in it to the context.
- *
- * @param pContext [in] The context.
- * @param strFileName [in] The file to open.
- * @param phPlayerNode [out] The created player node.
- */
-XN_C_API XnStatus XN_C_DECL xnContextOpenFileRecordingEx(XnContext* pContext, const XnChar* strFileName, XnNodeHandle* phPlayerNode);
-
-/**
- * @brief Opens a recording file, adding all nodes in it to the context.
- * NOTE: when using this function, the context will be the owner of the created player node, so this nodes and
- * the context will only be destroyed if calling @ref xnShutdown(). It is highly suggested to use
- * @ref xnContextOpenFileRecordingEx() instead, which returns the player node, making the caller
- * owner of this node.
- *
- * @param pContext [in] The context.
- * @param strFileName [in] The file to open.
- */
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnContextOpenFileRecordingEx() instead") XN_C_DECL xnContextOpenFileRecording(XnContext* pContext, const XnChar* strFileName);
-
-/**
- * @brief Adds a reference to the context object.
- *
- * @param pContext [in] The context.
- */
-XN_C_API XnStatus XN_C_DECL xnContextAddRef(XnContext* pContext);
-
-/**
- * @brief Releases a context object, decreasing its ref count by 1. If reference count has reached 0,
- * the context will be destroyed.
- *
- * @param pContext [in] The context.
- */
-XN_C_API void XN_C_DECL xnContextRelease(XnContext* pContext);
-
-/**
- * @brief Shuts down an OpenNI context, destroying all its nodes. Do not call any function of this
- * context or any correlated node after calling this method.
- * NOTE: this function destroys the context and all the nodes it holds and so should be used very carefully.
- * Normally you should just call @ref xnContextRelease()
- *
- * @param pContext [in] The context to be destroyed.
- */
-XN_C_API void XN_API_DEPRECATED("Use xnContextRelease() instead") XN_C_DECL xnShutdown(XnContext* pContext);
-
-/**
- * @brief Forces a context to shutdown, destroying all nodes. This function is used for backwards compatibility
- * and should not be called by any client. Please use @ref xnContextRelease() instead.
- *
- * @param pContext [in] The context to be destroyed.
- */
-XN_C_API void XN_C_DECL xnForceShutdown(XnContext* pContext);
-
-/**
- * @brief Registers for context shutting down event. This function is used for backwards compatibility and
- * should not be called by any client.
- */
-XN_C_API XnStatus XN_C_DECL xnContextRegisterForShutdown(XnContext* pContext, XnContextShuttingDownHandler pHandler, void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters from context shutting down event. This function is used for backwards compatibility and
- * should not be called by any client.
- */
-XN_C_API void XN_C_DECL xnContextUnregisterFromShutdown(XnContext* pContext, XnCallbackHandle hCallback);
-
-// @}
-
-/** @name Enumeration
- * Functions for enumeration and creation of nodes.
- * @{
- */
-
-/**
- * @brief Enumerates all available production trees for a specific node type. The trees populated in the
- * list should be freed by calling @ref xnNodeInfoListFree() once not needed.
- *
- * @param pContext [in] OpenNI context.
- * @param Type [in] The requested node type.
- * @param pQuery [in] Optional. A query object that can be used to filter results.
- * @param ppTreesList [out] A list of possible production trees.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateProductionTrees(
- XnContext* pContext,
- XnProductionNodeType Type,
- const XnNodeQuery* pQuery,
- XnNodeInfoList** ppTreesList,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Creates a production node. If the tree specifies additional needed nodes, and those nodes
- * do not exist, they will be created too, and passed to this node as input.
- *
- * @param pContext [in] OpenNI context.
- * @param pTree [in] A production tree to create.
- * @param phNode [out] A handle to the newly created node.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateProductionTree(
- XnContext* pContext,
- XnNodeInfo* pTree,
- XnNodeHandle* phNode
- );
-
-/**
- * @brief Enumerates for production trees for a specific node type, and creates the first found tree.
- * This function is a shortcut version for using @ref xnEnumerateProductionTrees(), iterating the list,
- * and then calling @ref xnCreateProductionTree().
- *
- * @param pContext [in] OpenNI context.
- * @param type [in] The requested node type.
- * @param pQuery [in] Optional. A query object that can be used to filter results.
- * @param phNode [out] A handle to the newly created node.
- * @param pErrors [in/out] Optional. If provided, will be filled with enumeration errors.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateAnyProductionTree(
- XnContext* pContext,
- XnProductionNodeType type,
- XnNodeQuery* pQuery,
- XnNodeHandle* phNode,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Creates a production node which is only a mock. This node does not represent an actual node, but only
- * keeps a state and implements an interface above it.
- * Mock nodes are useful when simulating nodes for playing recordings, or for use in tests.
- * See also @ref xnCreateMockNodeBasedOn().
- *
- * @param pContext [in] OpenNI context.
- * @param type [in] The type of the mock to create.
- * @param strName [in] Optional. The name of the node. If NULL is provided, a name will be automatically generated.
- * @param phNode [out] A handle to the newly created node.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateMockNode(
- XnContext* pContext,
- XnProductionNodeType type,
- const XnChar* strName,
- XnNodeHandle* phNode
- );
-
-/**
- * @brief Creates a production node which is only a mock, base on the type and properties of another node.
- * This node does not represent an actual node, but only keeps a state and implements an interface above it.
- * Mock nodes are useful when simulating nodes for playing recordings, or for use in tests.
- * See also @ref xnCreateMockNode().
- *
- * @param pContext [in] OpenNI context.
- * @param hOriginalNode [in] A handle to an existing node on which the mock node will be based on.
- * @param strName [in] The name of the node. If set to NULL, a name will be generated based on the name of hOriginalNode.
- * @param phMockNode [out] A handle to the newly created mock node.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateMockNodeBasedOn(
- XnContext* pContext,
- XnNodeHandle hOriginalNode,
- const XnChar* strName,
- XnNodeHandle* phMockNode
- );
-
-/**
- * @brief References a production node, increasing its reference count by 1.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API XnStatus XN_C_DECL xnProductionNodeAddRef(XnNodeHandle hNode);
-
-/**
- * References a production node, increasing its reference count by 1.
- * Note: this function is deprecated. Please use @ref xnProductionNodeAddRef() instead.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnProductionNodeAddRef() instead.") XN_C_DECL xnRefProductionNode(XnNodeHandle hNode);
-
-/**
- * @brief Unreference a production node, decreasing its reference count by 1. If the reference count reaches zero,
- * the node will be destroyed.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API void XN_C_DECL xnProductionNodeRelease(XnNodeHandle hNode);
-
-/**
- * Unreference a production node, decreasing its reference count by 1. If the reference count reaches zero,
- * the node will be destroyed.
- * Note: this function is deprecated. Please use @ref xnProductionNodeAddRef() instead.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API void XN_API_DEPRECATED("Please use xnProductionNodeRelease() instead.") XN_C_DECL xnUnrefProductionNode(XnNodeHandle hNode);
-
-/**
- * @brief Gets a list of all existing node in the context. Each node that was returned increases its ref count.
- * The list must be freed using @ref xnNodeInfoListFree().
- *
- * @param pContext [in] OpenNI context.
- * @param ppList [out] A linked list of current existing nodes
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateExistingNodes(XnContext* pContext, XnNodeInfoList** ppList);
-
-/**
- * @brief Gets a list of all existing node in the context. Each node that was returned increases its ref count.
- * The list must be freed using @ref xnNodeInfoListFree().
- *
- * @param pContext [in] OpenNI context.
- * @param type [in] Type to look for.
- * @param ppList [out] A linked list of current existing nodes
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateExistingNodesByType(XnContext* pContext, XnProductionNodeType type, XnNodeInfoList** ppList);
-
-/**
- * @brief Returns the first found existing node of the specified type.
- *
- * @param pContext [in] OpenNI context.
- * @param type [in] Type to look for.
- * @param phNode [out] A handle to the found node.
- */
-XN_C_API XnStatus XN_C_DECL xnFindExistingRefNodeByType(
- XnContext* pContext,
- XnProductionNodeType type,
- XnNodeHandle* phNode
- );
-
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnFindExistingRefNodeByType() instead") XN_C_DECL xnFindExistingNodeByType(
- XnContext* pContext,
- XnProductionNodeType type,
- XnNodeHandle* phNode
- );
-
-/**
- * @brief Gets a handle to an existing production node instance using that instance name.
- *
- * @param pContext [in] OpenNI context.
- * @param strInstanceName [in] Name of the instance to get.
- * @param phNode [out] A handle to that instance.
- *
- * @return XN_STATUS_BAD_NODE_NAME if node by name of strInstanceName doesn't exist.
- */
-XN_C_API XnStatus XN_C_DECL xnGetRefNodeHandleByName(
- XnContext* pContext,
- const XnChar* strInstanceName,
- XnNodeHandle* phNode
- );
-
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnGetRefNodeHandleByName() instead") XN_C_DECL xnGetNodeHandleByName(
- XnContext* pContext,
- const XnChar* strInstanceName,
- XnNodeHandle* phNode
- );
-
-// @}
-
-/** @name Multi-Node Handling
- * Functions that affect all the nodes in the context.
- * @{
- */
-
-/**
- * @brief Updates all generators nodes in the context, waiting for all to have new data.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnWaitAndUpdateAll(XnContext* pContext);
-
-/**
- * @brief Updates all generators nodes in the context, waiting for a specific one to have new data.
- *
- * @param pContext [in] OpenNI context.
- * @param hNode [in] The node to wait for.
- */
-XN_C_API XnStatus XN_C_DECL xnWaitOneUpdateAll(XnContext* pContext, XnNodeHandle hNode);
-
-/**
- * @brief Updates all generators nodes in the context, once any of them have new data.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnWaitAnyUpdateAll(XnContext* pContext);
-
-/**
- * @brief Updates all generator nodes in the context, without any waiting. If a node has new data,
- * it will be updated.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnWaitNoneUpdateAll(XnContext* pContext);
-
-/**
- * @brief Make sure all generators are generating data.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnStartGeneratingAll(XnContext* pContext);
-
-/**
- * @brief Stop all generators from generating data.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnStopGeneratingAll(XnContext* pContext);
-
-/**
- * @brief Sets the global mirror flag. This will set all current existing nodes' mirror state, and also
- * affect future created nodes. The default mirror flag is FALSE.
- *
- * @param pContext [in] OpenNI context.
- * @param bMirror [in] New Mirror state.
- */
-XN_C_API XnStatus XN_C_DECL xnSetGlobalMirror(XnContext* pContext, XnBool bMirror);
-
-/**
- * @brief Gets the global mirror flag.
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnBool XN_C_DECL xnGetGlobalMirror(XnContext* pContext);
-
-/**
- * @brief Gets the global error state of the context. If one of the nodes in the context is in error state,
- * that state will be returned. If more than one node is in error state, XN_STATUS_MULTIPLE_NODES_ERROR
- * is returned. An application can query each node error state by calling @ref xnGetNodeErrorState().
- *
- * @param pContext [in] OpenNI context.
- */
-XN_C_API XnStatus XN_C_DECL xnGetGlobalErrorState(XnContext* pContext);
-
-/**
- * @brief Registers a callback function to global error state changes.
- *
- * @param pContext [in] OpenNI context.
- * @param handler [in] A pointer to a function that will be called when global error state changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromGlobalErrorStateChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGlobalErrorStateChange
- (XnContext* pContext, XnErrorStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToGlobalErrorStateChange().
- *
- * @param pContext [in] OpenNI context.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToGlobalErrorStateChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGlobalErrorStateChange
- (XnContext* pContext, XnCallbackHandle hCallback);
-
-/**
-* @brief Registers a callback function to 'Node Creation' event. This event is raised whenever node are created.
-*
-* @param pContext [in] OpenNI context.
-* @param handler [in] A pointer to a function that will be called when a new node is created.
-* @param pCookie [in] A user cookie that will be passed to the callback function.
-* @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromNodeCreation().
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToNodeCreation
- (XnContext* pContext, XnNodeCreationHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToNodeCreation().
- *
- * @param pContext [in] OpenNI context.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToNodeCreation().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromNodeCreation
- (XnContext* pContext, XnCallbackHandle hCallback);
-
-/**
-* @brief Registers a callback function to 'Node Destruction' event. This event is raised whenever a node is destroyed.
-*
-* @param pContext [in] OpenNI context.
-* @param handler [in] A pointer to a function that will be called when a node is destroyed.
-* @param pCookie [in] A user cookie that will be passed to the callback function.
-* @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromNodeDestruction().
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToNodeDestruction
- (XnContext* pContext, XnNodeDestructionHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToNodeDestruction().
- *
- * @param pContext [in] OpenNI context.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToNodeDestruction().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromNodeDestruction
- (XnContext* pContext, XnCallbackHandle hCallback);
-
-/// @}
-
-/** @} */
-
-#endif // __XN_CONTEXT_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCppWrapper.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCppWrapper.h
deleted file mode 100644
index 1984be3d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCppWrapper.h
+++ /dev/null
@@ -1,10100 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_CPP_WRAPPER_H__
-#define __XN_CPP_WRAPPER_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOpenNI.h>
-#include <XnCodecIDs.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-namespace xn
-{
- //---------------------------------------------------------------------------
- // Forward Declarations
- //---------------------------------------------------------------------------
- class ProductionNode;
- class EnumerationErrors;
- class NodeInfo;
- class NodeInfoList;
- class Context;
- class Query;
- class Generator;
-
- /**
- * @ingroup cppref
- * @defgroup cppref_glb_ev_hndlrs Global Event Handlers
- */
-
- /**
- * @ingroup cppref
- * @defgroup cppref_graph_mgmt Managing the Production Graph
- */
-
- /**
- * @ingroup cppref
- * @defgroup cppref_meta_data Meta-Data Objects (Frame Objects)
- */
-
- /**
- * @ingroup cppref
- * @defgroup cppref_prd_func Production Nodes Functionality
- */
-
- /**
- * @ingroup cppref
- * @defgroup cppref_misc Misc
- */
-
- //---------------------------------------------------------------------------
- // Types
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_glb_ev_hndlrs
- * Type definition to define event handlers for the 'State Change' event.
- *
- * @param [in] node Node issuing the event.
- * @param [in] pCookie User cookie passed on registration.
- *
- * <b>Remarks</b>
- *
- * The 'State Change' event can be invoked by a number of OpenNI objects.
- * For example, this event is invoked by the @ref xn::ErrorStateCapability "ErrorStateCapability"
- * object whenever a node's error state changes. As another example, this event is
- * also invoked by the @ref xn::MirrorCapability "MirrorCapability" object whenever a node's
- * mirror configuration has been changed.
- *
- * <b>Example:</b>
- *
- * The following is an example of a callback method that follows that signature:
- *
- @code
- void XN_CALLBACK_TYPE OnEvent(ProductionNode& node, void* pCookie)
- {
- }
- @endcode
- */
- typedef void (XN_CALLBACK_TYPE* StateChangedHandler)(ProductionNode& node, void* pCookie);
-
- //---------------------------------------------------------------------------
- // Internal stuff
- //---------------------------------------------------------------------------
- typedef XnStatus (*_XnRegisterStateChangeFuncPtr)(XnNodeHandle hNode, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
- typedef void (*_XnUnregisterStateChangeFuncPtr)(XnNodeHandle hNode, XnCallbackHandle hCallback);
-
- static XnStatus _RegisterToStateChange(_XnRegisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback);
- static void _UnregisterFromStateChange(_XnUnregisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, XnCallbackHandle hCallback);
-
- //---------------------------------------------------------------------------
- // Some Utilities
- //---------------------------------------------------------------------------
- /**
- * @ingroup cppref_misc
- * <b>Purpose:</b> The Version class provides functionality for accessing the OpenNI version information.
- */
- class Version
- {
- public:
- Version(const XnVersion& version) : m_version(version) {}
- Version(XnUInt8 nMajor, XnUInt8 nMinor, XnUInt16 nMaintenance, XnUInt32 nBuild)
- {
- m_version.nMajor = nMajor;
- m_version.nMinor = nMinor;
- m_version.nMaintenance = nMaintenance;
- m_version.nBuild = nBuild;
- }
-
- bool operator==(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) == 0);
- }
- bool operator!=(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) != 0);
- }
- bool operator<(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) < 0);
- }
- bool operator<=(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) <= 0);
- }
- bool operator>(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) > 0);
- }
- bool operator>=(const Version& other) const
- {
- return (xnVersionCompare(&m_version, &other.m_version) >= 0);
- }
-
- static Version Current()
- {
- XnVersion version;
- xnGetVersion(&version);
- return Version(version);
- }
-
- XnUInt8 Major() const { return m_version.nMajor; }
- XnUInt8 Minor() const { return m_version.nMinor; }
- XnUInt16 Maintenance() const { return m_version.nMaintenance; }
- XnUInt32 Build() const { return m_version.nBuild; }
-
- XnUInt8& Major() { return m_version.nMajor; }
- XnUInt8& Minor() { return m_version.nMinor; }
- XnUInt16& Maintenance() { return m_version.nMaintenance; }
- XnUInt32& Build() { return m_version.nBuild; }
-
- const XnVersion* GetUnderlying() const { return &m_version; }
- XnVersion* GetUnderlying() { return &m_version; }
-
- private:
- XnVersion m_version;
- };
-
- //---------------------------------------------------------------------------
- // Meta Data
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_meta_data
- * <b>Purpose:</b> The OutputMetaData class provides functionality for supporting fast
- * cached data access to many types of generator nodes.
- *
- * <b>Remarks:</b>
- *
- * The OutputMetaData class is the most basic OpenNI metadata class, whose main properties
- * include <code>Timestamp</code>, <code>FrameID</code>, and <code>DataSize</code>.
- * This class is never instantiated; it is used a base class to help build the hierarchy.
- *
- * An instance of this class hold a @ref glos_frame_object "frame object".
- * The frame object is a snapshot of the generated data at a certain point in time.
- */
- class OutputMetaData
- {
- public:
- /**
- * Ctor. Intended for use by other MetaData objects.
- *
- * @param [in] ppData A pointer to the data member of the meta data object.
- */
- inline OutputMetaData(const XnUInt8** ppData) : m_ppData(ppData), m_nAllocatedSize(0), m_pAllocatedData(NULL)
- {
- xnOSMemSet(&m_output, 0, sizeof(XnOutputMetaData));
- }
-
- /**
- * Dtor. Frees any allocated data.
- */
- virtual ~OutputMetaData() { Free(); }
-
- /**
- * Returns the timestamp of the @ref glos_frame_object "frame object" saved in this object.
- */
- inline XnUInt64 Timestamp() const { return m_output.nTimestamp; }
-
- /**
- * Returns the timestamp of the @ref glos_frame_object "frame object" saved in this object.
- */
- inline XnUInt64& Timestamp() { return m_output.nTimestamp; }
-
- /**
- * Returns the frame ID of the @ref glos_frame_object "frame object" saved in this object.
- * Frame IDs are sequential unique numbers starting with 1.
- */
- inline XnUInt32 FrameID() const { return m_output.nFrameID; }
-
- /**
- * Returns the frame ID of the @ref glos_frame_object "frame object" saved in this object.
- * Frame IDs are sequential unique numbers starting with 1.
- */
- inline XnUInt32& FrameID() { return m_output.nFrameID; }
-
- /**
- * @brief Returns the size, in bytes, of the data of the @ref glos_frame_object "frame object" saved in this object.
- *
- * <b>Remarks</b>
- *
- * For map metadata, this value equals to
- * @ref xn::MapMetaData::XRes "XRes()" * @ref xn::MapMetaData::YRes "YRes()" * @ref xn::MapMetaData::BytesPerPixel "BytesPerPixel()".
- */
- inline XnUInt32 DataSize() const { return m_output.nDataSize; }
-
- /**
- * @brief Returns the size, in bytes, of the data of the @ref glos_frame_object "frame object" saved in this object.
- *
- * <b>Remarks</b>
- *
- * For map metadata, this value equals to
- * @ref xn::MapMetaData::XRes "XRes()" * @ref xn::MapMetaData::YRes "YRes()" * @ref xn::MapMetaData::BytesPerPixel "BytesPerPixel()".
- */
- inline XnUInt32& DataSize() { return m_output.nDataSize; }
-
- /**
- * Returns whether this node's frame data was updated by the most recent call to
- * any @ref conc_updating_data "'WaitXUpdateAll()'" function, e.g., @ref xn::Context::WaitAnyUpdateAll().
- */
- inline XnBool IsDataNew() const { return m_output.bIsNew; }
-
- /**
- * Returns whether this node's frame data was updated by the most recent call to
- * any @ref conc_updating_data "'WaitXUpdateAll()'" function, e.g., @ref xn::Context::WaitAnyUpdateAll().
- */
- inline XnBool& IsDataNew() { return m_output.bIsNew; }
-
- /**
- * Gets the C object that is wrapped by this object.
- */
- inline const XnOutputMetaData* GetUnderlying() const { return &m_output; }
- /**
- * Gets the C object that is wrapped by this object.
- */
- inline XnOutputMetaData* GetUnderlying() { return &m_output; }
-
- /**
- * Gets a pointer to the data of the @ref glos_frame_object "frame object"
- * saved in this object.
- */
- inline const XnUInt8* Data() const { return *m_ppData; }
- /**
- * Gets a pointer to the data of the @ref glos_frame_object "frame object"
- * saved in this object.
- */
- inline const XnUInt8*& Data() { return *m_ppData; }
-
- /**
- * Gets a pointer to the writable buffer (see @ref conc_meta_data).
- */
- inline XnUInt8* WritableData()
- {
- MakeDataWritable();
- return m_pAllocatedData;
- }
-
- /**
- * @brief Allocates a writable buffer. If a previous buffer was allocated it will
- * be freed (or reused if possible).
- *
- * Also see @ref conc_meta_data.
- *
- * @param [in] nBytes The requested size for the buffer, in bytes.
- */
- XnStatus AllocateData(XnUInt32 nBytes)
- {
- if (nBytes > m_nAllocatedSize)
- {
- // reallocate
- XnUInt8* pData = (XnUInt8*)xnOSMallocAligned(nBytes, XN_DEFAULT_MEM_ALIGN);
- XN_VALIDATE_ALLOC_PTR(pData);
-
- // allocation succeeded, replace
- Free();
- m_pAllocatedData = pData;
- m_nAllocatedSize = nBytes;
- }
-
- DataSize() = nBytes;
- *m_ppData = m_pAllocatedData;
-
- return XN_STATUS_OK;
- }
-
- /**
- * Frees the writable buffer, if one was allocated.
- */
- void Free()
- {
- if (m_nAllocatedSize != 0)
- {
- xnOSFreeAligned(m_pAllocatedData);
- m_pAllocatedData = NULL;
- m_nAllocatedSize = 0;
- }
- }
-
- /**
- * Creates a writable copy of the data, and stores it instead of the original (read-only) data.
- * Also see @ref conc_meta_data.
- */
- XnStatus MakeDataWritable()
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- // check data isn't already writable
- if (Data() != m_pAllocatedData || DataSize() > m_nAllocatedSize)
- {
- const XnUInt8* pOrigData = *m_ppData;
-
- nRetVal = AllocateData(DataSize());
- XN_IS_STATUS_OK(nRetVal);
-
- if (pOrigData != NULL)
- {
- xnOSMemCopy(m_pAllocatedData, pOrigData, DataSize());
- }
- else
- {
- xnOSMemSet(m_pAllocatedData, 0, DataSize());
- }
- }
-
- return (XN_STATUS_OK);
- }
-
- protected:
- XnUInt8* m_pAllocatedData;
-
- private:
- XnOutputMetaData m_output;
-
- const XnUInt8** m_ppData;
- XnUInt32 m_nAllocatedSize;
- };
-
- /**
- * @ingroup cppref_meta_data
- * The MapMetaData class is a base class for providing the fast data access functionality
- * for the @ref glos_frame_object "frame object" saved in metadata. This functionality
- * is applicable to all generator nodes that have an associated metadata object.
- *
- * MapMetaData is the next metadata class in the metadata hierarchy after the OutputMetaData
- * class.
- *
- * The MapMetaData class - like OutputMetaData - is never instantiated;
- * it is a base class of the OpenNI metadata class hierarchy.
- */
- class MapMetaData : public OutputMetaData
- {
- public:
- /**
- * Ctor. Intended for use by inheriting classes.
- *
- * @param [in] format Pixel Format
- * @param [in] ppData A pointer to the data member of the meta data object
- */
- inline MapMetaData(XnPixelFormat format, const XnUInt8** ppData) : OutputMetaData(ppData)
- {
- xnOSMemSet(&m_map, 0, sizeof(XnMapMetaData));
- m_map.pOutput = OutputMetaData::GetUnderlying();
- m_map.PixelFormat = format;
- }
-
- /**
- * Gets the frame X resolution of the @ref glos_frame_object "frame object" saved in this object.
- * The X resolution is the actual number of columns in the frame after any required cropping has
- * been applied.
- */
- inline XnUInt32 XRes() const { return m_map.Res.X; }
- /**
- * Gets the frame X resolution of the @ref glos_frame_object "frame object" saved in this object.
- * The X resolution is the actual number of columns in the frame after any required cropping has
- * been applied.
- */
- inline XnUInt32& XRes() { return m_map.Res.X; }
-
- /**
- * Gets the frame Y resolution of the @ref glos_frame_object "frame object" saved in this object.
- * The Y resolution is the actual number of rows in the frame after any required cropping has
- * been applied.
- */
- inline XnUInt32 YRes() const { return m_map.Res.Y; }
- /**
- * Gets the frame Y resolution of the @ref glos_frame_object "frame object" saved in this object.
- * The Y resolution is the actual number of rows in the frame after any required cropping has
- * been applied.
- */
- inline XnUInt32& YRes() { return m_map.Res.Y; }
-
- /**
- * Gets the cropping area X offset of the @ref glos_frame_object "frame object" saved in this object.
- * This is the horizontal offset, measured in units of pixel columns, of the buffer within the field of view.
- *
- * <b>Remarks</b>
- *
- * The X offset is 0 if cropping is disabled (see @ref XnCropping).
- */
- inline XnUInt32 XOffset() const { return m_map.Offset.X; }
- /**
- * Gets the cropping area X offset of the @ref glos_frame_object "frame object" saved in this object.
- * This is the horizontal offset, measured in units of pixel columns, of the buffer within the field of view.
- *
- * <b>Remarks</b>
- *
- * The X offset is 0 if cropping is disabled (see @ref XnCropping).
- */
- inline XnUInt32& XOffset() { return m_map.Offset.X; }
-
- /**
- * Gets the cropping area Y offset of the @ref glos_frame_object "frame object" saved in this object.
- * This is the vertical offset, measured in units of pixel rows, of the buffer within the field of view.
- *
- * <b>Remarks</b>
- *
- * The Y offset is 0 if cropping is disabled (see @ref XnCropping).
- */
- inline XnUInt32 YOffset() const { return m_map.Offset.Y; }
- /**
- * Gets the cropping area Y offset of the @ref glos_frame_object "frame object" saved in this object.
- * This is the vertical offset, measured in units of pixel rows, of the buffer within the field of view.
- *
- * <b>Remarks</b>
- *
- * The Y offset is 0 if cropping is disabled (see @ref XnCropping).
- */
- inline XnUInt32& YOffset() { return m_map.Offset.Y; }
-
- /**
- * Gets the number of columns in the full frame (entire field-of-view, ignoring
- * cropping).
- */
- inline XnUInt32 FullXRes() const { return m_map.FullRes.X; }
-
-
- /**
- * Gets the number of columns in the full frame (entire field-of-view, ignoring
- * cropping).
- */
- inline XnUInt32& FullXRes() { return m_map.FullRes.X; }
-
- /**
- * Gets the number of rows in the full frame (entire field-of-view, ignoring cropping).
- */
- inline XnUInt32 FullYRes() const { return m_map.FullRes.Y; }
- /**
- * Gets the number of rows in the full frame (entire field-of-view, ignoring cropping).
- */
- inline XnUInt32& FullYRes() { return m_map.FullRes.Y; }
-
- /**
- * Gets the FPS in which frame was generated.
- */
- inline XnUInt32 FPS() const { return m_map.nFPS; }
- /**
- * Gets the FPS in which frame was generated.
- */
- inline XnUInt32& FPS() { return m_map.nFPS; }
-
- /**
- * Gets the pixel format of the pixel-map.
- */
- inline XnPixelFormat PixelFormat() const { return m_map.PixelFormat; }
-
- /**
- * Gets the C object that is wrapped by this object.
- */
- inline const XnMapMetaData* GetUnderlying() const { return &m_map; }
- /**
- * Gets the C object that is wrapped by this object.
- */
- inline XnMapMetaData* GetUnderlying() { return &m_map; }
-
- /**
- * Gets the number of bytes each pixel occupies.
- */
- inline XnUInt32 BytesPerPixel() const
- {
- switch (PixelFormat())
- {
- case XN_PIXEL_FORMAT_RGB24:
- return sizeof(XnRGB24Pixel);
- case XN_PIXEL_FORMAT_YUV422:
- return sizeof(XnYUV422DoublePixel)/2;
- case XN_PIXEL_FORMAT_GRAYSCALE_8_BIT:
- return sizeof(XnGrayscale8Pixel);
- case XN_PIXEL_FORMAT_GRAYSCALE_16_BIT:
- return sizeof(XnGrayscale16Pixel);
- case XN_PIXEL_FORMAT_MJPEG:
- return 2;
- default:
- XN_ASSERT(FALSE);
- return 0;
- }
- }
-
- /**
- * @copybrief xn::OutputMetaData::AllocateData
- *
- * @param [in] nXRes The number of required columns in the map.
- * @param [in] nYRes The number of required rows in the map.
- */
- XnStatus AllocateData(XnUInt32 nXRes, XnUInt32 nYRes)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnUInt32 nSize = nXRes * nYRes * BytesPerPixel();
- nRetVal = OutputMetaData::AllocateData(nSize);
- XN_IS_STATUS_OK(nRetVal);
-
- FullXRes() = XRes() = nXRes;
- FullYRes() = YRes() = nYRes;
- XOffset() = YOffset() = 0;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * Changes dimensions of the pixel-map.
- *
- * @param [in] nXRes Number of columns in the map
- * @param [in] nYRes Number of rows in the map
- * @param [in] pExternalBuffer Optional. An external buffer to be used. If NULL is passed,
- * a buffer will be allocated.
- */
- XnStatus ReAdjust(XnUInt32 nXRes, XnUInt32 nYRes, const XnUInt8* pExternalBuffer)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- if (pExternalBuffer == NULL)
- {
- nRetVal = AllocateData(nXRes, nYRes);
- XN_IS_STATUS_OK(nRetVal);
- }
- else
- {
- FullXRes() = XRes() = nXRes;
- FullYRes() = YRes() = nYRes;
- XOffset() = YOffset() = 0;
- Data() = pExternalBuffer;
- DataSize() = nXRes * nYRes * BytesPerPixel();
- }
-
- return (XN_STATUS_OK);
- }
-
- protected:
- XnPixelFormat& PixelFormatImpl() { return m_map.PixelFormat; }
-
- private:
- // block copy ctor and assignment operator
- MapMetaData& operator=(const MapMetaData&);
- inline MapMetaData(const MapMetaData& other);
-
- // Members
- XnMapMetaData m_map;
- };
-
- /**
- * @ingroup cppref_meta_data
- * The Map Wrapper classes are light wrappers for @ref glos_frame_object maps (from metadata classes). These wrapper classes
- * provide small data-focused objects for simplified data access to frame objects generated by the generator nodes.
- *
- * @tparam _pixelType The data type of a single pixel in this map
- */
- template<class _pixelType>
- class Map
- {
- public:
- inline Map(_pixelType*& pData, XnUInt32& nXRes, XnUInt32 &nYRes) :
- m_pData(pData), m_nXRes(nXRes), m_nYRes(nYRes)
- {}
-
- /**
- * Gets the frame X resolution. The X resolution is the actual number of columns in the frame after any required cropping has been applied.
- *
- * <b>Remarks</b>
- *
- * This is the same as @ref xn::MapMetaData::XRes "MapMetaData::XRes()".
- */
- inline XnUInt32 XRes() const { return m_nXRes; }
- /**
- * Gets the frame Y resolution. The Y resolution is the actual number of rows in the frame after any required cropping has been applied.
- *
- * <b>Remarks</b>
- *
- * This is the same as @ref xn::MapMetaData::YRes "MapMetaData::YRes()".
- */
- inline XnUInt32 YRes() const { return m_nYRes; }
-
- /**
- * Gets a single pixel of the frame map by indexing a map as a one-dimensional array.
- *
- * @param [in] nIndex The position of the pixel in the buffer
- *
- * @returns A pixel of type <code>_pixelType</code>.
- *
- * <b>Remarks</b>
- *
- * Indexing a map in this way can give improved speed in some situations.
- */
- inline const _pixelType& operator[](XnUInt32 nIndex) const
- {
- XN_ASSERT(nIndex < (m_nXRes * m_nYRes));
- return m_pData[nIndex];
- }
- /**
- * Gets a single pixel of the frame map by indexing a map as a one-dimensional array.
- *
- * @param [in] nIndex The position of the pixel in the buffer
- *
- * @returns A pixel of type <code>_pixelType</code>.
- *
- * <b>Remarks</b>
- *
- * Indexing a map in this way can give improved speed in some situations.
- */
- inline _pixelType& operator[](XnUInt32 nIndex)
- {
- XN_ASSERT(nIndex < (m_nXRes *m_nYRes));
- return m_pData[nIndex];
- }
-
- /**
- * Gets a single pixel of the frame map by its X and Y coordinates.
- *
- * @param [in] x The horizontal position of the pixel (from left to right)
- * @param [in] y The vertical position of the pixel in the buffer (from top to bottom)
- *
- * @returns A pixel of type <code>_pixelType</code>.
- */
- inline const _pixelType& operator()(XnUInt32 x, XnUInt32 y) const
- {
- XN_ASSERT(x < m_nXRes && y < m_nYRes);
- return m_pData[y*m_nXRes + x];
- }
- /**
- * Gets a single pixel of the frame map by its X and Y coordinates.
- *
- * @param [in] x The horizontal position of the pixel (from left to right)
- * @param [in] y The vertical position of the pixel in the buffer (from top to bottom)
- *
- * @returns A pixel of type <code>_pixelType</code>.
- */
- inline _pixelType& operator()(XnUInt32 x, XnUInt32 y)
- {
- XN_ASSERT(x < m_nXRes && y < m_nYRes);
- return m_pData[y*m_nXRes + x];
- }
-
- private:
- /* block copy ctor and assignment operator */
- Map(const Map& other);
- Map& operator=(const Map&);
-
- _pixelType*& m_pData;
- XnUInt32& m_nXRes;
- XnUInt32& m_nYRes;
- };
-
- /** @ingroup cppref_meta_data
- * @{
- */
- /** Declares a @ref xn::Map "Map" class with pixel of type XnDepthPixel */
- typedef Map<XnDepthPixel> DepthMap;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnUInt8 */
- typedef Map<XnUInt8> ImageMap;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnRGB24Pixel */
- typedef Map<XnRGB24Pixel> RGB24Map;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnGrayscale16Pixel */
- typedef Map<XnGrayscale16Pixel> Grayscale16Map;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnGrayscale8Pixel */
- typedef Map<XnGrayscale8Pixel> Grayscale8Map;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnIRPixel */
- typedef Map<XnIRPixel> IRMap;
- /** Declares a @ref xn::Map "Map" class with pixel of type XnLabel */
- typedef Map<XnLabel> LabelMap;
- /** @} */
-
- /**
- * @ingroup cppref_meta_data
- *
- * For saving the @ref glos_frame_object "frame object" (data and configuration) from
- * the @ref xn::DepthGenerator "DepthGenerator" node. This @ref glos_frame_object "frame
- * object" is a snapshot of the DepthGenerator's generated depth map and its associated
- * configuration information at a certain point in time. This saved @ref glos_frame_object
- * "frame object" provides fast and easy access to the DepthGenerator node's data and
- * configuration information.
- *
- * It is important to get a good understanding of the purpose and design of the OpenNI
- * metadata objects. For a comprehensive overview of OpenNI metadata objects, see @ref
- * conc_meta_data.
- *
- * The DepthGenerator node generates depth data of the FOV. This is the
- * Z-coordinate of the X-Y-Z coordinate of each point. The Z-axis is the distance, in
- * millimeters from the sensor plane.
- * A smaller depth value indicates a scene point that is a <i>closer</i> to the sensor,
- * and a larger depth value indicates a scene point that is <i>further away</i> from
- * the sensor. A zero depth value indicates that the DepthGenerator node did not succeed
- * in obtaining a valid depth reading.
- *
- * DepthMetaData's @ref xn::DepthMetaData::Data() method provides the actual depth
- * data. This method returns the pointer to the first depth pixel in the map.
- *
- * The pixel format of depth map is XnDepthPixel, i.e. 16-bit values.
- *
- * DepthMetaData provides the <code>ZRes</code> property to contain the depth resolution.
- * This is the maximum value of a pixel (plus one).
- *
- * DepthMetaData is similar to ImageMetaData; they are both metadata for a type of map.
- */
- class DepthMetaData : public MapMetaData
- {
- public:
- /**
- * Ctor.
- */
- inline DepthMetaData() :
- MapMetaData(XN_PIXEL_FORMAT_GRAYSCALE_16_BIT, (const XnUInt8**)&m_depth.pData),
- m_depthMap(const_cast<XnDepthPixel*&>(m_depth.pData), MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableDepthMap((XnDepthPixel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y)
- {
- xnOSMemSet(&m_depth, 0, sizeof(XnDepthMetaData));
- m_depth.pMap = MapMetaData::GetUnderlying();
- }
-
- /**
- * @brief Shallow-Copies a DepthMetaData object.
- *
- * @param [in] other source object.
- *
- * @remarks Note that the data buffer is not copied, and that both object will point to the same buffer.
- */
- inline void InitFrom(const DepthMetaData& other)
- {
- xnCopyDepthMetaData(&m_depth, &other.m_depth);
- }
-
- /**
- * Shallow copies another @ref DepthMetaData object, and then @ref ReAdjust "readjusts
- * it".
- *
- * @param [in] other Source object
- * @param [in] nXRes Requested number of columns in the map
- * @param [in] nYRes Requested number of rows in the map
- * @param [in] pExternalBuffer Optional. An external buffer matching requested resolution.
- * If NULL, A buffer will be allocated.
- */
- inline XnStatus InitFrom(const DepthMetaData& other, XnUInt32 nXRes, XnUInt32 nYRes, const XnDepthPixel* pExternalBuffer)
- {
- InitFrom(other);
- return ReAdjust(nXRes, nYRes, pExternalBuffer);
- }
-
- /**
- * Performs a deep-copy of another metadata object (including duplication of the
- * data buffer).
- *
- * @param [in] other source object
- */
- XnStatus CopyFrom(const DepthMetaData& other)
- {
- // copy props
- InitFrom(other);
- // and make a copy of the data (this will allocate and copy data)
- return MakeDataWritable();
- }
-
- /**
- * @copydoc xn::MapMetaData::ReAdjust
- */
- XnStatus ReAdjust(XnUInt32 nXRes, XnUInt32 nYRes, const XnDepthPixel* pExternalBuffer = NULL)
- {
- return MapMetaData::ReAdjust(nXRes, nYRes, (const XnUInt8*)pExternalBuffer);
- }
-
- /**
- * Gets the maximum depth (depth resolution) that the DepthGenerator node can produce.
- * This is the same as the resolution of the depth axis
- * (i.e., @ref DepthGenerator::GetDeviceMaxDepth() + 1).
- */
- inline XnDepthPixel ZRes() const { return m_depth.nZRes; }
- /**
- * Gets the maximum depth (depth resolution) that the DepthGenerator node can produce.
- * This is the same as the resolution of the depth axis
- * (i.e., @ref DepthGenerator::GetDeviceMaxDepth() + 1).
- */
- inline XnDepthPixel& ZRes() { return m_depth.nZRes; }
-
- /**
- * @brief Returns the depth map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first depth pixel in the map. The depth
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnDepthPixel, i.e. 16-bit integer values.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnDepthPixel* Data() const { return (const XnDepthPixel*)MapMetaData::Data(); }
- /**
- * @brief Returns the depth map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first depth pixel in the map. The depth
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnDepthPixel, i.e. 16-bit integer values.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnDepthPixel*& Data() { return (const XnDepthPixel*&)MapMetaData::Data(); }
-
-
- /**
- * @copydoc xn::OutputMetaData::WritableData
- */
- inline XnDepthPixel* WritableData() { return (XnDepthPixel*)MapMetaData::WritableData(); }
-
- /**
- * Gets a light object wrapping the depth map
- */
- inline const xn::DepthMap& DepthMap() const { return m_depthMap; }
- /**
- * Gets a light object wrapping the writable depth map
- */
- inline xn::DepthMap& WritableDepthMap()
- {
- MakeDataWritable();
- return m_writableDepthMap;
- }
-
- /**
- * Gets the value of a single pixel of the frame map by its index in the array.
- *
- * @param [in] nIndex The index of the pixel in the buffer.
- */
- inline const XnDepthPixel& operator[](XnUInt32 nIndex) const
- {
- XN_ASSERT(nIndex < (XRes()*YRes()));
- return Data()[nIndex];
- }
-
- /**
- * Gets the value of a single pixel of the frame map by its X and Y coordinates.
- *
- * @param [in] x X-coordinate of the pixel in the map
- * @param [in] y Y-coordinate of the pixel in the map
- */
- inline const XnDepthPixel& operator()(XnUInt32 x, XnUInt32 y) const
- {
- XN_ASSERT(x < XRes() && y < YRes());
- return Data()[y*XRes() + x];
- }
-
- /**
- * @copydoc xn::OutputMetaData::GetUnderlying
- */
- inline const XnDepthMetaData* GetUnderlying() const { return &m_depth; }
- /**
- * @copydoc xn::OutputMetaData::GetUnderlying
- */
- inline XnDepthMetaData* GetUnderlying() { return &m_depth; }
-
- private:
- // block copy ctor and assignment operator (because we can't return errors in those)
- DepthMetaData(const DepthMetaData& other);
- DepthMetaData& operator=(const DepthMetaData&);
-
- XnDepthMetaData m_depth;
- const xn::DepthMap m_depthMap;
- xn::DepthMap m_writableDepthMap;
- };
-
- /**
- * @ingroup cppref_meta_data
- *
- * For saving the @ref glos_frame_object "frame object" (data and configuration) from
- * the @ref xn::DepthGenerator "DepthGenerator" node. This @ref glos_frame_object "frame
- * object" is a snapshot of the DepthGenerator's generated depth map and its associated
- * configuration information at a certain point in time. This saved @ref glos_frame_object
- * "frame object" provides fast and easy access to the DepthGenerator node's data and
- * configuration information.
- *
- * It is important to get a good understanding of the purpose and design of the OpenNI
- * metadata objects. For a comprehensive overview of OpenNI metadata objects, see @ref
- * conc_meta_data.
- *
- * The ImageMetaData object provides a number of different methods to get the image
- * as a different format. You must use the 'Get Data' method most appropriate for the
- * data format of the latest available frame. For example, if you requested the ImageGenerator
- * node to generate RGB24 format you must use the @ref RGB24Data() method to get the
- * data.
- *
- * Each of the 'Get Data' methods gets the image as a pointer to the first pixel
- * in the image map. From the address of that first pixel you can access all the pixels.
- *
- * Depending on the format, the pixels are different in size. This means that image
- * maps are a different size.
- */
- class ImageMetaData : public MapMetaData
- {
- public:
- inline ImageMetaData() :
- MapMetaData(XN_PIXEL_FORMAT_RGB24, &m_image.pData),
- m_imageMap(const_cast<XnUInt8*&>(m_image.pData), MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableImageMap((XnUInt8*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_rgb24Map((XnRGB24Pixel*&)m_image.pData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableRgb24Map((XnRGB24Pixel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_gray16Map((XnGrayscale16Pixel*&)m_image.pData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableGray16Map((XnGrayscale16Pixel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_gray8Map((XnGrayscale8Pixel*&)m_image.pData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableGray8Map((XnGrayscale8Pixel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y)
- {
- xnOSMemSet(&m_image, 0, sizeof(XnImageMetaData));
- m_image.pMap = MapMetaData::GetUnderlying();
- }
-
- /**
- * @brief Shallow-copies an ImageMetaData object.
- *
- * @param [in] other source object.
- *
- * @remarks Note that the data buffer is not copied, and that both object will point to the same buffer.
- */
- inline void InitFrom(const ImageMetaData& other)
- {
- xnCopyImageMetaData(&m_image, &other.m_image);
- }
-
- /**
- * Shallow copies another @ref ImageMetaData object, and then @ref ReAdjust "readjusts"
- * it.
- *
- * @param [in] other Source object
- * @param [in] nXRes Requested number of columns in the map
- * @param [in] nYRes Requested number of rows in the map
- * @param [in] format Requested pixel format
- * @param [in] pExternalBuffer Optional. An external buffer matching requested resolution.
- * If NULL, A buffer will be allocated.
- */
- inline XnStatus InitFrom(const ImageMetaData& other, XnUInt32 nXRes, XnUInt32 nYRes, XnPixelFormat format, const XnUInt8* pExternalBuffer)
- {
- InitFrom(other);
- XnStatus nRetVal = ReAdjust(nXRes, nYRes, format, pExternalBuffer);
- XN_IS_STATUS_OK(nRetVal);
- PixelFormat() = format;
- return XN_STATUS_OK;
- }
-
- /**
- * @copybrief xn::OutputMetaData::AllocateData
- *
- * @param [in] nXRes Requested number of columns in the map
- * @param [in] nYRes Requested number of rows in the map
- * @param [in] format Requested pixel format
- */
- inline XnStatus AllocateData(XnUInt32 nXRes, XnUInt32 nYRes, XnPixelFormat format)
- {
- XnPixelFormat origFormat = PixelFormat();
- PixelFormat() = format;
- XnStatus nRetVal = MapMetaData::AllocateData(nXRes, nYRes);
- if (nRetVal != XN_STATUS_OK)
- {
- PixelFormat() = origFormat;
- return (nRetVal);
- }
-
- return XN_STATUS_OK;
- }
-
- /**
- * Performs a deep-copy of another metadata object (including duplication of the data buffer)
- *
- * @param [in] other source object
- */
- inline XnStatus CopyFrom(const ImageMetaData& other)
- {
- // copy props
- xnCopyImageMetaData(&m_image, &other.m_image);
- // and make a copy of the data (this will allocate and copy data)
- return MakeDataWritable();
- }
-
- /**
- * @copybrief xn::MapMetaData::ReAdjust
- *
- * @param [in] nXRes Requested number of columns in the map
- * @param [in] nYRes Requested number of rows in the map
- * @param [in] format Requested pixel format
- * @param [in] pExternalBuffer Optional. An external buffer to be used. If NULL
- * is passed, a buffer will be allocated.
- */
- XnStatus ReAdjust(XnUInt32 nXRes, XnUInt32 nYRes, XnPixelFormat format, const XnUInt8* pExternalBuffer = NULL)
- {
- XnPixelFormat origFormat = PixelFormat();
- PixelFormat() = format;
- XnStatus nRetVal = MapMetaData::ReAdjust(nXRes, nYRes, pExternalBuffer);
- if (nRetVal != XN_STATUS_OK)
- {
- PixelFormat() = origFormat;
- return (nRetVal);
- }
-
- return XN_STATUS_OK;
- }
-
- /**
- * @brief Gets the frame's pixel color format used in this image map. This is the
- * format of the @ref glos_frame_object "frame object" saved in this object.
- *
- * <b>Remarks</b>
- *
- * Knowing the pixel format of the image map helps you to enumerate over the map
- * and process its data.
- *
- * Reimplemented from @ref xn::MapMetaData.
- */
- inline XnPixelFormat PixelFormat() const { return MapMetaData::PixelFormat(); }
- /**
- * @brief Gets the frame's pixel color format used in this image map. This is the
- * format of the @ref glos_frame_object "frame object" saved in this object.
- *
- * <b>Remarks</b>
- *
- * Knowing the pixel format of the image map helps you to enumerate over the map
- * and process its data.
- */
- inline XnPixelFormat& PixelFormat() { return MapMetaData::PixelFormatImpl(); }
-
- /**
- * @copydoc MapMetaData::WritableData
- */
- inline XnUInt8* WritableData() { return MapMetaData::WritableData(); }
-
- /**
- * @brief Gets a pointer to the first pixel of the image in @ref xn::XnRGB24Pixel "RGB24" format.
- * RGB24 format represents each pixel as one byte for red, one byte for green, and one byte for blue.
- */
- inline const XnRGB24Pixel* RGB24Data() const { return (const XnRGB24Pixel*)MapMetaData::Data(); }
- /**
- * @brief Gets a pointer to the first pixel of the image in @ref xn::XnRGB24Pixel "RGB24" format.
- * RGB24 format represents each pixel as one byte for red, one byte for green, and one byte for blue.
- */
- inline const XnRGB24Pixel*& RGB24Data() { return (const XnRGB24Pixel*&)MapMetaData::Data(); }
- /**
- * @copydoc MapMetaData::WritableData
- */
- inline XnRGB24Pixel* WritableRGB24Data() { return (XnRGB24Pixel*)MapMetaData::WritableData(); }
-
- /**
- * @brief Gets a pointer to the first pixel of the image in @ref xn::XnYUV422DoublePixel "YUV422" format.
- * YUV422 is a type of compression with a single Y byte followed by a U byte, then another Y byte and then a V byte: YUY'V.
- * These four values represent two pixels: YUV and Y'UV.
- */
- inline const XnYUV422DoublePixel* YUV422Data() const { return (const XnYUV422DoublePixel*)MapMetaData::Data(); }
- /**
- * @brief Gets a pointer to the first pixel of the image in @ref xn::XnYUV422DoublePixel "YUV422" format.
- * YUV422 is a type of compression with a single Y byte followed by a U byte, then another Y byte and then a V byte: YUY'V.
- * These four values represent two pixels: YUV and Y'UV.
- */
- inline const XnYUV422DoublePixel*& YUV422Data() { return (const XnYUV422DoublePixel*&)MapMetaData::Data(); }
- /**
- * @copydoc MapMetaData::WritableData
- */
- inline XnYUV422DoublePixel* WritableYUV422Data() { return (XnYUV422DoublePixel*)MapMetaData::WritableData(); }
-
- /**
- * @brief Gets a pointer to the first pixel of the image in Grayscale8 format.
- * Grayscale8 represents each pixel as an 8-bit (1 byte) gray scale.
- */
- inline const XnGrayscale8Pixel* Grayscale8Data() const { return (const XnGrayscale8Pixel*)MapMetaData::Data(); }
- /**
- * @brief Gets a pointer to the first pixel of the image in Grayscale8 format.
- * Grayscale8 represents each pixel as an 8-bit (1-byte) gray scale.
- */
- inline const XnGrayscale8Pixel*& Grayscale8Data() { return (const XnGrayscale8Pixel*&)MapMetaData::Data(); }
- /**
- * @copydoc MapMetaData::WritableData
- */
- inline XnGrayscale8Pixel* WritableGrayscale8Data() { return (XnGrayscale8Pixel*)MapMetaData::WritableData(); }
-
- /**
- * @brief Gets a pointer to the first pixel of the image in Grayscale16 format.
- * Grayscale16 represents each pixel as a 16-bit (2-byte) gray scale.
- */
- inline const XnGrayscale16Pixel* Grayscale16Data() const { return (const XnGrayscale16Pixel*)MapMetaData::Data(); }
- /**
- * @brief Gets a pointer to the first pixel of the image in Grayscale16 format.
- * Grayscale16 represents each pixel as a 16-bit (2-byte) gray scale.
- */
- inline const XnGrayscale16Pixel*& Grayscale16Data() { return (const XnGrayscale16Pixel*&)MapMetaData::Data(); }
- /**
- * @copydoc MapMetaData::WritableData
- */
- inline XnGrayscale16Pixel* WritableGrayscale16Data() { return (XnGrayscale16Pixel*)MapMetaData::WritableData(); }
-
- /**
- * @brief Gets a light object wrapping the image map.
- */
- inline const xn::ImageMap& ImageMap() const { return m_imageMap; }
- /**
- * Gets a light object wrapping the writable image-map
- */
- inline xn::ImageMap& WritableImageMap() { MakeDataWritable(); return m_writableImageMap; }
-
- /**
- * @brief Gets a light wrapper object for wrapping the image map as RGB24 format.
- * RGB24 format represents each pixel as one byte for red, one byte for green, and
- * one byte for blue.
- */
- inline const xn::RGB24Map& RGB24Map() const { return m_rgb24Map; }
- /**
- * @copydoc xn::ImageMetaData::WritableImageMap
- */
- inline xn::RGB24Map& WritableRGB24Map() { MakeDataWritable(); return m_writableRgb24Map; }
-
- /**
- * @brief Gets a light wrapper object wrapping the image map as Grayscale8 format.
- */
- inline const xn::Grayscale8Map& Grayscale8Map() const { return m_gray8Map; }
- /**
- * @copydoc xn::ImageMetaData::WritableImageMap
- */
- inline xn::Grayscale8Map& WritableGrayscale8Map() { MakeDataWritable(); return m_writableGray8Map; }
-
- /**
- * @brief Gets a light wrapper object wrapping the frame's image map as Grayscale16
- * format.
- */
- inline const xn::Grayscale16Map& Grayscale16Map() const { return m_gray16Map; }
- /**
- * @copydoc xn::ImageMetaData::WritableImageMap
- */
- inline xn::Grayscale16Map& WritableGrayscale16Map() { MakeDataWritable(); return m_writableGray16Map; }
-
- /**
- * @copydoc xn::OutputMetaData::GetUnderlying
- */
- inline const XnImageMetaData* GetUnderlying() const { return &m_image; }
- /**
- * @copydoc xn::OutputMetaData::GetUnderlying
- */
- inline XnImageMetaData* GetUnderlying() { return &m_image; }
-
- private:
- // block copy ctor and assignment operator
- ImageMetaData(const ImageMetaData& other);
- ImageMetaData& operator=(const ImageMetaData&);
-
- XnImageMetaData m_image;
- const xn::ImageMap m_imageMap;
- xn::ImageMap m_writableImageMap;
- const xn::RGB24Map m_rgb24Map;
- xn::RGB24Map m_writableRgb24Map;
- const xn::Grayscale16Map m_gray16Map;
- xn::Grayscale16Map m_writableGray16Map;
- const xn::Grayscale8Map m_gray8Map;
- xn::Grayscale8Map m_writableGray8Map;
- };
-
- /**
- * @ingroup cppref_meta_data
- *
- * <b>Purpose:</b> For saving the @ref glos_frame_object "frame object" (data and configuration)
- * from an xn::IRGenerator node. This @ref glos_frame_object "frame object" is a snapshot
- * of the generated infra-red map data and its associated configuration information
- * at a certain point in time. This saved @ref glos_frame_object "frame object" provides
- * fast and easy access to the IRGenerator node's data and configuration information.
- */
- class IRMetaData : public MapMetaData
- {
- public:
- inline IRMetaData() :
- MapMetaData(XN_PIXEL_FORMAT_GRAYSCALE_16_BIT, (const XnUInt8**)&m_ir.pData),
- m_irMap(const_cast<XnIRPixel*&>(m_ir.pData), MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableIRMap((XnIRPixel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y)
- {
- xnOSMemSet(&m_ir, 0, sizeof(XnIRMetaData));
- m_ir.pMap = MapMetaData::GetUnderlying();
- }
-
- /**
- * @brief Shallow-Copies an IRMetaData object.
- *
- * @param [in] other source object.
- *
- * @remarks Note that the data buffer is not copied, and that both object will point to the same buffer.
- */
- inline void InitFrom(const IRMetaData& other)
- {
- xnCopyIRMetaData(&m_ir, &other.m_ir);
- }
-
- /**
- * Shallow copies another IRMetaData object, and then @ref ReAdjust it.
- *
- * @param [in] other source object
- * @param [in] nXRes requested number of columns in the map
- * @param [in] nYRes requested number of rows in the map
- * @param [in] pExternalBuffer Optional. An external buffer matching requested resolution. If NULL,
- * A buffer will be allocated.
- */
- inline XnStatus InitFrom(const IRMetaData& other, XnUInt32 nXRes, XnUInt32 nYRes, const XnIRPixel* pExternalBuffer)
- {
- InitFrom(other);
- return ReAdjust(nXRes, nYRes, pExternalBuffer);
- }
-
- /**
- * Performs a deep-copy of another metadata object (including duplication of the data buffer)
- *
- * @param [in] other source object
- */
- XnStatus CopyFrom(const IRMetaData& other)
- {
- // copy props
- xnCopyIRMetaData(&m_ir, &other.m_ir);
- // and make a copy of the data (this will allocate and copy data)
- return MakeDataWritable();
- }
-
- /**
- * @copydoc MapMetaData::ReAdjust
- */
- XnStatus ReAdjust(XnUInt32 nXRes, XnUInt32 nYRes, const XnIRPixel* pExternalBuffer = NULL)
- {
- return MapMetaData::ReAdjust(nXRes, nYRes, (const XnUInt8*)pExternalBuffer);
- }
-
- /**
- * @brief Returns the IR map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first IR pixel in the map. The IR
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnIRPixel, i.e. 16-bit integer values.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnIRPixel* Data() const { return (const XnIRPixel*)MapMetaData::Data(); }
- /**
- * @brief Returns the IR map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first IR pixel in the map. The IR
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnIRPixel, i.e. 16-bit integer values.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnIRPixel*& Data() { return (const XnIRPixel*&)MapMetaData::Data(); }
- /**
- * @copydoc OutputMetaData::WritableData
- */
- inline XnIRPixel* WritableData() { return (XnIRPixel*)MapMetaData::WritableData(); }
-
- /**
- * Gets the value of a single pixel of the frame map by its index in the array.
- *
- * @param [in] nIndex The index of the pixel in the buffer.
- */
- inline const XnIRPixel& operator[](XnUInt32 nIndex) const
- {
- XN_ASSERT(nIndex < (XRes()*YRes()));
- return Data()[nIndex];
- }
-
- /**
- * Gets the value of a single pixel of the frame map by its X and Y coordinates.
- *
- * @param [in] x X-coordinate of the pixel in the map
- * @param [in] y Y-coordinate of the pixel in the map
- */
- inline const XnIRPixel& operator()(XnUInt32 x, XnUInt32 y) const
- {
- XN_ASSERT(x < XRes() && y < YRes());
- return Data()[y*XRes() + x];
- }
-
- /**
- * @brief Gets a fast, light object wrapping the IR map.
- * <b>Remarks</b>
- *
- * The Map Wrapper classes are light wrappers for generated maps saved as @ref glos_frame_object
- * "frame objects" in metadata. These wrapper classes provide small data-focused
- * objects for simplified data access to frame objects.
- */
- inline const xn::IRMap& IRMap() const { return m_irMap; }
- /**
- * @brief Gets a fast, light object wrapping the writable IR map.
- * <b>Remarks</b>
- *
- * The Map Wrapper classes are light wrappers for generated maps saved as @ref glos_frame_object
- * "frame objects" in metadata. These wrapper classes provide small data-focused
- * objects for simplified data access to frame objects.
- */
- inline xn::IRMap& WritableIRMap() { MakeDataWritable(); return m_writableIRMap; }
-
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline const XnIRMetaData* GetUnderlying() const { return &m_ir; }
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline XnIRMetaData* GetUnderlying() { return &m_ir; }
-
- private:
- // block copy ctor and assignment operator
- IRMetaData(const IRMetaData& other);
- IRMetaData& operator=(const IRMetaData&);
-
- XnIRMetaData m_ir;
- const xn::IRMap m_irMap;
- xn::IRMap m_writableIRMap;
- };
-
- /**
- * @ingroup cppref_meta_data
- * For saving the audio data from the @ref xn::AudioGenerator node.
- * This saved metadata object provides fast and easy access to the AudioGenerator node's
- * data and configuration information.
- */
- class AudioMetaData : public OutputMetaData
- {
- public:
- XN_PRAGMA_START_DISABLED_WARNING_SECTION(XN_UNALIGNED_ADDRESS_WARNING_ID);
- inline AudioMetaData() : OutputMetaData(&m_audio.pData)
- {
- xnOSMemSet(&m_audio, 0, sizeof(XnAudioMetaData));
- m_audio.pOutput = OutputMetaData::GetUnderlying();
- }
-
- XN_PRAGMA_STOP_DISABLED_WARNING_SECTION;
-
- /**
- * @brief Shallow-Copies an AudioMetaData object.
- *
- * @param [in] other source object.
- *
- * @remarks Note that the data buffer is not copied, and that both object will point to the same buffer.
- */
- inline void InitFrom(const AudioMetaData& other)
- {
- xnCopyAudioMetaData(&m_audio, &other.m_audio);
- }
-
- /**
- * @brief Gets the number of channels in each sample. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt8 NumberOfChannels() const { return m_audio.Wave.nChannels; }
- /**
- * @brief Gets the number of channels in each sample. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt8& NumberOfChannels() { return m_audio.Wave.nChannels; }
-
- /**
- * @brief Gets the rate at which the audio interface was sampled. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt32 SampleRate() const { return m_audio.Wave.nSampleRate; }
- /**
- * @brief Gets the rate at which the audio interface was sampled. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt32& SampleRate() { return m_audio.Wave.nSampleRate; }
-
- /**
- * @brief Gets the number of bits per channel in a sample. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt16 BitsPerSample() const { return m_audio.Wave.nBitsPerSample; }
- /**
- * @brief Gets the number of bits per channel in a sample. This is a packet configuration setting associated with the saved audio metadata object.
- */
- inline XnUInt16& BitsPerSample() { return m_audio.Wave.nBitsPerSample; }
-
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline const XnAudioMetaData* GetUnderlying() const { return &m_audio; }
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline XnAudioMetaData* GetUnderlying() { return &m_audio; }
-
- private:
- // block copy ctor and assignment operator
- AudioMetaData(const AudioMetaData& other);
- AudioMetaData& operator=(const AudioMetaData&);
-
- XnAudioMetaData m_audio;
- };
-
- /**
- * @ingroup cppref_meta_data
- * Saves the @ref glos_frame_object "frame object" (data and configuration)
- * from the @ref xn::SceneAnalyzer node. This @ref glos_frame_object "frame object"
- * is a snapshot of the generated scene data and its associated configuration information
- * at a certain point in time. This metadata provides fast and easy access to the SceneAnalyzer
- * node's saved frame object.
- */
- class SceneMetaData : public MapMetaData
- {
- public:
- inline SceneMetaData() :
- MapMetaData(XN_PIXEL_FORMAT_GRAYSCALE_16_BIT, (const XnUInt8**)&m_scene.pData),
- m_labelMap(const_cast<XnLabel*&>(m_scene.pData), MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y),
- m_writableLabelMap((XnLabel*&)m_pAllocatedData, MapMetaData::GetUnderlying()->Res.X, MapMetaData::GetUnderlying()->Res.Y)
- {
- xnOSMemSet(&m_scene, 0, sizeof(XnSceneMetaData));
- m_scene.pMap = MapMetaData::GetUnderlying();
- }
-
- /**
- * @brief Shallow-Copies an SceneMetaData object.
- *
- * @param [in] other source object.
- *
- * @remarks Note that the data buffer is not copied, and that both object will point to the same buffer.
- */
- inline void InitFrom(const SceneMetaData& other)
- {
- xnCopySceneMetaData(&m_scene, &other.m_scene);
- }
-
- /**
- * Shallow copies another SceneMetaData object, and then @ref ReAdjust it.
- *
- * @param [in] other source object
- * @param [in] nXRes requested number of columns in the map
- * @param [in] nYRes requested number of rows in the map
- * @param [in] pExternalBuffer Optional. An external buffer matching requested resolution. If NULL,
- * A buffer will be allocated.
- */
- inline XnStatus InitFrom(const SceneMetaData& other, XnUInt32 nXRes, XnUInt32 nYRes, const XnLabel* pExternalBuffer)
- {
- InitFrom(other);
- return ReAdjust(nXRes, nYRes, pExternalBuffer);
- }
-
- /**
- * Performs a deep-copy of another metadata object (including duplication of the data buffer)
- *
- * @param [in] other source object
- */
- XnStatus CopyFrom(const SceneMetaData& other)
- {
- // copy props
- xnCopySceneMetaData(&m_scene, &other.m_scene);
- // and make a copy of the data (this will allocate and copy data)
- return MakeDataWritable();
- }
-
- /**
- * @copydoc DepthMetaData::ReAdjust
- */
- XnStatus ReAdjust(XnUInt32 nXRes, XnUInt32 nYRes, const XnLabel* pExternalBuffer = NULL)
- {
- return MapMetaData::ReAdjust(nXRes, nYRes, (const XnUInt8*)pExternalBuffer);
- }
-
- /**
- * @brief Returns the scene map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first scene pixel in the map. The scene
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnLabel, i.e. 16-bit integer values, where every
- * user has a distinct label.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnLabel* Data() const { return (const XnLabel*)MapMetaData::Data(); }
- /**
- * @brief Returns the scene map.
- *
- * <b>Remarks</b>
- *
- * This method returns a pointer to the first scene pixel in the map. The scene
- * map is implemented as a row-major order compact layout of pixels in the map.
- *
- * The pixel format of the map is XnLabel, i.e. 16-bit integer values, where every
- * user has a distinct label.
- *
- * This method is reimplemented from the @ref xn::OutputMetaData class.
- */
- inline const XnLabel*& Data() { return (const XnLabel*&)MapMetaData::Data(); }
-
- /**
- * @copydoc OutputMetaData::WritableData
- */
- inline XnLabel* WritableData() { return (XnLabel*)MapMetaData::WritableData(); }
-
- /**
- * Gets a light object wrapping the label map
- */
- inline const xn::LabelMap& LabelMap() const { return m_labelMap; }
- /**
- * Gets a light object wrapping the writable label map
- */
- inline xn::LabelMap& WritableLabelMap() { MakeDataWritable(); return m_writableLabelMap; }
-
- /**
- * Gets the label of a single pixel of the frame map by its index in the array.
- *
- * @param [in] nIndex The index of the pixel in the buffer.
- *
- * <b>Remarks</b>
- *
- * The values are of type @ref XnLabel. Each pixel's value labels it according to
- * user.
- */
- inline const XnLabel& operator[](XnUInt32 nIndex) const
- {
- XN_ASSERT(nIndex < (XRes()*YRes()));
- return Data()[nIndex];
- }
-
- /**
- * Gets the label of a single pixel of the frame map by its X and Y positions.
- *
- * @param [in] x X-coordinate of the pixel in the map
- * @param [in] y Y-coordinate of the pixel in the map
- *
- * <b>Remarks</b>
- *
- * The values are of type @ref XnLabel. Each pixel's value labels it according to
- * user.
- */
- inline const XnLabel& operator()(XnUInt32 x, XnUInt32 y) const
- {
- XN_ASSERT(x < XRes() && y < YRes());
- return (*this)[y*XRes() + x];
- }
-
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline const XnSceneMetaData* GetUnderlying() const { return &m_scene; }
- /**
- * @copydoc OutputMetaData::GetUnderlying
- */
- inline XnSceneMetaData* GetUnderlying() { return &m_scene; }
-
- private:
- // block copy ctor and assignment operator
- SceneMetaData(const SceneMetaData& other);
- SceneMetaData& operator=(const SceneMetaData&);
-
- XnSceneMetaData m_scene;
- const xn::LabelMap m_labelMap;
- xn::LabelMap m_writableLabelMap;
- };
-
- //---------------------------------------------------------------------------
- // NodeWrapper
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The NodeWrapper class is the base class for all OpenNI production
- * node classes in C++, for example, the @ref xn::ProductionNode class and the @ref
- * xn::Generator class.
- *
- * The NodeWrapper class is the C++ API wrapper around the OpenNI C XnNodeHandle API.
- *
- * <b>Remarks:</b>
- *
- * A fundamental OpenNI concept that is critical to understand about nodes and node
- * creation is that all C++ objects are "smart pointers" to the actual nodes. The reason
- * why OpenNI is designed this way is so that the same node can be used to produce data
- * (or provide information) for more than just one (dependant) node or for more than
- * just one software component.
- *
- * When instantiating an object of this class, it doesn't point to any actual node. In order
- * to create an actual node, use one of the <code>Create()</code> methods (e.g. @ref DepthGenerator::Create()).
- */
- class NodeWrapper
- {
- public:
- friend class Context;
-
- /**
- * Ctor
- *
- * @param [in] hNode A node handle.
- */
- inline NodeWrapper(XnNodeHandle hNode) : m_hNode(NULL), m_hShuttingDownCallback(NULL)
- {
- SetHandle(hNode);
- }
-
- inline NodeWrapper(const NodeWrapper& other) : m_hNode(NULL), m_hShuttingDownCallback(NULL)
- {
- SetHandle(other.GetHandle());
- }
-
- inline NodeWrapper& operator=(const NodeWrapper& other)
- {
- SetHandle(other.GetHandle());
- return *this;
- }
-
- inline ~NodeWrapper()
- {
- SetHandle(NULL);
- }
-
- inline operator XnNodeHandle() const { return GetHandle(); }
-
- /**
- * Gets the underlying C handle.
- */
- inline XnNodeHandle GetHandle() const { return m_hNode; }
-
- /**
- * Checks if two node references point to the same actual node
- *
- * @param [in] other Another object
- */
- inline XnBool operator==(const NodeWrapper& other)
- {
- return (GetHandle() == other.GetHandle());
- }
-
- /**
- * Checks if two node references do <i>not</i> point to the same actual node.
- *
- * @param [in] other Another object
- */
- inline XnBool operator!=(const NodeWrapper& other)
- {
- return (GetHandle() != other.GetHandle());
- }
-
- /** @brief
- * This method checks that this object points to an <i>actual</i> node (that has
- * been 'created') and does not point to NULL.
- *
- * Returns TRUE if the object points to a node, i.e., the node has been 'created';
- * FALSE otherwise.
- *
- * <b>Remarks</b>
- *
- * This method is a very important for managing nodes in the production graph. This
- * check is concerned with the stage before actually creating the node, i.e., before
- * invoking the node's <code>Create()</code> method.
- */
- inline XnBool IsValid() const { return (GetHandle() != NULL); }
-
- /*
- * @brief Gets the instance name of a node. Unless the application made a specific
- * request for a specific name, the name will be of the form: "Depth1", "Image2", etc.
- */
- const XnChar* GetName() const {return xnGetNodeName(GetHandle()); }
-
- /**
- * @copybrief xnProductionNodeAddRef
- * For full details and usage, see @ref xnProductionNodeAddRef
- */
- inline XnStatus AddRef() { return xnProductionNodeAddRef(GetHandle()); }
-
- /**
- * Unreference a production node, decreasing its reference count by 1. If the reference count reaches
- * zero, the node will be destroyed.
- */
- inline void Release()
- {
- SetHandle(NULL);
- }
-
-
- /**
- * Replaces the object being pointed.
- */
- inline void SetHandle(XnNodeHandle hNode)
- {
- if (m_hNode == hNode)
- {
- // Optimization: do nothing
- return;
- }
-
- // check currently held node. If we're holding a node, release it
- if (m_hNode != NULL)
- {
- XnContext* pContext = xnGetRefContextFromNodeHandle(m_hNode);
- xnContextUnregisterFromShutdown(pContext, m_hShuttingDownCallback);
- xnContextRelease(pContext);
- xnProductionNodeRelease(m_hNode);
- }
-
- // check new node handle, if it points to a node, add ref to it
- if (hNode != NULL)
- {
- XnStatus nRetVal = xnProductionNodeAddRef(hNode);
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- XN_REFERENCE_VARIABLE(nRetVal);
-
- XnContext* pContext = xnGetRefContextFromNodeHandle(hNode);
-
- nRetVal = xnContextRegisterForShutdown(pContext, ContextShuttingDownCallback, this, &m_hShuttingDownCallback);
- XN_ASSERT(nRetVal == XN_STATUS_OK);
-
- xnContextRelease(pContext);
- }
-
- m_hNode = hNode;
- }
-
- inline void TakeOwnership(XnNodeHandle hNode)
- {
- SetHandle(hNode);
-
- if (hNode != NULL)
- {
- xnProductionNodeRelease(hNode);
- }
- }
-
- /** @cond */
- inline XnStatus XN_API_DEPRECATED("Please use AddRef() instead.") Ref() { return AddRef(); }
- inline void XN_API_DEPRECATED("Please use Release() instead.") Unref() { Release(); }
- /** @endcond */
-
- private:
- XnNodeHandle m_hNode;
- XnCallbackHandle m_hShuttingDownCallback;
-
- static void XN_CALLBACK_TYPE ContextShuttingDownCallback(XnContext* /*pContext*/, void* pCookie)
- {
- NodeWrapper* pThis = (NodeWrapper*)pCookie;
- pThis->m_hNode = NULL;
- }
- };
-
- //---------------------------------------------------------------------------
- // Node Info
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_graph_mgmt
- * <b>Purpose:</b> This class provides functionality for getting information about a
- * @ref node_alternative "node alternative". A @ref node_alternative is either an existing
- * node, or a not-yet instantiated alternative.
- *
- * <b>Remarks:</b>
- *
- * Each instantiated node has a NodeInfo object and it can be accessed through the @ref
- * xn::ProductionNode::GetInfo() method.
- */
- class NodeInfo
- {
- public:
- /**
- * Ctor
- *
- * @param [in] pInfo The C object to wrap
- */
- NodeInfo(XnNodeInfo* pInfo) : m_pNeededNodes(NULL), m_bOwnerOfNode(FALSE)
- {
- SetUnderlyingObject(pInfo);
- }
-
- /**
- * Copy Ctor
- *
- * @param [in] other An object to copy from.
- */
- NodeInfo(const NodeInfo& other) : m_pNeededNodes(NULL), m_bOwnerOfNode(FALSE)
- {
- SetUnderlyingObject(other.m_pInfo);
- }
-
- /**
- * Dtor
- */
- ~NodeInfo()
- {
- SetUnderlyingObject(NULL);
- }
-
- /**
- * Assignment operator
- *
- * @param [in] other another object
- */
- inline NodeInfo& operator=(const NodeInfo& other)
- {
- SetUnderlyingObject(other.m_pInfo);
- return *this;
- }
-
- /**
- * Gets the underlying C object
- */
- inline operator XnNodeInfo*()
- {
- return m_pInfo;
- }
-
- /**
- * @brief Sets the instance name of the NodeInfo object. The name can only be set <i>before the instance is created</i>.
- *
- * @param [in] strName Name to give to this instance.
- */
- inline XnStatus SetInstanceName(const XnChar* strName)
- {
- return xnNodeInfoSetInstanceName(m_pInfo, strName);
- }
-
- /**
- * @brief Gets the description of a node alternative.
- *
- * <b>Remarks</b>
- *
- * When you instantiate a production node object -- for example a DepthGenerator
- * -- you cannot access it's NodeInfo object until after <code>Create()</code>
- * has been called.
- *
- * However - you can also get NodeInfo objects by enumeration, for example, from
- * the @ref xn::Context::EnumerateProductionTrees() "EnumerateProductionTrees()"
- * method.
- */
- inline const XnProductionNodeDescription& GetDescription() const
- {
- return *xnNodeInfoGetDescription(m_pInfo);
- }
-
- /**
- * @brief Gets the instance name of a node alternative.
- *
- * <b>Remarks</b>
- *
- * When you instantiate a DepthGenerator object, for example, you cannot access
- * it's NodeInfo object until after its <code>Create()</code> method has been called.
- *
- * However - you can also get NodeInfo objects by enumeration, for example, from
- * the EnumerateProductionTrees() method.
- */
- inline const XnChar* GetInstanceName() const
- {
- return xnNodeInfoGetInstanceName(m_pInfo);
- }
-
- /**
- * @brief Gets the creation information of the node alternative.
- *
- * <b>Remarks</b>
- *
- * A node's creation information is a way for a node implementation to have two
- * distinct instances of the same node class, that is two nodes.
- * For example, a Device node implementation can use this field for the name of
- * the device it represents, so that if two sensors are connected, each will have
- * a different value here.
- */
- inline const XnChar* GetCreationInfo() const
- {
- return xnNodeInfoGetCreationInfo(m_pInfo);
- }
-
- /*
- * @brief Gets the list of dependant nodes for this node alternative.
- * These are any other node alternatives that the node is dependant on.
- */
- inline NodeInfoList& GetNeededNodes() const;
-
- /**
- * Gets a reference to the node instance represented by this node alternative.
- *
- * @param node [in/out] The production node to be pointing to the node.
- *
- * @returns an error if this node info object does not point to an actual node.
- */
- inline XnStatus GetInstance(ProductionNode& node) const;
-
- /**
- * @copybrief xnNodeInfoGetAdditionalData
- * For full details and usage, see @ref xnNodeInfoGetAdditionalData
- */
- inline const void* GetAdditionalData() const
- {
- return xnNodeInfoGetAdditionalData(m_pInfo);
- }
-
- /**
- * @copybrief xnNodeInfoGetTreeStringRepresentation
- * For full details and usage, see @ref xnNodeInfoGetTreeStringRepresentation
- */
- inline XnStatus GetTreeStringRepresentation(XnChar* csResultBuffer, XnUInt32 nBufferSize) const
- {
- return xnNodeInfoGetTreeStringRepresentation(m_pInfo, csResultBuffer, nBufferSize);
- }
-
- private:
- inline void SetUnderlyingObject(XnNodeInfo* pInfo);
-
- XnNodeInfo* m_pInfo;
- mutable NodeInfoList* m_pNeededNodes;
- XnBool m_bOwnerOfNode; // backwards compatibility
- friend class Context;
- };
-
- //---------------------------------------------------------------------------
- // Query
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_graph_mgmt
- *
- * <b>Purpose:</b> Represents a query, containing filters regarding node info objects.
- * Note that the relation between the filters is an AND relation.
- *
- * <b>Usage: </b> Instantiate a Query object and then use the provided methods to set
- * up the filter conditions.
- *
- * <b>Remarks:</b>
- * The Query class provides a mechanism for searching and returning NodeInfo objects
- * from a list while filtering them according to a filter argument. The relation between
- * the filters is an AND relationship.
- *
- * The mechanism works by instantiating a Query object and then using the provided methods
- * to set up the filter conditions. The Query object is then used by a number of methods
- * that search for nodes, e.g., the Create() method.
- */
- class Query
- {
- public:
- inline Query() : m_bAllocated(TRUE)
- {
- xnNodeQueryAllocate(&m_pQuery);
- }
-
- inline Query(XnNodeQuery* pNodeQuery) : m_bAllocated(FALSE), m_pQuery(pNodeQuery)
- {
- }
-
- ~Query()
- {
- if (m_bAllocated)
- {
- xnNodeQueryFree(m_pQuery);
- }
- }
-
- /**
- * Gets the underlying C object
- */
- inline const XnNodeQuery* GetUnderlyingObject() const { return m_pQuery; }
- inline XnNodeQuery* GetUnderlyingObject() { return m_pQuery; }
-
- /**
- * @brief Sets in the Query object the vendor name to search for.
- * @param [in] strVendor Vendor Name.
- */
- inline XnStatus SetVendor(const XnChar* strVendor)
- {
- return xnNodeQuerySetVendor(m_pQuery, strVendor);
- }
-
- /**
- * @brief Sets in the Query object the implementation name to search for.
- * The same vendor might have more than one implementation, for example,
- * two @ref xn::DepthGenerator "DepthGenerators" "SensorV2" and "EEDepthGenerator".
- * This is not the same as the instance name.
- *
- * @param [in] strName Implementation name.
- */
- inline XnStatus SetName(const XnChar* strName)
- {
- return xnNodeQuerySetName(m_pQuery, strName);
- }
-
- /**
- * @brief Sets in the Query object the minimum required version allowed for the @ref node_alternative.
- */
- inline XnStatus SetMinVersion(const XnVersion& minVersion)
- {
- return xnNodeQuerySetMinVersion(m_pQuery, &minVersion);
- }
-
- /**
- * @brief Sets in the Query object the minimum required version allowed for the @ref node_alternative.
- */
- inline XnStatus SetMinVersion(const Version& minVersion)
- {
- return xnNodeQuerySetMinVersion(m_pQuery, minVersion.GetUnderlying());
- }
-
- /**
- * @brief Sets in the Query object the maximum required version allowed for the node alternative.
- */
- inline XnStatus SetMaxVersion(const XnVersion& maxVersion)
- {
- return xnNodeQuerySetMaxVersion(m_pQuery, &maxVersion);
- }
-
- /**
- * @brief Sets in the Query object the maximum required version allowed for the node alternative.
- */
- inline XnStatus SetMaxVersion(const Version& maxVersion)
- {
- return xnNodeQuerySetMaxVersion(m_pQuery, maxVersion.GetUnderlying());
- }
-
- /**
- * @brief Sets in the Query object a capability that the @ref node_alternative must support.
- *
- * @param [in] strNeededCapability Name of the capability that the @ref node_alternative
- * must support.
- *
- * <b>Remarks</b>
- *
- * Note that for checking if a capability is supported, the node must be created
- * if it's not an already existing node. This operation might take a bit longer
- * than usual.
- */
- inline XnStatus AddSupportedCapability(const XnChar* strNeededCapability)
- {
- return xnNodeQueryAddSupportedCapability(m_pQuery, strNeededCapability);
- }
-
- /**
- * @brief Sets in the Query object a MapOutput mode that the @ref node_alternative must support.
- *
- * @param [in] MapOutputMode Map output mode. Each field of the mode can be set to
- * (-1), meaning results will not be filtered by this field.
- *
- * @remark Note that for checking if a capability is supported, the node must be created
- * if it's not an already existing node. This operation might take a bit longer
- * than usual.
- */
- inline XnStatus AddSupportedMapOutputMode(const XnMapOutputMode& MapOutputMode)
- {
- return xnNodeQueryAddSupportedMapOutputMode(m_pQuery, &MapOutputMode);
- }
-
- /**
- * @copybrief xnNodeQuerySetSupportedMinUserPositions
- * For full details and usage, see @ref xnNodeQuerySetSupportedMinUserPositions
- */
- inline XnStatus SetSupportedMinUserPositions(const XnUInt32 nCount)
- {
- return xnNodeQuerySetSupportedMinUserPositions(m_pQuery, nCount);
- }
-
- /**
- * @brief Sets in the Query object that the query will return only existing nodes,
- * i.e., nodes that have been created, in other words their <code>Create()</code> method has been called.
- *
- * @param [in] bExistingNode TRUE to return only existing nodes, FALSE otherwise.
- *
- * <b>Remarks</b>
- *
- * Note that there are many ways to create nodes, not just by their @ref create_method
- * "Create() method".
- */
- inline XnStatus SetExistingNodeOnly(XnBool bExistingNode)
- {
- return xnNodeQuerySetExistingNodeOnly(m_pQuery, bExistingNode);
- }
-
- /**
- * @brief Sets in the Query object that a specified node must be a dependant of the named node type.
- * @param [in] strInstanceName Name of the needed node.
- */
- inline XnStatus AddNeededNode(const XnChar* strInstanceName)
- {
- return xnNodeQueryAddNeededNode(m_pQuery, strInstanceName);
- }
-
- /**
- * @brief Sets the creation information field of the Query object. This relates to the creation information of the @ref xn::NodeInfo class.
- * @param [in] strCreationInfo Creation information to set in the Query object.
- */
- inline XnStatus SetCreationInfo(const XnChar* strCreationInfo)
- {
- return xnNodeQuerySetCreationInfo(m_pQuery, strCreationInfo);
- }
-
- private:
- XnNodeQuery* m_pQuery;
- XnBool m_bAllocated;
- };
-
- //---------------------------------------------------------------------------
- // Node Info List
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_graph_mgmt
- * A NodeInfoList object contains a list of @ref NodeInfo objects.
- */
- class NodeInfoList
- {
- public:
- /**
- * Represents an iterator over a @ref NodeInfoList list.
- */
- class Iterator
- {
- public:
- friend class NodeInfoList;
-
- /**
- * Returns whether the iterator points to the same location as another iterator.
- *
- * @param [in] other Another iterator
- *
- * <b>Remarks</b>
- *
- * This method can be used for checking if the two iterators are pointing to
- * the same NodeInfo object.
- *
- * Note that the two iterators can also both point to NULL.
- */
- XnBool operator==(const Iterator& other) const
- {
- return m_it.pCurrent == other.m_it.pCurrent;
- }
-
- /**
- * Returns whether the iterator points to a different location than another
- * iterator.
- *
- * @param [in] other Another iterator
- */
- XnBool operator!=(const Iterator& other) const
- {
- return m_it.pCurrent != other.m_it.pCurrent;
- }
-
- /**
- * Moves the iterator to the next object. If the end of the list was reached,
- * the iterator will now be equal to @ref NodeInfoList::End().
- */
- inline Iterator& operator++()
- {
- UpdateInternalObject(xnNodeInfoListGetNext(m_it));
- return *this;
- }
-
- /**
- * Returns an iterator pointing at the next object. If the end of the list was
- * reached, that iterator will now be equal to @ref NodeInfoList::End().
- */
- inline Iterator operator++(int)
- {
- XnNodeInfoListIterator curr = m_it;
- UpdateInternalObject(xnNodeInfoListGetNext(m_it));
- return Iterator(curr);
- }
-
- /**
- * Moves the iterator to the previous object.
- */
- inline Iterator& operator--()
- {
- UpdateInternalObject(xnNodeInfoListGetPrevious(m_it));
- return *this;
- }
-
- /**
- * Returns an iterator pointing at the previous object.
- */
- inline Iterator operator--(int)
- {
- XnNodeInfoListIterator curr = m_it;
- UpdateInternalObject(xnNodeInfoListGetPrevious(m_it));
- return Iterator(curr);
- }
-
- /**
- * Gets the @ref NodeInfo object pointed by the iterator.
- */
- inline NodeInfo operator*()
- {
- return m_Info;
- }
-
- private:
- inline Iterator(XnNodeInfoListIterator it) : m_Info(NULL)
- {
- UpdateInternalObject(it);
- }
-
- inline void UpdateInternalObject(XnNodeInfoListIterator it)
- {
- m_it = it;
- if (xnNodeInfoListIteratorIsValid(it))
- {
- XnNodeInfo* pInfo = xnNodeInfoListGetCurrent(it);
- m_Info = NodeInfo(pInfo);
- }
- else
- {
- m_Info = NodeInfo(NULL);
- }
- }
-
- NodeInfo m_Info;
- XnNodeInfoListIterator m_it;
- };
-
- /**
- * Creates a new @ref NodeInfoList object.
- */
- inline NodeInfoList()
- {
- xnNodeInfoListAllocate(&m_pList);
- m_bAllocated = TRUE;
- }
-
- /**
- * Creates a new @ref NodeInfoList object by wrapping a C @ref XnNodeInfoList object.
- * Note that this list will not be freed upon destruction.
- *
- * @param [in] pList The list to wrap.
- */
- inline NodeInfoList(XnNodeInfoList* pList) : m_pList(pList), m_bAllocated(FALSE) {}
-
- inline ~NodeInfoList()
- {
- FreeImpl();
- }
-
- /**
- * Gets the underlying C object.
- */
- inline XnNodeInfoList* GetUnderlyingObject() const { return m_pList; }
-
- /**
- * Replaces the underlying object, taking ownership of the object (meaning, it
- * will be freed upon destruction).
- *
- * @param [in] pList The list to wrap.
- */
- inline void ReplaceUnderlyingObject(XnNodeInfoList* pList)
- {
- FreeImpl();
- m_pList = pList;
- m_bAllocated = TRUE;
- }
-
- /**
- * @copybrief xnNodeInfoListAdd
- * For full details and usage, see @ref xnNodeInfoListAdd
- */
- inline XnStatus Add(XnProductionNodeDescription& description, const XnChar* strCreationInfo, NodeInfoList* pNeededNodes)
- {
- XnNodeInfoList* pList = (pNeededNodes == NULL) ? NULL : pNeededNodes->GetUnderlyingObject();
- return xnNodeInfoListAdd(m_pList, &description, strCreationInfo, pList);
- }
-
- /**
- * @copybrief xnNodeInfoListAddEx
- * For full details and usage, see @ref xnNodeInfoListAddEx
- */
- inline XnStatus AddEx(XnProductionNodeDescription& description, const XnChar* strCreationInfo, NodeInfoList* pNeededNodes, const void* pAdditionalData, XnFreeHandler pFreeHandler)
- {
- XnNodeInfoList* pList = (pNeededNodes == NULL) ? NULL : pNeededNodes->GetUnderlyingObject();
- return xnNodeInfoListAddEx(m_pList, &description, strCreationInfo, pList, pAdditionalData, pFreeHandler);
- }
-
- /**
- * @copybrief xnNodeInfoListAddNode
- * For full details and usage, see @ref xnNodeInfoListAddNode
- */
- inline XnStatus AddNode(NodeInfo& info)
- {
- return xnNodeInfoListAddNode(m_pList, info);
- }
-
- /**
- * @copybrief xnNodeInfoListAddNodeFromList
- * For full details and usage, see @ref xnNodeInfoListAddNodeFromList
- */
- inline XnStatus AddNodeFromAnotherList(Iterator& it)
- {
- return xnNodeInfoListAddNodeFromList(m_pList, it.m_it);
- }
-
- /**
- * Returns an iterator to the beginning of the list. If the list
- * is empty, that iterator will be equal to @ref NodeInfoList::End().
- */
- inline Iterator Begin() const
- {
- return Iterator(xnNodeInfoListGetFirst(m_pList));
- }
-
- /**
- * Returns an iterator marking the end of the list.
- * This iterator does not point to a valid item.
- */
- inline Iterator End() const
- {
- XnNodeInfoListIterator it = { NULL };
- return Iterator(it);
- }
-
- /**
- * Returns an iterator to the reverse beginning of the list. If the list
- * is empty, that iterator will be equal to @ref NodeInfoList::REnd().
- */
- inline Iterator RBegin() const
- {
- return Iterator(xnNodeInfoListGetLast(m_pList));
- }
-
- /**
- * Returns an iterator marking the reverse end of the list.
- * This iterator does not point to a valid item.
- */
- inline Iterator REnd() const
- {
- XnNodeInfoListIterator it = { NULL };
- return Iterator(it);
- }
-
- /**
- * @copybrief xnNodeInfoListRemove
- * For full details and usage, see @ref xnNodeInfoListRemove
- */
- inline XnStatus Remove(Iterator& it)
- {
- return xnNodeInfoListRemove(m_pList, it.m_it);
- }
-
- /**
- * @copybrief xnNodeInfoListClear
- * For full details and usage, see @ref xnNodeInfoListClear
- */
- inline XnStatus Clear()
- {
- return xnNodeInfoListClear(m_pList);
- }
-
- /**
- * @copybrief xnNodeInfoListAppend
- * For full details and usage, see @ref xnNodeInfoListAppend
- */
- inline XnStatus Append(NodeInfoList& other)
- {
- return xnNodeInfoListAppend(m_pList, other.GetUnderlyingObject());
- }
-
- /**
- * @brief Checks if the list NodeInfoList object is empty.
- */
- inline XnBool IsEmpty()
- {
- return xnNodeInfoListIsEmpty(m_pList);
- }
-
- /**
- * @copybrief xnNodeQueryFilterList
- * For full details and usage, see @ref xnNodeQueryFilterList
- */
- inline XnStatus FilterList(Context& context, Query& query);
-
- private:
- inline void FreeImpl()
- {
- if (m_bAllocated)
- {
- xnNodeInfoListFree(m_pList);
- m_bAllocated = FALSE;
- m_pList = NULL;
- }
- }
-
- XnNodeInfoList* m_pList;
- XnBool m_bAllocated;
- };
-
- //---------------------------------------------------------------------------
- // Production Nodes Functionality
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_prd_func
- * Base class for all capabilities.
- */
- class Capability : public NodeWrapper
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode The node handle
- */
- Capability(XnNodeHandle hNode) : NodeWrapper(hNode) {}
- Capability(const NodeWrapper& node) : NodeWrapper(node) {}
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The Error State capability lets a node report that it has entered
- * an error state, and so might not function correctly.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref ProductionNode::GetErrorStateCap()
- * to obtain an instance.
- *
- * <b>Remarks:</b>
- *
- * An application can use the @ref GetErrorState() method to get the error state of
- * a node at any time, and it can also register a callback function to be called whenever
- * the error state changes.
- *
- * The error state of a node is represented using @ref XnStatus. A value of @ref XN_STATUS_OK
- * means the node is OK. Any other value represents some sort of error situation in
- * the node.
- *
- * <b>Event: 'Error State Change'</b>
- *
- * Signals that the @ref holder_node "holder node"'s error state has changed.
- *
- * This is the same value that can be obtained by the @ref GetErrorState() method.
- *
- * This event can be used by the application to get a signal as soon as any error occurs
- * in the @ref holder_node "holder node". By handling all the error states of all nodes,
- * the application can use this event to respond immediately to any error situation.
- *
- * Use @ref RegisterToErrorStateChange() and @ref UnregisterFromErrorStateChange() for using this event.
- *
- * Instead of registering to the error state callback of all the nodes in the context,
- * an application may register to the 'Global Error State Change' event - see @ref context_global_error_event.
- */
- class ErrorStateCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- ErrorStateCapability(XnNodeHandle hNode) : Capability(hNode) {}
- ErrorStateCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Gets the current error state of the holding node.
- */
- inline XnStatus GetErrorState() const
- {
- return xnGetNodeErrorState(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Error State Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback. To be used for unregistering the callback.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToErrorStateChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToNodeErrorStateChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Error State Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromErrorStateChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromNodeErrorStateChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Allows access to general integer capabilities functions - see @ref general_int for
- * additional details.
- */
- class GeneralIntCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- * @param [in] strCap Name of the capability
- */
- GeneralIntCapability(XnNodeHandle hNode, const XnChar* strCap) : Capability(hNode), m_strCap(strCap) {}
- GeneralIntCapability(const NodeWrapper& node, const XnChar* strCap) : Capability(node), m_strCap(strCap) {}
-
- /**
- * @copybrief xnGetGeneralIntRange
- * For full details and usage, see @ref xnGetGeneralIntRange
- */
- inline void GetRange(XnInt32& nMin, XnInt32& nMax, XnInt32& nStep, XnInt32& nDefault, XnBool& bIsAutoSupported) const
- {
- xnGetGeneralIntRange(GetHandle(), m_strCap, &nMin, &nMax, &nStep, &nDefault, &bIsAutoSupported);
- }
-
- /**
- * @copybrief xnGetGeneralIntValue
- * For full details and usage, see @ref xnGetGeneralIntValue
- */
- inline XnInt32 Get()
- {
- XnInt32 nValue;
- xnGetGeneralIntValue(GetHandle(), m_strCap, &nValue);
- return nValue;
- }
-
- /**
- * @copybrief xnSetGeneralIntValue
- * For full details and usage, see @ref xnSetGeneralIntValue
- */
- inline XnStatus Set(XnInt32 nValue)
- {
- return xnSetGeneralIntValue(GetHandle(), m_strCap, nValue);
- }
-
- /**
- * @brief Registers an event handler for the 'Value Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- XnStatus RegisterToValueChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback);
-
- /**
- * @brief Unregisters the event handler for the 'Value Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- void UnregisterFromValueChange(XnCallbackHandle hCallback);
-
- private:
- const XnChar* m_strCap;
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The ProductionNode class is a base class for all production nodes
- * and generator nodes. As such, the ProductionNode class is the fundamental base class
- * of the entire OpenNI interface for building and accessing the production graph.
- *
- * <b>Usage:</b> Base class for all production nodes; not usually instantiated.
- *
- * <b>Class Overview:</b>
- *
- * The OpenNI Production Graph is comprised entirely of production nodes of one type
- * or another. The ProductionNode class itself exposes a very limited functionality
- * set. This is the most basic and common functionality set of all the nodes in the
- * graph.
- *
- * All types of core generator nodes are derived from this ProductionNode class, for
- * example, the @ref xn::DepthGenerator node and the @ref xn::Device node. Each node
- * type has its own set of methods that it supports.
- *
- * Two of the most important methods provided by the ProductionNode class are @ref IsCapabilitySupported()
- * and @ref GetContext(), both described further below.
- *
- * <b>Capabilities Mechanism:</b>
- *
- * In addition to being the base class for all core generator nodes, the ProductionNode
- * class also provides key support for the OpenNI capabilities mechanism. OpenNI defines
- * core functionality which is always supported by all node implementations of a specific node
- * type. Additional optional functionality is also defined by OpenNI and exposed
- * as "capabilities".
- * The ProductionNode class provides the @ref IsCapabilitySupported() method to check
- * if this specific implementation supports a certain capability.
- *
- * For a comprehensive overview to the Capabilities mechanism see @ref conc_capabilities
- * "Capabilities Mechanism".
- */
- class ProductionNode : public NodeWrapper
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline ProductionNode(XnNodeHandle hNode = NULL) : NodeWrapper(hNode) {}
- inline ProductionNode(const NodeWrapper& other) : NodeWrapper(other) {}
-
- /**
- * @brief Gets information about the node.
- *
- * <b>Remarks</b>
- *
- * This method returns a @ref xn::NodeInfo object containing information such as
- * the node description and the identities of dependent nodes.
- */
- inline NodeInfo GetInfo() const { return NodeInfo(xnGetNodeInfo(GetHandle())); }
-
- /**
- * @copybrief xnAddNeededNode
- * For full details and usage, see @ref xnAddNeededNode
- */
- inline XnStatus AddNeededNode(ProductionNode& needed)
- {
- return xnAddNeededNode(GetHandle(), needed.GetHandle());
- }
-
- /**
- * @copybrief xnRemoveNeededNode
- * For full details and usage, see @ref xnRemoveNeededNode
- */
- inline XnStatus RemoveNeededNode(ProductionNode& needed)
- {
- return xnRemoveNeededNode(GetHandle(), needed.GetHandle());
- }
-
- /**
- * @brief Gets the node's context.
- *
- * @param [out] context The node's context.
- *
- * <b>Remarks</b>
- *
- * This method is useful for applications that have to take into account the
- * possibility of multiple contexts. Using this method, the application can access
- * all other nodes and other resources within the same context.
- */
- inline void GetContext(Context& context) const;
-
- /**
- * @brief Gets the node's context
- *
- * <b>Remarks</b>
- *
- * This method is useful for applications that have to take into account the
- * possibility of multiple contexts. Using this method, the application can access
- * all other nodes and other resources within the same context.
- */
- inline Context GetContext() const;
-
- /**
- * @brief Returns whether a production node supports a specific capability.
- *
- * @param [in] strCapabilityName The capability name to check.
- *
- * <b>Remarks</b>
- *
- * The application specifies the capability by supplying the capability's name in
- * the <i>strCapabilityName</i> parameter. Before attempting to access any capability
- * this method should be used to check that this node actually supports this capability.
- */
- inline XnBool IsCapabilitySupported(const XnChar* strCapabilityName) const
- {
- return xnIsCapabilitySupported(GetHandle(), strCapabilityName);
- }
-
- /**
- * @copybrief xnSetIntProperty
- * For full details and usage, see @ref xnSetIntProperty
- */
- inline XnStatus SetIntProperty(const XnChar* strName, XnUInt64 nValue)
- {
- return xnSetIntProperty(GetHandle(), strName, nValue);
- }
-
- /**
- * @copybrief xnSetRealProperty
- * For full details and usage, see @ref xnSetRealProperty
- */
- inline XnStatus SetRealProperty(const XnChar* strName, XnDouble dValue)
- {
- return xnSetRealProperty(GetHandle(), strName, dValue);
- }
-
- /**
- * @copybrief xnSetStringProperty
- * For full details and usage, see @ref xnSetStringProperty
- */
- inline XnStatus SetStringProperty(const XnChar* strName, const XnChar* strValue)
- {
- return xnSetStringProperty(GetHandle(), strName, strValue);
- }
-
- /**
- * @copybrief xnSetGeneralProperty
- * For full details and usage, see @ref xnSetGeneralProperty
- */
- inline XnStatus SetGeneralProperty(const XnChar* strName, XnUInt32 nBufferSize, const void* pBuffer)
- {
- return xnSetGeneralProperty(GetHandle(), strName, nBufferSize, pBuffer);
- }
-
- /**
- * @copybrief xnGetIntProperty
- * For full details and usage, see @ref xnGetIntProperty
- */
- inline XnStatus GetIntProperty(const XnChar* strName, XnUInt64& nValue) const
- {
- return xnGetIntProperty(GetHandle(), strName, &nValue);
- }
-
- /**
- * @copybrief xnGetRealProperty
- * For full details and usage, see @ref xnGetRealProperty
- */
- inline XnStatus GetRealProperty(const XnChar* strName, XnDouble &dValue) const
- {
- return xnGetRealProperty(GetHandle(), strName, &dValue);
- }
-
- /**
- * @copybrief xnGetStringProperty
- * For full details and usage, see @ref xnGetStringProperty
- */
- inline XnStatus GetStringProperty(const XnChar* strName, XnChar* csValue, XnUInt32 nBufSize) const
- {
- return xnGetStringProperty(GetHandle(), strName, csValue, nBufSize);
- }
-
- /**
- * @copybrief xnGetGeneralProperty
- * For full details and usage, see @ref xnGetGeneralProperty
- */
- inline XnStatus GetGeneralProperty(const XnChar* strName, XnUInt32 nBufferSize, void* pBuffer) const
- {
- return xnGetGeneralProperty(GetHandle(), strName, nBufferSize, pBuffer);
- }
-
- /**
- * @copybrief xnLockNodeForChanges
- * For full details and usage, see @ref xnLockNodeForChanges
- */
- inline XnStatus LockForChanges(XnLockHandle* phLock)
- {
- return xnLockNodeForChanges(GetHandle(), phLock);
- }
-
- /**
- * @copybrief xnUnlockNodeForChanges
- * For full details and usage, see @ref xnUnlockNodeForChanges
- */
- inline void UnlockForChanges(XnLockHandle hLock)
- {
- xnUnlockNodeForChanges(GetHandle(), hLock);
- }
-
- /**
- * @copybrief xnLockedNodeStartChanges
- * For full details and usage, see @ref xnLockedNodeStartChanges
- */
- inline XnStatus LockedNodeStartChanges(XnLockHandle hLock)
- {
- return xnLockedNodeStartChanges(GetHandle(), hLock);
- }
-
- /**
- * @copybrief xnLockedNodeEndChanges
- * For full details and usage, see @ref xnLockedNodeEndChanges
- */
- inline void LockedNodeEndChanges(XnLockHandle hLock)
- {
- xnLockedNodeEndChanges(GetHandle(), hLock);
- }
-
- /**
- * @brief Gets an @ref xn::ErrorStateCapability object for accessing the functionality
- * of the Error State capability.
- *
- * <b>Remarks:</b>
- * The application is responsible for first checking if @ref XN_CAPABILITY_ERROR_STATE
- * is supported by calling @ref xn::ProductionNode::IsCapabilitySupported().
- */
- inline const ErrorStateCapability GetErrorStateCap() const
- {
- return ErrorStateCapability(GetHandle());
- }
-
- /**
- * @brief Gets an @ref xn::ErrorStateCapability object for accessing the functionality
- * of the Error State capability.
- *
- * <b>Remarks:</b>
- * The application is responsible for first checking if @ref XN_CAPABILITY_ERROR_STATE
- * is supported by calling @ref xn::ProductionNode::IsCapabilitySupported()
- */
- inline ErrorStateCapability GetErrorStateCap()
- {
- return ErrorStateCapability(GetHandle());
- }
-
- /**
- * @brief Gets an @ref GeneralIntCapability object for accessing the capability
- * functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application responsibility to check first if the capability is supported
- * by calling @ref IsCapabilitySupported().
- *
- * @param [in] strCapability Name of the capability to get
- */
- inline GeneralIntCapability GetGeneralIntCap(const XnChar* strCapability)
- {
- return GeneralIntCapability(GetHandle(), strCapability);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The DeviceIdentificationCapability object allows an application to
- * receive some device-specific information about a hardware device, like its serial
- * number and its model name.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref Device::GetIdentificationCap()
- * to obtain an instance.
- */
- class DeviceIdentificationCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- DeviceIdentificationCapability(XnNodeHandle hNode) : Capability(hNode) {}
- DeviceIdentificationCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Gets the name of the device holding this capability object.
- *
- * @param [in] strBuffer Buffer to accept the device information.
- * @param [in,out] nBufferSize Size of the buffer.
- *
- * @retval XN_STATUS_OK Operation succeeded.
- * @retval XN_STATUS_OUTPUT_BUFFER_OVERFLOW The size of the buffer is not sufficient.
- */
- inline XnStatus GetDeviceName(XnChar* strBuffer, XnUInt32 nBufferSize)
- {
- return xnGetDeviceName(GetHandle(), strBuffer, &nBufferSize);
- }
-
- /**
- * @brief Gets the vendor-specific name of the device holding this capability object.
- *
- * @param [in] strBuffer Buffer to accept the device information.
- * @param [in,out] nBufferSize Size of the buffer.
- *
- * @retval XN_STATUS_OK Operation succeeded.
- * @retval XN_STATUS_OUTPUT_BUFFER_OVERFLOW The size of the buffer is not sufficient.
- */
- inline XnStatus GetVendorSpecificData(XnChar* strBuffer, XnUInt32 nBufferSize)
- {
- return xnGetVendorSpecificData(GetHandle(), strBuffer, &nBufferSize);
- }
-
- /**
- * @brief Gets the vendor-specific name of the device holding this capability object.
- *
- * @param [in] strBuffer Buffer to accept the serial number
- * @param [in,out] nBufferSize Size of the buffer.
- *
- * @retval XN_STATUS_OK Operation succeeded.
- * @retval XN_STATUS_OUTPUT_BUFFER_OVERFLOW The size of the buffer is not sufficient.
- */
- inline XnStatus GetSerialNumber(XnChar* strBuffer, XnUInt32 nBufferSize)
- {
- return xnGetSerialNumber(GetHandle(), strBuffer, &nBufferSize);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> A smart pointer to a device node in the
- * production graph of a context.
- *
- * The device node represents a physical hardware device
- * currently connected in the system and used for generating data.
- * The Device node represents the hardware device by providing, for example,
- * the device's model name, serial number, and some vendor-specific data.
- * The Device node itself does not generate data.
- *
- * <b>Capabilities:</b> @ref DeviceIdentificationCapability
- */
- class Device : public ProductionNode
- {
- public:
- inline Device(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline Device(const NodeWrapper& other) : ProductionNode(other) {}
-
- /**
- * @brief Creates a Device node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks</b>
- *
- * See @ref create_method "Concepts: the Create() Method" for a detailed description
- * of the operation of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * Gets a @ref DeviceIdentificationCapability object for accessing device identification
- * functionality.
- *
- * <b>Remarks</b>
- *
- * If this node supports this method then the node can identify which device is
- * being used right now, for example, its name, serial number, and specific
- * vendors can place specific data.
- *
- * It is the application's responsibility to check first if @ref XN_CAPABILITY_DEVICE_IDENTIFICATION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline DeviceIdentificationCapability GetIdentificationCap()
- {
- return DeviceIdentificationCapability(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> Applying the MirrorCapability to a node allows enabling the Mirroring
- * mode on a per node basis. Compare this with enabling the Global Mirror, which applies
- * mirroring to any node supporting the Mirroring capability. To understand mirroring
- * see the Overview below.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref Generator::GetMirrorCap()
- * to obtain an instance.
- *
- * <b>Remarks:</b>
- *
- * When you stand facing the sensor device, and the image is processed directly,
- * the sensor "sees" your left hand at your right-hand side, and your right hand
- * at your left-hand side.
- *
- * If your movements are used to control an avatar, and that avatar is facing you then
- * the avatar on the screen is opposite: your right hand is facing the left of the avatar
- * on the screen, and your left hand is facing the right of the avatar.
- *
- * The effect of applying and enabling the Mirroring capability on a node makes all
- * the data replace right with left, and left with right.
- *
- * Thus, if mirroring is <i>disabled</i> (default), then when you raise your right hand,
- * the avatar on the screen opposite you correspondingly also raises its own right hand,
- * this being to the left of yourself.
- *
- * If mirroring is <i>enabled</i>, when you raise your right hand on the screen the
- * avatar opposite you mirrors you by raising its hand on your right, which is the avatar's
- * <i>left</i> hand.
- *
- * Enabling mirroring is useful when the avatar is facing the player. Disabling mirroring
- * is useful when the player sees the avatar from behind (for example in third person
- * shooters or to see yourself kicking a football).
- *
- * Changing the GlobalMirror flag affects mirroring in all existing nodes and in all
- * nodes to be created in the future - see @ref Context::SetGlobalMirror().
- *
- * <b>Event: 'Mirror Change'</b>
- *
- * Signals that the @ref holder_node "holder node"'s mirror configuration has been changed (also see @ref event_cmn_conf).
- *
- * Use @ref RegisterToMirrorChange() and @ref UnregisterFromMirrorChange() for using this event.
- *
- * Calling the @ref SetMirror() method raises this event.
- */
- class MirrorCapability : public Capability
- {
- public:
- inline MirrorCapability(XnNodeHandle hNode) : Capability(hNode) {}
- MirrorCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Sets the current mirror configuration of the @ref holder_node "holder node",
- * enabling or disabling mirroring. This configuration is used for generating the next frame.
- *
- * @param [in] bMirror TRUE for mirroring output, FALSE otherwise.
- */
- inline XnStatus SetMirror(XnBool bMirror)
- {
- return xnSetMirror(GetHandle(), bMirror);
- }
-
- /**
- * @brief Gets the current mirroring configuration of the @ref holder_node "holder node". This configuration is used for generating the next frame.
- */
- inline XnBool IsMirrored() const
- {
- return xnIsMirrored(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Mirror Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToMirrorChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToMirrorChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Mirror Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromMirrorChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromMirrorChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> The AlternativeViewPoint capability enables any type of map generator
- * (depth, image, or IR) to transform its data to appear as if the sensor is placed
- * in another location. The other location is represented by a second production node,
- * usually representing another sensor.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref Generator::GetAlternativeViewPointCap()
- * to obtain an instance.
- *
- * <b>Remarks:</b>
- *
- * This capability provides a solution for the situation where you want to impose
- * color over depth, but there is then the problem that the two sensing media (transducers)
- * are looking in slightly different directions. This capability superimposes the two
- * sensing media of one sensor.
- *
- * Other uses are also possible.
- *
- * @note The AlternativeViewPoint capability has nothing to do with the actual physical
- * position of a sensor. You could move the location of the sensor itself, but this
- * will not change the current viewpoint.
- *
- * <b>Event: 'Viewpoint Change' </b>
- *
- * Signals that the @ref holder_node "holder node"'s viewpoint has changed (also see @ref event_cmn_conf).
- *
- * Use @ref RegisterToViewPointChange() and @ref UnregisterFromViewPointChange() for using this event.
- *
- * Calling the @ref SetViewPoint() or @ref ResetViewPoint() methods raises this event.
- */
- class AlternativeViewPointCapability : public Capability
- {
- public:
- inline AlternativeViewPointCapability(XnNodeHandle hNode) : Capability(hNode) {}
- AlternativeViewPointCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Checks if the generator node holding this capability can change its output to appear
- * as if the sensor was placed at the viewpoint of another specific @ref xn::ProductionNode
- * "production node".
- *
- * @param [in] otherNode Other production node, whose viewpoint against which this
- * node's viewpoint is being checked.
- *
- * <b>Remarks</b>
- *
- * This is not the same as @ref xn::ProductionNode::IsCapabilitySupported(). Although
- * the node implementation supports this capability, it may nevertheless support only
- * the viewpoints of nodes of some specific sensors and not of other specific sensors.
- */
- inline XnBool IsViewPointSupported(ProductionNode& otherNode) const
- {
- return xnIsViewPointSupported(GetHandle(), otherNode.GetHandle());
- }
-
- /**
- * @brief Sets the current viewpoint of the holding generator node to look as if it
- * is placed at a different generator location. All further generated output will appear
- * as if the sensor was placed at the different location.
- *
- * @param [in] otherNode Viewpoint to be set.
- */
- inline XnStatus SetViewPoint(ProductionNode& otherNode)
- {
- return xnSetViewPoint(GetHandle(), otherNode.GetHandle());
- }
-
- /**
- * @brief Sets the viewpoint of the holding generator node to its normal viewpoint.
- */
- inline XnStatus ResetViewPoint()
- {
- return xnResetViewPoint(GetHandle());
- }
-
- /**
- * @brief Returns whether the @ref holder_node "holder node"'s viewpoint is the same
- * viewpoint as that of another specified node. Thus, this method is somewhat of an equality operator.
- *
- * @param [in] otherNode Other node, whose viewpoint is used for comparison with
- * the viewpoint of this node.
- */
- inline XnBool IsViewPointAs(ProductionNode& otherNode) const
- {
- return xnIsViewPointAs(GetHandle(), otherNode.GetHandle());
- }
-
- /**
- * @brief Registers a handler for the 'Viewpoint Change' event (see the above overview to this class).
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToViewPointChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToViewPointChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the the 'Viewpoint Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromViewPointChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromViewPointChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The Frame Sync capability allows frame synchronization between two
- * @ref xn::Generator "generator" nodes producing frame data. This lets the two sensors
- * output their frames at the same time. This allows smaller latency between two maps
- * of the same scene, for example, a depth map and an image map.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref Generator::GetFrameSyncCap()
- * to obtain an instance.
- *
- * <b>Event: 'Frame Sync Change'</b>
- *
- * Signals that the @ref holder_node "holder node"'s frame synchronization setting has
- * been changed. That is, this setting has changed from activated to deactivated, or
- * from deactivated to activated, or the frame synchronization has been changed and
- * is now synchronized with a different 'other node'.
- *
- * Use @ref RegisterToFrameSyncChange() and @ref UnregisterFromFrameSyncChange() for using this event.
- *
- * Calling the @ref FrameSyncWith() or @ref StopFrameSyncWith() methods raises this event.
- */
- class FrameSyncCapability : public Capability
- {
- public:
- inline FrameSyncCapability(XnNodeHandle hNode) : Capability(hNode) {}
- FrameSyncCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Returns whether the generator node holding this capability can
- * synchronize frames with the other specified node.
- *
- * @param [in] other Specifies the other node to be checked whether it can
- * frame-sync with the node holding this capability.
- * @returns TRUE if frame-sync to the other node is supported; FALSE otherwise.
- */
- inline XnBool CanFrameSyncWith(Generator& other) const;
-
- /**
- * @brief Activates frame synchronization with the other generator node.
- *
- * @param [in] other Specifies the other node to be frame sync-ed with the node
- * holding this capability.
- */
- inline XnStatus FrameSyncWith(Generator& other);
-
- /**
- * @brief Removes the frame sync between the node holding this capability and the specified other node.
- * @param [in] other Specifies the other node from which to remove the frame sync.
- */
- inline XnStatus StopFrameSyncWith(Generator& other);
-
- /**
- * @brief Returns whether a frame sync has been applied between the node holding this capability and
- * another specified node.
- * @param [in] other Specifies the other node for checking whether frame sync has
- * been applied.
- */
- inline XnBool IsFrameSyncedWith(Generator& other) const;
-
- /**
- * @brief Registers an event handler for the 'Frame Sync Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToFrameSyncChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToFrameSyncChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the 'Frame Sync Change' event handler.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromFrameSyncChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromFrameSyncChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> A generator node produces some type of data. This is in addition
- * to the node's basic characteristic, as a derivative of the @ref xn::ProductionNode
- * class, i.e., that it represents a logical entity in the OpenNI @ref prod_graph "Production
- * Graph".
- *
- * <b>Usage summary</b>: Immediate base class for all generator types. It itself is
- * not usually instantiated.
- *
- * <b>Class Overview:</b>
- *
- * Each generator can be in Generating state or Non-Generating state. The application makes
- * the node enter Generating state by calling the @ref xn::Generator::StartGenerating()
- * method.
- *
- * When a generator node is created, by default it is in Non-Generating state, so it
- * does not generate data.
- *
- * Generators have a default configuration (for example the FOV resolution) and an application
- * can change the default configuration before actual data generation starts.
- *
- * Once the application has completed configuring the generator node, the application
- * can cause the node to start generating data.
- *
- * Typically, the application will configure the generator only in the configuration
- * stage, i.e., in Non-Generating state. The application can usually also configure
- * the node while generating data, however configuration might then take longer and
- * the application could also lose some frames of data. For example, if the application
- * changes the resolution while in the Configuration stage (Non-Generating state), the
- * resolution change occurs immediately; but if the application changes the configuration
- * while the generator is generating data, the resolution change can take up to a few
- * seconds to occur.
- *
- * <b>Data Storage:</b>
- *
- * Each call to an @ref conc_updating_data "'Update Data'" method updates the generator
- * node's application buffer, making the latest data available for applications to access.
- * After a call to an @ref conc_updating_data "'Update Data'" method, all subsequent
- * calls to @ref GetData() will return exactly the same data until you call @ref conc_updating_data
- * "'Update Data'" again. The @ref conc_updating_data "'Update Data'" method can be
- * the generator node's own @ref WaitAndUpdateData() method or one of the Context's
- * @ref conc_updating_data "'WaitXUpdateAll'" methods.
- *
- * <b>Getting the Generated Data:</b>
- *
- * Generator nodes will not output data to make it available for getting, until the
- * application calls the node's WaitAndUpdateData() method (see below) or one of the
- * context's @ref conc_updating_data "'WaitXUpdateAll'" methods.
- *
- * @ref conc_updating_data__sample_code_cmn
- */
- class Generator : public ProductionNode
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline Generator(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline Generator(const NodeWrapper& other) : ProductionNode(other) {}
-
- /**
- * @brief Enters the node into Generating state.
- *
- * Enters the node into Generating state. In this state the node generates new frames.
- *
- * After the application has called this method it can call an @ref conc_updating_data
- * "'Update Data'" method, e.g., @ref xn::Generator::WaitAndUpdateData(), to make
- * a new frame available for getting. The application can then get the data (for
- * example, using a metadata GetData() method, or some other mechanism depending
- * on the type of node).
- *
- * <b>Remarks:</b>
- *
- * On entering the node into Generating state, OpenNI enters also all dependent
- * nodes into Generating state. For example, if a UserGenerator node depends on
- * data input from a DepthGenerator node, and the UserGenerator node is entered
- * into Generating state, then OpenNI will enter also the DepthGenerator node into
- * Generating state.
- */
- inline XnStatus StartGenerating()
- {
- return xnStartGenerating(GetHandle());
- }
-
- /**
- * @brief Returns whether the node is currently in Generating state.
- */
- inline XnBool IsGenerating() const
- {
- return xnIsGenerating(GetHandle());
- }
-
- /**
- * @brief Makes the node leave Generating state (enters Non-Generating state).
- *
- * <b>Remarks:</b>
- *
- * If the node has metadata, after calling this method the data is still available
- * as a saved @ref glos_frame_object "frame object" in the metadata object.
- */
- inline XnStatus StopGenerating()
- {
- return xnStopGenerating(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Generation State Change' event.
- *
- * Registers a callback function to be called when generation starts or
- * stops, i.e., when the generation state toggles between generating and not
- * generating.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToGenerationRunningChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle &hCallback)
- {
- return _RegisterToStateChange(xnRegisterToGenerationRunningChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the 'Generation State Change' event handler.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromGenerationRunningChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromGenerationRunningChange, GetHandle(), hCallback);
- }
-
- /**
- * @brief Registers an event handler for the 'New Data Available' event.
- *
- * The 'New Data Available' event is raised whenever a generator node has new data available. The new
- * data is available for updating, but can not yet be accessed by the application. The application
- * needs to call @ref conc_updating_data "'Update Data'" to gain access to that new data.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToNewDataAvailable(StateChangedHandler handler, void* pCookie, XnCallbackHandle &hCallback)
- {
- return _RegisterToStateChange(xnRegisterToNewDataAvailable, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'New Data Available' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromNewDataAvailable(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromNewDataAvailable, GetHandle(), hCallback);
- }
-
- /**
- * @brief Returns whether the node has new data available.
- * The new data is available for updating, but can not yet be accessed by the application. The application
- * needs to call @ref conc_updating_data "'Update Data'" to gain access to that new data.
- *
- * @param [out] pnTimestamp [Optional] If new data is available (TRUE is returned from the method),
- * this param will hold the timestamp of that new data.
- */
- inline XnBool IsNewDataAvailable(XnUInt64* pnTimestamp = NULL) const
- {
- return xnIsNewDataAvailable(GetHandle(), pnTimestamp);
- }
-
- /**
- * @brief Updates the generator node to the latest available data, first waiting for the node to have new data available.
- *
- * <b>Remarks:</b>
- *
- * This method requests from OpenNI to cause the node to update its application buffers
- * with new data, if it has new data available.
- *
- * At this stage the generator node has "generated" new data. This method returns a
- * success status. The application can now read the newly generated data.
- *
- * An error situation is defined as: after a preset timeout, the node has not yet notified
- * OpenNI it has new data available. On error, the method stops waiting and returns
- * an error status.
- *
- * @retval XN_STATUS_INVALID_OPERATION This production node is not a generator.
- * @retval XN_STATUS_WAIT_DATA_TIMEOUT No new data available within 2 seconds.
- */
- inline XnStatus WaitAndUpdateData()
- {
- return xnWaitAndUpdateData(GetHandle());
- }
-
- /**
- * Returns whether this node's frame data was updated by the most recent call to
- * any @ref conc_updating_data "'WaitXUpdateAll()'" function, e.g., @ref xn::Context::WaitAnyUpdateAll().
- */
- inline XnBool IsDataNew() const
- {
- return xnIsDataNew(GetHandle());
- }
-
- /**
- * @brief Gets the @ref frame_data "frame data" from the generator node. This is
- * the latest data that the generator node has generated.
- *
- * <b>Remarks:</b>
- *
- * This method gets the data directly from the Generator node; not from the metadata
- * object.
- *
- * Compare this method with the Data() method of the @ref xn::OutputMetaData object,
- * where the latter gets the data from the metadata object.
- * GetData() returns the same data as the GetMetaData().Data() method. However,
- * using the GetData() method is slightly more costly.
- *
- * The application usually should not use this method, but call each generator own
- * data access methods, e.g. DepthGenerator::GetDepthMap().
- */
- inline const void* GetData()
- {
- return xnGetData(GetHandle());
- }
-
- /**
- * @brief Gets the data size of the @ref frame_data "frame data".
- * This method gets the data size directly from the Generator node.
- *
- * <b>Remarks:</b>
- *
- * The size of the data is returned as a number of bytes.
- *
- * Compare this method with the DataSize() method of the @ref xn::OutputMetaData
- * object, where the latter gets the data from the metadata object.
- * GetDataSize() returns the same data as the GetMetaData().DataSize() method. However,
- * using the GetDataSize() method is slightly more costly.
- */
- inline XnUInt32 GetDataSize() const
- {
- return xnGetDataSize(GetHandle());
- }
-
- /**
- * @brief Gets the frame timestamp from the <b>Generator</b> node
- * This method gets the timestamp directly from the Generator node.
- *
- * <b>Remarks:</b>
- *
- * The time is returned in microseconds.
- *
- * Compare this method with the <b>GetTimestamp()</b> method of the @ref xn::OutputMetaData
- * object, where the latter gets the data from the metadata object.
- * <b>GetTimestamp()</b> returns the same data as the GetMetaData().GetTimestamp()
- * method. However, using the <b>GetTimestamp()</b> method is slightly more costly.
- */
- inline XnUInt64 GetTimestamp() const
- {
- return xnGetTimestamp(GetHandle());
- }
-
- /**
- * @brief Gets the frame ID of the current frame data from the Generator node.
- *
- * <b>Remarks:</b>
- *
- * This method gets the frame ID directly from the Generator node.
- *
- * Compare this method with the <b>GetFrameID()</b> method of the @ref xn::OutputMetaData
- * object, where the latter gets the data from the metadata object.
- * <b>GetFrameID()</b> returns the same data as the GetMetaData().GetFrameID() method.
- * However, using the <b>GetFrameID()</b> method is slightly more costly.
- */
- inline XnUInt32 GetFrameID() const
- {
- return xnGetFrameID(GetHandle());
- }
-
- /**
- * @brief Gets a @ref MirrorCapability object for accessing Mirror functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if @ref XN_CAPABILITY_MIRROR
- * is supported by calling @ref xn::ProductionNode::IsCapabilitySupported().
- */
- inline const MirrorCapability GetMirrorCap() const
- {
- return MirrorCapability(GetHandle());
- }
-
- /**
- * @brief Gets a @ref MirrorCapability object for accessing Mirror functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if @ref XN_CAPABILITY_MIRROR
- * is supported by calling @ref xn::ProductionNode::IsCapabilitySupported().
- */
- inline MirrorCapability GetMirrorCap()
- {
- return MirrorCapability(GetHandle());
- }
-
- /**
- * Gets an @ref AlternativeViewPointCapability object for accessing Alternative
- * Viewpoint functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if
- * @ref XN_CAPABILITY_ALTERNATIVE_VIEW_POINT is supported
- * by calling @ref xn::Generator::IsCapabilitySupported().
- */
- inline const AlternativeViewPointCapability GetAlternativeViewPointCap() const
- {
- return AlternativeViewPointCapability(GetHandle());
- }
-
- /**
- * Gets an @ref AlternativeViewPointCapability object for accessing Alternative
- * Viewpoint functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if
- * @ref XN_CAPABILITY_ALTERNATIVE_VIEW_POINT is supported
- * by calling @ref xn::Generator::IsCapabilitySupported().
- */
- inline AlternativeViewPointCapability GetAlternativeViewPointCap()
- {
- return AlternativeViewPointCapability(GetHandle());
- }
-
- /**
- * Gets an @ref FrameSyncCapability object for accessing Frame Sync functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if
- * @ref XN_CAPABILITY_FRAME_SYNC is supported
- * by calling @ref xn::Generator::IsCapabilitySupported().
- */
- inline const FrameSyncCapability GetFrameSyncCap() const
- {
- return FrameSyncCapability(GetHandle());
- }
-
- /**
- * Gets an @ref FrameSyncCapability object for accessing Frame Sync functionality.
- *
- * <b>Remarks:</b>
- *
- * It is the application's responsibility to check first if
- * @ref XN_CAPABILITY_FRAME_SYNC is supported
- * by calling @ref xn::Generator::IsCapabilitySupported().
- */
- inline FrameSyncCapability GetFrameSyncCap()
- {
- return FrameSyncCapability(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> To create and manage a Recorder node.
- *
- * <b>Usage: </b> Instatiate and create a Recorder node.
- *
- * <b>Data output:</b> Records to a specified destination medium the frames of data
- * from each node that was added to the Recorder node.
- *
- * <b>Remarks:</b>
- *
- * Recordings are a powerful debug tool. A recording enables a full capture of data
- * generation and the ability to later play it back by 'regeneration' so that applications
- * can simulate an exact replica of the situation to be debugged.
- *
- * OpenNI supports recordings of the production nodes in the production graph, both
- * the entire configuration of each node, and all data streamed from a node.
- *
- * OpenNI has a framework for recording data and for playing it back (using mock nodes).
- * It also comes with the nimRecorder module, which defines a new file format (".ONI")
- * - and implements a Recorder node and a Player node for this format.
- *
- * If a recorder exists while generating, the @ref conc_updating_data "'WaitXUpdateAll'"
- * functions automatically record the data from all nodes added to this recorder.
- *
- * To record, an application creates a Recorder node, and set its destination - the
- * file name to which it should write. The application must add to the Recorder node
- * every production node that it wants to record. When adding a node to the recorder,
- * the Recorder stores its configuration. It also registers to every possible event
- * of the node, so that when any configuration change takes place, it is also recorded.
- *
- * Once all required nodes are added, the application can read data from the nodes and
- * record it. Recording of data can be achieved either by explicitly calling the @ref
- * xn::Recorder::Record() function, or by using one of the @ref conc_updating_data "'Update
- * All'" functions.
- *
- * Applications that initialize OpenNI using an XML file can easily record their session
- * without any change to the code. All that is required is that they create an additional
- * node in the XML file for the recorder, add nodes to it, and when the application
- * calls one of the 'WaitXUpdateAll' functions, recording will occur. see @ref xmlscripts
- * for explanation on how to do that.
- *
- * Recordings are played back by using the services of the Player class.
- */
- class Recorder : public ProductionNode
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode A node handle
- */
- inline Recorder(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline Recorder(const NodeWrapper& other) : ProductionNode(other) {}
-
- /**
- * @brief Creates a Recorder node.
- *
- * @param [in] context The context in which to create the Recorder node.
- * @param [in] strFormatName Optional. The name of the format the recorded file
- * will be in. If NULL, file will be in ONI format.
- */
- inline XnStatus Create(Context& context, const XnChar* strFormatName = NULL);
-
- /**
- * @brief Specifies to where the recorder must send its recording. Typically this is a disk file of a particular file type.
- *
- * @param [in] destType The type of medium to record to. Currently only XN_RECORD_MEDIUM_FILE
- * is supported.
- * @param [in] strDest Recording destination. If destType is XN_RECORD_MEDIUM_FILE,
- * this specifies a file name.
- */
- inline XnStatus SetDestination(XnRecordMedium destType, const XnChar* strDest)
- {
- return xnSetRecorderDestination(GetHandle(), destType, strDest);
- }
-
- /**
- * @brief Gets the destination medium for the Recorder node to record to.
- *
- * @param [out] destType The type of medium to record to. Currently only XN_RECORD_MEDIUM_FILE
- * is supported.
- * @param [out] strDest Recording destination. If destType is XN_RECORD_MEDIUM_FILE,
- * this specifies a file name.
- * @param [in] nBufSize Destination buffer size.
- */
- inline XnStatus GetDestination(XnRecordMedium& destType, XnChar* strDest, XnUInt32 nBufSize)
- {
- return xnGetRecorderDestination(GetHandle(), &destType, strDest, nBufSize);
- }
-
- /**
- * @brief Adds a node to the recording setup, and starts recording data what the node generates.
- * This method must be called for each node to be recorded with this recorder.
- *
- * @param [in] Node Node to add to the recording.
- * @param [in] compression Type of compression that will be used to encode the node's
- * data (see @ref XnCodecIDs.h). If @ref XN_CODEC_NULL
- * is specified, a default compression will be chosen according to the node type.
- */
- inline XnStatus AddNodeToRecording(ProductionNode& Node, XnCodecID compression = XN_CODEC_NULL)
- {
- return xnAddNodeToRecording(GetHandle(), Node.GetHandle(), compression);
- }
-
- /**
- * @brief Removes a node from the Recorder node and stops recording the node output.
- * This function is called on a node that was added to recording with @ref AddNodeToRecording.
- *
- * @param [in] Node The node to remove from recording.
- */
- inline XnStatus RemoveNodeFromRecording(ProductionNode& Node)
- {
- return xnRemoveNodeFromRecording(GetHandle(), Node.GetHandle());
- }
-
- /**
- * @brief Records one frame of data from each node that was added to the recorder with AddNodeToRecording().
- *
- * <b>Remarks</b>
- *
- * To record continually, the recorder node must be called repeatedly for each frame.
- *
- * It is highly recommended that an application use the 'WaitXUpdateAll' methods,
- * and not call Generator::WaitAndUpdateData() for each generator. When working
- * with the 'WaitXUpdateAll' methods, OpenNI will automatically call @ref Record(),
- * and there is no need for the application to call this method.
- */
- inline XnStatus Record()
- {
- return xnRecord(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> The Player class is used for creating and managing a Player node.
- * This node plays a saved recording of an OpenNI data generation session.
- *
- * <b>Remarks:</b>
- *
- * To play a file recording, use the @ref xn::Context::OpenFileRecording() function.
- * OpenNI will open the file, create a mock node for each node in the file, and populate
- * it with the recorded configuration.
- *
- * An application may take the nodes it needs by calling the @ref xn::Context::FindExistingNode()
- * method, and use them normally.
- *
- * @note Nodes created by the player are locked, and cannot be changed, as the
- * configuration must remain according to the recorded configuration.
- *
- * Applications that initialize OpenNI using an XML file can easily replace their input.
- * This means that instead of reading from a physical device, which generates data in
- * real-time, they read from a recording by replacing the nodes in the XML file with
- * a recording element (see @ref xmlscripts).
- *
- * @note It is not the Player node itself that is generating data. (Accordingly, the
- * Player node does not provide a GetData() method.) The Player node reads data from
- * the file, and "pushes" it into the mock nodes.
- */
- class Player : public ProductionNode
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Player node handle
- */
- inline Player(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline Player(const NodeWrapper& other) : ProductionNode(other) {}
-
- /**
- * @brief Creates a player node.
- *
- * <b>Remarks</b>
- *
- * See @ref create_method "Concepts: the Create() Method" for a detailed description
- * about the operation of this method.
- */
- inline XnStatus Create(Context& context, const XnChar* strFormatName);
-
-
- /**
- * @brief Specifies whether the player will automatically rewind to the beginning
- * of the recording after reaching the end of the recording.
- *
- * @param [in] bRepeat Determines whether the player will repeat or not.
- *
- * If bRepeat is set to TRUE, the player will automatically
- * rewind when reaching the end.
- *
- * If bRepeat is set to FALSE, the player will stop playing
- * when reaching the end, and will raise the 'End-Of-File Reached'
- * event. In this state, @ref IsEOF() returns TRUE, and
- * calls to @ref ReadNext() will fail.
- */
- inline XnStatus SetRepeat(XnBool bRepeat)
- {
- return xnSetPlayerRepeat(GetHandle(), bRepeat);
- }
-
- /**
- * @copybrief xnSetPlayerSource
- * For full details and usage, see @ref xnSetPlayerSource
- */
- inline XnStatus SetSource(XnRecordMedium sourceType, const XnChar* strSource)
- {
- return xnSetPlayerSource(GetHandle(), sourceType, strSource);
- }
-
- /**
- * @brief Gets the player's source, that is, the type and name of the medium
- * that the recording is played back from.
- *
- * @param [out] sourceType Player's source type.
- * @param [in] strSource Player's source.
- * @param [in] nBufSize Size of the buffer specified by @c strSource.
- */
- inline XnStatus GetSource(XnRecordMedium &sourceType, XnChar* strSource, XnUInt32 nBufSize) const
- {
- return xnGetPlayerSource(GetHandle(), &sourceType, strSource, nBufSize);
- }
-
- /**
- * @copybrief xnPlayerReadNext
- * For full details and usage, see @ref xnPlayerReadNext
- */
- inline XnStatus ReadNext()
- {
- return xnPlayerReadNext(GetHandle());
- }
-
- /**
- * @brief Moves the player to a specific time, so that playback will continue from that point onwards.
- *
- * @param [in] nTimeOffset Offset to move, relative to the specified origin. <br>
- * Units in microseconds. <br> See the remark below.
- * @param [in] origin Origin to seek from. See the remarks below.
- *
- * The meaning of the @c nTimeOffset parameter changes according to the origin parameter:
- *
- * <b>XN_PLAYER_SEEK_SET:</b> @c nTimeOffset specifies the total time passed since
- * the beginning of the recording. This must be a positive value.
- *
- * <b>XN_PLAYER_SEEK_CUR:</b> @c nTimeOffset specifies a period of time to move, relative
- * to the current player position. A positive value means to move forward, and a
- * negative value means to move backwards.
- *
- * <b>XN_PLAYER_SEEK_END:</b> @c nTimeOffset specifies a period of time to move, relative
- * to the end of the recording. This must be a negative value.
- *
- * <b>Remarks</b>
- *
- * For the built-in ONI player, this function is not currently supported and always
- * returns XN_STATUS_NOT_IMPLEMENTED.
- */
- inline XnStatus SeekToTimeStamp(XnInt64 nTimeOffset, XnPlayerSeekOrigin origin)
- {
- return xnSeekPlayerToTimeStamp(GetHandle(), nTimeOffset, origin);
- }
-
- /**
- * @brief Moves the player to a specific frame of a specific played node, e.g., an
- * ImageGenerator node, so that playing will continue from that frame onwards.
- *
- * @param [in] strNodeName Name of the node.
- * @param [in] nFrameOffset Number of frames to move, relative to the specified
- * origin. See remarks below.
- * @param [in] origin Origin to seek from. See remarks below.
- *
- * The meaning of the @c nFrameOffset parameter changes according to the origin parameter:
- *
- * <b>XN_PLAYER_SEEK_SET:</b> @c nFrameOffset specifies the total number of frames
- * since the beginning of the node's recording. This must be a positive value.
- *
- * <b>XN_PLAYER_SEEK_CUR:</b> @c nFrameOffset specifies the number of frames to move,
- * relative to the current frame of the specified node. A positive value means to
- * move forward, and a negative value means to move backwards.
- *
- * <b>XN_PLAYER_SEEK_END:</b> @c nFrameOffset specifies the number of frames to move,
- * relative to the end of the node's recording. This must be a negative value.
- *
- * You can get different results using this function for different values of strNodeName,
- * because the frame numbers of different nodes are not necessarily in sync.
- */
- inline XnStatus SeekToFrame(const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin)
- {
- return xnSeekPlayerToFrame(GetHandle(), strNodeName, nFrameOffset, origin);
- }
-
- /**
- * @brief Gets the current time of a player, i.e., the time passed since the beginning of the recording.
- *
- * @param [out] nTimestamp Retrieved timestamp. Units are in microseconds.
- */
- inline XnStatus TellTimestamp(XnUInt64& nTimestamp) const
- {
- return xnTellPlayerTimestamp(GetHandle(), &nTimestamp);
- }
-
- /**
- * @brief Gets the current frame number of a specific node played by a player,
- * i.e., the number of frames passed since the beginning of the recording
- *
- * @param [in] strNodeName Name of the node.
- * @param [out] nFrame Retrieved frame number.
- *
- * <b>Remarks</b>
- *
- * Different nodes that belong to the player can have different frame numbers, because
- * the nodes are not necessarily in synchronization.
- */
- inline XnStatus TellFrame(const XnChar* strNodeName, XnUInt32& nFrame) const
- {
- return xnTellPlayerFrame(GetHandle(), strNodeName, &nFrame);
- }
-
- /**
- * @brief Gets the total number of frames a specific node has in the recording.
- *
- * @param [in] strNodeName Name of the node for which to retrieve the number of frames.
- * @param [out] nFrames Retrieved number of frames.
- *
- */
- inline XnStatus GetNumFrames(const XnChar* strNodeName, XnUInt32& nFrames) const
- {
- return xnGetPlayerNumFrames(GetHandle(), strNodeName, &nFrames);
- }
-
- /**
- * @copybrief xnGetPlayerSupportedFormat
- * For full details and usage, see @ref xnGetPlayerSupportedFormat
- */
- inline const XnChar* GetSupportedFormat() const
- {
- return xnGetPlayerSupportedFormat(GetHandle());
- }
-
- /**
- * @copybrief xnEnumeratePlayerNodes
- * For full details and usage, see @ref xnEnumeratePlayerNodes
- */
- inline XnStatus EnumerateNodes(NodeInfoList& list) const
- {
- XnNodeInfoList* pList;
- XnStatus nRetVal = xnEnumeratePlayerNodes(GetHandle(), &pList);
- XN_IS_STATUS_OK(nRetVal);
-
- list.ReplaceUnderlyingObject(pList);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Returns whether the player is at the end-of-file marker.
- *
- * <b>Remarks</b>
- *
- * When Repeat mode is on, this function never returns TRUE.
- * However, the 'End of File Reached' event will be raised during rewind.
- */
- inline XnBool IsEOF() const
- {
- return xnIsPlayerAtEOF(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'End-Of-File Reached' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToEndOfFileReached(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToEndOfFileReached, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'End-Of-File Reached' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromEndOfFileReached(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromEndOfFileReached, GetHandle(), hCallback);
- }
-
- /**
- * @brief Sets the player's playback speed, as a ratio of the rate that the recording was made at.
- *
- * @param [in] dSpeed The speed ratio.
- *
- * <b>Values: </b>
- *
- * @c dSpeed = 1.0 - Player will try to output frames at the same rate they were recorded
- * (according to their timestamps).
- *
- * @c dSpeed > 1.0 - Fast-forward
- *
- * 0 < @c dSpeed < 1.0 - Slow-motion.
- *
- * @c dSpeed = XN_PLAYBACK_SPEED_FASTEST (0.0) - There will be no delay, and frames
- * will be returned immediately on demand.
- *
- */
- inline XnStatus SetPlaybackSpeed(XnDouble dSpeed)
- {
- return xnSetPlaybackSpeed(GetHandle(), dSpeed);
- }
-
- /**
- * @brief Gets the playback speed.
- * @returns Speed ratio, or -1.0 if this node is not a player.
- */
- inline XnDouble GetPlaybackSpeed() const
- {
- return xnGetPlaybackSpeed(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> Provides Cropping capability for @ref MapGenerator "map generator nodes".
- * Cropping capability restricts the size of the data frames to be generated by the
- * MapGenerator node to a selected (cropped) area of the full field-of-view.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref MapGenerator::GetCroppingCap()
- * to obtain an instance.
- *
- * <b>Remarks:</b>
- *
- * When cropping is enabled, the size of the generated map is reduced to fit a lower
- * resolution (smaller FOV dimensions). For example, if the map generator is working
- * in VGA resolution (640x480) and the application chooses to crop at 300x200, the next
- * pixel row will begin after 300 pixels. Pixels outside the cropping area are not returned
- * in the buffer - they are not blacked out; they are not returned at all. Thus, cropping
- * is very useful for providing a performance boost.
- *
- * <b>Event: 'Cropping Change'</b>
- *
- * Signals that the @ref holder_node "holder node"'s cropping area has been changed.
- *
- * Use @ref RegisterToCroppingChange() and @ref UnregisterFromCroppingChange() for using this event.
- *
- * Calling the @ref SetCropping() method raises this event.
- */
- class CroppingCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline CroppingCapability(XnNodeHandle hNode) : Capability(hNode) {}
- CroppingCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Sets the @ref holder_node "holder node"'s current cropping
- * configuration. This configuration is used for generating the next frame.
- *
- * @param [in] Cropping Cropping configuration to be set.
- *
- * @retval XN_STATUS_INVALID_OPERATION The @ref MapGenerator node does not support
- * the Cropping capability.
- */
- inline XnStatus SetCropping(const XnCropping& Cropping)
- {
- return xnSetCropping(GetHandle(), &Cropping);
- }
-
- /**
- * @brief Gets the current cropping configuration of the @ref holder_node "holder node".
- * This configuration is that set by @ref SetCropping(). This configuration is used
- * for generating the next frame.
- *
- * @param [out] Cropping Retreived cropping configuration.
- *
- * @retval XN_STATUS_INVALID_OPERATION The @ref MapGenerator node does not
- * support the Cropping capability.
- */
- inline XnStatus GetCropping(XnCropping& Cropping) const
- {
- return xnGetCropping(GetHandle(), &Cropping);
- }
-
- /**
- * @brief Registers an event handler for the 'Cropping Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToCroppingChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToCroppingChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Cropping Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromCroppingChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromCroppingChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Allows access to <b>Anti Flicker</b> capability functions. see @ref anti_flicker
- * for additional details.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref MapGenerator::GetAntiFlickerCap()
- * to obtain an instance.
- */
- class AntiFlickerCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline AntiFlickerCapability(XnNodeHandle hNode) : Capability(hNode) {}
- AntiFlickerCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @copybrief xnSetPowerLineFrequency
- * For full details and usage, see @ref xnSetPowerLineFrequency
- */
- inline XnStatus SetPowerLineFrequency(XnPowerLineFrequency nFrequency)
- {
- return xnSetPowerLineFrequency(GetHandle(), nFrequency);
- }
-
- /**
- * @copybrief xnGetPowerLineFrequency
- * For full details and usage, see @ref xnGetPowerLineFrequency
- */
- inline XnPowerLineFrequency GetPowerLineFrequency()
- {
- return xnGetPowerLineFrequency(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Power Line Frequency Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToPowerLineFrequencyChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToPowerLineFrequencyChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Power Line Frequency Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromPowerLineFrequencyChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromPowerLineFrequencyChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> The MapGenerator class is the base class for every generator node
- * that produces 2D map data, for example, depth maps, color image maps, IR maps, and
- * scene analysis maps.
- *
- * <b>Usage: </b> This class might be instantiated to reference any kind of map generator
- * node (i.e., a node that derives from the MapGenerator class), however it is not intended
- * to ever be instantiated to create any node of MapGenerator type itself.
- *
- * <b>Remarks:</b>
- *
- * Since the MapGenerator class is the base class for generator nodes that produce image
- * maps, it provides the data structures common to all map generators: the current frame's
- * X and Y dimensions and its frame rate.
- *
- * MapGenerator's two principle functions are GetMapOutputMode() and SetMapOutputMode()
- * for controlling and checking the node's map output mode. The map output mode is the
- * combination of the node's scene resolution and frame rate. Correspondingly, these
- * functions read and write an @ref xn::XnMapOutputMode structure, comprising three
- * parameters: the X and Y resolutions and the frame rate.
- */
- class MapGenerator : public Generator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline MapGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- inline MapGenerator(const NodeWrapper& other) : Generator(other) {}
-
- /**
- * @brief Gets the number of output modes that the generator node supports.
- *
- * <b>Remarks</b>
- *
- * This is useful for allocating an array that will be passed to GetSupportedMapOutputModes().
- */
- inline XnUInt32 GetSupportedMapOutputModesCount() const
- {
- return xnGetSupportedMapOutputModesCount(GetHandle());
- }
-
- /**
- * @brief Gets a list of all the output modes that the generator node supports.
- *
- * <b>Remarks</b>
- *
- * Each supported map output mode is represented by a @ref XnMapOutputMode structure
- * comprising resolution (@c nXRes and @c nYRes) and frames rate (@c nFPS). The application
- * then chooses one of the output modes. The size of the array that should be passed
- * can be obtained by calling GetSupportedMapOutputModesCount().
- */
- inline XnStatus GetSupportedMapOutputModes(XnMapOutputMode* aModes, XnUInt32& nCount) const
- {
- return xnGetSupportedMapOutputModes(GetHandle(), aModes, &nCount);
- }
-
- /**
- * @brief Sets the current map output mode of the generator node.
- *
- * <b>Remarks</b>
- *
- * A map output mode is contained in a @ref xn::XnMapOutputMode structure comprising
- * the frame rate (in frames per second), and the X and Y dimensions (the number
- * of elements in each of the X- and Y- axes).
- *
- * It is the application programmer's responsibility to check first if the output
- * mode is supported by calling the @ref xn::MapGenerator::GetSupportedMapOutputModes()
- * "GetSupportedMapOutputModes()" method.
- */
- inline XnStatus SetMapOutputMode(const XnMapOutputMode& OutputMode)
- {
- return xnSetMapOutputMode(GetHandle(), &OutputMode);
- }
-
- /**
- * @brief Gets the current map output mode of the generator node. This is the
- * map output mode that the generator node will use to generate the next data frame.
- *
- * <b>Remarks</b>
- *
- * A map output mode is the combination of the scene resolution and frame rate.
- * It is contained in an @ref xn::XnMapOutputMode structure comprising the frame
- * rate (in frames per second), and the X and Y dimensions (the number of elements
- * in each of the X- and Y- axes).
- *
- * For the map output mode of the most recent data frame available in the node's
- * metadata object, see the @ref xn::MapMetaData class (MapMetaData::Xres(), MapMetaData::YRes(),
- * and MapMetaData::FPS() methods).
- *
- * This map output mode is the mode set by @ref SetMapOutputMode().
- */
- inline XnStatus GetMapOutputMode(XnMapOutputMode &OutputMode) const
- {
- return xnGetMapOutputMode(GetHandle(), &OutputMode);
- }
-
- /**
- * @brief Gets the number of bytes per pixel for the node's map data. This mode
- * is set by SetPixelFormat() for the next frame that the generator node generates.
- *
- * <b>Remarks</b>
- *
- * In ImageGenerator this can be set. In other generators, it's pre-defined.
- */
- inline XnUInt32 GetBytesPerPixel() const
- {
- return xnGetBytesPerPixel(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Map Output Mode Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToMapOutputModeChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToMapOutputModeChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Map Output Mode Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromMapOutputModeChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromMapOutputModeChange, GetHandle(), hCallback);
- }
-
- /**
- * @brief Gets a @ref CroppingCapability object for accessing Cropping functionality.
- *
- * <b>Remarks</b>
- *
- * It is the application's responsibility to check first if @ref XN_CAPABILITY_CROPPING
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline const CroppingCapability GetCroppingCap() const
- {
- return CroppingCapability(GetHandle());
- }
-
- /**
- * @brief Gets a @ref CroppingCapability object for accessing Cropping functionality.
- *
- * <b>Remarks</b>
- *
- * It is the application's responsibility to check first if @ref XN_CAPABILITY_CROPPING
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline CroppingCapability GetCroppingCap()
- {
- return CroppingCapability(GetHandle());
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Brightness functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_BRIGHTNESS
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetBrightnessCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_BRIGHTNESS);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Contrast functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_CONTRAST
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetContrastCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_CONTRAST);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Hue functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_HUE
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetHueCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_HUE);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Saturation functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_SATURATION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetSaturationCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_SATURATION);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Sharpness functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_SHARPNESS
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetSharpnessCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_SHARPNESS);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Gamma functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_GAMMA
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetGammaCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_GAMMA);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing WhiteBalance functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_COLOR_TEMPERATURE
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetWhiteBalanceCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_COLOR_TEMPERATURE);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing BacklightCompensation functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_BACKLIGHT_COMPENSATION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetBacklightCompensationCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_BACKLIGHT_COMPENSATION);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Gain functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_GAIN
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetGainCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_GAIN);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Pan functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_PAN
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetPanCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_PAN);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Tilt functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_TILT
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetTiltCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_TILT);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Roll functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_ROLL
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetRollCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_ROLL);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Zoom functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_ZOOM
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetZoomCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_ZOOM);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Exposure functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_EXPOSURE
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetExposureCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_EXPOSURE);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Iris functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_IRIS
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetIrisCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_IRIS);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Focus functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_FOCUS
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetFocusCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_FOCUS);
- }
-
- /**
- * Gets an @ref GeneralIntCapability object for accessing Low Light Compensation functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_LOW_LIGHT_COMPENSATION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline GeneralIntCapability GetLowLightCompensationCap()
- {
- return GeneralIntCapability(GetHandle(), XN_CAPABILITY_LOW_LIGHT_COMPENSATION);
- }
-
- /**
- * Gets an @ref AntiFlickerCapability object for accessing Anti Flicker functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_ANTI_FLICKER
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline AntiFlickerCapability GetAntiFlickerCap()
- {
- return AntiFlickerCapability(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Allows access to <b>User Position</b> capability functions. see @ref userpos for
- * additional details.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref DepthGenerator::GetUserPositionCap()
- * to obtain an instance.
- */
- class UserPositionCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline UserPositionCapability(XnNodeHandle hNode = NULL) : Capability(hNode) {}
- UserPositionCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @copybrief xnGetSupportedUserPositionsCount
- * For full details and usage, see @ref xnGetSupportedUserPositionsCount
- */
- inline XnUInt32 GetSupportedUserPositionsCount() const
- {
- return xnGetSupportedUserPositionsCount(GetHandle());
- }
-
- /**
- * @copybrief xnSetUserPosition
- * For full details and usage, see @ref xnSetUserPosition
- */
- inline XnStatus SetUserPosition(XnUInt32 nIndex, const XnBoundingBox3D& Position)
- {
- return xnSetUserPosition(GetHandle(), nIndex, &Position);
- }
-
- /**
- * @copybrief xnGetUserPosition
- * For full details and usage, see @ref xnGetUserPosition
- */
- inline XnStatus GetUserPosition(XnUInt32 nIndex, XnBoundingBox3D& Position) const
- {
- return xnGetUserPosition(GetHandle(), nIndex, &Position);
- }
-
- /**
- * @brief Registers an event handler for the 'User Position Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToUserPositionChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToUserPositionChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'User Position Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromUserPositionChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromUserPositionChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> A DepthGenerator node generates depth maps. Each pixel value of
- * a depth map represents a distance from the sensor's plane in millimeters.
- *
- * <b>Usage:</b> Instantiate the class and call Create() to create a DepthGenerator
- * node.
- *
- * This class is at the first level of classes in the OpenNI class hierarchy that is
- * typically instantiated to create an actual node. (Examples of other classes at the
- * first level are @ref xn::ImageGenerator and @ref xn::SceneAnalyzer).
- *
- * <b>Data output:</b> Depth maps and associated configuration data. Access via the node's
- * @ref xn::DepthMetaData object.
- *
- * <b>Overview:</b>
- *
- * A DepthGenerator node generates a depth map as an array of pixels, where each pixel
- * is a depth value representing a distance from the sensor's plane in millimeters. This is
- * the Z-coordinate of the X-Y-Z coordinate of each user pixel. A smaller depth value
- * indicates a scene point that is <i>closer</i> to the hardware sensor device; and
- * a larger depth value indicates a scene point that is a <i>further away</i> from the
- * sensor. A zero depth value indicates that the DepthGenerator node did not succeed
- * in obtaining a valid depth reading.
- *
- * Typically, the process of generating 3D data begins by using a sensor device that
- * produces raw output data. Dedicated middleware is then used to process this raw output,
- * and produce a higher-level output, which can then be understood and used by the application.
- *
- * In a typical OpenNI production graph, a DepthGenerator node takes input directly
- * from a sensor device and generates a depth map. Other generator nodes further along
- * the production graph (dependant on the DepthGenerator node) take input from the DepthGenerator
- * node's output. However, alternative dependency configurations are also possible.
- *
- * The DepthGenerator node's data and associated configuration are accessed through
- * its @ref glos_frame_object "frame object" (i.e., its @ref xn::DepthMetaData object).
- *
- * Summary of Main Features:
- * - Depth map: Provides the data of the depth map
- * - Sensor device's maximum depth: Provides the maximum distance available for this
- * depth generator
- * - Field of View: Provides the sensor's maximum horizontal and vertical angles
- * - User Position capability (optional)
- */
- class DepthGenerator : public MapGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline DepthGenerator(XnNodeHandle hNode = NULL) : MapGenerator(hNode) {}
- inline DepthGenerator(const NodeWrapper& other) : MapGenerator(other) {}
-
- /**
- * @brief Creates a DepthGenerator node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks:</b>
- *
- * For full details and usage, see @ref create_method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Gets the depth generator node's latest @ref glos_frame_object "frame object", saving
- * it in the @ref xn::DepthMetaData object. This @ref glos_frame_object "frame object" is a
- * snapshot of the generated depth map data and its associated configuration information at a
- * certain point in time. This saved @ref glos_frame_object "frame object" provides fast
- * and easy access to the depth generator node's data and configuration information.
- *
- * @param [out] metaData Structure to be filled with the frame object.
- *
- * <b>Remarks:</b>
- *
- * This method is central in the use of the DepthGenerator node. Once the DepthGenerator
- * node is generating data, after each @ref conc_updating_data "'Update Data'" call,
- * the application calls this method to get the node's frame object, which contains
- * the data and all its associated properties.
- */
- inline void GetMetaData(DepthMetaData& metaData) const
- {
- xnGetDepthMetaData(GetHandle(), metaData.GetUnderlying());
- }
-
- /**
- * @copybrief xnGetDepthMap
- * For full details and usage, see @ref xnGetDepthMap
- */
- inline const XnDepthPixel* GetDepthMap() const
- {
- return xnGetDepthMap(GetHandle());
- }
-
- /**
- * @brief Gets the maximum depth value that the DepthGenerator node can generate.
- * The maximum depth value is a hardware specification of the sensor.
- *
- * <b>Remarks:</b>
- *
- * A typical maximum depth supports up to 10 meters of depth. Units are in millimeters,
- * so the maximum depth value for 10 meters of depth would range from 0 to 10,000.
- */
- inline XnDepthPixel GetDeviceMaxDepth() const
- {
- return xnGetDeviceMaxDepth(GetHandle());
- }
-
- /**
- * @brief Gets the dimensions of the field of view (FOV) of the hardware sensor.
- *
- * @param [out] FOV A struct to be filled with the field of view of the hardware sensor.
- *
- * <b>Remarks:</b>
- *
- * This method gets the dimensions of the field of view in radians. Radians are
- * used for the output form since they are a spherical measurement and the FOV is
- * defined in terms of the angle of width and height that the sensor sees, e.g.,
- * 0.524 radians (30 degrees) above and below, and 1.047 radians (60 degrees) left
- * and right.
- *
- * This method is useful for developers building algorithms to convert between real
- * world and productive coordinate systems. Although OpenNI offers its own functionality
- * for converting real-world and productive coordinate systems, some developers
- * may wish to build their own conversion functions for reasons of optimization.
- */
- inline XnStatus GetFieldOfView(XnFieldOfView& FOV) const
- {
- return xnGetDepthFieldOfView(GetHandle(), &FOV);
- }
-
- /**
- * @brief Registers an event handler for the 'Field-Of-View Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToFieldOfViewChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToDepthFieldOfViewChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Field-Of-View Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromFieldOfViewChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromDepthFieldOfViewChange, GetHandle(), hCallback);
- }
-
- /**
- * @brief Converts a list of points from projective coordinates to real world coordinates.
- *
- * @param [in] nCount Number of points to convert.
- * @param [in] aProjective Array of projective point coordinates.
- * @param [in,out] aRealWorld Array to be filled with real-world point coordinates.
- *
- * See @ref conc_coord for futher information.
- */
- inline XnStatus ConvertProjectiveToRealWorld(XnUInt32 nCount, const XnPoint3D aProjective[], XnPoint3D aRealWorld[]) const
- {
- return xnConvertProjectiveToRealWorld(GetHandle(), nCount, aProjective, aRealWorld);
- }
-
- /**
- * @brief Converts a list of points from real world coordinates to projective coordinates.
- *
- * @param [in] nCount Number of points to convert.
- * @param [in] aRealWorld Array of projective point coordinates.
- * @param [in,out] aProjective Array to be filled with real-world point coordinates.
- *
- * See @ref conc_coord for futher information.
- */
- inline XnStatus ConvertRealWorldToProjective(XnUInt32 nCount, const XnPoint3D aRealWorld[], XnPoint3D aProjective[]) const
- {
- return xnConvertRealWorldToProjective(GetHandle(), nCount, aRealWorld, aProjective);
- }
-
- /**
- * Gets an @ref UserPositionCapability object for accessing User Position functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_USER_POSITION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline const UserPositionCapability GetUserPositionCap() const
- {
- return UserPositionCapability(GetHandle());
- }
-
- /**
- * Gets an @ref UserPositionCapability object for accessing User Position functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_USER_POSITION
- * is supported by calling @ref IsCapabilitySupported().
- */
- inline UserPositionCapability GetUserPositionCap()
- {
- return UserPositionCapability(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Represents a mock depth generator
- */
- class MockDepthGenerator : public DepthGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline MockDepthGenerator(XnNodeHandle hNode = NULL) : DepthGenerator(hNode) {}
- inline MockDepthGenerator(const NodeWrapper& other) : DepthGenerator(other) {}
-
- /**
- * Creates a mock depth generator
- *
- * @param [in] context The context in which the node should be generated
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus Create(Context& context, const XnChar* strName = NULL);
-
- /**
- * Creates a mock depth generator, copying the initial state from another depth
- * generator.
- *
- * @param [in] other The depth generator to copy state from
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus CreateBasedOn(DepthGenerator& other, const XnChar* strName = NULL);
-
- /**
- * @copybrief xnMockDepthSetData
- * For full details and usage, see @ref xnMockDepthSetData
- */
- inline XnStatus SetData(XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnDepthPixel* pDepthMap)
- {
- return xnMockDepthSetData(GetHandle(), nFrameID, nTimestamp, nDataSize, pDepthMap);
- }
-
- /**
- * Sets the data of the mock node from a meta data object, overriding frame ID and
- * timestamp
- *
- * @param [in] depthMD Object to take data from
- * @param [in] nFrameID Frame ID
- * @param [in] nTimestamp Timestamp
- */
- inline XnStatus SetData(const DepthMetaData& depthMD, XnUInt32 nFrameID, XnUInt64 nTimestamp)
- {
- return SetData(nFrameID, nTimestamp, depthMD.DataSize(), depthMD.Data());
- }
-
- /**
- * Sets the data of the mock node from a metadata object.
- *
- * @param [in] depthMD Object to take data from
- */
- inline XnStatus SetData(const DepthMetaData& depthMD)
- {
- return SetData(depthMD, depthMD.FrameID(), depthMD.Timestamp());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The ImageGenerator node generates color image maps of various formats.
- *
- * <b>Usage:</b> Instantiate the class and create an image generator node
- *
- * <b>Data output:</b> Image maps
- *
- * <b>Overview:</b>
- *
- * The ImageGenerator node generates color image maps of various formats, such as the
- * RGB24 image format. Call its SetPixelFormat() method to set the image format to be
- * generated.
- *
- * The other important function here is GetMetaData(), which, as in other generator
- * nodes, gets the image frame object, through which you can access all the properties
- * and the actual data of the saved frame.
- */
- class ImageGenerator : public MapGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline ImageGenerator(XnNodeHandle hNode = NULL) : MapGenerator(hNode) {}
- inline ImageGenerator(const NodeWrapper& other) : MapGenerator(other) {}
-
- /**
- * @brief Creates and initializes an ImageGenerator node from available @ref node_alternative "production node alternatives".
- *
- * For full details and usage, see @ref create_method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Gets the image generator node's latest @ref glos_frame_object "frame object", saving
- * it in the @ref xn::ImageMetaData object. This @ref glos_frame_object "frame object" is a
- * snapshot of the generated image map data and its associated configuration information at a
- * certain point in time. This saved @ref glos_frame_object "frame object" provides fast
- * and easy access to the image generator node's data and configuration information.
- *
- * @param [out] metaData Structure to be filled with the frame object.
- *
- * <b>Remarks:</b>
- *
- * This method is central in the use of the ImageGenerator node. Once the ImageGenerator
- * node is generating data, after each @ref conc_updating_data "'Update Data'" call,
- * the application calls this method to get the node's frame object, which contains
- * the data and all its associated properties.
- */
- inline void GetMetaData(ImageMetaData& metaData) const
- {
- xnGetImageMetaData(GetHandle(), metaData.GetUnderlying());
- }
-
- /**
- * @copybrief xnGetRGB24ImageMap
- * For full details and usage, see @ref xnGetRGB24ImageMap
- */
- inline const XnRGB24Pixel* GetRGB24ImageMap() const
- {
- return xnGetRGB24ImageMap(GetHandle());
- }
-
- /**
- * @copybrief xnGetYUV422ImageMap
- * For full details and usage, see @ref xnGetYUV422ImageMap
- */
- inline const XnYUV422DoublePixel* GetYUV422ImageMap() const
- {
- return xnGetYUV422ImageMap(GetHandle());
- }
-
- /**
- * @copybrief xnGetGrayscale8ImageMap
- * For full details and usage, see @ref xnGetGrayscale8ImageMap
- */
- inline const XnGrayscale8Pixel* GetGrayscale8ImageMap() const
- {
- return xnGetGrayscale8ImageMap(GetHandle());
- }
-
- /**
- * @copybrief xnGetGrayscale16ImageMap
- * For full details and usage, see @ref xnGetGrayscale16ImageMap
- */
- inline const XnGrayscale16Pixel* GetGrayscale16ImageMap() const
- {
- return xnGetGrayscale16ImageMap(GetHandle());
- }
-
- /**
- * @copybrief xnGetImageMap()
- * For full details, see @ref xnGetImageMap().
- */
- inline const XnUInt8* GetImageMap() const
- {
- return xnGetImageMap(GetHandle());
- }
-
- /**
- * @brief Returns whether the ImageGenerator node supports a specific
- * pixel color format for the image map.
- *
- * @param [in] Format The format to check for.
- *
- * <b>Remarks</b>
- *
- * Use this method before setting the pixel format for the next frame to be generated.
- */
- inline XnBool IsPixelFormatSupported(XnPixelFormat Format) const
- {
- return xnIsPixelFormatSupported(GetHandle(), Format);
- }
-
- /**
- * @brief Sets the ImageGenerator node's current 'pixel color' format.
- * This format is used for generating the next frame.
- *
- * @param [in] Format The format to set.
- *
- * <b>Remarks</b>
- *
- * As an example of a pixel color format, the RGB24 image format has one byte for
- * red, one byte for green, and one byte for blue.
- *
- * When reading the generated data you must use the appropriate 'get' function,
- * e.g., call RGB24Data() to read data generated as the RGB24Data format.
- *
- * It is the user responsibility to check first if the pixel format is supported
- * by calling @ref xn::ImageGenerator::IsPixelFormatSupported().
- */
- inline XnStatus SetPixelFormat(XnPixelFormat Format)
- {
- return xnSetPixelFormat(GetHandle(), Format);
- }
-
- /**
- * @brief Gets the current pixel color format. This is the format set
- * using @ref xn::ImageGenerator node::SetPixelFormat().
- *
- * <b>Remarks</b>
- *
- * To get the pixel format of the saved frame - in the @ref glos_frame_object "frame
- * object" - use the appropriate method of the node's associated @ref xn::ImageMetaData
- * object.
- */
- inline XnPixelFormat GetPixelFormat() const
- {
- return xnGetPixelFormat(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'Pixel Format Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToPixelFormatChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToPixelFormatChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters the event handler for the 'Pixel Format Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromPixelFormatChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromPixelFormatChange, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Represents a mock image generator
- */
- class MockImageGenerator : public ImageGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline MockImageGenerator(XnNodeHandle hNode = NULL) : ImageGenerator(hNode) {}
- inline MockImageGenerator(const NodeWrapper& other) : ImageGenerator(other) {}
-
- /**
- * Creates a mock image generator
- *
- * @param [in] context The context in which the node should be generated
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus Create(Context& context, const XnChar* strName = NULL);
-
- /**
- * Creates a mock image generator, copying the initial state from another image
- * generator.
- *
- * @param [in] other The image generator to copy state from
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus CreateBasedOn(ImageGenerator& other, const XnChar* strName = NULL);
-
- /**
- * @copybrief xnMockImageSetData
- * For full details and usage, see @ref xnMockImageSetData
- */
- inline XnStatus SetData(XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnUInt8* pImageMap)
- {
- return xnMockImageSetData(GetHandle(), nFrameID, nTimestamp, nDataSize, pImageMap);
- }
-
- /**
- * Sets the data of the mock node from a meta data object, overriding frame ID and
- * timestamp
- *
- * @param [in] imageMD Object to take data from
- * @param [in] nFrameID Frame ID
- * @param [in] nTimestamp Timestamp
- */
- inline XnStatus SetData(const ImageMetaData& imageMD, XnUInt32 nFrameID, XnUInt64 nTimestamp)
- {
- return SetData(nFrameID, nTimestamp, imageMD.DataSize(), imageMD.Data());
- }
-
- /**
- * Sets the data of the mock node from a meta data object.
- *
- * @param [in] imageMD Object to take data from
- */
- inline XnStatus SetData(const ImageMetaData& imageMD)
- {
- return SetData(imageMD, imageMD.FrameID(), imageMD.Timestamp());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> An IRGenerator node is a map generator that outputs infra-red maps.
- *
- * <b>Usage:</b> Instantiate and create an IR generator node
- *
- * <b>Data output:</b> IR maps
- */
- class IRGenerator : public MapGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline IRGenerator(XnNodeHandle hNode = NULL) : MapGenerator(hNode) {}
- inline IRGenerator(const NodeWrapper& other) : MapGenerator(other) {}
-
- /**
- * @brief Creates an IRGenerator node from available @ref node_alternative "production node alternatives".
- *
- * See @ref create_method for a detailed description
- * about the operation of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Gets the IR generator node's latest @ref glos_frame_object "frame object", saving
- * it in the @ref xn::IRMetaData object. This @ref glos_frame_object "frame object" is a
- * snapshot of the generated IR map data and its associated configuration information at a
- * certain point in time. This saved @ref glos_frame_object "frame object" provides fast
- * and easy access to the IR generator node's data and configuration information.
- *
- * @param [out] metaData Structure to be filled with the frame object.
- *
- * <b>Remarks:</b>
- *
- * This method is central in the use of the IRGenerator node. Once the IRGenerator
- * node is generating data, after each @ref conc_updating_data "'Update Data'" call,
- * the application calls this method to get the node's frame object, which contains
- * the data and all its associated properties.
- */
- inline void GetMetaData(IRMetaData& metaData) const
- {
- xnGetIRMetaData(GetHandle(), metaData.GetUnderlying());
- }
-
- /**
- * @brief Gets a pointer to the latest IR map.
- */
- inline const XnIRPixel* GetIRMap() const
- {
- return xnGetIRMap(GetHandle());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Represents a mock IR generator
- */
- class MockIRGenerator : public IRGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline MockIRGenerator(XnNodeHandle hNode = NULL) : IRGenerator(hNode) {}
- inline MockIRGenerator(const NodeWrapper& other) : IRGenerator(other) {}
-
- /**
- * Creates a mock IR generator
- *
- * @param [in] context The context in which the node should be generated
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus Create(Context& context, const XnChar* strName = NULL);
- /**
- * Creates a mock IR generator, copying the initial state from another IR generator.
- *
- * @param [in] other The IR generator to copy state from
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus CreateBasedOn(IRGenerator& other, const XnChar* strName = NULL);
-
- /**
- * @copybrief xnMockIRSetData
- * For full details and usage, see @ref xnMockIRSetData
- */
- inline XnStatus SetData(XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnIRPixel* pIRMap)
- {
- return xnMockIRSetData(GetHandle(), nFrameID, nTimestamp, nDataSize, pIRMap);
- }
-
- /**
- * Sets the data of the mock node from a meta data object, overriding frame ID and
- * timestamp
- *
- * @param [in] irMD Object to take data from
- * @param [in] nFrameID Frame ID
- * @param [in] nTimestamp Timestamp
- */
- inline XnStatus SetData(const IRMetaData& irMD, XnUInt32 nFrameID, XnUInt64 nTimestamp)
- {
- return SetData(nFrameID, nTimestamp, irMD.DataSize(), irMD.Data());
- }
-
- /**
- * Sets the data of the mock node from a meta data object.
- *
- * @param [in] irMD Object to take data from
- */
- inline XnStatus SetData(const IRMetaData& irMD)
- {
- return SetData(irMD, irMD.FrameID(), irMD.Timestamp());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b>A GesturesGenerator node recognizes certain hand gestures and raise
- * corresponding events accordingly.
- *
- * A gesture is a specific hand movement. The gesture generator node scans the FOV to
- * detect gestures and generates the gesture data.
- *
- * <b>Usage:</b> Instantiate to create a gesture generator node.
- *
- * An example of a gesture is a specific hand movement. For example, the developer who builds
- * a gesture generator node can decide that waving a hand can be a gesture; pushing can be a gesture.
- * The developer can build an OpenNI gesture generator to support any number of gestures.
- *
- * <b>Overview with Sample of a Usage Scenario:</b>
- *
- * @note Everything in this introduction is just an @e example of usage; there
- * is no obligation to use the gesture generator node in the particular way described
- * here.
- *
- * An application might want to know who is the person they should interact with. For example,
- * if currently there are three people in the room, which hand should be tracked?
- *
- * The application can use a specific gesture (such as waving to the camera) as a focus gesture,
- * meaning the person who performs this gesture will be the one interacting with the application.
- *
- * To do that, the application can use a GestureGenerator to detect that specific gesture and then
- * use the position of that gesture to initialize the HandsGenerator, asking it to track the hand
- * located at that position. (There is no inherent connection between the GestureGenerator and the
- * HandsGenerator. Detecting a gesture and using that position to initialize the HandsGenerator is
- * just an example of how applications can use the two).
- *
- * <b>Sample Process: Setting up a Gesture Generator</b>
- *
- * <b>1. Creating a Gesture Generator </b>
- *
- * Assuming there is a gesture generator module (plug-in) installed on the computer, the application
- * can create a gesture generator node and configure it to recognize gestures. As for many other
- * types of generator nodes, use the @ref Create() method of the GestureGenerator class to create a
- * gesture generator node.
- *
- * <b>2. Enumerating generators</b>
- *
- * Now, once the application has created a gesture generator node, the application can
- * find out which gestures are supported by enumerating all its gestures. The gestures
- * are identified by their names, e.g., "Wave" and "Click".
- *
- * The gesture generator node maintains a list of active gestures. An active gesture
- * is a gesture for which the gesture generator is scanning the FOV in an attempt
- * to recognize the gesture. Thus, to cause the gesture generator node to start scanning
- * for a gesture, the application must add it to its list of active gestures.
- *
- * In a typical application, the application detects one gesture - the focus gesture -
- * and can then send its location to the hand generator node. The application typically
- * will then not want to recognize further gestures and so it must remove the gesture from
- * the list; further gestures in the FOV may cause confusion. For example, if one particular
- * human user started to control the TV, that user would not want someone else "taking the control".
- *
- * <b>3. Recognizing Gestures </b>
- *
- * Every gesture has an identification point (the position where the gesture was identified - perhaps
- * in retrospect) and an end point (the position in which the hand currently is), although in most cases,
- * both points will be the same. The application must know the position of the end of the gesture
- * movement; because that's where the hand really is at the time the application gets the 'Gesture Recognized'
- * event. The gesture generator sends both positions with the 'Gesture Recognized' event to the application.
- * The application can then pass the end position to the hand generator for tracking that hand.
- */
- class GestureGenerator : public Generator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline GestureGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- inline GestureGenerator(const NodeWrapper& other) : Generator(other) {}
-
- /**
- * @brief Creates a gesture generator node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks</b>
- *
- * The application then uses the @ref AddGesture() method in order to activate the
- * gesture.
- *
- * Typical gestures are focus gestures. Examples of focus gestures are 'Wave' and
- * 'Click'.
- *
- * See @ref create_method for a detailed description of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Activates the GestureGenerator node to start looking for the named gesture in the FOV.
- * It does this by adding the gesture's name to the list of gestures that the GestureGenerator node
- * actively scans for in the FOV. If an area is supplied, the gesture will only be recognized if
- * it is detected in that area.
- *
- * @param [in] strGesture Name of the gesture to look for
- * @param [in] pArea Area in which to look for the gesture (in real-world coordinates)
- *
- * <b>Remarks</b>
- *
- * This gesture must be one of the built-in gestures of the GestureGenerator node.
- */
- inline XnStatus AddGesture(const XnChar* strGesture, XnBoundingBox3D* pArea)
- {
- return xnAddGesture(GetHandle(), strGesture, pArea);
- }
-
- /**
- * @brief Disables the GestureGenerator from looking for the named gesture in the FOV.
- * It does this by removing the gesture's name from the list of gestures that the
- * GestureGenerator node actively scans for in the FOV.
- *
- * @param [in] strGesture The name of the gesture to not look for anymore.
- */
- inline XnStatus RemoveGesture(const XnChar* strGesture)
- {
- return xnRemoveGesture(GetHandle(), strGesture);
- }
-
- /**
- * @brief Get the names of all gestures that are currently active in this generator node.
- *
- * @param [out] astrGestures Preallocated memory, for the gesture names
- * @param [in] nNameLength Memory size for each gesture name
- * @param [in,out] nGestures Inputs the total size of the preallocated memory.
- * Outputs the total number of gestures in the list.
- */
- inline XnStatus GetAllActiveGestures(XnChar** astrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) const
- {
- return xnGetAllActiveGestures(GetHandle(), astrGestures, nNameLength, &nGestures);
- }
-
- /**
- * @copybrief xnGetNumberOfAvailableGestures
- * For full details and usage, see @ref xnGetNumberOfAvailableGestures
- */
- inline XnUInt16 GetNumberOfAvailableGestures() const
- {
- return xnGetNumberOfAvailableGestures(GetHandle());
- }
-
- /**
- * @brief Gets the names of all active gestures in this generator node.
- *
- * @param [out] astrGestures Preallocated memory, for the gesture names
- * @param [in] nNameLength Memory size for each gesture name
- * @param [in,out] nGestures The size of the preallocated memory. Changed to number
- * of gestures
- */
- inline XnStatus EnumerateAllGestures(XnChar** astrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) const
- {
- return xnEnumerateAllGestures(GetHandle(), astrGestures, nNameLength, &nGestures);
- }
-
- /**
- * @brief Returns whether a specific gesture is available in this generator node.
- * @param [in] strGesture Name of the gesture to check
- *
- */
- inline XnBool IsGestureAvailable(const XnChar* strGesture) const
- {
- return xnIsGestureAvailable(GetHandle(), strGesture);
- }
-
- /**
- * @copybrief xnIsGestureProgressSupported
- * For full details and usage, see @ref xnIsGestureProgressSupported
- */
- inline XnBool IsGestureProgressSupported(const XnChar* strGesture) const
- {
- return xnIsGestureProgressSupported(GetHandle(), strGesture);
- }
-
- /**
- * Callback for the recognition of a gesture.
- * Signals that the GestureGenerator node has recognized the named gesture in the scene.
-
- * Example of a callback header to handle the event:
- @code
- void XN_CALLBACK_TYPE GestureRecognized (GestureGenerator &generator, const XnChar *strGesture,
- const XnPoint3D *pIDPosition, const XnPoint3D *pEndPosition,
- void *pCookie)
- @endcode
- *
- * @param [in] generator Node that raised the event.
- * @param [in] strGesture Name of the gesture that was recognized.
- * @param [in] pIDPosition X-Y-Z location coordinates of the hand point position in which the gesture was identified.
- * @param [in] pEndPosition Position of the hand at the end of the gesture. This is the hand that performed the gesture.
- * @param [in] pCookie User-provided cookie that was given when registering to this event.
-
- <b>Remarks</b>
-
- This event returns the identification point (the position where the gesture was identified - perhaps in retrospect) and an end point (the position in which the hand currently is), although in most cases, both points will be the same. The end position of the gesture movement is where the hand is located at the time the GestureGenerator recognized a complete gesture and raised the event.
- */
- typedef void (XN_CALLBACK_TYPE* GestureRecognized)(GestureGenerator& generator, const XnChar* strGesture, const XnPoint3D* pIDPosition, const XnPoint3D* pEndPosition, void* pCookie);
-
- /**
- * Callback for indication that a certain gesture is in progress.
- *
- * Signals to the application that a gesture is expected to soon be recognized,
- * that is, a gesture is in progress.
- *
- * Example of a callback header to handle the event: @code
- void XN_CALLBACK_TYPE GestureProgress (GestureGenerator &generator, const XnChar *strGesture,
- const XnPoint3D *pPosition, XnFloat fProgress,
- void *pCookie)
- @endcode
- *
- * @param [in] generator The node that raised the event.
- * @param [in] strGesture The gesture that is on its way to being recognized.
- * @param [in] pPosition The current position of the hand that is performing the gesture.
- * @param [in] fProgress The percentage of the gesture that was already performed.
- * @param [in] pCookie A user-provided cookie that was given when registering to this event.
- *
- * Gesture progress varies between different types of gestures. For the 'Click'
- * gesture, for example, the click gesture's first step is the 'Push' movement (assuming
- * the click gesture is defined as 'Push' and then 'Pull'). When the hand in the
- * FOV completes the 'Push' the GestureGenerator node raises this event.
- *
- * After the hand in the FOV completes the pull motion, the node sends the 'Gesture
- * Recognized' event, as described above.
- */
- typedef void (XN_CALLBACK_TYPE* GestureProgress)(GestureGenerator& generator, const XnChar* strGesture, const XnPoint3D* pPosition, XnFloat fProgress, void* pCookie);
-
- /**
- * @brief Registers event handlers for the 'Gesture Recognized' and 'Gesture Progress' events.
- * Pass NULL for any event the application does not need to receive.
- *
- * @param [in] RecognizedCB [Optional] Callback function to be invoked when the 'Gesture Recognized' event is raised.
- * @param [in] ProgressCB [Optional] Callback function to be invoked when the 'Gesture Progress' event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- XnStatus RegisterGestureCallbacks(GestureRecognized RecognizedCB, GestureProgress ProgressCB, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- GestureCookie* pGestureCookie;
- XN_VALIDATE_ALLOC(pGestureCookie, GestureCookie);
- pGestureCookie->recognizedHandler = RecognizedCB;
- pGestureCookie->progressHandler = ProgressCB;
- pGestureCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterGestureCallbacks(GetHandle(), GestureRecognizedCallback, GestureProgressCallback, pGestureCookie, &pGestureCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pGestureCookie);
- return (nRetVal);
- }
-
- hCallback = pGestureCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters the event handlers for the 'Gesture Recognized' and 'Gesture Progress' events.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterGestureCallbacks(XnCallbackHandle hCallback)
- {
- GestureCookie* pGestureCookie = (GestureCookie*)hCallback;
- xnUnregisterGestureCallbacks(GetHandle(), pGestureCookie->hCallback);
- xnOSFree(pGestureCookie);
- }
-
- /**
- * @brief Registers an event handler for the 'Gesture Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToGestureChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToGestureChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Gesture Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromGestureChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromGestureChange, GetHandle(), hCallback);
- }
-
- /**
- * Callback for indication that an intermediate stage of a gesture has been completed.
- *
- * Example of a callback function to handle the event:
- @code
- void XN_CALLBACK_TYPE GestureIntermediateStageCompleted(GestureGenerator& generator, const XnChar *strGesture,
- const XnPoint3D *pPosition, void *pCookie)
- @endcode
- *
- * @param [in] generator The node that raised the event.
- * @param [in] strGesture The gesture that is on its way to being recognized.
- * @param [in] pPosition The current position of the hand that is performing the gesture.
- * @param [in] pCookie A user-provided cookie that was given when registering to this event.
- *
- * <b>Remarks</b>
- *
- * For different types of gestures there is a different point at which the GestureGenerator
- * node can recognize that a gesture is in progress. For the 'Click' gesture, for
- * example, the first step is the 'Push' movement (assuming the click gesture is
- * defined as 'Push' and then 'Pull'). When the hand in the FOV completes the 'Push'
- * the GestureGenerator node raises this event.
- *
- * The difference between the 'Gesture Intermediate Stage Completed' event and the
- * 'Gesture Progress' event is that the 'Gesture Intermediate Stage Completed' event
- * does not refer to how much of the gesture is complete. It deals with breaking
- * the gesture into smaller intermediate stages, and informing about them.
- */
- typedef void (XN_CALLBACK_TYPE* GestureIntermediateStageCompleted)(GestureGenerator& generator, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Gesture Intermediate Stage Completed' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- XnStatus RegisterToGestureIntermediateStageCompleted(GestureIntermediateStageCompleted handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- GestureIntermediateStageCompletedCookie* pGestureCookie;
- XN_VALIDATE_ALLOC(pGestureCookie, GestureIntermediateStageCompletedCookie);
- pGestureCookie->handler = handler;
- pGestureCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToGestureIntermediateStageCompleted(GetHandle(), GestureIntermediateStageCompletedCallback, pGestureCookie, &pGestureCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pGestureCookie);
- return (nRetVal);
- }
-
- hCallback = pGestureCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Gesture Intermediate Stage Completed' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromGestureIntermediateStageCompleted(XnCallbackHandle hCallback)
- {
- GestureIntermediateStageCompletedCookie* pGestureCookie = (GestureIntermediateStageCompletedCookie*)hCallback;
- xnUnregisterFromGestureIntermediateStageCompleted(GetHandle(), pGestureCookie->hCallback);
- xnOSFree(pGestureCookie);
- }
-
- /**
- * Callback for indication that the GestureGenerator node recognizes it is ready
- * for the next intermediate stage. The next stage is specific to the gesture.
- *
- * Example of a callback function to handle the event: @code
- void XN_CALLBACK_TYPE GestureReadyForNextIntermediateStage(GestureGenerator &generator, const XnChar *strGesture,
- const XnPoint3D *pPosition, void *pCookie)
- @endcode
- *
- * <b>Remarks</b>
- *
- * The number of intermediate stages that there can be is implementation-dependent.
- *
- * @param [in] generator The node that raised the event.
- * @param [in] strGesture The gesture that is on its way to being recognized.
- * @param [in] pPosition The current position of the hand that is performing the gesture.
- * @param [in] pCookie A user-provided cookie that was given when registering to this event.
- */
- typedef void (XN_CALLBACK_TYPE* GestureReadyForNextIntermediateStage)(GestureGenerator& generator, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Gesture Ready For Next Intermediate Stage' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- XnStatus RegisterToGestureReadyForNextIntermediateStage(GestureReadyForNextIntermediateStage handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- GestureReadyForNextIntermediateStageCookie* pGestureCookie;
- XN_VALIDATE_ALLOC(pGestureCookie, GestureReadyForNextIntermediateStageCookie);
- pGestureCookie->handler = handler;
- pGestureCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToGestureReadyForNextIntermediateStage(GetHandle(), GestureReadyForNextIntermediateStageCallback, pGestureCookie, &pGestureCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pGestureCookie);
- return (nRetVal);
- }
-
- hCallback = pGestureCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Gesture Ready For Next Intermediate Stage' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromGestureReadyForNextIntermediateStageCallbacks(XnCallbackHandle hCallback)
- {
- GestureReadyForNextIntermediateStageCookie* pGestureCookie = (GestureReadyForNextIntermediateStageCookie*)hCallback;
- xnUnregisterFromGestureReadyForNextIntermediateStage(GetHandle(), pGestureCookie->hCallback);
- xnOSFree(pGestureCookie);
- }
-
- /** @cond */
- inline XnStatus XN_API_DEPRECATED("Use GetAllActiveGestures() instead") GetActiveGestures(XnChar*& astrGestures, XnUInt16& nGestures) const
- {
- return xnGetActiveGestures(GetHandle(), &astrGestures, &nGestures);
- }
- inline XnStatus XN_API_DEPRECATED("Use EnumerateAllGestures() instead") EnumerateGestures(XnChar*& astrGestures, XnUInt16& nGestures) const
- {
- return xnEnumerateGestures(GetHandle(), &astrGestures, &nGestures);
- }
- /** @endcond */
-
- private:
- typedef struct GestureCookie
- {
- GestureRecognized recognizedHandler;
- GestureProgress progressHandler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } GestureCookie;
-
- static void XN_CALLBACK_TYPE GestureRecognizedCallback(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pIDPosition, const XnPoint3D* pEndPosition, void* pCookie)
- {
- GestureCookie* pGestureCookie = (GestureCookie*)pCookie;
- GestureGenerator gen(hNode);
- if (pGestureCookie->recognizedHandler != NULL)
- {
- pGestureCookie->recognizedHandler(gen, strGesture, pIDPosition, pEndPosition, pGestureCookie->pUserCookie);
- }
- }
-
- static void XN_CALLBACK_TYPE GestureProgressCallback(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, XnFloat fProgress, void* pCookie)
- {
- GestureCookie* pGestureCookie = (GestureCookie*)pCookie;
- GestureGenerator gen(hNode);
- if (pGestureCookie->progressHandler != NULL)
- {
- pGestureCookie->progressHandler(gen, strGesture, pPosition, fProgress, pGestureCookie->pUserCookie);
- }
- }
-
- typedef struct GestureIntermediateStageCompletedCookie
- {
- GestureIntermediateStageCompleted handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } GestureIntermediateStageCompletedCookie;
-
- static void XN_CALLBACK_TYPE GestureIntermediateStageCompletedCallback(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie)
- {
- GestureIntermediateStageCompletedCookie* pGestureCookie = (GestureIntermediateStageCompletedCookie*)pCookie;
- GestureGenerator gen(hNode);
- if (pGestureCookie->handler != NULL)
- {
- pGestureCookie->handler(gen, strGesture, pPosition, pGestureCookie->pUserCookie);
- }
- }
-
- typedef struct GestureReadyForNextIntermediateStageCookie
- {
- GestureReadyForNextIntermediateStage handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } GestureReadyForNextIntermediateStageCookie;
-
- static void XN_CALLBACK_TYPE GestureReadyForNextIntermediateStageCallback(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie)
- {
- GestureReadyForNextIntermediateStageCookie* pGestureCookie = (GestureReadyForNextIntermediateStageCookie*)pCookie;
- GestureGenerator gen(hNode);
- if (pGestureCookie->handler != NULL)
- {
- pGestureCookie->handler(gen, strGesture, pPosition, pGestureCookie->pUserCookie);
- }
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> Performs an analysis of the scene, identifying different
- * objects.
- *
- * <b>Data output:</b> A label map and the floor plane.
- *
- * <b>Remarks:</b>
- *
- * The scene analyzer node analyzes a scene, calculating the separation
- * of the foreground from the background, identification of figures in the scene, and
- * detection of the floor plane and its coordinates.
- *
- * The SceneAnalyzer node's main output is a label map, in which each pixel
- * is labeled according to the object it belongs to. So, for example,
- * each human person gets a separate label, and all pixels belonging to him
- * are labeled with that label.
- */
- class SceneAnalyzer : public MapGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline SceneAnalyzer(XnNodeHandle hNode = NULL) : MapGenerator(hNode) {}
- inline SceneAnalyzer(const NodeWrapper& other) : MapGenerator(other) {}
-
- /**
- * @brief Creates a SceneAnalyzer node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks</b>
- *
- * See @ref create_method for a detailed description of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
-
- /**
- * @brief Gets the scene analyzer node's latest @ref glos_frame_object "frame object", saving
- * it in the @ref xn::SceneMetaData object. This @ref glos_frame_object "frame object" is a
- * snapshot of the generated label map data and its associated configuration information at a
- * certain point in time. This saved @ref glos_frame_object "frame object" provides fast
- * and easy access to the scene analyzer node's data and configuration information.
- *
- * @param [out] metaData Structure to be filled with the frame object.
- *
- * <b>Remarks:</b>
- *
- * This method is central in the use of the SceneAnalyzer node. Once the SceneAnalyzer
- * node is generating data, after each @ref conc_updating_data "'Update Data'" call,
- * the application calls this method to get the node's frame object, which contains
- * the data and all its associated properties.
- *
- * The frame scene is a labeled depth map, in which each pixel contains a numeric
- * label indicating whether it represents a user, or it is part of the background.
- */
- inline void GetMetaData(SceneMetaData& metaData) const
- {
- xnGetSceneMetaData(GetHandle(), metaData.GetUnderlying());
- }
-
- /**
- * @copybrief xnGetLabelMap
- * For full details and usage, see @ref xnGetLabelMap
- */
- inline const XnLabel* GetLabelMap() const
- {
- return xnGetLabelMap(GetHandle());
- }
-
- /**
- * @brief Gets a description of the floor, if it was found.
- *
- * @param [out] Plane A description of the floor
- */
- inline XnStatus GetFloor(XnPlane3D& Plane) const
- {
- return xnGetFloor(GetHandle(), &Plane);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Allows access to <b>Hand touching FOV edge</b> capability functions.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref HandsGenerator::GetHandTouchingFOVEdgeCap()
- * to obtain an instance.
- */
- class HandTouchingFOVEdgeCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline HandTouchingFOVEdgeCapability(XnNodeHandle hNode) : Capability(hNode) {}
- HandTouchingFOVEdgeCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * Callback for the hand getting close to the edge of the FOV
- *
- * @param [in] touchingfov the hand touching fov edge capability that raised this event.
- * @param [in] user ID of the hand that disappeared.
- * @param [in] pPosition Position of the hand.
- * @param [in] fTime Timestamp, in seconds.
- * @param [in] eDir Direction of the FOV touched
- * @param [in] pCookie User-provided cookie that was given when registering to this event.
- */
- typedef void (XN_CALLBACK_TYPE* HandTouchingFOVEdge)(HandTouchingFOVEdgeCapability& touchingfov, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, XnDirection eDir, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Hand Touching FOV Edge' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToHandTouchingFOVEdge(HandTouchingFOVEdge handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- HandTouchingFOVEdgeCookie* pHandCookie;
- XN_VALIDATE_ALLOC(pHandCookie, HandTouchingFOVEdgeCookie);
- pHandCookie->handler = handler;
- pHandCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToHandTouchingFOVEdge(GetHandle(), HandTouchingFOVEdgeCB, pHandCookie, &pHandCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pHandCookie);
- return (nRetVal);
- }
-
- hCallback = pHandCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Hand Touching FOV Edge' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromHandTouchingFOVEdge(XnCallbackHandle hCallback)
- {
- HandTouchingFOVEdgeCookie* pHandCookie = (HandTouchingFOVEdgeCookie*)hCallback;
- xnUnregisterFromHandTouchingFOVEdge(GetHandle(), pHandCookie->hCallback);
- xnOSFree(pHandCookie);
- }
- private:
- typedef struct HandTouchingFOVEdgeCookie
- {
- HandTouchingFOVEdge handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } HandTouchingFOVEdgeCookie;
-
- static void XN_CALLBACK_TYPE HandTouchingFOVEdgeCB(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, XnDirection eDir, void* pCookie)
- {
- HandTouchingFOVEdgeCookie* pHandCookie = (HandTouchingFOVEdgeCookie*)pCookie;
- HandTouchingFOVEdgeCapability cap(hNode);
- if (pHandCookie->handler != NULL)
- {
- pHandCookie->handler(cap, user, pPosition, fTime, eDir, pHandCookie->pUserCookie);
- }
- }
-
- };
-
- /**
- * @ingroup cppref_prd_func
- * The HandsGenerator node generates tracking data about a single hand or multiple hands
- * with persistent IDs.
- *
- * The user interface (UI) in natural interaction applications is specifically implemented
- * and performed through hand movements.
- *
- * OpenNI's user interface (UI) ability is specifically through hand movements. Thus
- * it is the HandsGenerator class that provides the main UI ability.
- *
- * Using events, the HandsGenerator object notifies the application of various occurrences: a
- * 'Hand Create' event is sent when an expected hand has been positively identified or when a
- * new hand appears; a 'Hand Update' event is sent when a tracked hand appears again in a new
- * frame; a 'Hand Destroy' event is sent when a tracked hand disappears.
- *
- * <b>NOTE: </b> The HandsGenerator does not provide the mechanism for initially locating
- * the hand. Initial location of the hand can be performed by the Gestures class (see
- * further below). This is a typical scenario but not the only way to locate the hand.
- *
- * The following figure illustrates a typical scenario for using the HandsGenerator
- * class. After hand recognition the HandsGenerator class continues tracking the hand
- * and sending HandUpdate events until the application sends calls HandsGenerator's
- * StopTracking method.
- *
- * <b>1. Creating a HandsGenerator</b>
- *
- * As for many other types of generator nodes, HandsGenerator provides a Create method
- * to create a hands generator node.
- *
- * Assuming you have hands generator module (plug-in) installed on your computer, you
- * can create a hands generator node. Then you can start tracking for an expected hand.
- *
- * @note Creating a HandsGenerator node has nothing to do with the 'Hand Create'
- * event that OpenNI sends to the app on starting to successfully track the hand in
- * the FOV.
- *
- * <b>2. Starting Tracking</b>
- *
- * When starting to track a hand, the application already expects that a person's hand
- * is already present in the field of view and is at a certain coordinate (x,y) position.
- *
- * The source for this information, i.e., the presence of a hand object and its position,
- * can be obtained, for example, from a gesture generator node.
- * The application passes this location to the @ref StartTracking()
- * method of the HandsGenerator object, which starts tracking for
- * the expected hand. When - and if - the StartTracking() method finds the hand at the
- * expected position it sends a 'Hand Create' event to the application.
- *
- * <b>3. Tracking</b>
- *
- * While tracking a hand, 'Hand Update' events are sent to the application notifying that the hand
- * has moved to such and such a position. A 'Hand Update' event is sent each time a new
- * frame processed by the input sensors shows the hand is still present. A 'Hand Update'
- * event is sent even if the hand is still in the same position as it was in the previous
- * frame.
- *
- * If the tracked hand disappears (e.g., when the person puts his hand behind his back)
- * a 'Hand Destroy' event is sent to the application to notify that the hand has disappeared.
- *
- * The 'Hand Create' event is also sent if an additional hand is found internally.
- *
- * The tracking mechanism uses an algorithm that uses the depth to obtain points and
- * track. This algorithm can be somewhat susceptible to jitter of the hand, so HandsGenerator
- * provides a smoothing capability. Call the SetSmoothing() method to apply a smoothing
- * factor of none (0) to maximum (1). The default is 0. Recommended is 0.1 when using
- * the PrimeSense algorithm for hand generation.
- *
- * <b>4. Stopping Tracking</b>
- *
- * When the hand being tracked is no longer identified, the HandsGenerator object sends
- * the 'Hand Destroy' event.
- *
- * The application can also intentionally stop tracking a specific hand, e.g., when
- * the hand is no longer of interest. The application does this by calling the @ref StopTracking()
- * method. When the node stops tracking the hand it sends a 'Hand Destroy' event to the application.
- *
- * The application can also stop the tracking of all hands at once by calling the @ref StopTrackingAll()
- * method. In response, the node stops tracking all hands and for each hand it sends a
- * 'Hand Destroy' event to the application.
- * Even when there are no tracked hands, the HandsGenerator object remains functional
- * for the next tracking request.
- *
- * <h2>Events:</h2>
- *
- * @image html ClassHandsGenerator_EventSeq-sm.png "Event Sequence for HandsGenerator node"
- */
- class HandsGenerator : public Generator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline HandsGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- inline HandsGenerator(const NodeWrapper& other) : Generator(other) {}
-
- /**
- * @brief Creates a HandsGenerator node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks:</b>
- *
- * See @ref create_method for a detailed description of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * Callback for the creation of a new hand.
- *
- * Signals that the hands generator has recognized and started tracking a new hand in response
- * to the application calling the StartTracking() method. This event returns the
- * ID of the new hand, the time of its recognition, and its position on recognition
- * in the current frame.
- *
- * @param [in] generator Generator that raised this event.
- * @param [in] user ID of the new hand.
- * @param [in] pPosition Position at which the hand was created.
- * @param [in] fTime Timestamp, in seconds.
- * @param [in] pCookie User-provided cookie that was given when registering to
- * this event.
- */
- typedef void (XN_CALLBACK_TYPE* HandCreate)(HandsGenerator& generator, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-
- /**
- * Signals that an already-existing hand has moved to a new position.
- *
- * Signals that a currently tracked hand was recognized at a specific position in
- * the new frame. OpenNI continues to send this event at each further frame that
- * the hand is still present. This event returns the ID of the hand, which is the
- * same ID returned by the HandCreate event, the hand's new position, and the time
- * of the update.
- *
- * @param [in] generator the generator that raised this event.
- * @param [in] user The id of the hand that moved.
- * @param [in] pPosition The new position of the relevant hand.
- * @param [in] fTime Timestamp, in seconds.
- * @param [in] pCookie A user-provided cookie that was given when registering to
- * this event.
- */
- typedef void (XN_CALLBACK_TYPE* HandUpdate)(HandsGenerator& generator, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-
- /**
- * Callback for the disappearance of a hand.
- *
- * Signals that an existing hand has disappeared from the frame for any reason.
- * This event returns the user ID &ndash; still the same user ID as before &ndash;
- * and the time that it disappeared.
- *
- * @param [in] generator the generator that raised this event.
- * @param [in] user The id of the hand that disappeared.
- * @param [in] fTime Timestamp, in seconds.
- * @param [in] pCookie A user-provided cookie that was given when registering to
- * this event.
- */
- typedef void (XN_CALLBACK_TYPE* HandDestroy)(HandsGenerator& generator, XnUserID user, XnFloat fTime, void* pCookie);
-
- /**
- * @brief Registers event handlers for the 'Hand Create', 'Hand Update' and 'Hand Destroy' events.
- * Pass NULL for any event you don't want your application to receive.
- *
- * @param [in] CreateCB [Optional] Callback function to be invoked when the 'Hand Create' event is raised.
- * @param [in] UpdateCB [Optional] Callback function to be invoked when the 'Hand Update' event is raised.
- * @param [in] DestroyCB [Optional] Callback function to be invoked when the 'Hand Destroy' event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterHandCallbacks(HandCreate CreateCB, HandUpdate UpdateCB, HandDestroy DestroyCB, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- HandCookie* pHandCookie;
- XN_VALIDATE_ALLOC(pHandCookie, HandCookie);
- pHandCookie->createHandler = CreateCB;
- pHandCookie->updateHandler = UpdateCB;
- pHandCookie->destroyHandler = DestroyCB;
- pHandCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterHandCallbacks(GetHandle(), HandCreateCB, HandUpdateCB, HandDestroyCB, pHandCookie, &pHandCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pHandCookie);
- return (nRetVal);
- }
-
- hCallback = pHandCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters event handlers for the 'Hand Create', 'Hand Update' and 'Hand Destroy' events.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterHandCallbacks(XnCallbackHandle hCallback)
- {
- HandCookie* pHandCookie = (HandCookie*)hCallback;
- xnUnregisterHandCallbacks(GetHandle(), pHandCookie->hCallback);
- xnOSFree(pHandCookie);
- }
-
- /**
- * @brief Stops tracking an existing hand that you are no longer interested in.
- *
- * @param [in] user Hand to stop tracking. This parameter is the ID of the hand.
- *
- * <b>Remarks</b>
- *
- * Typically, the application will stop tracking an existing hand that it is no
- * longer interested in.
- *
- * Calling this method causes the 'Hand Destroy' event to be raised when OpenNI destroys
- * the hand.
- */
- inline XnStatus StopTracking(XnUserID user)
- {
- return xnStopTracking(GetHandle(), user);
- }
-
- /**
- * @brief Stops tracking all existing hands.
- *
- * <b>Remarks</b>
- *
- * Calling this method causes the 'Hand Destroy' event to be raised when OpenNI destroys
- * the hand.
- */
- inline XnStatus StopTrackingAll()
- {
- return xnStopTrackingAll(GetHandle());
- }
-
- /**
- * @brief Starts tracking at the specific position where the application expects a hand.
- *
- * @param [in] ptPosition The position at which there is a new hand
- *
- * <b>Remarks</b>
- *
- * Use the <code>ptPosition</code> parameter to tell the method what is the expected
- * location (in X-Y-Z coordinates) of the hand.
- *
- * This expected location can be obtained from a 'Gesture Recognized' event, but
- * it is not the only way of getting the hand's expected location.
- *
- * Calling this method causes the HandCreate event to be raised when OpenNI recognizes
- * the hand.
- */
- inline XnStatus StartTracking(const XnPoint3D& ptPosition)
- {
- return xnStartTracking(GetHandle(), &ptPosition);
- }
-
- /**
- * @brief Changes the smoothing factor.
- *
- * @param [in] fSmoothingFactor Smoothing factor, in the range 0..1. 0 Means no
- * smoothing, 1 means infinite smoothing.
- * Inside the range is generator dependent.
- * <br>
- * Recommended: 0.1
- *
- * <b>Remarks</b>
- *
- * The hand is identified from its physical depth. Since the human hand is not absolutely
- * steady, the hand point generated may be too jittery to be used for controlling
- * the user interface, e.g., pressing buttons. This method provides an algorithm
- * to smooth the jitter. You provide the desired smoothing factor as a parameter.
- */
- inline XnStatus SetSmoothing(XnFloat fSmoothingFactor)
- {
- return xnSetTrackingSmoothing(GetHandle(), fSmoothingFactor);
- }
-
- /**
- * Gets an @ref HandTouchingFOVEdgeCapability object for accessing hand touching
- * FOV edge callbacks functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE
- * is supported
- * by calling @ref IsCapabilitySupported().
- */
- inline const HandTouchingFOVEdgeCapability GetHandTouchingFOVEdgeCap() const
- {
- return HandTouchingFOVEdgeCapability(GetHandle());
- }
-
- /**
- * Gets an @ref HandTouchingFOVEdgeCapability object for accessing hand touching
- * FOV edge callbacks functionality.
- * It is the application responsibility to check first if @ref XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE
- * is supported
- * by calling @ref IsCapabilitySupported().
- */
- inline HandTouchingFOVEdgeCapability GetHandTouchingFOVEdgeCap()
- {
- return HandTouchingFOVEdgeCapability(GetHandle());
- }
-
- private:
- typedef struct HandCookie
- {
- HandCreate createHandler;
- HandUpdate updateHandler;
- HandDestroy destroyHandler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } HandCookie;
-
- static void XN_CALLBACK_TYPE HandCreateCB(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie)
- {
- HandCookie* pHandCookie = (HandCookie*)pCookie;
- HandsGenerator gen(hNode);
- if (pHandCookie->createHandler != NULL)
- {
- pHandCookie->createHandler(gen, user, pPosition, fTime, pHandCookie->pUserCookie);
- }
- }
- static void XN_CALLBACK_TYPE HandUpdateCB(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie)
- {
- HandCookie* pHandCookie = (HandCookie*)pCookie;
- HandsGenerator gen(hNode);
- if (pHandCookie->updateHandler != NULL)
- {
- pHandCookie->updateHandler(gen, user, pPosition, fTime, pHandCookie->pUserCookie);
- }
- }
- static void XN_CALLBACK_TYPE HandDestroyCB(XnNodeHandle hNode, XnUserID user, XnFloat fTime, void* pCookie)
- {
- HandCookie* pHandCookie = (HandCookie*)pCookie;
- HandsGenerator gen(hNode);
- if (pHandCookie->destroyHandler != NULL)
- {
- pHandCookie->destroyHandler(gen, user, fTime, pHandCookie->pUserCookie);
- }
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> Provides the 'Skeleton' functionality for a @ref xn::UserGenerator
- * node. This capability lets the node generate a skeleton representation for each human
- * user generated by the node.
- *
- * @note See @ref meanings_of_user "Meanings of 'User'".
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref UserGenerator::GetSkeletonCap()
- * to obtain an instance.
- *
- * <b>Data output:</b> Skeleton.
- *
- * The OpenNI definition of <i>joints</i> refers to a predefined set of points on the
- * human body, as defined by the @ref xn::XnSkeletonJoint enum type. Examples of these
- * joints are @ref XN_SKEL_HEAD, @ref XN_SKEL_TORSO, @ref XN_SKEL_LEFT_ELBOW,
- * @ref XN_SKEL_LEFT_WRIST and @ref XN_SKEL_LEFT_HAND. Note that some of these <i>joints</i>
- * are actual joints, in the conventional sense as termed by the English language, for
- * example, @ref XN_SKEL_LEFT_ELBOW and @ref XN_SKEL_LEFT_WRIST; and other joints are in
- * fact <i>limbs</i>, for example, @ref XN_SKEL_HEAD and @ref XN_SKEL_LEFT_HAND.
- * However, OpenNI defines all these as <i>joints</i>, each joint with a single position
- * coordinate. Each detected joint is defined by its <i>position</i>, which is held
- * as a struct of type @ref xn::XnSkeletonJointPosition, comprising a 3D position coordinate
- * and confidence. The 3D position coordinate defines a point somewhere in the center
- * of the 'joint', for example, the position of the torso will be at the center of the
- * torso, i.e., somewhere in the stomach area.
- *
- * To graphically draw a complete skeleton, therefore, each joint must be connected
- * by a line to the adjacent point according to the form of the human body.
- *
- * An application typically uses this skeleton representation to track human motion,
- * or to graphically display all or part of the user as an avatar on screen, and optionally
- * graphically enhance it to make it look more like a full humanoid figure.
- *
- * @section skeleton_calib Calibration
- *
- * Tracking of a human user always starts with a process named 'Calibration'. In this
- * process the algorithm performs some implementation-specific logic to enable it
- * to track that user. there is no standard for what calibration is exactly and
- * each implementation may use whatever it needs to produce and calibrate a skeleton.
- * However, a typical way of calibrating the skeleton would be to measure distances
- * between key joints for a particular user and record the data as the calibration data
- * for that particular user.
- *
- * Some implementations of the user generator node require a human user to pose a specific
- * posture for the calibration process to succeed. The application can check if current implementation
- * requires such a pose by calling @ref NeedPoseForCalibration() method. If the answer is TRUE,
- * the application should call @ref GetCalibrationPose() to find out the name of the pose a human user should
- * take in order to calibrate the algorithm. The application can use the @ref xn::PoseDetectionCapability
- * to find out if a human user is assuming a specific position, and once he does, calibration can start.
- *
- * The application starts the calibration process by calling @ref RequestCalibration(). There
- * are several events raised during the calibration process, but the most important one is
- * 'Calibration Complete'. Once calibration is done, the application may call @ref StartTracking()
- * to make the algorithm start tracking the skeleton of that human user.
- */
- class SkeletonCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline SkeletonCapability(XnNodeHandle hNode) : Capability(hNode) {}
- SkeletonCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * @brief Returns whether a specific skeleton joint is supported by the SkeletonCapability object.
- *
- * @param [in] eJoint Joint to check.
- */
- inline XnBool IsJointAvailable(XnSkeletonJoint eJoint) const
- {
- return xnIsJointAvailable(GetHandle(), eJoint);
- }
-
- /**
- * @brief Returns whether a specific skeleton profile is supported by the SkeletonCapability object.
- *
- * @param [in] eProfile Profile to check.
- */
- inline XnBool IsProfileAvailable(XnSkeletonProfile eProfile) const
- {
- return xnIsProfileAvailable(GetHandle(), eProfile);
- }
-
- /**
- * @brief Sets the skeleton profile. The skeleton profile specifies which joints are to
- * be active, and which to be inactive. The @ref UserGenerator node generates output data
- * for the active joints only. This profile applies to all skeletons that the @ref UserGenerator node generates.
- *
- * @param [in] eProfile Specifies the profile to set.
- *
- * <b>Remarks</b>
- *
- * The profile (@ref xn::XnSkeletonProfile) enables the application to choose between
- * generating all joints, just the upper or lower torso, or just the head and hands
- * only.
- *
- * Since this method provides the flexibility to request only the data that the
- * application requires, this can help to significantly improve response time: setting
- * a smaller skeleton profile reduces the processing load on the computer, which
- * can cause a significant increase in avatar responsiveness.
- *
- * Use the @ref SetJointActive() method for selecting the profile down to a finer
- * resolution than possible with this method, e.g., to be able to select a specific
- * hand or foot.
- *
- * OpenNI does not standardize the initial profile set. If no profile is set, each
- * implementation may have its own default profile. For example, PrimeSense implementation's
- * default profile is NONE. This means if no profile is set, no joint will be available.
- *
- * Setting a profile changes all the joint configuration to that profile. This means
- * you can set a profile, then refine specific joints (adding or removing). You
- * can't do it the other way around.
- */
- inline XnStatus SetSkeletonProfile(XnSkeletonProfile eProfile)
- {
- return xnSetSkeletonProfile(GetHandle(), eProfile);
- }
-
- /**
- * @brief Changes the state of a specific skeleton joint to be active or inactive.
- * The @ref xn::UserGenerator node generates output data for the active joints only.
- * This state setting applies to all skeletons that the @ref xn::UserGenerator node generates.
- *
- * @param [in] eJoint Specifies the joint.
- * @param [in] bState New activation state (true/false).
- *
- * <b>Remarks</b>
- *
- * This method lets the application set the skeleton profile down to a finer resolution
- * than is possible with the @ref SetSkeletonProfile() method.
- *
- * The joint selector parameter (@ref xn::XnSkeletonJoint) lets the application
- * choose specific parts of a skeleton, e.g., a specific hand or foot.
- *
- * Since this method provides the flexibility to request only the data that the
- * application requires, this can help to significantly improve response time. Setting
- * a smaller skeleton profile can reduce the processing load on the computer, which
- * can cause a significant increase in avatar responsiveness (implementation-dependent).
- * Some implementations may produce all the data they can, and only filter it at
- * the end according to the configuration.
- */
- inline XnStatus SetJointActive(XnSkeletonJoint eJoint, XnBool bState)
- {
- return xnSetJointActive(GetHandle(), eJoint, bState);
- }
-
- /**
- * @brief Checks if a specific joint is tracked or not.
- *
- * @param [in] eJoint Specifies the joint.
- */
- inline XnBool IsJointActive(XnSkeletonJoint eJoint) const
- {
- return xnIsJointActive(GetHandle(), eJoint);
- }
-
- /**
- * @brief Registers an event handler for the 'Joint Configuration Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToJointConfigurationChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToJointConfigurationChange, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Joint Configuration Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromJointConfigurationChange(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromJointConfigurationChange, GetHandle(), hCallback);
- }
-
- /**
- * @copybrief xnEnumerateActiveJoints
- * For full details and usage, see @ref xnEnumerateActiveJoints
- */
- inline XnStatus EnumerateActiveJoints(XnSkeletonJoint* pJoints, XnUInt16& nJoints) const
- {
- return xnEnumerateActiveJoints(GetHandle(), pJoints, &nJoints);
- }
-
- /**
- * @brief Gets all available information about a specific joint in the skeleton.
- *
- * @param [in] user ID of the user.
- * @param [in] eJoint Joint specifier.
- * @param [out] Joint Transformation structure for the joint. Includes position
- * and orientation.
- */
- inline XnStatus GetSkeletonJoint(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation& Joint) const
- {
- return xnGetSkeletonJoint(GetHandle(), user, eJoint, &Joint);
- }
-
- /**
- * @brief Gets the position of one of the skeleton joints in the most recently generated user data.
- *
- * @param [in] user ID of the user.
- * @param [in] eJoint Joint specifier.
- * @param [out] Joint Latest position of the joint.
- *
- * <b>Remarks</b>
- *
- * The joint position is returned as a @ref XnSkeletonJointPosition structure, comprising
- * a real-world coordinate together with a confidence rating.
- *
- * Confidence can be in the range of 0..1.
- *
- * 0 means 'I'm guessing here'.<br>
- * 1 means 'This is where it is'. <br>
- *
- * The API is ready for when an implementation decides it is 'fairly certain'. In
- * a typical implementation, 0.5 is used when there is an educated guess, or have
- * run some heuristics to determine the position.
- */
- inline XnStatus GetSkeletonJointPosition(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition& Joint) const
- {
- return xnGetSkeletonJointPosition(GetHandle(), user, eJoint, &Joint);
- }
-
- /**
- * @brief Gets the orientation of a specific skeleton joint.
- *
- * @param [in] user ID of the user.
- * @param [in] eJoint Joint specifier.
- * @param [out] Joint Joint's orientation.
- */
- inline XnStatus GetSkeletonJointOrientation(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation& Joint) const
- {
- return xnGetSkeletonJointOrientation(GetHandle(), user, eJoint, &Joint);
- }
-
- /**
- * @brief Returns whether a user is currently being tracked.
- *
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * This is a utility method. It is an alternative approach to saving the states
- * from the events that notify stages in calibration and tracking.
- */
- inline XnBool IsTracking(XnUserID user) const
- {
- return xnIsSkeletonTracking(GetHandle(), user);
- }
-
- /**
- * @brief Returns whether a user has been calibrated. see @ref skeleton_calib.
- *
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * This is a utility method. It is an alternative approach to saving the states
- * from the events that notify stages in calibration.
- */
- inline XnBool IsCalibrated(XnUserID user) const
- {
- return xnIsSkeletonCalibrated(GetHandle(), user);
- }
-
- /**
- * @brief Returns whether a user is being calibrated right now. see @ref skeleton_calib.
- *
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * This is a utility method. It is an alternative approach to saving the states
- * from the events that notify stages in calibration.
- */
- inline XnBool IsCalibrating(XnUserID user) const
- {
- return xnIsSkeletonCalibrating(GetHandle(), user);
- }
-
- /**
- * @brief Starts the calibration process to calibrate a user.
- *
- * @param [in] user ID of the user.
- * @param [in] bForce Disregard previous calibration to force a further calibration.<br>
- * Values:<br>
- * True: Disregards any previous calibration and forces a new calibration.<br>
- * False: Starts the calibration process only if no calibration data is available
- * for the skeleton.<br>
- * This means that if the user was previously calibrated (which actually means measuring
- * the length of its limbs, and estimating its torso, to be used in its skeletal
- * representation), and another calibration was requested, to either make do with
- * what we have (false), or forget the previous measurements and perform calibration
- * again.
- *
- * <b>Remarks</b>
- *
- * This method is typically called from inside an event handler for the 'Pose Detected'
- * event, signaling that a pose was detected in the FOV. Once a valid pose has been
- * detected the application will want to start calibrating the user.
- *
- * It can also be called outside of that, in implementations that don't require
- * a pose.
- */
- inline XnStatus RequestCalibration(XnUserID user, XnBool bForce)
- {
- return xnRequestSkeletonCalibration(GetHandle(), user, bForce);
- }
-
- /**
- * @brief Aborts an existing calibration process currently being executed for a specified user.
- *
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * Raises the 'Calibration Complete' event.
- */
- inline XnStatus AbortCalibration(XnUserID user)
- {
- return xnAbortSkeletonCalibration(GetHandle(), user);
- }
-
- /**
- * @brief Saves the skeleton's current calibration data to a file.
- *
- * @param [in] user ID of the user.
- * @param [in] strFileName Name of the file for saving the calibration data.
- *
- * <b>Remarks</b>
- *
- * The application is the one that should match the user, however it sees fit. For
- * example, if a calibration was saved as C:\\john_smith.bin, and then later another
- * application recognizes John Smith (let's say, through face recognition), the
- * calibration data can be loaded, instead of performing the entire calibration
- * process.
- *
- * This is a very useful tool for developers. They can save their own calibration,
- * and test their application without calibrating each time (going into pose, spend
- * time on calibration).
- */
- inline XnStatus SaveCalibrationDataToFile(XnUserID user, const XnChar* strFileName)
- {
- return xnSaveSkeletonCalibrationDataToFile(GetHandle(), user, strFileName);
- }
-
- /**
- * @brief Loads skeleton calibration data from a file to a skeleton.
- *
- * @param [in] user ID of the user.
- * @param [in] strFileName File to load the calibration data from.
- */
- inline XnStatus LoadCalibrationDataFromFile(XnUserID user, const XnChar* strFileName)
- {
- return xnLoadSkeletonCalibrationDataFromFile(GetHandle(), user, strFileName);
- }
-
- /**
- * @brief Saves the calibration data of a specified user. The calibration data includes the lengths of the human user's limbs.
- *
- * @param [in] user ID of the user.
- * @param [in] nSlot Slot to use for saving the calibration data
- *
- * <b>Remarks</b>
- *
- * The slots mechanism allows saving the calibration to memory instead of to files.
- * When used, a calibration is saved to a slot, and may be reloaded from it.
- */
- inline XnStatus SaveCalibrationData(XnUserID user, XnUInt32 nSlot)
- {
- return xnSaveSkeletonCalibrationData(GetHandle(), user, nSlot);
- }
-
- /**
- * @brief Loads calibration data of a specified user. The calibration data includes the lengths of the human user's limbs.
- *
- * @param [in] user ID of the user.
- * @param [in] nSlot Slot to use for saving the calibration data
- */
- inline XnStatus LoadCalibrationData(XnUserID user, XnUInt32 nSlot)
- {
- return xnLoadSkeletonCalibrationData(GetHandle(), user, nSlot);
- }
-
- /**
- * @brief Clears a specified slot of any saved calibration data.
- *
- * @param [in] nSlot Slot specifier.
- */
- inline XnStatus ClearCalibrationData(XnUInt32 nSlot)
- {
- return xnClearSkeletonCalibrationData(GetHandle(), nSlot);
- }
-
- /**
- * @brief Returns whether a specific slot already holds calibration data.
- *
- * @param [in] nSlot Slot specifier.
- */
- inline XnBool IsCalibrationData(XnUInt32 nSlot) const
- {
- return xnIsSkeletonCalibrationData(GetHandle(), nSlot);
- }
-
- /**
- * @brief Starts tracking a skeleton.
- *
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * This method is used for tracking the motion of the skeleton, representing a human
- * user body, within a real-life (3D) scene for analysis, interpretation, and use
- * by the application.
- *
- * While the skeleton is being tracked, the application can call the @ref GetSkeletonJointPosition()
- * method to get data about one of the joint positions.
- */
- inline XnStatus StartTracking(XnUserID user)
- {
- return xnStartSkeletonTracking(GetHandle(), user);
- }
-
- /**
- * @brief Stops tracking a skeleton.
- * @param [in] user ID of the user.
- */
- inline XnStatus StopTracking(XnUserID user)
- {
- return xnStopSkeletonTracking(GetHandle(), user);
- }
-
- /**
- * @brief Discards a skeleton's calibration.
- * @param [in] user ID of the user.
- *
- * <b>Remarks</b>
- *
- * Utility method for resetting a user to its initial state. For use in development.
- */
- inline XnStatus Reset(XnUserID user)
- {
- return xnResetSkeleton(GetHandle(), user);
- }
-
- /**
- * @brief Returns whether a specific pose is required for
- * calibration. This setting is applicable to all users.
- *
- * <b>Remarks</b>
- *
- * This is a setting made by the developer of the SkeletonCapability plug-in.
- */
- inline XnBool NeedPoseForCalibration() const
- {
- return xnNeedPoseForSkeletonCalibration(GetHandle());
- }
-
- /**
- * @brief Gets the name of the pose that is required for calibration. The
- * pose and its name reside in the plug-in module that provides the
- * SkeletonCapability. The pose's name and details are defined by the
- * developer of the module.
- *
- * @param [out] strPose Name of the pose required for calibration
- * <b>Remarks</b>
- *
- * This method is to be used only if the @ref NeedPoseForCalibration() method returns
- * TRUE, and only then will this method returns a name.
- */
- inline XnStatus GetCalibrationPose(XnChar* strPose) const
- {
- return xnGetSkeletonCalibrationPose(GetHandle(), strPose);
- }
-
- /**
- * @brief Sets the smoothing factor for all users generated by this @ref xn::UserGenerator node.
- * @param [in] fSmoothingFactor Smoothing factor<br>
- * Range: 0 to 1<br>
- *
- * <b>Remarks</b>
- *
- * The human body is identified from its physical depth. Since the human body is
- * not absolutely steady, the human body being calibrated may be too jittery to
- * easily obtain its position. This method provides an algorithm to smooth the jitter.
- * You provide the desired smoothing factor as a parameter.
- */
- inline XnStatus SetSmoothing(XnFloat fSmoothingFactor)
- {
- return xnSetSkeletonSmoothing(GetHandle(), fSmoothingFactor);
- }
-
- /**
- * Signals that a specific user's SkeletonCapability object is now starting the
- * calibration process.
- *
- * Example of a callback function to handle the 'Calibration Start' event:
- *
- @code
- OnCalibrationStart(xn::SkeletonCapability& skeleton, XnUserID user, void* pCookie)
- @endcode
- *
- * @param [in] skeleton SkeletonCapability object that raised the event.
- * @param [in] user The id of the user that's being calibrated.
- * @param [in] pCookie A user-provided cookie that was given when registering to
- * this event.
- *
- * <b>Remarks</b>
- *
- * The application itself initiates calibration by calling the @ref RequestCalibration() method.
- * When a SkeletonCapability object actually starts to perform the calibration,
- * it raises this event.
- */
- typedef void (XN_CALLBACK_TYPE* CalibrationStart)(SkeletonCapability& skeleton, XnUserID user, void* pCookie);
-
- /**
- * Signals that a specific user's SkeletonCapability object has now completed the
- * calibration process.
- *
- * Example of a callback function to handle the 'Calibration Complete' event:
- @code
- OnCalibrationEnd(xn::SkeletonCapability &skeleton, XnUserID user,
- XnCalibrationStatus calibrationError, void *pCookie)
- @endcode
- *
- * <b>Parameters: </b>
- *
- * hNode [in] Node that raised the event.
- * user [in] ID of the user for which calibration was attempted.
- * bSuccess [in] Indication of whether or not the calibration attempt succeeded.
- * pCookie [in] User-provided cookie that was given when registering to this event.
- */
- typedef void (XN_CALLBACK_TYPE* CalibrationEnd)(SkeletonCapability& skeleton, XnUserID user, XnBool bSuccess, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Calibration Start' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * See @ref skeleton_calib for information about calibration.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToCalibrationStart(CalibrationStart handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- CalibrationStartCookie* pCalibrationCookie;
- XN_VALIDATE_ALLOC(pCalibrationCookie, CalibrationStartCookie);
- pCalibrationCookie->handler = handler;
- pCalibrationCookie->pUserCookie = pCookie;
- nRetVal = xnRegisterToCalibrationStart(GetHandle(), CalibrationStartCallback, pCalibrationCookie, &pCalibrationCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pCalibrationCookie);
- return nRetVal;
- }
- hCallback = pCalibrationCookie;
- return XN_STATUS_OK;
- }
-
- /**
- * @brief Unregisters a handler from the 'Calibration Start' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * <b>Remarks</b>
- *
- * Due to historical reasons, this function has an XnStatus return value. In practice,
- * it will always succeed. The user can safely ignore the return value.
- */
- inline XnStatus UnregisterFromCalibrationStart(XnCallbackHandle hCallback)
- {
- CalibrationStartCookie* pCalibrationCookie = (CalibrationStartCookie*)hCallback;
- xnUnregisterFromCalibrationStart(GetHandle(), pCalibrationCookie->hCallback);
- xnOSFree(pCalibrationCookie);
- return XN_STATUS_OK;
- }
-
- /**
- * Signals that a specific user's skeleton is calibrating, and its current status.
- *
- * Example of a callback function to handle the 'Calibration Progress' event:
- @code
- OnCalibrationProgress(xn::SkeletonCapability &skeleton, XnUserID user,
- XnCalibrationStatus calibrationError, void *pCookie)
- @endcode
- *
- * @param [in] skeleton SkeletonCapability object that raised the event.
- * @param [in] user ID of the user holding SkeletonCapability object.
- * @param [in] calibrationError Status of the calibration. Values are defined by
- * XnCalibrationStatus.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- *
- * <b>Remarks</b>
- *
- * After the 'Calibration Start' event, the 'Calibration in Progress' event is raised
- * every frame until 'Calibration Complete' is raised. It informs the application
- * as to the current state of the calibration process.
- */
- typedef void (XN_CALLBACK_TYPE* CalibrationInProgress)(SkeletonCapability& skeleton, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Calibration In Progress' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToCalibrationInProgress(CalibrationInProgress handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- CalibrationInProgressCookie* pSkeletonCookie;
- XN_VALIDATE_ALLOC(pSkeletonCookie, CalibrationInProgressCookie);
- pSkeletonCookie->handler = handler;
- pSkeletonCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToCalibrationInProgress(GetHandle(), CalibrationInProgressCallback, pSkeletonCookie, &pSkeletonCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pSkeletonCookie);
- return (nRetVal);
- }
-
- hCallback = pSkeletonCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Calibration In Progress' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromCalibrationInProgress(XnCallbackHandle hCallback)
- {
- CalibrationInProgressCookie* pSkeletonCookie = (CalibrationInProgressCookie*)hCallback;
- xnUnregisterFromCalibrationInProgress(GetHandle(), pSkeletonCookie->hCallback);
- xnOSFree(pSkeletonCookie);
- }
-
- /**
- * @brief Signals that a specific user's skeleton has now completed the calibration
- * process, and provides a result status.
- *
- * Following is an example of a callback header to handle the 'Calibration Complete'
- * event:
- @code
- OnCalibrationComplete(xn::SkeletonCapability &skeleton, XnUserID user,
- XnCalibrationStatus calibrationError, void *pCookie)
- @endcode
- *
- * @param [in] skeleton SkeletonCapability object that raised the event.
- * @param [in] user ID of the user holding SkeletonCapability object.
- * @param [in] calibrationError Status of the calibration. Values are defined by
- * XnCalibrationStatus.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- */
- typedef void (XN_CALLBACK_TYPE* CalibrationComplete)(SkeletonCapability& skeleton, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Calibration Complete' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToCalibrationComplete(CalibrationComplete handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- CalibrationCompleteCookie* pSkeletonCookie;
- XN_VALIDATE_ALLOC(pSkeletonCookie, CalibrationCompleteCookie);
- pSkeletonCookie->handler = handler;
- pSkeletonCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToCalibrationComplete(GetHandle(), CalibrationCompleteCallback, pSkeletonCookie, &pSkeletonCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pSkeletonCookie);
- return (nRetVal);
- }
-
- hCallback = pSkeletonCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Calibration Complete' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromCalibrationComplete(XnCallbackHandle hCallback)
- {
- CalibrationCompleteCookie* pSkeletonCookie = (CalibrationCompleteCookie*)hCallback;
- xnUnregisterFromCalibrationComplete(GetHandle(), pSkeletonCookie->hCallback);
- xnOSFree(pSkeletonCookie);
- }
-
- /** @cond */
- XN_API_DEPRECATED("Use the overload with one argument - the bState parameter is useless")
- inline XnBool IsJointActive(XnSkeletonJoint eJoint, XnBool /*bState*/) const
- {
- return xnIsJointActive(GetHandle(), eJoint);
- }
-
- inline XnStatus XN_API_DEPRECATED("Please use RegisterToCalibrationStart/Complete") RegisterCalibrationCallbacks(CalibrationStart CalibrationStartCB, CalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- SkeletonCookie* pSkeletonCookie;
- XN_VALIDATE_ALLOC(pSkeletonCookie, SkeletonCookie);
- pSkeletonCookie->startHandler = CalibrationStartCB;
- pSkeletonCookie->endHandler = CalibrationEndCB;
- pSkeletonCookie->pUserCookie = pCookie;
-
-#pragma warning (push)
-#pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- nRetVal = xnRegisterCalibrationCallbacks(GetHandle(), CalibrationStartBundleCallback, CalibrationEndBundleCallback, pSkeletonCookie, &pSkeletonCookie->hCallback);
-#pragma warning (pop)
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pSkeletonCookie);
- return (nRetVal);
- }
-
- hCallback = pSkeletonCookie;
-
- return (XN_STATUS_OK);
- }
-
- inline void XN_API_DEPRECATED("Please use UnregisterFromCalibrationStart/Complete") UnregisterCalibrationCallbacks(XnCallbackHandle hCallback)
- {
- SkeletonCookie* pSkeletonCookie = (SkeletonCookie*)hCallback;
-#pragma warning (push)
-#pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- xnUnregisterCalibrationCallbacks(GetHandle(), pSkeletonCookie->hCallback);
-#pragma warning (pop)
- xnOSFree(pSkeletonCookie);
- }
- /** @endcond */
-
-private:
- typedef struct SkeletonCookie
- {
- CalibrationStart startHandler;
- CalibrationEnd endHandler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } SkeletonCookie;
-
- static void XN_CALLBACK_TYPE CalibrationStartBundleCallback(XnNodeHandle hNode, XnUserID user, void* pCookie)
- {
- SkeletonCookie* pSkeletonCookie = (SkeletonCookie*)pCookie;
- SkeletonCapability cap(hNode);
- if (pSkeletonCookie->startHandler != NULL)
- {
- pSkeletonCookie->startHandler(cap, user, pSkeletonCookie->pUserCookie);
- }
- }
-
- static void XN_CALLBACK_TYPE CalibrationEndBundleCallback(XnNodeHandle hNode, XnUserID user, XnBool bSuccess, void* pCookie)
- {
- SkeletonCookie* pSkeletonCookie = (SkeletonCookie*)pCookie;
- SkeletonCapability cap(hNode);
- if (pSkeletonCookie->endHandler != NULL)
- {
- pSkeletonCookie->endHandler(cap, user, bSuccess, pSkeletonCookie->pUserCookie);
- }
- }
-
- typedef struct CalibrationStartCookie
- {
- CalibrationStart handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } CalibrationStartCookie;
-
- static void XN_CALLBACK_TYPE CalibrationStartCallback(XnNodeHandle hNode, XnUserID user, void* pCookie)
- {
- CalibrationStartCookie* pCalibrationCookie = (CalibrationStartCookie*)pCookie;
- SkeletonCapability cap(hNode);
- if (pCalibrationCookie->handler != NULL)
- {
- pCalibrationCookie->handler(cap, user, pCalibrationCookie->pUserCookie);
- }
- }
-
- typedef struct CalibrationInProgressCookie
- {
- CalibrationInProgress handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } CalibrationInProgressCookie;
-
- static void XN_CALLBACK_TYPE CalibrationInProgressCallback(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie)
- {
- CalibrationInProgressCookie* pSkeletonCookie = (CalibrationInProgressCookie*)pCookie;
- SkeletonCapability cap(hNode);
- if (pSkeletonCookie->handler != NULL)
- {
- pSkeletonCookie->handler(cap, user, calibrationError, pSkeletonCookie->pUserCookie);
- }
- }
-
- typedef struct CalibrationCompleteCookie
- {
- CalibrationComplete handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } CalibrationCompleteCookie;
-
- static void XN_CALLBACK_TYPE CalibrationCompleteCallback(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie)
- {
- CalibrationCompleteCookie* pSkeletonCookie = (CalibrationCompleteCookie*)pCookie;
- SkeletonCapability cap(hNode);
- if (pSkeletonCookie->handler != NULL)
- {
- pSkeletonCookie->handler(cap, user, calibrationError, pSkeletonCookie->pUserCookie);
- }
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> Provides a 'Pose Detection' functionality for a @ref xn::UserGenerator
- * node. This capability lets the node recognize when the user is posed in a specific
- * position.
- *
- * <b>Usage:</b> Do not instantiate directly. Instead, use @ref UserGenerator::GetPoseDetectionCap()
- * to obtain an instance.
- *
- * <b>Data output:</b> Raises events.
- *
- * <b>Remarks:</b>
- *
- * A pose is a specific full body posture involving all the limbs. The PoseDetectionCapability
- * object scans the FOV to detect users performing poses. The PoseDetectionCapability
- * then generates the pose data.
- *
- * When and if the @ref PoseDetectionCapability object detects a pose it raises the
- * 'Pose Detected' event.
- */
- class PoseDetectionCapability : public Capability
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline PoseDetectionCapability(XnNodeHandle hNode) : Capability(hNode) {}
- PoseDetectionCapability(const NodeWrapper& node) : Capability(node) {}
-
- /**
- * <b>'Pose Detection' event</b>
- *
- * This event is raised to signal that a specific user has entered a pose.
- *
- * @param [in] pose Reference to the specific @ref xn::UserGenerator node
- * that raised the event.
- * @param [in] strPose Name of the specific pose defined for this event handler.
- * (The PoseDetectionCapability can define more than a single pose that can be detected.)
- * @param [in] user ID of the user that entered the pose.
- * @param [in] pCookie Returns any information ("cookie") that the application
- * placed in this parameter at the time of registering the event..
- */
- typedef void (XN_CALLBACK_TYPE* PoseDetection)(PoseDetectionCapability& pose, const XnChar* strPose, XnUserID user, void* pCookie);
-
- /**
- * @brief Get the number of poses supported by this capability.
- *
- * <b>Remarks</b>
- *
- * The number of supported poses is defined by the developer of the capability and
- * is common to all @ref xn::UserGenerator nodes using this capability on this OpenNI
- * deployment.
- */
- inline XnUInt32 GetNumberOfPoses() const
- {
- return xnGetNumberOfPoses(GetHandle());
- }
-
- /**
- * @brief Gets the names of all poses supported by this capability.
-
- * @param [out] pstrPoses Pre-allocated memory for the names of the supported poses.
- * @param [in] nNameLength Memory size for each pose name.
- * @param [in,out] nPoses In input - size of the preallocated memory, in output
- * - the number of pose names.
- *
- * <b>Remarks</b>
- *
- * The names of the poses are preset in advance by the developer of this capability.
- */
- inline XnStatus GetAllAvailablePoses(XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32& nPoses) const
- {
- return xnGetAllAvailablePoses(GetHandle(), pstrPoses, nNameLength, &nPoses);
- }
-
- inline XnBool IsPoseSupported(const XnChar* strPose)
- {
- return xnIsPoseSupported(GetHandle(), strPose);
- }
-
- inline XnStatus GetPoseStatus(XnUserID userID, const XnChar* poseName, XnUInt64& poseTime, XnPoseDetectionStatus& eStatus, XnPoseDetectionState& eState)
- {
- return xnGetPoseStatus(GetHandle(), userID, poseName, &poseTime, &eStatus, &eState);
- }
-
- /**
- * @brief Starts attempting to detect a pose for a specific user.
- *
- * @param [in] strPose Name of the requested pose. Call the GetAvailablePoses()
- * method to get the names of poses supported by the PoseDetectionCapability.
- * @param [in] user ID of a user to detect a pose for.
- *
- * <b>Remarks</b>
- *
- * This method will typically be used after a new user has been recognized in the
- * FOV. This is typically the next stage in the process of calibrating the new user -
- * @see skeleton_calib.
- * When and if the @ref PoseDetectionCapability object detects a pose it raises
- * the 'Pose Detected' event.
- */
- inline XnStatus StartPoseDetection(const XnChar* strPose, XnUserID user)
- {
- return xnStartPoseDetection(GetHandle(), strPose, user);
- }
-
- /**
- * @brief Stops attempting to detect a pose (for a specific user).
- *
- * @param [in] user ID of a user.
- *
- * <b>Remarks</b>
- *
- * The application will typically call this method when it has already received
- * a 'Pose Detected' event. Once a pose has been detected it is no longer necessary
- * to try to detect poses.
- */
- inline XnStatus StopPoseDetection(XnUserID user)
- {
- return xnStopPoseDetection(GetHandle(), user);
- }
-
- /** @copybrief xnStopSinglePoseDetection
- * For full details and usage, see @ref xnStopSinglePoseDetection
- */
- inline XnStatus StopSinglePoseDetection(XnUserID user, const XnChar* strPose)
- {
- return xnStopSinglePoseDetection(GetHandle(), user, strPose);
- }
-
- /**
- * @brief Registers an event handler for the 'Pose Detected' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToPoseDetected(PoseDetection handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- PoseDetectionCookie* pPoseCookie;
- XN_VALIDATE_ALLOC(pPoseCookie, PoseDetectionCookie);
- pPoseCookie->handler = handler;
- pPoseCookie->pPoseCookie = pCookie;
-
- nRetVal = xnRegisterToPoseDetected(GetHandle(), PoseDetectionCallback, pPoseCookie, &pPoseCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pPoseCookie);
- return nRetVal;
- }
- hCallback = pPoseCookie;
- return XN_STATUS_OK;
- }
-
- /**
- * @brief Registers an event handler for the 'Out Of Pose' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToOutOfPose(PoseDetection handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- PoseDetectionCookie* pPoseCookie;
- XN_VALIDATE_ALLOC(pPoseCookie, PoseDetectionCookie);
- pPoseCookie->handler = handler;
- pPoseCookie->pPoseCookie = pCookie;
-
- nRetVal = xnRegisterToOutOfPose(GetHandle(), PoseDetectionCallback, pPoseCookie, &pPoseCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pPoseCookie);
- return nRetVal;
- }
- hCallback = pPoseCookie;
- return XN_STATUS_OK;
- }
- /**
- * @brief Unregisters an event handler for the 'Pose Detected' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromPoseDetected(XnCallbackHandle hCallback)
- {
- PoseDetectionCookie* pPoseCookie = (PoseDetectionCookie*)hCallback;
- xnUnregisterFromPoseDetected(GetHandle(), pPoseCookie->hCallback);
- xnOSFree(pPoseCookie);
- }
- /**
- * @brief Unregisters an event handler for the 'Out Of Pose' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromOutOfPose(XnCallbackHandle hCallback)
- {
- PoseDetectionCookie* pPoseCookie = (PoseDetectionCookie*)hCallback;
- xnUnregisterFromOutOfPose(GetHandle(), pPoseCookie->hCallback);
- xnOSFree(pPoseCookie);
- }
-
- /**
- * <b>'Pose In Progress' event</b>:
- *
- * Raised at each frame time from the time StartPoseDetection was called until the
- * pose is detected. This event returns the current status of pose detection of
- * a user.
- *
- * @param [in] pose Reference to the specific @ref UserGenerator node that raised
- * the event.
- * @param [in] strPose Name of the specific pose defined for this event handler.
- * (The PoseDetectionCapability can define more than a single pose that can be detected.
- * @param [in] user ID of the user that entered the pose.
- * @param [in] poseError Current status of the pose detection.
- * Defined statuses:
- * XN_POSE_DETECTION_STATUS_OK
- * XN_POSE_DETECTION_STATUS_NO_USER
- * XN_POSE_DETECTION_STATUS_TOP_FOV
- * XN_POSE_DETECTION_STATUS_SIDE_FOV
- * XN_POSE_DETECTION_STATUS_ERROR
- * @param [in] pCookie Returns any information ("cookie") that the application
- * placed in this parameter at the time of registering the event.
- */
- typedef void (XN_CALLBACK_TYPE* PoseInProgress)(PoseDetectionCapability& pose, const XnChar* strPose, XnUserID user, XnPoseDetectionStatus poseError, void* pCookie);
-
- /**
- * @brief Registers an event handler for the 'Pose In Progress' event.
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- *
- * <b>Remarks</b>
- *
- * This event is raised at each frame time from the time StartPoseDetection() method
- * was called until the pose is actually detected.
- *
- * See the @ref PoseDetection callback type declaration for how to write the callback
- * (event handler).
- */
- inline XnStatus RegisterToPoseInProgress(PoseInProgress handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- PoseInProgressCookie* pPoseCookie;
- XN_VALIDATE_ALLOC(pPoseCookie, PoseInProgressCookie);
- pPoseCookie->handler = handler;
- pPoseCookie->pPoseCookie = pCookie;
-
- nRetVal = xnRegisterToPoseDetectionInProgress(GetHandle(), PoseDetectionInProgressCallback, pPoseCookie, &pPoseCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pPoseCookie);
- return (nRetVal);
- }
-
- hCallback = pPoseCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Pose In Progress' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromPoseInProgress(XnCallbackHandle hCallback)
- {
- PoseInProgressCookie* pPoseCookie = (PoseInProgressCookie*)hCallback;
- xnUnregisterFromPoseDetectionInProgress(GetHandle(), pPoseCookie->hCallback);
- xnOSFree(pPoseCookie);
- }
-
- /** @cond */
- inline XnStatus XN_API_DEPRECATED("Use GetAllAvailablePoses() instead") GetAvailablePoses(XnChar** pstrPoses, XnUInt32& nPoses) const
- {
- return xnGetAvailablePoses(GetHandle(), pstrPoses, &nPoses);
- }
-
- inline XnStatus XN_API_DEPRECATED("Please use RegisterToPoseDetected/RegisterToOutOfPose instead") RegisterToPoseCallbacks(PoseDetection PoseStartCB, PoseDetection PoseEndCB, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- PoseCookie* pPoseCookie;
- XN_VALIDATE_ALLOC(pPoseCookie, PoseCookie);
- pPoseCookie->startHandler = PoseStartCB;
- pPoseCookie->endHandler = PoseEndCB;
- pPoseCookie->pPoseCookie = pCookie;
-
-#pragma warning (push)
-#pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- nRetVal = xnRegisterToPoseCallbacks(GetHandle(), PoseDetectionStartBundleCallback, PoseDetectionStartEndBundleCallback, pPoseCookie, &pPoseCookie->hCallback);
-#pragma warning (pop)
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pPoseCookie);
- return (nRetVal);
- }
-
- hCallback = pPoseCookie;
-
- return (XN_STATUS_OK);
- }
-
- inline void XN_API_DEPRECATED("Please use UnregisterFromPoseDetected/UnregisterFromOutOfPose instead") UnregisterFromPoseCallbacks(XnCallbackHandle hCallback)
- {
- PoseCookie* pPoseCookie = (PoseCookie*)hCallback;
-#pragma warning (push)
-#pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- xnUnregisterFromPoseCallbacks(GetHandle(), pPoseCookie->hCallback);
-#pragma warning (pop)
- xnOSFree(pPoseCookie);
- }
- /** @endcond */
-
-private:
- typedef struct PoseCookie
- {
- PoseDetection startHandler;
- PoseDetection endHandler;
- void* pPoseCookie;
- XnCallbackHandle hCallback;
- } PoseCookie;
-
- static void XN_CALLBACK_TYPE PoseDetectionStartBundleCallback(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie)
- {
- PoseCookie* pPoseCookie = (PoseCookie*)pCookie;
- PoseDetectionCapability cap(hNode);
- if (pPoseCookie->startHandler != NULL)
- {
- pPoseCookie->startHandler(cap, strPose, user, pPoseCookie->pPoseCookie);
- }
- }
-
- static void XN_CALLBACK_TYPE PoseDetectionStartEndBundleCallback(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie)
- {
- PoseCookie* pPoseCookie = (PoseCookie*)pCookie;
- PoseDetectionCapability cap(hNode);
- if (pPoseCookie->endHandler != NULL)
- {
- pPoseCookie->endHandler(cap, strPose, user, pPoseCookie->pPoseCookie);
- }
- }
- typedef struct PoseDetectionCookie
- {
- PoseDetection handler;
- void* pPoseCookie;
- XnCallbackHandle hCallback;
- } PoseDetectionCookie;
- static void XN_CALLBACK_TYPE PoseDetectionCallback(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie)
- {
- PoseDetectionCookie* pPoseDetectionCookie = (PoseDetectionCookie*)pCookie;
- PoseDetectionCapability cap(hNode);
- if (pPoseDetectionCookie->handler != NULL)
- {
- pPoseDetectionCookie->handler(cap, strPose, user, pPoseDetectionCookie->pPoseCookie);
- }
- }
-
- typedef struct PoseInProgressCookie
- {
- PoseInProgress handler;
- void* pPoseCookie;
- XnCallbackHandle hCallback;
- } PoseInProgressCookie;
-
- static void XN_CALLBACK_TYPE PoseDetectionInProgressCallback(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, XnPoseDetectionStatus poseErrors, void* pCookie)
- {
- PoseInProgressCookie* pPoseCookie = (PoseInProgressCookie*)pCookie;
- PoseDetectionCapability cap(hNode);
- if (pPoseCookie->handler != NULL)
- {
- pPoseCookie->handler(cap, strPose, user, poseErrors, pPoseCookie->pPoseCookie);
- }
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> The UserGenerator node generates data describing users that it recognizes
- * in the scene, identifying each user individually and thus allowing actions to be
- * done on specific users.
- *
- * <b>Usage:</b> Instantiate the class and call Create() to create a user generator node.
- *
- * <b>Data output:</b>
- * - CoM from UserGenerator local data
- * - User pixels from @ref SceneMetaData
- *
- * <b>Capabilities:</b>
- * - @ref SkeletonCapability
- * - @ref PoseDetectionCapability
- *
- * <b>Remarks:</b>
- *
- * The UserGenerator node provides access to the recognized users through user IDs it
- * returns. The user IDs are unique user identification numbers. The application uses
- * these user IDs to pass them to various methods of this node to access the specific
- * data of the specified user. For example:
- *
- * @ref xn::UserGenerator::GetUserPixels() gets the pixel map of a specific user, and
- * @ref xn::UserGenerator::GetCoM() gets the location of the center of mass of a specific
- * user.
- *
- * Typically, an application will require only a single UserGenerator node. However,
- * there are cases where more than one UserGenerator node could be required. For example,
- * where there are two sensors it may be convenient to build a production graph with
- * two UserGenerator nodes, one node for each depth output.
- *
- * <b>Main Features:</b>
- *
- * - User CoM: Provides the location of the center of mass of a specific user.
- * - Number of users: Provides the number of users currently detected in the scene.
- * - Users list: Provides a list of the IDs of currently recognized users in the scene.
- * - User pixels: Provides the pixels that represent a specific user.
- * - Events: Provides events about users in the scene:
- * - A new user is identified ('New User')
- * - An existing user exits temporarily ('User Exit')
- * - An exited user returns ('User Reenter')
- * - An existing user exits permanently ('Lost User')
- *
- * @note Registering to the 'New User' and 'Lost User' events is done by calling @ref RegisterUserCallbacks().
- * Registering to the 'User Exit' and 'User Reenter' events is done by calling @ref RegisterToUserExit() and @ref RegisterToUserReEnter().
- *
- * @section user_events Events
- *
- * <b>New User' event</b>
- *
- * Signals that a new user has now been recognized in the scene. A new user is a
- * user that was not previously recognized in the scene, and is now recognized in
- * the scene.
- *
- * <b>'Lost User' event</b>
- *
- * Signals that a user has been lost from the list of previously recognized users
- * in the scene.
- *
- * The exact meaning of a lost user is decided by the developer of the user generator.
- * However, a typical implementation would define that a lost user is a previously
- * recognized user that then exits the scene and does not return, even after a 'Lost
- * User' timeout has elapsed. Thus this event is raised only after some delay after
- * the user actually exited the scene.
- *
- * Using the above approach, the difference then between the 'Lost User' event and
- * the 'User Exit' event (see below) would be that the 'User Exit' event is raised
- * every time a recognized user leaves the scene, but a 'Lost User' event is raised
- * only after the user has remained absent ("exit-ed") for a certain timeout period
- * of time.
- *
- * If no timeout is used at all, the 'User Exit' and 'User Reenter' events are redundant.
- *
- * <b>'User Exit' event</b>
- *
- * Signals that a user now exited from the scene.
- *
- * The exact meaning of a user that exited is decided by the developer of the
- * user generator. However, a typical implementation would define that a user that
- * exited the scene is a previously recognized user that then leaves the scene.
- * but returns within a specified time, before the 'Lost User' timeout has elapsed.
- * In such a case the UserGenerator object still remembers the user and so when
- * the user comes back, everything known about it is restored. See the 'Lost User'
- * event above for more explanation of the difference between the 'User Exit' event
- * and the 'Lost User' event in a typical implementation.
- *
- * <b>'User Reenter' event</b>
- *
- * Signals that a user has now reentered to the scene after exiting. A user that
- * reenters the scene after exiting is a recognized user that exited, but now is
- * returning within a specified permitted time span, before the 'Lost User' timeout
- * has elapsed. In such a case the UserGenerator node still remembers the user and
- * so when the user returns, everything known about it is restored.
- *
- * <b>Event Sequence</b>
- *
- * The following event sequences are typical:
- *
- * A:
- * -# 'New User'
- * -# 'User Exit'
- * -# 'Lost User'
- *
- * B:
- * -# 'New User'
- * -# 'User Exit'
- * -# 'User Reenter'
- * -# 'User Exit'
- * -# 'Lost User'
- */
- class UserGenerator : public Generator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline UserGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- inline UserGenerator(const NodeWrapper& other) : Generator(other) {}
-
- /**
- * @brief Creates a UserGenerator node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks:</b>
- *
- * See @ref create_method for a detailed description of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Event handler signature for all UserGenerator events.
- *
- * Example of a handler prototype (for the 'New User' event in this case):
- @code
- void XN_CALLBACK_TYPE OnNewUser(xn::UserGenerator& generator, XnUserID nId, void* pCookie)
- @endcode
- *
- * @param [in] generator UserGenerator node that raised the event.
- * @param [in] user ID of the user.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- */
- typedef void (XN_CALLBACK_TYPE* UserHandler)(UserGenerator& generator, XnUserID user, void* pCookie);
-
- /**
- * @brief Gets the number of users currently identified in the scene.
- *
- * <b>Remarks:</b>
- *
- * The result of this method is required as input for the GetUsers() method.
- */
- inline XnUInt16 GetNumberOfUsers() const
- {
- return xnGetNumberOfUsers(GetHandle());
- }
-
- /**
- * @brief Gets an array of user IDs of all the recognized users in the scene at the current time.
- *
- * @param [out] aUsers Preallocated memory for the method to enter the user IDs.
- * @param [in,out] nUsers Number of users.
- *
- * @c nUsers is used both as an in parameter and an out one in this method:
- * [in] Size of the aUsers array (in units of users).
- * To get the value of nUsers (i.e., the size of array that you want - see
- * parameter below), you use the GetNumberOfUsers() method.
- * For example, if you want an array of size 4 - to contain a maximum of 4 users -
- * you pass 4 as the value of this parameter.
- *
- * [out] On completion, the method returns the number of users that were recognized.
- * E.g., if there is actually only one user, the output will be 1, although the
- * caller passed a value of 4 (as above) for to allocate an array of size 4.
- *
- * <b>Remarks:</b>
- *
- * The output user IDs from this method can be used as input to the @ref xn::UserGenerator::GetCoM()
- * method for getting the center of mass of each user.
- */
- inline XnStatus GetUsers(XnUserID aUsers[], XnUInt16& nUsers) const
- {
- return xnGetUsers(GetHandle(), aUsers, &nUsers);
- }
-
- /**
- * @brief Gets the position of a user's center of mass. This is the single point for
- * representing the user.
- *
- * @param [in] user Specifies a user ID.
- * @param [out] com The user's center of mass in 3-D coordinates.
- *
- * The center of mass is a useful point to represent the user. When you don't have
- * any other reference point (e.g., you don't have the position of a specific joint,
- * or of the head, or any other such point), this is an adequate point with which
- * to start to represent the user.
- *
- * <b>Remarks:</b>
- *
- * The returned @ref XnPoint3D value is the center of mass of all the shown pixels
- * that belong to that user, but not necessarily the real center of mass of the
- * human user.
- * The application can use this method to request the center of mass for each user.
- */
- inline XnStatus GetCoM(XnUserID user, XnPoint3D& com) const
- {
- return xnGetUserCoM(GetHandle(), user, &com);
- }
-
- /**
- * @brief Gets the pixel map of the specified user in the scene and saves it in the @ref xn::SceneMetaData object.
- * The pixels that form part of the user's body are labeled with user's ID. Other values are irrelevant.
- *
- * @param [in] user The ID of the user the pixel map should be returned for.
- * @param [out] smd Struct to be filled with the pixel map.
- *
- * <b>Remarks:</b>
- *
- * A usage example for this method in gaming is for coloring the avatar on the screen.
- *
- * The special value 0 (zero) can be used in the @c user parameter, telling the generator to return a label map
- * containing all users, where each pixel is either marked as 0 (background pixel) or with the user ID to which
- * it belongs.
- */
- inline XnStatus GetUserPixels(XnUserID user, SceneMetaData& smd) const
- {
- return xnGetUserPixels(GetHandle(), user, smd.GetUnderlying());
- }
-
- /**
- * @brief Registers event handlers for the 'New User' and 'Lost User' events.
- *
- * @param [in] NewUserCB Callback function to be invoked when the 'New User' event is raised.
- * @param [in] LostUserCB Callback function to be invoked when the 'Lost User' event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterUserCallbacks(UserHandler NewUserCB, UserHandler LostUserCB, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- UserCookie* pUserCookie;
- XN_VALIDATE_ALLOC(pUserCookie, UserCookie);
- pUserCookie->newHandler = NewUserCB;
- pUserCookie->lostHandler = LostUserCB;
- pUserCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterUserCallbacks(GetHandle(), NewUserCallback, LostUserCallback, pUserCookie, &pUserCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pUserCookie);
- return (nRetVal);
- }
-
- hCallback = pUserCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters event handlers for the 'New User' and 'Lost User' events.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterUserCallbacks(XnCallbackHandle hCallback)
- {
- UserCookie* pUserCookie = (UserCookie*)hCallback;
- xnUnregisterUserCallbacks(GetHandle(), pUserCookie->hCallback);
- xnOSFree(pUserCookie);
- }
-
- /**
- * @brief Gets a @ref SkeletonCapability object for accessing Skeleton functionality.
- *
- * <b>Remarks:</b>
- *
- * Once the @ref SkeletonCapability object has been obtained, the application can
- * work with a skeleton.
- *
- * It is the application's responsibility to check first if Skeleton capability
- * is supported by calling the @ref IsCapabilitySupported() method..
- */
- inline const SkeletonCapability GetSkeletonCap() const
- {
- return SkeletonCapability(GetHandle());
- }
-
- /**
- * @brief Gets a @ref SkeletonCapability object for accessing Skeleton functionality.
- *
- * <b>Remarks:</b>
- *
- * Once the @ref SkeletonCapability object has been obtained, the application can
- * work with a skeleton.
- *
- * It is the application's responsibility to check first if Skeleton capability
- * is supported by calling the @ref IsCapabilitySupported() method..
- */
- inline SkeletonCapability GetSkeletonCap()
- {
- return SkeletonCapability(GetHandle());
- }
-
- /**
- * @brief Gets a @ref xn::PoseDetectionCapability object for accessing Pose Detection
- * functionality
- *
- * <b>Remarks:</b>
- *
- * It is the application responsibility to check first if @ref XN_CAPABILITY_POSE_DETECTION
- * is supported
- * by calling @ref xn::ProductionNode::IsCapabilitySupported().
- */
- inline const PoseDetectionCapability GetPoseDetectionCap() const
- {
- return PoseDetectionCapability(GetHandle());
- }
-
- /**
- * @brief Gets a @ref xn::PoseDetectionCapability object for accessing Pose Detection
- * functionality
- *
- * <b>Remarks:</b>
- *
- * It is the application responsibility to check first if @ref XN_CAPABILITY_POSE_DETECTION
- * is supported
- * by calling @ref xn::ProductionNode::IsCapabilitySupported().
- */
- inline PoseDetectionCapability GetPoseDetectionCap()
- {
- return PoseDetectionCapability(GetHandle());
- }
-
- /**
- * @brief Registers an event handler for the 'User Exit' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToUserExit(UserHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- UserSingleCookie* pUserCookie;
- XN_VALIDATE_ALLOC(pUserCookie, UserSingleCookie);
- pUserCookie->handler = handler;
- pUserCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToUserExit(GetHandle(), UserSingleCallback, pUserCookie, &pUserCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pUserCookie);
- return (nRetVal);
- }
-
- hCallback = pUserCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'User Exit' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromUserExit(XnCallbackHandle hCallback)
- {
- UserSingleCookie* pUserCookie = (UserSingleCookie*)hCallback;
- xnUnregisterFromUserExit(GetHandle(), pUserCookie->hCallback);
- xnOSFree(pUserCookie);
- }
-
- /**
- * @brief Registers an event handler for the 'User Reenter' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToUserReEnter(UserHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- UserSingleCookie* pUserCookie;
- XN_VALIDATE_ALLOC(pUserCookie, UserSingleCookie);
- pUserCookie->handler = handler;
- pUserCookie->pUserCookie = pCookie;
-
- nRetVal = xnRegisterToUserReEnter(GetHandle(), UserSingleCallback, pUserCookie, &pUserCookie->hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- xnOSFree(pUserCookie);
- return (nRetVal);
- }
-
- hCallback = pUserCookie;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Unregisters an event handler for the 'User Reenter' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromUserReEnter(XnCallbackHandle hCallback)
- {
- UserSingleCookie* pUserCookie = (UserSingleCookie*)hCallback;
- xnUnregisterFromUserReEnter(GetHandle(), pUserCookie->hCallback);
- xnOSFree(pUserCookie);
- }
-
- private:
- typedef struct UserCookie
- {
- UserHandler newHandler;
- UserHandler lostHandler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } UserCookie;
-
- static void XN_CALLBACK_TYPE NewUserCallback(XnNodeHandle hNode, XnUserID user, void* pCookie)
- {
- UserCookie* pUserCookie = (UserCookie*)pCookie;
- UserGenerator gen(hNode);
- if (pUserCookie->newHandler != NULL)
- {
- pUserCookie->newHandler(gen, user, pUserCookie->pUserCookie);
- }
- }
-
- static void XN_CALLBACK_TYPE LostUserCallback(XnNodeHandle hNode, XnUserID user, void* pCookie)
- {
- UserCookie* pUserCookie = (UserCookie*)pCookie;
- UserGenerator gen(hNode);
- if (pUserCookie->lostHandler != NULL)
- {
- pUserCookie->lostHandler(gen, user, pUserCookie->pUserCookie);
- }
- }
-
- typedef struct UserSingleCookie
- {
- UserHandler handler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } UserSingleCookie;
-
- static void XN_CALLBACK_TYPE UserSingleCallback(XnNodeHandle hNode, XnUserID user, void* pCookie)
- {
- UserSingleCookie* pUserCookie = (UserSingleCookie*)pCookie;
- UserGenerator gen(hNode);
- if (pUserCookie->handler != NULL)
- {
- pUserCookie->handler(gen, user, pUserCookie->pUserCookie);
- }
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * <b>Purpose:</b> An audio generator node generates audio data.
- *
- * <b>Event: 'Wave Output Mode Change'</b>
- *
- * Signals that the node's current configuration's Wave Output Mode has been changed
- * to some other wave output mode.
- *
- * Use @ref RegisterToWaveOutputModeChanges() and @ref UnregisterFromWaveOutputModeChanges() for using this event.
- *
- * This event is raised by calling SetWaveOutputMode().
- */
- class AudioGenerator : public Generator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline AudioGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- inline AudioGenerator(const NodeWrapper& other) : Generator(other) {}
-
- /**
- * @brief Creates an AudioGenerator node from available @ref node_alternative "production node alternatives".
- *
- * <b>Remarks</b>
- *
- * See @ref create_method for a detailed description of this method.
- */
- inline XnStatus Create(Context& context, Query* pQuery = NULL, EnumerationErrors* pErrors = NULL);
-
- /**
- * @brief Gets the audio generator node's latest @ref glos_frame_object "frame object", saving
- * it in the @ref xn::AudioMetaData object. This @ref glos_frame_object "frame object" is a
- * snapshot of the generated label map data and its associated configuration information at a
- * certain point in time. This saved @ref glos_frame_object "frame object" provides fast
- * and easy access to the audio generator node's data and configuration information.
- *
- * @param [out] metaData Structure to be filled with the frame object.
- *
- * <b>Remarks:</b>
- *
- * This method is central in the use of the AudioGenerator node. Once the AudioGenerator
- * node is generating data, after each @ref conc_updating_data "'Update Data'" call,
- * the application calls this method to get the node's frame object, which contains
- * the data and all its associated properties.
- */
- inline void GetMetaData(AudioMetaData& metaData) const
- {
- xnGetAudioMetaData(GetHandle(), metaData.GetUnderlying());
- }
-
- /**
- * @copybrief xnGetAudioBuffer
- * For full details and usage, see @ref xnGetAudioBuffer
- */
- inline const XnUChar* GetAudioBuffer() const
- {
- return xnGetAudioBuffer(GetHandle());
- }
-
- /**
- * @brief Gets the node's number of supported wave output modes.
- */
- inline XnUInt32 GetSupportedWaveOutputModesCount() const
- {
- return xnGetSupportedWaveOutputModesCount(GetHandle());
- }
-
- /**
- * @brief Returns a list of the wave output modes that the @ref AudioGenerator node supports.
- * @param [out] aSupportedModes Buffer to be filled with the list of wave output modes.
- * @param [in,out] nCount [in] Size of the array.
- [out] Number of modes returned.
- */
- inline XnStatus GetSupportedWaveOutputModes(XnWaveOutputMode* aSupportedModes, XnUInt32& nCount) const
- {
- return xnGetSupportedWaveOutputModes(GetHandle(), aSupportedModes, &nCount);
- }
-
- /**
- * @brief Sets the current wave output mode of the AudioGenerator node. This output mode
- * is used for generating the next audio packet.
- *
- * @param [in] OutputMode Mode to set as the current wave output mode.
- *
- * <b>Remarks</b>
- *
- * The wave output mode is contained in the @ref xn::XnWaveOutputMode struct. It
- * comprises: bits per sample, channel, and sample rate.
- */
- inline XnStatus SetWaveOutputMode(const XnWaveOutputMode& OutputMode)
- {
- return xnSetWaveOutputMode(GetHandle(), &OutputMode);
- }
-
- /**
- * @brief Gets the current AudioGenerator node's wave output mode. This output mode
- * is used for generating the next audio packet.
- *
- * @param [out] OutputMode Current wave output mode.
- *
- * <b>Remarks</b>
- *
- * The wave output mode is contained in the XnWaveOutputMode struct. Each wave output
- * mode comprises settings for bits per sample, channel, and sample rate, as follows:
- */
- inline XnStatus GetWaveOutputMode(XnWaveOutputMode& OutputMode) const
- {
- return xnGetWaveOutputMode(GetHandle(), &OutputMode);
- }
-
- /**
- * @brief Registers an event handler for the 'Wave Output Mode Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToWaveOutputModeChanges(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return _RegisterToStateChange(xnRegisterToWaveOutputModeChanges, GetHandle(), handler, pCookie, hCallback);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Wave Output Mode Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromWaveOutputModeChanges(XnCallbackHandle hCallback)
- {
- _UnregisterFromStateChange(xnUnregisterFromWaveOutputModeChanges, GetHandle(), hCallback);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- * Represents a Mock Audio Generator node
- */
- class MockAudioGenerator : public AudioGenerator
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline MockAudioGenerator(XnNodeHandle hNode = NULL) : AudioGenerator(hNode) {}
- inline MockAudioGenerator(const NodeWrapper& other) : AudioGenerator(other) {}
-
- /**
- * Creates a mock audio generator
- *
- * @param [in] context The context in which the node should be generated
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus Create(Context& context, const XnChar* strName = NULL);
-
- /**
- * Creates a mock audio generator, copying the initial state from another audio
- * generator.
- *
- * @param [in] other The audio generator to copy state from
- * @param [in] strName Optional. The name of the new node.
- */
- XnStatus CreateBasedOn(AudioGenerator& other, const XnChar* strName = NULL);
-
- /**
- * @copybrief xnMockAudioSetData
- * For full details and usage, see @ref xnMockAudioSetData
- */
- inline XnStatus SetData(XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnUInt8* pAudioBuffer)
- {
- return xnMockAudioSetData(GetHandle(), nFrameID, nTimestamp, nDataSize, pAudioBuffer);
- }
-
- /**
- * Sets the data of the mock node from a meta data object, overriding frame ID and
- * timestamp
- *
- * @param [in] audioMD Object to take data from
- * @param [in] nFrameID Frame ID
- * @param [in] nTimestamp Timestamp
- */
- inline XnStatus SetData(const AudioMetaData& audioMD, XnUInt32 nFrameID, XnUInt64 nTimestamp)
- {
- return SetData(nFrameID, nTimestamp, audioMD.DataSize(), audioMD.Data());
- }
-
- /**
- * Sets the data of the mock node from a meta data object
- *
- * @param [in] audioMD Object to take data from
- */
- inline XnStatus SetData(const AudioMetaData& audioMD)
- {
- return SetData(audioMD, audioMD.FrameID(), audioMD.Timestamp());
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- */
- class MockRawGenerator : public Generator
- {
- public:
- MockRawGenerator(XnNodeHandle hNode = NULL) : Generator(hNode) {}
- MockRawGenerator(const NodeWrapper& other) : Generator(other) {}
-
- inline XnStatus Create(Context& context, const XnChar* strName = NULL);
-
- inline XnStatus SetData(XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const void* pData)
- {
- return xnMockRawSetData(GetHandle(), nFrameID, nTimestamp, nDataSize, pData);
- }
-
- };
-
- /**
- * @ingroup cppref_prd_func
- * Represents a Codec node.
- */
- class Codec : public ProductionNode
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline Codec(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline Codec(const NodeWrapper& other) : ProductionNode(other) {}
-
- /**
- * @copybrief xnCreateCodec
- * For full details and usage, see @ref xnCreateCodec
- */
- inline XnStatus Create(Context& context, XnCodecID codecID, ProductionNode& initializerNode);
-
- /**
- * @copybrief xnGetCodecID
- * For full details and usage, see @ref xnGetCodecID
- */
- inline XnCodecID GetCodecID() const
- {
- return xnGetCodecID(GetHandle());
- }
-
- /**
- * @copybrief xnEncodeData
- * For full details and usage, see @ref xnEncodeData
- */
- inline XnStatus EncodeData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const
- {
- return xnEncodeData(GetHandle(), pSrc, nSrcSize, pDst, nDstSize, pnBytesWritten);
- }
-
- /**
- * @copybrief xnDecodeData
- * For full details and usage, see @ref xnDecodeData
- */
- inline XnStatus DecodeData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const
- {
- return xnDecodeData(GetHandle(), pSrc, nSrcSize, pDst, nDstSize, pnBytesWritten);
- }
- };
-
- /**
- * @ingroup cppref_prd_func
- *
- * <b>Purpose:</b> The ScriptNode object loads an XML script from a file or string,
- * and then runs the XML script to build a production graph. It also references every
- * node created from that script, so it wouldn't be destroyed.
- *
- * <b>Remarks:</b>
- *
- * A typical usage of a script node is:
- * - Create the script node, using the @ref Create() method.
- * - Load XML script from file or string, using @ref LoadScriptFromFile() or @ref LoadScriptFromString().
- * - Execute the script, using @ref Run().
- *
- * Note that the context's @ref xn::Context::RunXmlScriptFromFile "RunXmlScriptFromFile()" or
- * @ref xn::Context::RunXmlScript "RunXmlScript()" methods can be used to perform
- * all above steps.
-
- * All production nodes in the production graph use reference count to determine their life time,
- * but if an application executed a script, it can't know upfront which nodes will be created
- * by this script, and so, can't take reference to them, so those nodes might be destroyed
- * immediately. The script node, apart from executing the script, also keeps reference to
- * all the nodes created by the script. This means that if the script node is destroyed,
- * every production node that was created by the script, and is unreferenced by the application
- * will also be destroyed. For this reason, it is recommended for application using XML scripts
- * to keep a reference to the script node as long as they keep a reference to the context itself.
- *
- * A single ScriptNode object is responsible for building the entire production graph,
- * irrespective of however many node definitions there are in the XML script and how
- * many production nodes are created.
- *
- * For additional information about XML scripts, see @ref xmlscripts.
- */
- class ScriptNode : public ProductionNode
- {
- public:
- /**
- * Ctor
- *
- * @param [in] hNode Node handle
- */
- inline ScriptNode(XnNodeHandle hNode = NULL) : ProductionNode(hNode) {}
- inline ScriptNode(const NodeWrapper& other) : ProductionNode(other) {}
-
- inline XnStatus Create(Context& context, const XnChar* strFormat);
-
- inline const XnChar* GetSupportedFormat()
- {
- return xnScriptNodeGetSupportedFormat(GetHandle());
- }
-
- /**
- * @brief Loads an XML script file into the ScriptNode object.
- *
- * @param [in] strFileName Name of file containing an XML script.
- */
- inline XnStatus LoadScriptFromFile(const XnChar* strFileName)
- {
- return xnLoadScriptFromFile(GetHandle(), strFileName);
- }
-
- /**
- * @brief Loads an XML script string into the ScriptNode object.
- *
- * @param [in] strScript String containing an XML script.
- */
- inline XnStatus LoadScriptFromString(const XnChar* strScript)
- {
- return xnLoadScriptFromString(GetHandle(), strScript);
- }
-
- /**
- * @brief Runs the ScriptNode object's XML script to build a production graph.
- *
- * @param [out] pErrors List of enumeration errors produced during method execution.
- *
- * <b>Remarks</b>
- *
- * This method causes the whole production graph to enter Generating state. To read
- * data you have to run one of the @ref conc_updating_data "'Update Data'" methods
- * of the Context or of the node itself.
- */
- inline XnStatus Run(EnumerationErrors* pErrors);
- };
-
- //---------------------------------------------------------------------------
- // EnumerationErrors
- //---------------------------------------------------------------------------
- /**
- * @ingroup cppref_graph_mgmt
- * <b>Purpose:</b> An EnumerationError object returns a full list of modules that failed
- * to enumerate specifying exactly why each module failed.
- *
- * <b>Usage:</b> Instantiate and pass to enumeration methods.
- *
- * <b>Remarks:</b>
- *
- * Sometimes an application enumerates for a specific node, and receives zero results.
- * An obvious reason for this failure is that no module implementing the node type was
- * installed. Another possible reason is that a module may be installed but has no license.
- * Yet another possible reason is that a required hardware device is currently disconnected.
- *
- * Applications can use the EnumerationErrors class to acquire a full list of modules
- * that failed to enumerate specifying for each exactly why each module failed.
- *
- * The methods provided by the EnumerationErrors class let the application search enumeration
- * lists for specific types of nodes.
- */
- class EnumerationErrors
- {
- public:
- /**
- * Ctor
- */
- inline EnumerationErrors() : m_bAllocated(TRUE), m_pErrors(NULL) { xnEnumerationErrorsAllocate(&m_pErrors); }
-
- /**
- * Ctor
- *
- * @param [in] pErrors underlying C object to wrap
- * @param [in] bOwn TRUE to own the object (i.e. free it upon destruction), FALSE
- * otherwise.
- */
- inline EnumerationErrors(XnEnumerationErrors* pErrors, XnBool bOwn = FALSE) : m_bAllocated(bOwn), m_pErrors(pErrors) {}
-
- /**
- * Dtor
- */
- ~EnumerationErrors() { Free(); }
-
- /**
- * An iterator over enumeration errors
- */
- class Iterator
- {
- public:
- friend class EnumerationErrors;
-
- /**
- * Checks if the other iterator points to the same location
- *
- * @param [in] other another iterator
- */
- XnBool operator==(const Iterator& other) const
- {
- return m_it == other.m_it;
- }
-
- /**
- * Checks if the other iterator points to a different location
- *
- * @param [in] other another iterator
- */
- XnBool operator!=(const Iterator& other) const
- {
- return m_it != other.m_it;
- }
-
- /**
- * Moves the iterator to the next location. If end of list was reached, iterator
- * will be equal to @ref EnumerationErrors::End().
- */
- inline Iterator& operator++()
- {
- m_it = xnEnumerationErrorsGetNext(m_it);
- return *this;
- }
-
- /**
- * Returns an iterator to the next location. If end of list was reached, iterator
- * will be equal to @ref EnumerationErrors::End().
- */
- inline Iterator operator++(int)
- {
- return Iterator(xnEnumerationErrorsGetNext(m_it));
- }
-
- /**
- * @brief Returns the description data of the failing node the iterator points to.
- *
- * <b>Remarks</b>
- *
- * The description data returned in the @ref XnProductionNodeDescription struct
- * includes the node name, the vendor, and the version.
- */
- inline const XnProductionNodeDescription& Description() { return *xnEnumerationErrorsGetCurrentDescription(m_it); }
-
- /**
- * @brief Returns the failure error code of the failing node the iterator points to.
- * For a string representation of this error, call @ref xnGetStatusString().
- */
- inline XnStatus Error() { return xnEnumerationErrorsGetCurrentError(m_it); }
-
- private:
- inline Iterator(XnEnumerationErrorsIterator it) : m_it(it) {}
-
- XnEnumerationErrorsIterator m_it;
- };
-
- /**
- * @brief Gets an iterator to the first item in an enumeration errors list.
- *
- * <b>Remarks</b>
- *
- * To access the contents of the error item, either use the @ref ToString() method
- * of this class or the methods of the @ref EnumerationErrors::Iterator class.
- */
- inline Iterator Begin() const { return Iterator(xnEnumerationErrorsGetFirst(m_pErrors)); }
-
- /**
- * @brief Returns an iterator referring to the past-the-end element in an enumeration errors list.
- * This iterator does not point to an actual item.
- *
- * <b>Remarks</b>
- *
- * Use this as the sentinel for flagging the end of a list when searching.
- */
- inline Iterator End() const { return Iterator(NULL); }
-
- /**
- * @brief Returns a string representation of the Enumeration Errors object. The string
- * contains a full list of the modules that failed the most recent enumeration operation.
- * For each failed module, the Enumeration Errors object specifies why exactly the module failed.
- *
- * @param [in] csBuffer Character buffer to be filled.
- * @param [in] nSize Size of the character buffer.
- */
- inline XnStatus ToString(XnChar* csBuffer, XnUInt32 nSize)
- {
- return xnEnumerationErrorsToString(m_pErrors, csBuffer, nSize);
- }
-
- /**
- * @copybrief xnEnumerationErrorsFree
- * For full details and usage, see @ref xnEnumerationErrorsFree
- */
- inline void Free()
- {
- if (m_bAllocated)
- {
- xnEnumerationErrorsFree(m_pErrors);
- m_pErrors = NULL;
- m_bAllocated = FALSE;
- }
- }
-
- /**
- * Gets the underlying C object
- */
- inline XnEnumerationErrors* GetUnderlying() { return m_pErrors; }
-
- private:
- XnEnumerationErrors* m_pErrors;
- XnBool m_bAllocated;
- };
-
- //---------------------------------------------------------------------------
- // Context
- //---------------------------------------------------------------------------
-
- /**
- * @ingroup cppref_graph_mgmt
- *
- * A context is a workspace where the application builds an OpenNI production graph.
- * It contains methods for managing the production graph.
- *
- * In order to use any of the OpenNI functionality you must first construct a Context
- * object and initialize it. Prior to this, the application cannot do anything with
- * OpenNI.
- *
- * For a comprehensive overview to the Context class and its members, see @ref conc_context
- * "Overview to Contexts".
- *
- * @section context_global_error_event Event: 'Global Error State Change'
- *
- * Signals that the error state of any of the nodes has changed.
- *
- * This event can be used by the application to get a signal as soon as any error occurs
- * in one of the production nodes. The global error state aggregates error state from all
- * the production nodes in the context.
- *
- * Use @ref RegisterToErrorStateChange() and @ref UnregisterFromErrorStateChange() for using this event.
- *
- * @section context_node_creation_event Event: 'Node Creation'
- *
- * Signals that a new node was created in the context production graph.
- *
- * Use @ref RegisterToNodeCreation() and @ref UnregisterFromNodeCreation() for using this event.
- *
- * @section context_node_destruction_event Event: 'Node Destruction'
- *
- * Signals that a node was removed from the context production graph, and destroyed.
- *
- * Use @ref RegisterToNodeDestruction() and @ref UnregisterFromNodeDestruction() for using this event.
- */
- class Context
- {
- public:
- /**
- * Callback prototype for the @ref context_node_creation_event "'Node Creation'" event handler.
- *
- * @param [in] context The context that raised this event.
- * @param [in] createdNode The id of the hand that disappeared.
- * @param [in] pCookie A user-provided cookie that was given when registering to
- * this event.
- *
- * Example for such a handler:
- @code
- void XN_CALLBACK_TYPE OnNodeCreation(Context& context, ProductionNode& createdNode, void* pCookie)
- {}
- @endcode
- */
- typedef void (XN_CALLBACK_TYPE* NodeCreationHandler)(Context& context, ProductionNode& createdNode, void* pCookie);
-
- /**
- * Callback prototype for the @ref context_node_destruction_event "'Node Destruction'" event handler.
- *
- * @param [in] context The context that raised this event.
- * @param [in] strDestroyedNodeName The name of the node that was destroyed.
- * @param [in] pCookie A user-provided cookie that was given when registering to
- * this event.
- *
- * Example for such a handler:
- @code
- void XN_CALLBACK_TYPE OnNodeDestruction(Context& context, const XnChar* strDestroyedNodeName, void* pCookie)
- {}
- @endcode
- */
- typedef void (XN_CALLBACK_TYPE* NodeDestructionHandler)(Context& context, const XnChar* strDestroyedNodeName, void* pCookie);
-
- /**
- * Ctor
- */
- inline Context() : m_pContext(NULL), m_bUsingDeprecatedAPI(FALSE), m_bAllocated(FALSE), m_hShuttingDownCallback(NULL) {}
-
- /**
- * Ctor
- *
- * @param [in] pContext Underlying C object
- */
- inline Context(XnContext* pContext) : m_pContext(NULL), m_bUsingDeprecatedAPI(FALSE), m_bAllocated(FALSE), m_hShuttingDownCallback(NULL)
- {
- SetHandle(pContext);
- }
-
- /**
- * Copy Ctor
- *
- * @param [in] other Another context. Note that the context will only be destroyed
- * when the original object is destroyed.
- */
- inline Context(const Context& other) : m_pContext(NULL), m_bUsingDeprecatedAPI(FALSE), m_bAllocated(FALSE), m_hShuttingDownCallback(NULL)
- {
- SetHandle(other.m_pContext);
- }
-
- /**
- * Dtor
- */
- ~Context()
- {
- SetHandle(NULL);
- }
-
- inline Context& operator=(const Context& other)
- {
- SetHandle(other.m_pContext);
- return *this;
- }
-
- /**
- * Gets the underlying C object
- */
- inline XnContext* GetUnderlyingObject() const { return m_pContext; }
-
- /**
- * Checks if two context objects are references to the same context.
- *
- * @param [in] other Another object
- */
- inline XnBool operator==(const Context& other)
- {
- return (GetUnderlyingObject() == other.GetUnderlyingObject());
- }
-
- /**
- * Checks if two context objects are <i>not</i> references to the same context.
- *
- * @param [in] other Another object
- */
- inline XnBool operator!=(const Context& other)
- {
- return (GetUnderlyingObject() != other.GetUnderlyingObject());
- }
-
- /**
- * @brief Builds the context's general software environment.
- *
- * This method initializes runtime variables and data structures, and examines all
- * registered plug-ins to learn the purpose and specific capabilities of each. In
- * particular, during initialization the context initialization examines all registered
- * plug-ins to learn the purpose and specific capabilities of each. For example,
- * one plug-in is for creating a skeleton node, and another plug-in is for creating
- * a depth node. Thus an entire database is built of plug-ins that can be queried
- * according to vendor, model, and capabilities of each.
- *
- * Once you have completed the initialization you can create nodes that are based
- * on the plug-ins that OpenNI has discovered by this initialization process.
- */
- inline XnStatus Init()
- {
- XnContext* pContext = NULL;
- XnStatus nRetVal = xnInit(&pContext);
- XN_IS_STATUS_OK(nRetVal);
-
- TakeOwnership(pContext);
- m_bAllocated = TRUE;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Runs an XML script string to build a production graph.
- *
- * @param [in] strScript String containing an XML script.
- * @param [out] scriptNode @ref xn::ScriptNode object as the root to all the nodes
- * created from the XML file. When no longer needed, the node can
- * be released, causing all the created nodes to decrement their reference counts.
- * @param [in,out] pErrors Optional. To be filled with enumeration errors.
- *
- * <B>Remarks:</B>
- *
- * For a full description of the XML structure, see @ref xmlscripts.
- * Compare this method with initialization methods that run an XML script from a
- * file.
- */
- inline XnStatus RunXmlScript(const XnChar* strScript, ScriptNode& scriptNode, EnumerationErrors* pErrors = NULL)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hScriptNode;
- nRetVal = xnContextRunXmlScriptEx(m_pContext, strScript, pErrors == NULL ? NULL : pErrors->GetUnderlying(), &hScriptNode);
- XN_IS_STATUS_OK(nRetVal);
-
- scriptNode.TakeOwnership(hScriptNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Runs an XML script file to build a production graph.
- *
- * @param [in] strFileName Name of file containing an XML script.
- * @param [out] scriptNode scriptNode object as the root to all the nodes created
- * from the XML file. When no longer needed, the node can
- * be released, causing all the created nodes to decrement
- * their reference counts.
- * @param [in,out] pErrors Optional. To be filled with enumeration errors.
- *
- * <B>Remarks:</B>
- *
- * The XML script file describes all the nodes you want to create. For each node
- * description in the XML file, this method creates a @ref xn::ProductionNode object.
- */
- inline XnStatus RunXmlScriptFromFile(const XnChar* strFileName, ScriptNode& scriptNode, EnumerationErrors* pErrors = NULL)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hScriptNode;
- nRetVal = xnContextRunXmlScriptFromFileEx(m_pContext, strFileName, pErrors == NULL ? NULL : pErrors->GetUnderlying(), &hScriptNode);
- XN_IS_STATUS_OK(nRetVal);
-
- scriptNode.TakeOwnership(hScriptNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Shorthand combination of two other initialization methods - @ref Init() and then @ref RunXmlScriptFromFile() -
- * to initialize the context object and then create a production graph.
- *
- * @param [in] strFileName Name of file containing an XML script.
- * @param [out] scriptNode ScriptNode object as the root to all the nodes created
- * from the XML file. When no longer needed, the node can be
- * released, causing all the created nodes to decrement their reference counts.
- * @param [out] pErrors Optional. To be filled with enumeration errors.
- *
- * <B>Remarks:</B>
- *
- * The XML script file describes all the nodes you want to create. For each node
- * description in the XML file, this method creates a @ref xn::ProductionNode object.
- */
- inline XnStatus InitFromXmlFile(const XnChar* strFileName, ScriptNode& scriptNode, EnumerationErrors* pErrors = NULL)
- {
- XnContext* pContext = NULL;
-
- XnNodeHandle hScriptNode;
- XnStatus nRetVal = xnInitFromXmlFileEx(strFileName, &pContext, pErrors == NULL ? NULL : pErrors->GetUnderlying(), &hScriptNode);
- XN_IS_STATUS_OK(nRetVal);
-
- scriptNode.TakeOwnership(hScriptNode);
- TakeOwnership(pContext);
- m_bAllocated = TRUE;
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Recreates a production graph from a recorded ONI file and then replays the data
- * generation exactly as it was recorded.
- *
- * @param [in] strFileName Name of the recorded file to be run.
- * @param [out] playerNode Returns a @ref xn::Player object through which
- * playback can be controlled, e.g., seeking and setting playback speed.
- *
- * <B>Remarks:</B>
- *
- * OpenNI provides great flexibility of recording. You can decide you want to record
- * only the final output, e.g., just a skeleton in movement; or record both the
- * output skeleton and the depth input; or record only the depth input and then
- * recreate the skeleton at run-time after reading the recorded raw depth data.
- * You can also choose which nodes to record.
- */
- inline XnStatus OpenFileRecording(const XnChar* strFileName, ProductionNode& playerNode)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hPlayer;
- nRetVal = xnContextOpenFileRecordingEx(m_pContext, strFileName, &hPlayer);
- XN_IS_STATUS_OK(nRetVal);
-
- playerNode.TakeOwnership(hPlayer);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnCreateMockNode
- * For full details and usage, see @ref xnCreateMockNode
- */
- inline XnStatus CreateMockNode(XnProductionNodeType type, const XnChar* strName, ProductionNode& mockNode)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hMockNode;
- nRetVal = xnCreateMockNode(m_pContext, type, strName, &hMockNode);
- XN_IS_STATUS_OK(nRetVal);
-
- mockNode.TakeOwnership(hMockNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnCreateMockNodeBasedOn
- * For full details and usage, see @ref xnCreateMockNodeBasedOn
- */
- inline XnStatus CreateMockNodeBasedOn(ProductionNode& originalNode, const XnChar* strName, ProductionNode& mockNode)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hMockNode;
- nRetVal = xnCreateMockNodeBasedOn(m_pContext, originalNode, strName, &hMockNode);
- XN_IS_STATUS_OK(nRetVal);
-
- mockNode.TakeOwnership(hMockNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnCreateCodec
- * For full details and usage, see @ref xnCreateCodec
- */
- inline XnStatus CreateCodec(XnCodecID codecID, ProductionNode& initializerNode, Codec& codec)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hCodec;
- nRetVal = xnCreateCodec(m_pContext, codecID, initializerNode.GetHandle(), &hCodec);
- XN_IS_STATUS_OK(nRetVal);
-
- codec.TakeOwnership(hCodec);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnContextAddRef
- * For full details and usage, see @ref xnContextAddRef
- */
- inline XnStatus AddRef()
- {
- return xnContextAddRef(m_pContext);
- }
-
- /**
- * @copybrief xnContextRelease
- * For full details and usage, see @ref xnContextRelease
- */
- inline void Release()
- {
- SetHandle(NULL);
- }
-
-
- /**
- * @copybrief xnAddLicense
- * For full details and usage, see @ref xnAddLicense
- */
- inline XnStatus AddLicense(const XnLicense& License)
- {
- return xnAddLicense(m_pContext, &License);
- }
-
- /**
- * @copybrief xnEnumerateLicenses
- * For full details and usage, see @ref xnEnumerateLicenses
- */
- inline XnStatus EnumerateLicenses(XnLicense*& aLicenses, XnUInt32& nCount) const
- {
- return xnEnumerateLicenses(m_pContext, &aLicenses, &nCount);
- }
-
- /**
- * @copybrief xnFreeLicensesList
- * For full details and usage, see @ref xnFreeLicensesList
- */
- inline static void FreeLicensesList(XnLicense aLicenses[])
- {
- xnFreeLicensesList(aLicenses);
- }
-
- /**
- * @brief Enumerates all available production nodes for a specific node type (e.g., the application wants to create a
- * depth generator node) and returns a full list of matching production nodes.
- *
- * @param [in] Type Requested node type.
- * @param [in] pQuery Optional. A query object that can be used to filter results.
- * @param [out] TreesList List of possible production nodes.
- * @param [out] pErrors Optional. To contain enumeration errors.
- *
- * <B>Remarks:</B>
- *
- * The application chooses one of the nodes from the node list returned by this method and uses it as input
- * to the @ref xn::Context::CreateProductionTree() method to create a new production node.
- *
- * Using this method to help create a production node offers the greatest flexibility since it returns a
- * complete list of matching production nodes and so the application can then choose the most suitable node.
- *
- * By contrast, using @ref xn::Context::CreateAnyProductionTree() "CreateAnyProductionTree()" or a node's <b>Create()</b>
- * method creates a node from the first matching node that satisfies the query.
- */
- XnStatus EnumerateProductionTrees(XnProductionNodeType Type, const Query* pQuery, NodeInfoList& TreesList, EnumerationErrors* pErrors = NULL) const
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- const XnNodeQuery* pInternalQuery = (pQuery != NULL) ? pQuery->GetUnderlyingObject() : NULL;
-
- XnNodeInfoList* pList = NULL;
- nRetVal = xnEnumerateProductionTrees(m_pContext, Type, pInternalQuery, &pList, pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
-
- TreesList.ReplaceUnderlyingObject(pList);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Enumerates for production nodes of a specific node type, and creates the first
- * production node found of that type.
- *
- * @param [in] type Requested node type.
- * @param [in] pQuery Optional. A query object that can be used to filter results.
- * @param [out] node Handle to the newly created node.
- * @param [in,out] pErrors Optional. To contain enumeration errors.
- *
- * <B>Remarks:</B>
- *
- * This method is a 'shortcut' version of using the @ref EnumerateProductionTrees()
- * method and then passing the first result to @ref CreateProductionTree().
- * Thus, this method is exactly like the <b>Create()</b> method for nodes.
- *
- * Other ways of creating a production graph let the application retrieve a complete
- * list of alternatives and then choose the most appropriate alternative.
- *
- * This method is the method used by the above XML script methods to create the
- * ProductionNode objects. The XML method runs the XML script, and for each node
- * description the XML method runs this function to create that node.
- *
- * Using this function is called 'creating a node from the context'. You can also
- * create a node by invoking the <b>Create</b> method of the node itself, e.g.,
- * the @ref xn::HandsGenerator::Create "Create()" method of a @ref xn::HandsGenerator
- * "HandsGenerator" node.
- *
- * By default, this method does not enable the production nodes to start generating
- * data immediately on creation.
- *
- * @sa @ref create_method for more detail.
- */
- XnStatus CreateAnyProductionTree(XnProductionNodeType type, Query* pQuery, ProductionNode& node, EnumerationErrors* pErrors = NULL)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeQuery* pInternalQuery = (pQuery != NULL) ? pQuery->GetUnderlyingObject() : NULL;
-
- XnNodeHandle hNode;
- nRetVal = xnCreateAnyProductionTree(m_pContext, type, pInternalQuery, &hNode, pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
-
- node.TakeOwnership(hNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Creates a production node from the information supplied in a @ref xn::NodeInfo object.
- *
- * @param [in] Tree Node properties for creating the new node.
- * @param [out] node Reference to the new @ref xn::ProductionNode object.
- *
- * <B>Remarks:</B>
- *
- * The application gets the NodeInfo object by choosing it from the list returned
- * by the @ref xn::Context::EnumerateProductionTrees() method.
- *
- * If the new production node requires additional nodes for its input, and those
- * nodes do not yet exist, then this method creates those additional nodes also
- * and associates them with the "original" new production node.
- *
- */
- XnStatus CreateProductionTree(NodeInfo& Tree, ProductionNode& node)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hNode;
- nRetVal = xnCreateProductionTree(m_pContext, Tree, &hNode);
- XN_IS_STATUS_OK(nRetVal);
-
- node.TakeOwnership(hNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Returns a list of all the context's existing created nodes.
- *
- * @param [out] list List of the context's existing created nodes.
- *
- * You can use the @ref xn::NodeInfoList::FilterList() method to filter the returned
- * list of existing nodes.
- */
- XnStatus EnumerateExistingNodes(NodeInfoList& list) const
- {
- XnNodeInfoList* pList;
- XnStatus nRetVal = xnEnumerateExistingNodes(m_pContext, &pList);
- XN_IS_STATUS_OK(nRetVal);
-
- list.ReplaceUnderlyingObject(pList);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Returns a list of the context's existing created nodes filtered by type.
- *
- * @param [in] list List of the context's existing created nodes.
- * @param [in] type Type to enumerate for.
- *
- * <B>Remarks</B>
- *
- * Returns the list after filtering them by type, so it returns a list of the created
- * nodes of the specific type only.
- *
- * An example of a typical case of returning a list of two nodes of the same type
- * is where there are two sensors in a 3D set-up and you need to retrieve the corresponding
- * two depth nodes to generate data from them.
- *
- * You can use the @ref xn::NodeInfoList::FilterList() method to filter the returned
- * list of existing nodes.
- */
- XnStatus EnumerateExistingNodes(NodeInfoList& list, XnProductionNodeType type) const
- {
- XnNodeInfoList* pList;
- XnStatus nRetVal = xnEnumerateExistingNodesByType(m_pContext, type, &pList);
- XN_IS_STATUS_OK(nRetVal);
-
- list.ReplaceUnderlyingObject(pList);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Searches for an existing created node of a specified type and returns a reference to it.
- *
- * @param [in] type Type of node to search for.
- * @param [out] node Reference to an existing created node that was found.
- *
- * <B>Remarks</B>
- *
- * This method returns only the first node it finds; this method does not return
- * the entire list of matching nodes. Compare this with the @ref xn::Context::EnumerateExistingNodes()
- * method, which returns the entire list of matching nodes.
- * A typical usage is that the application already created all the nodes from XML.
- * Then, when it needs to start generating data from a particular node, e.g., the
- * skeleton data, it will call FindExistingNode specifying the skeleton type, and
- * it will get it and start using it.
- *
- * This method does not provide a query parameter (compare with @ref xn::Context::EnumerateExistingNodes).
- */
- XnStatus FindExistingNode(XnProductionNodeType type, ProductionNode& node) const
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hNode;
- nRetVal = xnFindExistingRefNodeByType(m_pContext, type, &hNode);
- XN_IS_STATUS_OK(nRetVal);
-
- node.TakeOwnership(hNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnGetNodeHandleByName
- * For full details and usage, see @ref xnGetNodeHandleByName
- */
- XnStatus GetProductionNodeByName(const XnChar* strInstanceName, ProductionNode& node) const
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hNode;
- nRetVal = xnGetRefNodeHandleByName(m_pContext, strInstanceName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
-
- node.TakeOwnership(hNode);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @copybrief xnGetNodeHandleByName
- * For full details and usage, see @ref xnGetNodeHandleByName
- */
- XnStatus GetProductionNodeInfoByName(const XnChar* strInstanceName, NodeInfo& nodeInfo) const
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hNode;
- nRetVal = xnGetRefNodeHandleByName(m_pContext, strInstanceName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
-
- xnProductionNodeRelease(hNode);
-
- nodeInfo = NodeInfo(xnGetNodeInfo(hNode));
-
- return (XN_STATUS_OK);
- }
-
- /**
- * @brief Ensures all created @ref dict_gen_node "generator nodes" are generating data.
- *
- */
- inline XnStatus StartGeneratingAll()
- {
- return xnStartGeneratingAll(m_pContext);
- }
-
- /**
- * @brief Ensures all @ref dict_gen_node "generator nodes" are not generating data.
- */
- inline XnStatus StopGeneratingAll()
- {
- return xnStopGeneratingAll(m_pContext);
- }
-
- /**
- * @brief Enables/disables the GlobalMirror flag.
- *
- * @param [in] bMirror New mirroring state.
- *
- * <B>Remarks:</B>
- *
- * See @ref conc_global_mirror for understanding of the 'Global Mirror' concept.
- */
- inline XnStatus SetGlobalMirror(XnBool bMirror)
- {
- return xnSetGlobalMirror(m_pContext, bMirror);
- }
-
- /**
- * @brief Gets the current state of the GlobalMirror flag.
- *
- */
- inline XnBool GetGlobalMirror()
- {
- return xnGetGlobalMirror(m_pContext);
- }
-
- /**
- * @copybrief xnGetGlobalErrorState
- * For full details and usage, see @ref xnGetGlobalErrorState
- */
- inline XnStatus GetGlobalErrorState()
- {
- return xnGetGlobalErrorState(m_pContext);
- }
-
- /**
- * @brief Registers an event handler for the 'Global Error State Change' event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToErrorStateChange(XnErrorStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return xnRegisterToGlobalErrorStateChange(m_pContext, handler, pCookie, &hCallback);
- }
-
- /**
- * @brief Unregisters an event handler for the 'Global Error State Change' event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events .
- */
- inline void UnregisterFromErrorStateChange(XnCallbackHandle hCallback)
- {
- xnUnregisterFromGlobalErrorStateChange(m_pContext, hCallback);
- }
-
- /**
- * @brief Registers an event handler for the 'Node Creation' event. see @ref context_node_creation_event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToNodeCreation(NodeCreationHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- NodeCreationCookie* pCreationCookie;
- XN_VALIDATE_ALLOC(pCreationCookie, NodeCreationCookie);
- pCreationCookie->pFunc = handler;
- pCreationCookie->pCookie = pCookie;
-
- nRetVal = xnRegisterToNodeCreation(m_pContext, NodeCreationCallback, pCreationCookie, &pCreationCookie->hUnderlyingCallback);
- XN_IS_STATUS_OK(nRetVal);
-
- hCallback = pCreationCookie;
-
- return XN_STATUS_OK;
- }
-
- /**
- * @brief Unregisters an event handler for the 'Node Creation' event. see @ref context_node_creation_event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events.
- */
- inline void UnregisterFromNodeCreation(XnCallbackHandle hCallback)
- {
- NodeCreationCookie* pCreationCookie = (NodeCreationCookie*)hCallback;
- xnUnregisterFromNodeCreation(m_pContext, pCreationCookie->hUnderlyingCallback);
- xnOSFree(pCreationCookie);
- }
-
- /**
- * @brief Registers an event handler for the 'Node Destruction' event. see @ref context_node_destruction_event.
- *
- * @param [in] handler Callback function to be invoked when the event is raised.
- * @param [in] pCookie User's cookie, to be delivered to the callback.
- * @param [out] hCallback Handle to the callback to be used for unregistering it.
- *
- * For full details and usage of the parameters, see @ref reg_to_events.
- */
- inline XnStatus RegisterToNodeDestruction(NodeDestructionHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- NodeDestructionCookie* pDestructionCookie;
- XN_VALIDATE_ALLOC(pDestructionCookie, NodeDestructionCookie);
- pDestructionCookie->pFunc = handler;
- pDestructionCookie->pCookie = pCookie;
-
- nRetVal = xnRegisterToNodeDestruction(m_pContext, NodeDestructionCallback, pDestructionCookie, &pDestructionCookie->hUnderlyingCallback);
- XN_IS_STATUS_OK(nRetVal);
-
- hCallback = pDestructionCookie;
-
- return XN_STATUS_OK;
- }
-
- /**
- * @brief Unregisters an event handler for the 'Node Destruction' event. see @ref context_node_destruction_event.
- *
- * @param [in] hCallback Handle received from registration.
- *
- * For full details and usage of the parameter, see @ref unreg_from_events.
- */
- inline void UnregisterFromNodeDestruction(XnCallbackHandle hCallback)
- {
- NodeDestructionCookie* pDestructionCookie = (NodeDestructionCookie*)hCallback;
- xnUnregisterFromNodeDestruction(m_pContext, pDestructionCookie->hUnderlyingCallback);
- xnOSFree(pDestructionCookie);
- }
-
- /**
- * @brief Updates all generator nodes in the context to their latest available data,
- * first waiting for all nodes to have new data available.
- *
- * <b>Remarks</b>
- *
- * This method requests from OpenNI to cause all nodes in the context's Production
- * Graph that have new data available to update their application buffers with the
- * new data, each node updating its own application buffer.
- *
- * Before OpenNI causes the data updates, it waits until @b all the nodes have notified
- * that they have new data available. On receiving all the 'new data available'
- * notifications, OpenNI then causes all nodes with new data available to update
- * their application buffers with their new data. At this stage the generator nodes
- * have "generated" new data. This method then stops waiting and returns a success
- * status. The application can now read the newly generated data.
- *
- * @note Using this method is not recommended for most applications since it requires
- * <i>all</i> the nodes to have new data. Consider instead using @ref WaitAnyUpdateAll()
- * or @ref WaitOneUpdateAll(). Typical applications use the WaitAnyUpdateAll()
- * method.
- *
- * An error situation is defined as: after a preset timeout, not all nodes have
- * yet notified OpenNI they have new data available. On error, the method stops
- * waiting and returns an error status. None of the nodes update their application
- * buffers.
- *
- * See @ref conc_updating_data__summary_of_wait_fns for an overview to the @ref
- * conc_updating_data "'WaitXUpdateAll'" methods and how to read the data from the
- * nodes.
- *
- * @retval XN_STATUS_WAIT_DATA_TIMEOUT No new data available within 2 seconds.
- */
- inline XnStatus WaitAndUpdateAll()
- {
- return xnWaitAndUpdateAll(m_pContext);
- }
-
- /**
- * @brief Updates all generator nodes in the context to their latest available data,
- * first waiting for any of the nodes to have new data available.
- *
- * @note Typical applications use this method. Consider using this method for your
- * application.
- *
- * <b>Remarks</b>
- *
- * This method requests from OpenNI to cause all nodes with new data available in
- * the context's Production Graph to update their application buffers with the new
- * data, each node updating its own application buffer.
- *
- * Before OpenNI causes the data updates, it waits for any of the nodes to have
- * notified that it has new data available. On receiving a 'new data available'
- * notification, OpenNI then causes all nodes with new data available to update
- * their application buffers with their new data. At this stage the generator nodes
- * have "generated" new data. This method then stops waiting and returns a success
- * status. The application can now read the newly generated data.
- *
- * A node that does not have new data available does not update its application
- * buffer.
- *
- * An error situation is defined as: after a preset timeout, none of the nodes have
- * yet notified OpenNI they have new data available. On error, the method stops
- * waiting and returns an error status. None of the nodes update their application
- * buffers.
- *
- * See @ref conc_updating_data__summary_of_wait_fns for an overview to the @ref
- * conc_updating_data "'WaitXUpdateAll'" methods and how to read the data from the
- * nodes.
- *
- * @retval XN_STATUS_WAIT_DATA_TIMEOUT No new data available within 2 seconds.
- */
- inline XnStatus WaitAnyUpdateAll()
- {
- return xnWaitAnyUpdateAll(m_pContext);
- }
-
- /**
- * @brief Updates all generator nodes in the context to their latest available data, first waiting for a specified node to have new data available.
- *
- * <b>Remarks</b>
- *
- * This method requests from OpenNI to cause all nodes in the context's Production
- * Graph with new data available to update their application buffers with the new
- * data, each node updating its own application buffer.
- *
- * Before OpenNI causes the data updates, it waits for a specified node to notify
- * that it has new data available. On receiving the 'new data available' notification,
- * OpenNI then causes all nodes with new data available to update their application
- * buffers with their new data. At this stage the generator nodes have "generated"
- * new data. This method then stops waiting and returns a success status. The application
- * can now read the newly generated data.
- *
- * A node that does not have new data available does not update its application
- * buffer.
- *
- * An error situation is defined as: after a preset timeout, none of the nodes have
- * yet notified OpenNI they have has new data available. On error, the method stops
- * waiting and returns an error status. None of the nodes update their application
- * buffers.
- *
- * See @ref conc_updating_data__summary_of_wait_fns for an overview to the @ref
- * conc_updating_data "'WaitXUpdateAll'" methods and how to read the data from the
- * nodes.
- *
- * @retval XN_STATUS_WAIT_DATA_TIMEOUT No new data available within 2 seconds.
- */
- inline XnStatus WaitOneUpdateAll(ProductionNode& node)
- {
- return xnWaitOneUpdateAll(m_pContext, node.GetHandle());
- }
-
- /**
- * @brief Immediately updates all generator nodes in the context to their latest available data, without waiting for notification that any node has new data available.
- *
- * <b>Remarks</b>
- *
- * This method requests from OpenNI to cause all nodes in the context's Production
- * Graph with new data available to update their application buffers with the new
- * data, each node updating its own application buffer.
- *
- * OpenNI causes all nodes with new data available to update their application buffers
- * with their new data. At this stage the generator nodes have "generated" new data.
- * This method returns a success status. The application can now read the newly
- * generated data.
- *
- * A node that does not have new data available does not update its application
- * buffer.
- *
- * See @ref conc_updating_data__summary_of_wait_fns for an overview to the @ref
- * conc_updating_data "'WaitXUpdateAll'" methods and how to read the data from the
- * nodes.
- */
- inline XnStatus WaitNoneUpdateAll()
- {
- return xnWaitNoneUpdateAll(m_pContext);
- }
-
- /**
- * @copybrief xnAutoEnumerateOverSingleInput
- * For full details and usage, see @ref xnAutoEnumerateOverSingleInput
- */
- inline XnStatus AutoEnumerateOverSingleInput(NodeInfoList& List, XnProductionNodeDescription& description, const XnChar* strCreationInfo, XnProductionNodeType InputType, EnumerationErrors* pErrors, Query* pQuery = NULL) const
- {
- return xnAutoEnumerateOverSingleInput(m_pContext, List.GetUnderlyingObject(), &description, strCreationInfo, InputType, pErrors == NULL ? NULL : pErrors->GetUnderlying(), pQuery == NULL ? NULL : pQuery->GetUnderlyingObject());
- }
-
- /**
- * Replaces the underlying C object pointed to by this object.
- */
- inline void SetHandle(XnContext* pContext)
- {
- if (m_pContext == pContext)
- {
- return;
- }
-
- if (m_pContext != NULL)
- {
- if (m_bUsingDeprecatedAPI && m_bAllocated)
- {
- // Backwards compatibility: call shutdown instead of release, to make old programs get the
- // exact same behavior they used to have.
- xnForceShutdown(m_pContext);
- }
- else
- {
- xnContextUnregisterFromShutdown(m_pContext, m_hShuttingDownCallback);
- xnContextRelease(m_pContext);
- }
- }
-
- if (pContext != NULL)
- {
- XnStatus nRetVal = xnContextAddRef(pContext);
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- XN_REFERENCE_VARIABLE(nRetVal);
-
- nRetVal = xnContextRegisterForShutdown(pContext, ContextShuttingDownCallback, this, &m_hShuttingDownCallback);
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- }
-
- m_pContext = pContext;
- }
-
- inline void TakeOwnership(XnContext* pContext)
- {
- SetHandle(pContext);
-
- if (pContext != NULL)
- {
- xnContextRelease(pContext);
- }
- }
-
- /** @cond */
- inline XnStatus XN_API_DEPRECATED("Use other overload!") RunXmlScript(const XnChar* strScript, EnumerationErrors* pErrors = NULL)
- {
- m_bUsingDeprecatedAPI = TRUE;
- #pragma warning (push)
- #pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- return xnContextRunXmlScript(m_pContext, strScript, pErrors == NULL ? NULL : pErrors->GetUnderlying());
- #pragma warning (pop)
- }
-
- inline XnStatus XN_API_DEPRECATED("Use other overload!") RunXmlScriptFromFile(const XnChar* strFileName, EnumerationErrors* pErrors = NULL)
- {
- m_bUsingDeprecatedAPI = TRUE;
- #pragma warning (push)
- #pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- return xnContextRunXmlScriptFromFile(m_pContext, strFileName, pErrors == NULL ? NULL : pErrors->GetUnderlying());
- #pragma warning (pop)
- }
-
- inline XnStatus XN_API_DEPRECATED("Use other overload!") InitFromXmlFile(const XnChar* strFileName, EnumerationErrors* pErrors = NULL)
- {
- XnContext* pContext = NULL;
- m_bUsingDeprecatedAPI = TRUE;
-
- #pragma warning (push)
- #pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- XnStatus nRetVal = xnInitFromXmlFile(strFileName, &pContext, pErrors == NULL ? NULL : pErrors->GetUnderlying());
- #pragma warning (pop)
- XN_IS_STATUS_OK(nRetVal);
-
- TakeOwnership(pContext);
- m_bAllocated = TRUE;
-
- return (XN_STATUS_OK);
- }
-
- inline XnStatus XN_API_DEPRECATED("Use other overload!") OpenFileRecording(const XnChar* strFileName)
- {
- m_bUsingDeprecatedAPI = TRUE;
- #pragma warning (push)
- #pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- return xnContextOpenFileRecording(m_pContext, strFileName);
- #pragma warning (pop)
- }
-
- inline void XN_API_DEPRECATED("You may use Release() instead, or count on dtor") Shutdown()
- {
- if (m_pContext != NULL)
- {
- #pragma warning (push)
- #pragma warning (disable: XN_DEPRECATED_WARNING_IDS)
- xnShutdown(m_pContext);
- #pragma warning (pop)
- m_pContext = NULL;
- }
- }
-
- XnStatus XN_API_DEPRECATED("Please use other overload") CreateProductionTree(NodeInfo& Tree)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnNodeHandle hNode;
- nRetVal = xnCreateProductionTree(m_pContext, Tree, &hNode);
- XN_IS_STATUS_OK(nRetVal);
-
- Tree.m_bOwnerOfNode = TRUE;
-
- return (XN_STATUS_OK);
- }
- /** @endcond */
-
- private:
- typedef struct NodeCreationCookie
- {
- NodeCreationHandler pFunc;
- void* pCookie;
- XnCallbackHandle hUnderlyingCallback;
- } NodeCreationCookie;
-
- typedef struct NodeDestructionCookie
- {
- NodeDestructionHandler pFunc;
- void* pCookie;
- XnCallbackHandle hUnderlyingCallback;
- } NodeDestructionCookie;
-
- static void XN_CALLBACK_TYPE NodeCreationCallback(XnContext* pContext, XnNodeHandle hCreatedNode, void* pCookie)
- {
- NodeCreationCookie* pNodeCreationCookie = (NodeCreationCookie*)pCookie;
- Context context(pContext);
- ProductionNode createdNode(hCreatedNode);
- pNodeCreationCookie->pFunc(context, createdNode, pNodeCreationCookie->pCookie);
- }
-
- static void XN_CALLBACK_TYPE NodeDestructionCallback(XnContext* pContext, const XnChar* strDestroyedNodeName, void* pCookie)
- {
- NodeDestructionCookie* pNodeCreationCookie = (NodeDestructionCookie*)pCookie;
- Context context(pContext);
- pNodeCreationCookie->pFunc(context, strDestroyedNodeName, pNodeCreationCookie->pCookie);
- }
-
- static void XN_CALLBACK_TYPE ContextShuttingDownCallback(XnContext* /*pContext*/, void* pCookie)
- {
- Context* pThis = (Context*)pCookie;
- pThis->m_pContext = NULL;
- }
-
- XnContext* m_pContext;
- XnBool m_bUsingDeprecatedAPI;
- XnBool m_bAllocated;
- XnCallbackHandle m_hShuttingDownCallback;
- };
-
- /**
- * @ingroup cppref_misc
- * A utility class for resolution info
- */
- class Resolution
- {
- public:
- /**
- * Creates a @ref Resolution object.
- *
- * @param [in] res Resolution
- */
- inline Resolution(XnResolution res) : m_Res(res)
- {
- m_nXRes = xnResolutionGetXRes(res);
- m_nYRes = xnResolutionGetYRes(res);
- m_strName = xnResolutionGetName(res);
- }
-
- /**
- * Creates a @ref Resolution object out of X and Y resolutions.
- *
- * @param [in] xRes X resolution
- * @param [in] yRes Y resolution
- */
- inline Resolution(XnUInt32 xRes, XnUInt32 yRes) : m_nXRes(xRes), m_nYRes(yRes)
- {
- m_Res = xnResolutionGetFromXYRes(xRes, yRes);
- m_strName = xnResolutionGetName(m_Res);
- }
-
- /**
- * Creates a @ref Resolution object out of its name
- *
- * @param [in] strName name of the resolution
- */
- inline Resolution(const XnChar* strName)
- {
- m_Res = xnResolutionGetFromName(strName);
- m_nXRes = xnResolutionGetXRes(m_Res);
- m_nYRes = xnResolutionGetYRes(m_Res);
- m_strName = xnResolutionGetName(m_Res);
- }
-
- /**
- * Gets the resolution
- */
- inline XnResolution GetResolution() const { return m_Res; }
- /**
- * Gets the X resolution
- */
- inline XnUInt32 GetXResolution() const { return m_nXRes; }
- /**
- * Gets the Y resolution
- */
- inline XnUInt32 GetYResolution() const { return m_nYRes; }
- /**
- * Gets the name of the resolution
- */
- inline const XnChar* GetName() const { return m_strName; }
-
- private:
- XnResolution m_Res;
- XnUInt32 m_nXRes;
- XnUInt32 m_nYRes;
- const XnChar* m_strName;
- };
-
- //---------------------------------------------------------------------------
- // Functions Implementation
- //---------------------------------------------------------------------------
- inline XnStatus NodeInfoList::FilterList(Context& context, Query& query)
- {
- return xnNodeQueryFilterList(context.GetUnderlyingObject(), query.GetUnderlyingObject(), m_pList);
- }
-
- inline void ProductionNode::GetContext(Context& context) const
- {
- context.TakeOwnership(xnGetRefContextFromNodeHandle(GetHandle()));
- }
-
- inline Context ProductionNode::GetContext() const
- {
- XnContext* pContext = xnGetRefContextFromNodeHandle(GetHandle());
- Context result(pContext);
- xnContextRelease(pContext);
- return result;
- }
-
- inline NodeInfoList& NodeInfo::GetNeededNodes() const
- {
- if (m_pNeededNodes == NULL)
- {
- XnNodeInfoList* pList = xnNodeInfoGetNeededNodes(m_pInfo);
- m_pNeededNodes = XN_NEW(NodeInfoList, pList);
- }
-
- return *m_pNeededNodes;
- }
-
- inline void NodeInfo::SetUnderlyingObject(XnNodeInfo* pInfo)
- {
- if (m_pNeededNodes != NULL)
- {
- XN_DELETE(m_pNeededNodes);
- }
-
- m_bOwnerOfNode = FALSE;
- m_pInfo = pInfo;
- m_pNeededNodes = NULL;
- }
-
- inline XnBool FrameSyncCapability::CanFrameSyncWith(Generator& other) const
- {
- return xnCanFrameSyncWith(GetHandle(), other.GetHandle());
- }
-
- inline XnStatus FrameSyncCapability::FrameSyncWith(Generator& other)
- {
- return xnFrameSyncWith(GetHandle(), other.GetHandle());
- }
-
- inline XnStatus FrameSyncCapability::StopFrameSyncWith(Generator& other)
- {
- return xnStopFrameSyncWith(GetHandle(), other.GetHandle());
- }
-
- inline XnBool FrameSyncCapability::IsFrameSyncedWith(Generator& other) const
- {
- return xnIsFrameSyncedWith(GetHandle(), other.GetHandle());
- }
-
- inline XnStatus NodeInfo::GetInstance(ProductionNode& node) const
- {
- if (m_pInfo == NULL)
- {
- return XN_STATUS_INVALID_OPERATION;
- }
-
- XnNodeHandle hNode = xnNodeInfoGetRefHandle(m_pInfo);
- node.TakeOwnership(hNode);
-
- if (m_bOwnerOfNode)
- {
- xnProductionNodeRelease(hNode);
- }
-
- return (XN_STATUS_OK);
- }
-
- //---------------------------------------------------------------------------
- // Node creation functions
- //---------------------------------------------------------------------------
-
- inline XnStatus Device::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateDevice(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus Recorder::Create(Context& context, const XnChar* strFormatName /*= NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateRecorder(context.GetUnderlyingObject(), strFormatName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus Player::Create(Context& context, const XnChar* strFormatName)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreatePlayer(context.GetUnderlyingObject(), strFormatName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus DepthGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateDepthGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockDepthGenerator::Create(Context& context, const XnChar* strName /* = NULL */)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNode(context.GetUnderlyingObject(), XN_NODE_TYPE_DEPTH, strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockDepthGenerator::CreateBasedOn(DepthGenerator& other, const XnChar* strName /* = NULL */)
- {
- Context context;
- other.GetContext(context);
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNodeBasedOn(context.GetUnderlyingObject(), other.GetHandle(), strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus ImageGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateImageGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockImageGenerator::Create(Context& context, const XnChar* strName /* = NULL */)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNode(context.GetUnderlyingObject(), XN_NODE_TYPE_IMAGE, strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockImageGenerator::CreateBasedOn(ImageGenerator& other, const XnChar* strName /* = NULL */)
- {
- Context context;
- other.GetContext(context);
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNodeBasedOn(context.GetUnderlyingObject(), other.GetHandle(), strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus IRGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateIRGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockIRGenerator::Create(Context& context, const XnChar* strName /* = NULL */)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNode(context.GetUnderlyingObject(), XN_NODE_TYPE_IR, strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockIRGenerator::CreateBasedOn(IRGenerator& other, const XnChar* strName /* = NULL */)
- {
- Context context;
- other.GetContext(context);
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNodeBasedOn(context.GetUnderlyingObject(), other.GetHandle(), strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus GestureGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateGestureGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus SceneAnalyzer::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- //You're creating a scene!
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateSceneAnalyzer(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus HandsGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateHandsGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus UserGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateUserGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus AudioGenerator::Create(Context& context, Query* pQuery/*=NULL*/, EnumerationErrors* pErrors/*=NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateAudioGenerator(context.GetUnderlyingObject(), &hNode, pQuery == NULL ? NULL : pQuery->GetUnderlyingObject(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockAudioGenerator::Create(Context& context, const XnChar* strName /* = NULL */)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNode(context.GetUnderlyingObject(), XN_NODE_TYPE_AUDIO, strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockAudioGenerator::CreateBasedOn(AudioGenerator& other, const XnChar* strName /* = NULL */)
- {
- Context context;
- other.GetContext(context);
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNodeBasedOn(context.GetUnderlyingObject(), other.GetHandle(), strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus MockRawGenerator::Create(Context& context, const XnChar* strName /*= NULL*/)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateMockNode(context.GetUnderlyingObject(), XN_NODE_TYPE_GENERATOR, strName, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus Codec::Create(Context& context, XnCodecID codecID, ProductionNode& initializerNode)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateCodec(context.GetUnderlyingObject(), codecID, initializerNode.GetHandle(), &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- inline XnStatus ScriptNode::Run(EnumerationErrors* pErrors)
- {
- return xnScriptNodeRun(GetHandle(), pErrors == NULL ? NULL : pErrors->GetUnderlying());
- }
-
- inline XnStatus ScriptNode::Create(Context& context, const XnChar* strFormat)
- {
- XnNodeHandle hNode;
- XnStatus nRetVal = xnCreateScriptNode(context.GetUnderlyingObject(), strFormat, &hNode);
- XN_IS_STATUS_OK(nRetVal);
- TakeOwnership(hNode);
- return (XN_STATUS_OK);
- }
-
- //---------------------------------------------------------------------------
- // Global Helper Functions
- //---------------------------------------------------------------------------
-
- inline void XN_API_DEPRECATED("Use xn::Version::Current() instead") GetVersion(XnVersion& Version)
- {
- xnGetVersion(&Version);
- }
-
- //---------------------------------------------------------------------------
- // Internal Helper Classes and Functions
- //---------------------------------------------------------------------------
-
- class StateChangedCallbackTranslator
- {
- public:
- StateChangedCallbackTranslator(StateChangedHandler handler, void* pCookie) : m_UserHandler(handler), m_pUserCookie(pCookie), m_hCallback(NULL) {}
-
- XnStatus Register(_XnRegisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode)
- {
- return xnFunc(hNode, StateChangedCallback, this, &m_hCallback);
- }
-
- void Unregister(_XnUnregisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode)
- {
- xnFunc(hNode, m_hCallback);
- }
-
- static XnStatus RegisterToUnderlying(_XnRegisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- StateChangedCallbackTranslator* pTrans;
- XN_VALIDATE_NEW(pTrans, StateChangedCallbackTranslator, handler, pCookie);
-
- nRetVal = pTrans->Register(xnFunc, hNode);
- if (nRetVal != XN_STATUS_OK)
- {
- XN_DELETE(pTrans);
- return (nRetVal);
- }
-
- hCallback = pTrans;
-
- return (XN_STATUS_OK);
- }
-
- static XnStatus UnregisterFromUnderlying(_XnUnregisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, XnCallbackHandle hCallback)
- {
- StateChangedCallbackTranslator* pTrans = (StateChangedCallbackTranslator*)hCallback;
- pTrans->Unregister(xnFunc, hNode);
- XN_DELETE(pTrans);
- return XN_STATUS_OK;
- }
-
- private:
- friend class GeneralIntCapability;
-
- typedef struct StateChangeCookie
- {
- StateChangedHandler userHandler;
- void* pUserCookie;
- XnCallbackHandle hCallback;
- } StateChangeCookie;
-
- static void XN_CALLBACK_TYPE StateChangedCallback(XnNodeHandle hNode, void* pCookie)
- {
- StateChangedCallbackTranslator* pTrans = (StateChangedCallbackTranslator*)pCookie;
- ProductionNode node(hNode);
- pTrans->m_UserHandler(node, pTrans->m_pUserCookie);
- }
-
- StateChangedHandler m_UserHandler;
- void* m_pUserCookie;
- XnCallbackHandle m_hCallback;
- };
-
- static XnStatus _RegisterToStateChange(_XnRegisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- return StateChangedCallbackTranslator::RegisterToUnderlying(xnFunc, hNode, handler, pCookie, hCallback);
- }
-
- static void _UnregisterFromStateChange(_XnUnregisterStateChangeFuncPtr xnFunc, XnNodeHandle hNode, XnCallbackHandle hCallback)
- {
- StateChangedCallbackTranslator::UnregisterFromUnderlying(xnFunc, hNode, hCallback);
- }
-
- inline XnStatus GeneralIntCapability::RegisterToValueChange(StateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- StateChangedCallbackTranslator* pTrans;
- XN_VALIDATE_NEW(pTrans, StateChangedCallbackTranslator, handler, pCookie);
-
- nRetVal = xnRegisterToGeneralIntValueChange(GetHandle(), m_strCap, pTrans->StateChangedCallback, pTrans, &pTrans->m_hCallback);
- if (nRetVal != XN_STATUS_OK)
- {
- XN_DELETE(pTrans);
- return (nRetVal);
- }
-
- hCallback = pTrans;
-
- return (XN_STATUS_OK);
- }
-
- inline void GeneralIntCapability::UnregisterFromValueChange(XnCallbackHandle hCallback)
- {
- StateChangedCallbackTranslator* pTrans = (StateChangedCallbackTranslator*)hCallback;
- xnUnregisterFromGeneralIntValueChange(GetHandle(), m_strCap, pTrans->m_hCallback);
- XN_DELETE(pTrans);
- }
-};
-
-#endif // __XN_CPP_WRAPPER_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicQueueT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicQueueT.h
deleted file mode 100644
index 6e323d3f..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicQueueT.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef _XN_CYCLIC_QUEUE_T_H_
-#define _XN_CYCLIC_QUEUE_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnQueueT.h"
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-
-template<class T, XnUInt32 TDefaultMaxDepth, class TAlloc = XnLinkedNodeDefaultAllocatorT<T> >
-class XnCyclicQueueT : protected XnQueueT<T, TAlloc>
-{
-public:
- typedef XnQueueT<T, TAlloc> Base;
-
- XnCyclicQueueT(XnUInt32 nMaxDepth = TDefaultMaxDepth) : Base(), m_nMaxDepth(nMaxDepth) {}
-
- XnCyclicQueueT(const XnCyclicQueueT& other) : Base(other)
- {
- *this = other;
- }
-
- XnCyclicQueueT& operator=(const XnCyclicQueueT& other)
- {
- Base::operator=(other);
- m_nMaxDepth = other.m_nMaxDepth;
- return *this;
- }
-
- ~XnCyclicQueueT() {}
-
- using Base::ConstIterator;
- using Base::IsEmpty;
- using Base::Size;
-
- XnStatus SetMaxSize(XnUInt32 nMaxSize)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- while (Size() > nMaxSize)
- {
- nRetVal = Remove(this->Begin());
- XN_IS_STATUS_OK(nRetVal);
- }
-
- m_nMaxDepth = nMaxSize;
-
- return (XN_STATUS_OK);
- }
-
- XnStatus Push(T const& value)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- if (Size() == m_nMaxDepth)
- {
- nRetVal = Remove(this->Begin());
- XN_IS_STATUS_OK(nRetVal);
- }
-
- nRetVal = Base::Push(value);
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
-
- using Base::Pop;
- using Base::Top;
- using Base::Begin;
- using Base::End;
-
-protected:
- XnUInt32 m_nMaxDepth;
-};
-
-
-#endif // _XN_CYCLIC_QUEUE_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicStackT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicStackT.h
deleted file mode 100644
index 39d8ebca..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnCyclicStackT.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef _XN_CYCLIC_STACK_T_H_
-#define _XN_CYCLIC_STACK_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnStackT.h"
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-
-template<class T, XnUInt32 TDefaultMaxDepth, class TAlloc = XnLinkedNodeDefaultAllocatorT<T> >
-class XnCyclicStackT : protected XnStackT<T, TAlloc>
-{
-public:
- typedef XnStackT<T, TAlloc> Base;
-
- XnCyclicStackT(XnUInt32 nMaxDepth = TDefaultMaxDepth) : Base(), m_nMaxDepth(nMaxDepth) {}
-
- XnCyclicStackT(const XnCyclicStackT& other) : Base(other)
- {
- *this = other;
- }
-
- XnCyclicStackT& operator=(const XnCyclicStackT& other)
- {
- Base::operator=(other);
- m_nMaxDepth = other.m_nMaxDepth;
- return *this;
- }
-
- ~XnCyclicStackT() {}
-
- using typename Base::ConstIterator;
- using Base::Remove;
- using Base::IsEmpty;
- using Base::Size;
-
- XnStatus SetMaxSize(XnUInt32 nMaxSize)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- while (Size() > nMaxSize)
- {
- nRetVal = Remove(this->ReverseBegin());
- XN_IS_STATUS_OK(nRetVal);
- }
-
- m_nMaxDepth = nMaxSize;
-
- return (XN_STATUS_OK);
- }
-
- XnStatus Push(T const& value)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- if (Size() == m_nMaxDepth)
- {
- nRetVal = Remove(this->ReverseBegin());
- XN_IS_STATUS_OK(nRetVal);
- }
-
- nRetVal = Base::Push(value);
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
-
- using Base::Pop;
- using Base::Top;
- using Base::Begin;
- using Base::End;
-
-protected:
- XnUInt32 m_nMaxDepth;
-};
-
-
-#endif // _XN_CYCLIC_STACK_T_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDataTypes.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDataTypes.h
deleted file mode 100644
index fcc3296c..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDataTypes.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_DATA_TYPES_H_
-#define _XN_DATA_TYPES_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnOS.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
- * The value type for all general data structures
- */
-typedef void* XnValue;
-
-/**
- * Declares a translator from @a Type to XnValue, with a name @a ClassName. The class is declared
- * with the @a decl declspec.
- */
-#define XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, ClassName) \
- class decl ClassName \
- { \
- public: \
- XN_PRAGMA_START_DISABLED_WARNING_SECTION(XN_CONDITION_IS_CONST_WARNING_ID) \
- \
- static XnValue CreateValueCopy(Type const& orig) \
- { \
- if (sizeof(Type) > sizeof(XnValue)) \
- { \
- Type* pNew = XN_NEW(Type, orig); \
- return (XnValue)pNew; \
- } \
- else \
- { \
- XnValue result = 0; \
- xnOSMemCopy(&result, &orig, sizeof(Type)); \
- return result; \
- } \
- } \
- static void FreeValue(XnValue& Value) \
- { \
- if (sizeof(Type) > sizeof(XnValue)) \
- { \
- Type* p = (Type*)Value; \
- XN_DELETE(p); \
- } \
- } \
- static XnValue GetAsValue(Type const& orig) \
- { \
- if (sizeof(Type) > sizeof(XnValue)) \
- { \
- return (XnValue)&orig; \
- } \
- else \
- { \
- XnValue result = 0; \
- xnOSMemCopy(&result, &orig, sizeof(Type)); \
- return result; \
- } \
- } \
- static Type const& GetFromValue(const XnValue& Value) \
- { \
- if (sizeof(Type) > sizeof(XnValue)) \
- { \
- Type const* p = (Type const*)Value; \
- return *p; \
- } \
- else \
- { \
- Type const* p = (Type const*)&Value; \
- return *p; \
- } \
- } \
- static Type& GetFromValue(XnValue& Value) \
- { \
- if (sizeof(Type) > sizeof(XnValue)) \
- { \
- Type* p = (Type*)Value; \
- return *p; \
- } \
- else \
- { \
- Type* p = (Type*)&Value; \
- return *p; \
- } \
- } \
- XN_PRAGMA_STOP_DISABLED_WARNING_SECTION \
- };
-
-/**
- * Declares a translator from @a Type to XnValue, with a name @a ClassName.
- */
-#define XN_DECLARE_DEFAULT_VALUE_TRANSLATOR(Type, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(, Type, ClassName)
-
-#define XN_DEFAULT_TRANSLATOR_NAME(ClassName) ClassName ## Translator
-
-#endif // _XN_DATA_TYPES_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDerivedCast.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDerivedCast.h
deleted file mode 100644
index 7b11ee17..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDerivedCast.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-/****************************************************************************
-* *
-* OpenNI 1.1 Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/\
-
-#ifndef __XN_DERIVED_CAST_H__
-#define __XN_DERIVED_CAST_H__
-
-// derived_cast Acts as dynamic_cast without the need for RTTI. used in platforms that not implement RTTI well like Linux-Arm.
-template<class T>
-static T derived_cast(ModuleProductionNode* pPrdNode);
-
-#define DERIVED_CAST_IMPL(T, enm) \
- template<> \
- T* derived_cast<T*>(ModuleProductionNode* pPrdNode) \
- { \
- return (T*)pPrdNode->m_aInterfaces[enm]; \
- }
-
-DERIVED_CAST_IMPL(ModuleDevice, XN_NODE_TYPE_DEVICE)
-DERIVED_CAST_IMPL(ModuleRecorder, XN_NODE_TYPE_RECORDER)
-DERIVED_CAST_IMPL(ModulePlayer, XN_NODE_TYPE_PLAYER)
-DERIVED_CAST_IMPL(ModuleCodec, XN_NODE_TYPE_CODEC)
-DERIVED_CAST_IMPL(ModuleScriptNode, XN_NODE_TYPE_SCRIPT)
-DERIVED_CAST_IMPL(ModuleGenerator, XN_NODE_TYPE_GENERATOR)
-DERIVED_CAST_IMPL(ModuleUserGenerator, XN_NODE_TYPE_USER)
-DERIVED_CAST_IMPL(ModuleHandsGenerator, XN_NODE_TYPE_HANDS)
-DERIVED_CAST_IMPL(ModuleGestureGenerator, XN_NODE_TYPE_GESTURE)
-DERIVED_CAST_IMPL(ModuleAudioGenerator, XN_NODE_TYPE_AUDIO)
-DERIVED_CAST_IMPL(ModuleMapGenerator, XN_NODE_TYPE_MAP_GENERATOR)
-DERIVED_CAST_IMPL(ModuleDepthGenerator, XN_NODE_TYPE_DEPTH)
-DERIVED_CAST_IMPL(ModuleImageGenerator, XN_NODE_TYPE_IMAGE)
-DERIVED_CAST_IMPL(ModuleIRGenerator, XN_NODE_TYPE_IR)
-DERIVED_CAST_IMPL(ModuleSceneAnalyzer, XN_NODE_TYPE_SCENE)
-
-#ifdef dynamic_cast
-#undef dynamic_cast
-#endif
-
-#define dynamic_cast derived_cast
-
-#endif
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDump.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDump.h
deleted file mode 100644
index d0423c68..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDump.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_DUMP_H__
-#define __XN_DUMP_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-#include "XnStatus.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-struct XnDumpFile;
-typedef struct XnDumpFile XnDumpFile;
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/**
-* Configures if a specific dump mask is enabled.
-*
-* @param strMask [in] The mask to set.
-* @param bEnabled [in] TRUE to enable this dump, FALSE otherwise.
-*/
-XN_C_API XnStatus XN_C_DECL xnDumpSetMaskState(const XnChar* strMask, XnBool bEnabled);
-
-/**
-* This function checks if a dump mask is enabled
-*
-* @param strDumpMask [in] The mask that should be checked.
-*/
-XN_C_API XnBool XN_C_DECL xnLogIsDumpMaskEnabled(const XnChar* strDumpMask);
-
-/**
-* Opens a file for writing dump.
-*
-* @param strDumpName [in] Name of the dump mask this file belongs to.
-* @param strNameFormat [in] A format string for the name of the file.
-*
-* @returns a file handle for writing data. The file should be closed using @ref xnDumpFileClose().
-*/
-XN_C_API XnDumpFile* XN_C_DECL xnDumpFileOpen(const XnChar* strDumpName, const XnChar* strNameFormat, ...);
-
-/**
-* Opens a file for writing dump using some advanced options.
-*
-* You would usually prefer to use @ref xnDumpFileOpen().
-*
-* @param strDumpName [in] Name of the dump mask this file belongs to.
-* @param bForce [in] When TRUE, file will be created even if dump is currently off.
-* @param bSessionDump [in] When TRUE, file will be created with current session timestamp as a prefix to its name.
-* @param strNameFormat [in] A format string for the name of the file.
-*
-* @returns a file handle for writing data. The file should be closed using @ref xnDumpFileClose().
-*/
-XN_C_API XnDumpFile* XN_C_DECL xnDumpFileOpenEx(const XnChar* strDumpName, XnBool bForce, XnBool bSessionDump, const XnChar* strNameFormat, ...);
-
-/**
-* Writes a buffer to a dump file.
-*
-* @param pFile [in] Dump file to write to. A pointer retrieved from @ref xnDumpFileOpen.
-* @param pBuffer [in] Data to be written to file.
-* @param nBufferSize [in] Size of the buffer.
-*/
-XN_C_API void XN_C_DECL _xnDumpFileWriteBuffer(XnDumpFile* pFile, const void* pBuffer, XnUInt32 nBufferSize);
-
-/**
-* Writes a formatted string to a dump file.
-*
-* @param pFile [in] Dump file to write to. A pointer retrieved from @ref xnDumpFileOpen.
-* @param strFormat [in] Format string.
-*
-* NOTE: the total length of the string must not exceed 8 KB. If it does, it will be truncated.
-*/
-XN_C_API void XN_C_DECL _xnDumpFileWriteString(XnDumpFile* pFile, const XnChar* strFormat, ...);
-
-/**
-* Closes a dump file.
-*
-* @param hFile [in] Dump file to close. A pointer retrieved from @ref xnDumpFileOpen.
-*/
-XN_C_API void XN_C_DECL _xnDumpFileClose(XnDumpFile* pFile);
-
-#define xnDumpFileWriteBuffer(pFile, pBuffer, nBufferSize) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileWriteBuffer(pFile, pBuffer, nBufferSize); \
- } \
-
-#define xnDumpFileClose(pFile) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileClose(pFile); \
- pFile = NULL; \
- } \
-
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define xnDumpFileWriteString(pFile, strFormat, ...) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileWriteString(pFile, strFormat, __VA_ARGS__); \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define xnDumpFileWriteString(pFile, strFormat, ...) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileWriteString(pFile, strFormat, ##__VA_ARGS__);\
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define xnDumpFileWriteString(pFile, strFormat, ...) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileWriteString(pFile, strFormat); \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
- #define xnDumpFileWriteString(pFile, strFormat, arg) \
- if ((pFile) != NULL) \
- { \
- _xnDumpFileWriteString(pFile, strFormat,arg); \
- }
-#else
- #error Xiron Log - Unknown VAARGS type!
-#endif
-
-
-//---------------------------------------------------------------------------
-// Backwards Compatibility Stuff
-//---------------------------------------------------------------------------
-
-#ifndef __XN_NO_BC__
-
-#include "XnOS.h"
-
-typedef struct XnDump
-{
- XN_FILE_HANDLE hFile;
-} XnDump;
-
-const XnDump XN_DUMP_CLOSED = { XN_INVALID_FILE_HANDLE };
-
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpInit(XnDump* pDump, const XnChar* csDumpMask, const XnChar* csHeader, const XnChar* csFileNameFormat, ...);
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpForceInit(XnDump* pDump, const XnChar* csHeader, const XnChar* csFileNameFormat, ...);
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpClose(XnDump* pDump);
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpWriteBufferImpl(XnDump dump, const void* pBuffer, XnUInt32 nBufferSize);
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpWriteStringImpl(XnDump dump, const XnChar* csFormat, ...);
-XN_C_API void XN_API_DEPRECATED("Use xnDumpFileX methods instead") XN_C_DECL xnDumpFlush(XnDump dump);
-
-#define xnDumpWriteBuffer(dump, pBuffer, nBufferSize) \
- if (dump.hFile != XN_INVALID_FILE_HANDLE) \
- { \
- xnDumpWriteBufferImpl(dump, pBuffer, nBufferSize); \
- }
-
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define xnDumpWriteString(dump, csFormat, ...) \
- if ((dump).hFile != XN_INVALID_FILE_HANDLE) { \
- xnDumpWriteStringImpl((dump), csFormat, __VA_ARGS__); \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define xnDumpWriteString(dump, csFormat, ...) \
- if ((dump).hFile != XN_INVALID_FILE_HANDLE) { \
- xnDumpWriteStringImpl((dump), csFormat, ##__VA_ARGS__); \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define xnDumpWriteString(dump, csFormat...) \
- if ((dump).hFile != XN_INVALID_FILE_HANDLE) { \
- xnDumpWriteStringImpl((dump), csFormat); \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
- #define xnDumpWriteString(dump, csFormat, arg) \
- if ((dump).hFile != XN_INVALID_FILE_HANDLE) { \
- xnDumpWriteStringImpl((dump), csFormat, arg); \
- }
-#else
- #error Xiron Log - Unknown VAARGS type!
-#endif
-
-#endif // #ifndef __XN_NO_BC__
-
-#endif // __XN_DUMP_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h
deleted file mode 100644
index 0a641dbb..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnDumpWriters.h
+++ /dev/null
@@ -1,127 +0,0 @@
-#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
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEnumerationErrors.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEnumerationErrors.h
deleted file mode 100644
index 4a1d77ce..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEnumerationErrors.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_ENUMERATION_ERRORS_H__
-#define __XN_ENUMERATION_ERRORS_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-/**
- * @ingroup cref
- * @defgroup enum_errors Enumeration Errors
- * This page details functions for managing an Enumeration Errors object.
- *
- * @section enum Enumeration
- *
- * The following code iterates over an enumeration errors object:
- * @code
-for (XnEnumerationErrorsIterator it = xnEnumerationErrorsGetFirst(pList);
- xnEnumerationErrorsIteratorIsValid(it);
- it = xnEnumerationErrorsGetNext(it))
-{
- const XnProductionNodeDescription* pCurrDesc = xnEnumerationErrorsGetCurrentDescription(it);
- XnStatus nCurrError = xnEnumerationErrorsGetCurrentError(it);
- ...
-}
- * @endcode
- * @{
- */
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
- * Represents an iterator for an @ref XnEnumerationErrors object.
- */
-typedef struct XnModuleError* XnEnumerationErrorsIterator;
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-
-/**
- * Allocates an enumeration errors object.
- *
- * @param ppErrors [out] The allocated object
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerationErrorsAllocate(XnEnumerationErrors** ppErrors);
-
-/**
- * Frees an enumeration errors object
- *
- * @param pErrors [in] Parameter description
- */
-XN_C_API void XN_C_DECL xnEnumerationErrorsFree(const XnEnumerationErrors* pErrors);
-
-/**
- * Adds an error to the object.
- *
- * @param pErrors [in] Enumeration Errors object.
- * @param pDesc [in] Description of the failing module.
- * @param nError [in] The enumeration error that occurred.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerationErrorsAdd(XnEnumerationErrors* pErrors, const XnProductionNodeDescription* pDesc, XnStatus nError);
-
-/**
- * Returns a string representation of the Enumeration Errors object.
- *
- * @param pErrors [in] Enumeration Errors object.
- * @param csBuffer [in] A char buffer to be filled.
- * @param nSize [in] Size of the char buffer.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerationErrorsToString(const XnEnumerationErrors* pErrors, XnChar* csBuffer, XnUInt32 nSize);
-
-/**
- * Clears an Enumeration Errors object from all errors in it.
- *
- * @param pErrors [in] Enumeration Errors object.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerationErrorsClear(XnEnumerationErrors* pErrors);
-
-/**
- * Gets an iterator to the first error in the object.
- *
- * @param pErrors [in] Enumeration Errors object.
- */
-XN_C_API XnEnumerationErrorsIterator XN_C_DECL xnEnumerationErrorsGetFirst(const XnEnumerationErrors* pErrors);
-
-/**
- * Gets an iterator to the next error in the object.
- *
- * @param it [in] An iterator to an error in the object.
- */
-XN_C_API XnEnumerationErrorsIterator XN_C_DECL xnEnumerationErrorsGetNext(XnEnumerationErrorsIterator it);
-
-/**
- * Checks if an iterator is valid (i.e. points to a real error)
- *
- * @param it [in] The iterator to check.
- */
-XN_C_API XnBool XN_C_DECL xnEnumerationErrorsIteratorIsValid(XnEnumerationErrorsIterator it);
-
-/**
- * Gets the description of the node from current error.
- *
- * @param it [in] The iterator to the error.
- */
-XN_C_API const XnProductionNodeDescription* XN_C_DECL xnEnumerationErrorsGetCurrentDescription(XnEnumerationErrorsIterator it);
-
-/**
- * Gets the enumeration error caused when enumerating the node.
- *
- * @param it [in] The iterator to the error.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerationErrorsGetCurrentError(XnEnumerationErrorsIterator it);
-
-/**
- * @}
- */
-
-#endif // __XN_ENUMERATION_ERRORS_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEvent.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEvent.h
deleted file mode 100644
index f915b6aa..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEvent.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_EVENT_H__
-#define __XN_EVENT_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnCallback.h"
-#include "XnList.h"
-#include "XnTypes.h"
-#include "XnOSCpp.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-class XnEventInterface
-{
-public:
- XnEventInterface() {}
- virtual ~XnEventInterface() {}
-
- typedef XnStatus (XN_CALLBACK_TYPE* HandlerPtr)(void* pCookie);
-
- virtual XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle = NULL) = 0;
- virtual XnStatus Unregister(XnCallbackHandle handle) = 0;
-};
-
-class XnEvent : public XnEventInterface
-{
-public:
- XnEvent() : m_hLock(0)
- {
- xnOSCreateCriticalSection(&m_hLock);
- }
-
- virtual ~XnEvent()
- {
- Clear();
- xnOSCloseCriticalSection(&m_hLock);
- }
-
- XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XN_VALIDATE_INPUT_PTR(pFunc);
-
- XnCallback* pCallback = NULL;
- XN_VALIDATE_NEW(pCallback, XnCallback, (XnFuncPtr)pFunc, pCookie);
-
- // always add to list of added (actual list will be updated in Raise method, to allow registering
- // from a callback).
- {
- XnAutoCSLocker lock(m_hLock);
- nRetVal = m_ToBeAdded.AddLast(pCallback);
- }
-
- if (nRetVal != XN_STATUS_OK)
- {
- XN_DELETE(pCallback);
- return (nRetVal);
- }
-
- // return handle
- if (pHandle != NULL)
- {
- *pHandle = pCallback;
- }
-
- return XN_STATUS_OK;
- }
-
- XnStatus Unregister(XnCallbackHandle handle)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XnCallback* pObject = (XnCallback*)handle;
-
- // add it to a temp list, to allow unregistering from a callback (actual list will be updated in raise
- // function).
- {
- XnAutoCSLocker lock(m_hLock);
-
- // try to remove it from the ToBeAdded list.
- if (!RemoveCallback(m_ToBeAdded, pObject))
- {
- // it's not in this list, so it's probably in the main list
- nRetVal = m_ToBeRemoved.AddLast(pObject);
- }
- }
- XN_IS_STATUS_OK(nRetVal);
-
- return XN_STATUS_OK;
- }
-
- XnStatus Clear()
- {
- ApplyListChanges();
-
- for (XnCallbackPtrList::ConstIterator it = m_Handlers.begin(); it != m_Handlers.end(); ++it)
- {
- XnCallback* pCallback = *it;
- XN_DELETE(pCallback);
- }
-
- m_Handlers.Clear();
- m_ToBeRemoved.Clear();
- m_ToBeAdded.Clear();
- return (XN_STATUS_OK);
- }
-
-protected:
- XnStatus ApplyListChanges()
- {
- // first add all
- for (XnCallbackPtrList::ConstIterator it = m_ToBeAdded.begin(); it != m_ToBeAdded.end(); ++it)
- {
- m_Handlers.AddLast(*it);
- }
- m_ToBeAdded.Clear();
-
- // and now remove
- for (XnCallbackPtrList::ConstIterator it = m_ToBeRemoved.begin(); it != m_ToBeRemoved.end(); ++it)
- {
- XnCallback* pCallback = *it;
- RemoveCallback(m_Handlers, pCallback);
- }
- m_ToBeRemoved.Clear();
-
- return (XN_STATUS_OK);
- }
-
-#if (XN_PLATFORM == XN_PLATFORM_WIN32)
-#pragma warning (push)
-#pragma warning (disable: 4127)
-#endif
-
- XN_DECLARE_LIST(XnCallback*, XnCallbackPtrList)
-
-#if (XN_PLATFORM == XN_PLATFORM_WIN32)
-#pragma warning (pop)
-#endif
-
- XN_CRITICAL_SECTION_HANDLE m_hLock;
- XnCallbackPtrList m_Handlers;
- XnCallbackPtrList m_ToBeAdded;
- XnCallbackPtrList m_ToBeRemoved;
-
-private:
- XnBool RemoveCallback(XnCallbackPtrList& list, XnCallback* pCallback)
- {
- XnCallbackPtrList::Iterator handlerIt = list.Find(pCallback);
- if (handlerIt != list.end())
- {
- list.Remove(handlerIt);
- XN_DELETE(pCallback);
- return TRUE;
- }
-
- return FALSE;
- }
-};
-
-#define _XN_RAISE_WITH_RET_CODE(args) \
- { \
- XnStatus nRetVal = pFunc(args pCallback->pCookie); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- XnEvent::ApplyListChanges(); \
- return (nRetVal); \
- } \
- }
-
-#define _XN_RAISE_NO_RET_CODE(args) \
- pFunc(args pCallback->pCookie);
-
-/**
-* Declares a class inheriting from XnEvent, that can be used as an event with specific signature.
-* It is highly recommended not to use this macro directly.
-*/
-#define _XN_DECLARE_EVENT_CLASS(_class, _interface, _retVal, _raise, _signature, _raise_sign) \
- XN_PRAGMA_START_DISABLED_WARNING_SECTION(XN_HIDES_PARENT_METHOD_WARNING_ID) \
- class _interface : protected XnEvent \
- { \
- public: \
- typedef _retVal (XN_CALLBACK_TYPE* HandlerPtr)(_signature); \
- virtual XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle = NULL) = 0; \
- virtual XnStatus Unregister(XnCallbackHandle handle) = 0; \
- }; \
- class _class : public _interface \
- { \
- public: \
- XnStatus Register(HandlerPtr pFunc, void* pCookie, XnCallbackHandle* pHandle = NULL) \
- { \
- return XnEvent::Register((XnEvent::HandlerPtr)pFunc, pCookie, pHandle); \
- } \
- XnStatus Unregister(XnCallbackHandle handle) \
- { \
- return XnEvent::Unregister(handle); \
- } \
- XnStatus Raise(_raise_sign) \
- { \
- XnAutoCSLocker lock(m_hLock); \
- XnEvent::ApplyListChanges(); \
- XnEvent::XnCallbackPtrList::Iterator it = XnEvent::m_Handlers.begin(); \
- for (; it != XnEvent::m_Handlers.end(); ++it) \
- { \
- XnCallback* pCallback = *it; \
- HandlerPtr pFunc = (HandlerPtr)pCallback->pFuncPtr; \
- _raise \
- } \
- XnEvent::ApplyListChanges(); \
- return (XN_STATUS_OK); \
- } \
- XnStatus Clear() { return XnEvent::Clear(); } \
- }; \
- XN_PRAGMA_STOP_DISABLED_WARNING_SECTION
-
-
-#define _XN_SIGNATURE_0ARG()
-#define _XN_FULL_SIGNATURE_0ARG() void* pCookie
-#define _XN_ARGS_0ARG()
-
-#define _XN_SIGNATURE_1ARG(_type1, _name1) _type1 _name1
-#define _XN_FULL_SIGNATURE_1ARG(_type1, _name1) _type1 _name1, void* pCookie
-#define _XN_ARGS_1ARG(_name1) _name1,
-
-#define _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2) _type1 _name1, _type2 _name2
-#define _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2) _type1 _name1, _type2 _name2, void* pCookie
-#define _XN_ARGS_2ARG(_name1, _name2) _name1, _name2,
-
-#define _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3) _type1 _name1, _type2 _name2, _type3 _name3
-#define _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3) _type1 _name1, _type2 _name2, _type3 _name3, void* pCookie
-#define _XN_ARGS_3ARG(_name1, _name2, _name3) _name1, _name2, _name3,
-
-#define _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4
-#define _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, void* pCookie
-#define _XN_ARGS_4ARG(_name1, _name2, _name3, _name4) _name1, _name2, _name3, _name4,
-
-#define _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, _type5 _name5
-#define _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) _type1 _name1, _type2 _name2, _type3 _name3, _type4 _name4, _type5 _name5, void* pCookie
-#define _XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5) _name1, _name2, _name3, _name4, _name5,
-
-/** Declares an event class */
-#define XN_DECLARE_EVENT_0ARG(_class, _interface) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_0ARG()), _XN_FULL_SIGNATURE_0ARG(), _XN_SIGNATURE_0ARG())
-
-#define XN_DECLARE_EVENT_0ARG_RETVAL(_class, _interface) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_0ARG()), _XN_FULL_SIGNATURE_0ARG(), _XN_SIGNATURE_0ARG())
-
-#define XN_DECLARE_EVENT_1ARG(_class, _interface, _type1, _name1) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_1ARG(_name1)), _XN_FULL_SIGNATURE_1ARG(_type1, _name1), _XN_SIGNATURE_1ARG(_type1, _name1))
-
-#define XN_DECLARE_EVENT_1ARG_RETVAL(_class, _interface, _type1, _name1) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_1ARG(_name1)), _XN_FULL_SIGNATURE_1ARG(_type1, _name1), _XN_SIGNATURE_1ARG(_type1, _name1))
-
-#define XN_DECLARE_EVENT_2ARG(_class, _interface, _type1, _name1, _type2, _name2) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_2ARG(_name1, _name2)), _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2), _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2))
-
-#define XN_DECLARE_EVENT_2ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_2ARG(_name1, _name2)), _XN_FULL_SIGNATURE_2ARG(_type1, _name1, _type2, _name2), _XN_SIGNATURE_2ARG(_type1, _name1, _type2, _name2))
-
-#define XN_DECLARE_EVENT_3ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_3ARG(_name1, _name2, _name3)), _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3), _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3))
-
-#define XN_DECLARE_EVENT_3ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_3ARG(_name1, _name2, _name3)), _XN_FULL_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3), _XN_SIGNATURE_3ARG(_type1, _name1, _type2, _name2, _type3, _name3))
-
-#define XN_DECLARE_EVENT_4ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_4ARG(_name1, _name2, _name3, _name4)), _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4), _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4))
-
-#define XN_DECLARE_EVENT_4ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_4ARG(_name1, _name2, _name3, _name4)), _XN_FULL_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4), _XN_SIGNATURE_4ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4))
-
-#define XN_DECLARE_EVENT_5ARG(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, void, _XN_RAISE_NO_RET_CODE(_XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5)), _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5), _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5))
-
-#define XN_DECLARE_EVENT_5ARG_RETVAL(_class, _interface, _type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5) \
- _XN_DECLARE_EVENT_CLASS(_class, _interface, XnStatus, _XN_RAISE_WITH_RET_CODE(_XN_ARGS_5ARG(_name1, _name2, _name3, _name4, _name5)), _XN_FULL_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5), _XN_SIGNATURE_5ARG(_type1, _name1, _type2, _name2, _type3, _name3, _type4, _name4, _type5, _name5))
-
-#endif //__XN_EVENT_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEventT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEventT.h
deleted file mode 100644
index f0b6379d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnEventT.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_EVENT_T_H_
-#define _XN_EVENT_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnOSCpp.h"
-#include "XnListT.h"
-#include "XnTypes.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-/**
-* A struct for holding a callback function with its cookie
-*
-* @tparam FuncPtr The callback signature
-*/
-template<typename FuncPtr>
-struct XnCallbackT
-{
- XnCallbackT(FuncPtr func, void* cookie) : pFunc(func), pCookie(cookie) {}
-
- FuncPtr pFunc;
- void* pCookie;
-};
-
-/**
-* A class that contains the interface of an event (i.e. Register and Unregister)
-*
-* @tparam FuncPtr The callback signature
-*/
-template<typename FuncPtr>
-class XnEventInterfaceT
-{
-public:
- typedef FuncPtr HandlerPtr;
- typedef XnCallbackT<FuncPtr> TCallback;
- typedef XnEventInterfaceT TInterface;
-
- ~XnEventInterfaceT()
- {
- Clear();
- xnOSCloseCriticalSection(&m_hLock);
- }
-
- XnStatus Register(FuncPtr pFunc, void* pCookie, XnCallbackHandle& hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- XN_VALIDATE_INPUT_PTR(pFunc);
-
- TCallback* pCallback = NULL;
- XN_VALIDATE_NEW(pCallback, TCallback, pFunc, pCookie);
-
- // always add to list of added (actual list will be updated in Raise method, to allow registering
- // from a callback).
- {
- XnAutoCSLocker locker(m_hLock);
- nRetVal = m_toAdd.AddLast(pCallback);
- }
-
- if (nRetVal != XN_STATUS_OK)
- {
- XN_DELETE(pCallback);
- return nRetVal;
- }
-
- // return handle
- hCallback = (XnCallbackHandle)pCallback;
-
- return XN_STATUS_OK;
- }
-
- XnStatus Unregister(XnCallbackHandle hCallback)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- TCallback* pCallback = (TCallback*)hCallback;
-
- // add it to a temp list, to allow unregistering from a callback (actual list will be updated in raise
- // function).
- {
- XnAutoCSLocker locker(m_hLock);
-
- // try to remove it from the ToBeAdded list.
- if (!RemoveCallback(m_toAdd, pCallback))
- {
- // it's not in this list, so it's probably in the main list
- nRetVal = m_toRemove.AddLast(pCallback);
- }
- }
- XN_IS_STATUS_OK(nRetVal);
-
- return XN_STATUS_OK;
- }
-
-protected:
- typedef XnListT<TCallback*> CallbackPtrList;
-
- // Constructors are protected, so that this class cannot be instantiated directly.
- XnEventInterfaceT()
- {
- Init();
- }
-
- XnEventInterfaceT(const XnEventInterfaceT& other)
- {
- Init();
- *this = other;
- }
-
- XnEventInterfaceT& operator=(const XnEventInterfaceT& other)
- {
- Clear();
-
- // lock other one (so it won't change while being copied)
- XnAutoCSLocker otherLocker(other.m_hLock);
- // lock this one (we're making changes)
- XnAutoCSLocker locker(m_hLock);
-
- m_callbacks = other.m_callbacks;
- m_toAdd = other.m_toAdd;
- m_toRemove = other.m_toRemove;
-
- ApplyListChanges();
-
- return *this;
- }
-
- XnStatus Clear()
- {
- XnAutoCSLocker locker(m_hLock);
- ApplyListChanges();
-
- for (typename CallbackPtrList::ConstIterator it = m_callbacks.Begin(); it != m_callbacks.End(); ++it)
- {
- TCallback* pCallback = *it;
- XN_DELETE(pCallback);
- }
-
- m_callbacks.Clear();
- m_toRemove.Clear();
- m_toAdd.Clear();
- return (XN_STATUS_OK);
- }
-
- XnStatus ApplyListChanges()
- {
- XnAutoCSLocker locker(m_hLock);
-
- // first add all
- for (typename CallbackPtrList::ConstIterator it = m_toAdd.Begin(); it != m_toAdd.End(); ++it)
- {
- m_callbacks.AddLast(*it);
- }
- m_toAdd.Clear();
-
- // and now remove
- for (typename CallbackPtrList::ConstIterator it = m_toRemove.Begin(); it != m_toRemove.End(); ++it)
- {
- TCallback* pCallback = *it;
- RemoveCallback(m_callbacks, pCallback);
- }
- m_toRemove.Clear();
-
- return (XN_STATUS_OK);
- }
-
- XnBool RemoveCallback(CallbackPtrList& list, TCallback* pCallback)
- {
- typename CallbackPtrList::Iterator it = list.Find(pCallback);
- if (it != list.End())
- {
- list.Remove(it);
- XN_DELETE(pCallback);
- return TRUE;
- }
-
- return FALSE;
- }
-
- XN_CRITICAL_SECTION_HANDLE m_hLock;
- CallbackPtrList m_callbacks;
- CallbackPtrList m_toAdd;
- CallbackPtrList m_toRemove;
-
-private:
- void Init()
- {
- m_hLock = NULL;
- XnStatus nRetVal = xnOSCreateCriticalSection(&m_hLock);
- if (nRetVal != XN_STATUS_OK)
- {
- XN_ASSERT(FALSE);
- }
- }
-};
-
-// Handlers
-struct XnHandlerFuncNoArgs
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(void* pCookie);
-};
-
-template<class TArg1>
-struct XnHandlerFunc1Arg
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(TArg1 arg1, void* pCookie);
-};
-
-template<class TArg1, class TArg2>
-struct XnHandlerFunc2Args
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(TArg1 arg1, TArg2 arg2, void* pCookie);
-};
-
-template<class TArg1, class TArg2, class TArg3>
-struct XnHandlerFunc3Args
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(TArg1 arg1, TArg2 arg2, TArg3 arg3, void* pCookie);
-};
-
-template<class TArg1, class TArg2, class TArg3, class TArg4>
-struct XnHandlerFunc4Args
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, void* pCookie);
-};
-
-template<class TArg1, class TArg2, class TArg3, class TArg4, class TArg5>
-struct XnHandlerFunc5Args
-{
- typedef void (XN_CALLBACK_TYPE* FuncPtr)(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, void* pCookie);
-};
-
-// Event classes (there's a class per number of arguments)
-class XnEventNoArgs : public XnEventInterfaceT<XnHandlerFuncNoArgs::FuncPtr>
-{
-public:
- XnStatus Raise()
- {
- XnAutoCSLocker locker(this->m_hLock);
- ApplyListChanges();
-
- for (CallbackPtrList::ConstIterator it = m_callbacks.Begin(); it != m_callbacks.End(); ++it)
- {
- TCallback* pCallback = *it;
- pCallback->pFunc(pCallback->pCookie);
- }
-
- ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-
-template<class TArg1>
-class XnEvent1Arg : public XnEventInterfaceT<typename XnHandlerFunc1Arg<TArg1>::FuncPtr>
-{
- typedef XnEventInterfaceT<typename XnHandlerFunc1Arg<TArg1>::FuncPtr> Base;
-
-public:
- XnStatus Raise(TArg1 arg)
- {
- XnAutoCSLocker locker(this->m_hLock);
- this->ApplyListChanges();
-
- for (typename Base::CallbackPtrList::ConstIterator it = this->m_callbacks.Begin(); it != this->m_callbacks.End(); ++it)
- {
- typename Base::TCallback* pCallback = *it;
- pCallback->pFunc(arg, pCallback->pCookie);
- }
-
- this->ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-template<class TEventArgs>
-class XnEventT : public XnEvent1Arg<const TEventArgs&>
-{};
-
-template<class TArg1, class TArg2>
-class XnEvent2Args : public XnEventInterfaceT<typename XnHandlerFunc2Args<TArg1, TArg2>::FuncPtr>
-{
- typedef XnEventInterfaceT<typename XnHandlerFunc2Args<TArg1, TArg2>::FuncPtr> Base;
-
-public:
- XnStatus Raise(TArg1 arg1, TArg2 arg2)
- {
- XnAutoCSLocker locker(this->m_hLock);
- this->ApplyListChanges();
-
- for (typename Base::CallbackPtrList::ConstIterator it = this->m_callbacks.Begin(); it != this->m_callbacks.End(); ++it)
- {
- typename Base::TCallback* pCallback = *it;
- pCallback->pFunc(arg1, arg2, pCallback->pCookie);
- }
-
- this->ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-template<class TArg1, class TArg2, class TArg3>
-class XnEvent3Args : public XnEventInterfaceT<typename XnHandlerFunc3Args<TArg1, TArg2, TArg3>::FuncPtr>
-{
- typedef XnEventInterfaceT<typename XnHandlerFunc3Args<TArg1, TArg2, TArg3>::FuncPtr> Base;
-
-public:
- XnStatus Raise(TArg1 arg1, TArg2 arg2, TArg3 arg3)
- {
- XnAutoCSLocker locker(this->m_hLock);
- this->ApplyListChanges();
-
- for (typename Base::CallbackPtrList::ConstIterator it = this->m_callbacks.Begin(); it != this->m_callbacks.End(); ++it)
- {
- typename Base::TCallback* pCallback = *it;
- pCallback->pFunc(arg1, arg2, arg3, pCallback->pCookie);
- }
-
- this->ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-template<class TArg1, class TArg2, class TArg3, class TArg4>
-class XnEvent4Args : public XnEventInterfaceT<typename XnHandlerFunc4Args<TArg1, TArg2, TArg3, TArg4>::FuncPtr>
-{
- typedef XnEventInterfaceT<typename XnHandlerFunc4Args<TArg1, TArg2, TArg3, TArg4>::FuncPtr> Base;
-
-public:
- XnStatus Raise(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4)
- {
- XnAutoCSLocker locker(this->m_hLock);
- this->ApplyListChanges();
-
- for (typename Base::CallbackPtrList::ConstIterator it = this->m_callbacks.Begin(); it != this->m_callbacks.End(); ++it)
- {
- typename Base::TCallback* pCallback = *it;
- pCallback->pFunc(arg1, arg2, arg3, arg4, pCallback->pCookie);
- }
-
- this->ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-template<class TArg1, class TArg2, class TArg3, class TArg4, class TArg5>
-class XnEvent5Args : public XnEventInterfaceT<typename XnHandlerFunc5Args<TArg1, TArg2, TArg3, TArg4, TArg5>::FuncPtr>
-{
- typedef XnEventInterfaceT<typename XnHandlerFunc5Args<TArg1, TArg2, TArg3, TArg4, TArg5>::FuncPtr> Base;
-
-public:
- XnStatus Raise(TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5)
- {
- XnAutoCSLocker locker(this->m_hLock);
- this->ApplyListChanges();
-
- for (typename Base::CallbackPtrList::ConstIterator it = this->m_callbacks.Begin(); it != this->m_callbacks.End(); ++it)
- {
- typename Base::TCallback* pCallback = *it;
- pCallback->pFunc(arg1, arg2, arg3, arg4, arg5, pCallback->pCookie);
- }
-
- this->ApplyListChanges();
- return (XN_STATUS_OK);
- }
-};
-
-#endif // _XN_EVENT_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnFPSCalculator.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnFPSCalculator.h
deleted file mode 100644
index 036694b7..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnFPSCalculator.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_FPS_CALCULATOR_H__
-#define __XN_FPS_CALCULATOR_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnPlatform.h>
-#include <XnStatus.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-struct XnFPSDataImpl;
-typedef struct XnFPSDataImpl* XnFPSData;
-
-//---------------------------------------------------------------------------
-// Exported Functions
-//---------------------------------------------------------------------------
-/**
-* This function initializes the FPS calculator.
-*
-* @param pFPS [in] A pointer to an XnFPSData struct.
-* @param nSamplesCount [in] The number of last frames to be kept.
-*/
-XN_C_API XnStatus XN_C_DECL xnFPSInit(XnFPSData* pFPS, XnUInt32 nSamplesCount);
-
-/**
-* This function marks that another frame was processed.
-*
-* @param pFPS [in] A pointer to an XnFPSData struct.
-* @param nNow [in] Optional. Current time. When not provided, function will take it itself.
-*/
-XN_C_API XnStatus XN_C_DECL xnFPSMarkFrame(XnFPSData* pFPS, XnUInt64 nNow = 0);
-
-/**
-* This function calculates the average FPS over the last frames.
-*
-* @param pFPS [in] A pointer to an XnFPSData struct.
-* @param nAverageOver [in] The number of milliseconds to average over.
-* @param nNow [in] Optional. Current time. When not provided, function will take it itself.
-*/
-XN_C_API XnDouble XN_C_DECL xnFPSCalc(XnFPSData* pFPS, XnUInt32 nAverageOver = 3000, XnUInt64 nNow = 0);
-
-/**
-* This function frees the FPS calculator.
-*
-* @param pFPS [in] A pointer to an XnFPSData struct.
-*/
-XN_C_API XnStatus XN_C_DECL xnFPSFree(XnFPSData* pFPS);
-
-#endif //__XN_FPS_CALCULATOR_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnGeneralBuffer.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnGeneralBuffer.h
deleted file mode 100644
index 4c6b3c77..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnGeneralBuffer.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_GENERAL_BUFFER_H__
-#define __XN_GENERAL_BUFFER_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-#include "XnOS.h"
-#include "XnStatusCodes.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-/* Describes a general buffer. */
-typedef struct XnGeneralBuffer
-{
- /* A pointer to the actual data. */
- void* pData;
- /* The size of the data in bytes. */
- XnUInt32 nDataSize;
-} XnGeneralBuffer;
-
-//---------------------------------------------------------------------------
-// Exported Functions
-//---------------------------------------------------------------------------
-
-/**
-* Packs a pointer and a size into an XnGeneralBuffer struct.
-*/
-inline XnGeneralBuffer XnGeneralBufferPack(void* pData, XnUInt32 nDataSize)
-{
- XnGeneralBuffer result;
- result.pData = pData;
- result.nDataSize = nDataSize;
- return result;
-}
-
-/**
-* Copies one general buffer into another.
-*/
-inline XnStatus XnGeneralBufferCopy(XnGeneralBuffer* pDest, const XnGeneralBuffer* pSrc)
-{
- XN_VALIDATE_INPUT_PTR(pDest);
- XN_VALIDATE_INPUT_PTR(pSrc);
-
- if (pSrc->nDataSize > pDest->nDataSize)
- return XN_STATUS_OUTPUT_BUFFER_OVERFLOW;
-
- xnOSMemCopy(pDest->pData, pSrc->pData, pSrc->nDataSize);
- pDest->nDataSize = pSrc->nDataSize;
- return XN_STATUS_OK;
-}
-
-inline XnStatus XnGeneralBufferAlloc(XnGeneralBuffer* pDest, XnUInt32 nSize)
-{
- XN_VALIDATE_INPUT_PTR(pDest);
-
- void* pData;
- pData = xnOSMalloc(nSize);
- XN_VALIDATE_ALLOC_PTR(pData);
-
- pDest->pData = pData;
- pDest->nDataSize = nSize;
- return XN_STATUS_OK;
-}
-
-inline XnStatus XnGeneralBufferRealloc(XnGeneralBuffer* pDest, XnUInt32 nSize)
-{
- XN_VALIDATE_INPUT_PTR(pDest);
-
- void* pData;
- pData = xnOSRealloc(pDest, nSize);
- XN_VALIDATE_ALLOC_PTR(pData);
-
- pDest->pData = pData;
- pDest->nDataSize = nSize;
- return XN_STATUS_OK;
-}
-
-inline void XnGeneralBufferFree(XnGeneralBuffer* pDest)
-{
- XN_FREE_AND_NULL(pDest->pData);
- pDest->nDataSize = 0;
-}
-
-//---------------------------------------------------------------------------
-// Helper Macros
-//---------------------------------------------------------------------------
-#define XN_PACK_GENERAL_BUFFER(x) XnGeneralBufferPack(&x, sizeof(x))
-
-#define XN_VALIDATE_GENERAL_BUFFER_TYPE(gb, t) \
- if ((gb).nDataSize != sizeof(t)) \
- { \
- return XN_STATUS_INVALID_BUFFER_SIZE; \
- }
-
-#endif //__XN_GENERAL_BUFFER_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHash.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHash.h
deleted file mode 100644
index 7cc719f2..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHash.h
+++ /dev/null
@@ -1,1014 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_HASH_H
-#define _XN_HASH_H
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnList.h"
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_HASH_LAST_BIN 256
-#define XN_HASH_NUM_BINS (XN_HASH_LAST_BIN + 1)
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
-* The key to the hash
-*/
-typedef XnValue XnKey;
-
-/**
-* The hash value - the output of the hash function
-*/
-typedef XnUInt8 XnHashValue;
-
-/**
-* Default Hash function
-*/
-static XnHashValue XnDefaultHashFunction(const XnKey& key)
-{
- return (XnSizeT(key) & 0xff);
-}
-
-/**
-* Default Compare function
-*/
-static XnInt32 XnDefaultCompareFunction(const XnKey& key1, const XnKey& key2)
-{
- return XnInt32(XnSizeT(key1)-XnSizeT(key2));
-}
-
-/**
- * The hash - associative array
- */
-class XnHash
-{
-public:
- /**
- * Iterator to the XnHash
- */
- class ConstIterator
- {
- public:
- friend class XnHash;
-
- /**
- * Copy constructor
- *
- * @param other [in] instance to copy from
- */
- ConstIterator(const ConstIterator& other) :
- m_pHash(other.m_pHash), m_nCurrentBin(other.m_nCurrentBin), m_Iterator(other.m_Iterator) {}
-
- /**
- * Support ++iterator, go to the next object in the hash
- */
- ConstIterator& operator++()
- {
- ++m_Iterator;
-
- while (m_Iterator == m_pHash->m_Bins[m_nCurrentBin]->end() &&
- m_Iterator != m_pHash->m_Bins[XN_HASH_LAST_BIN]->end())
- {
- do
- {
- m_nCurrentBin++;
- } while (m_pHash->m_Bins[m_nCurrentBin] == NULL);
- m_Iterator = m_pHash->m_Bins[m_nCurrentBin]->begin();
- }
- return *this;
- }
-
- /**
- * Support iterator++, go to the next object in the hash, returning the old value
- */
- ConstIterator operator++(int)
- {
- XnHash::ConstIterator other(*this);
- ++*this;
- return other;
- }
-
- /**
- * Support --iterator, go to the previous object in the hash
- */
- ConstIterator& operator--()
- {
- --m_Iterator;
-
- while (m_Iterator == m_pHash->m_Bins[m_nCurrentBin]->end() &&
- m_Iterator != m_pHash->m_Bins[XN_HASH_LAST_BIN]->end())
- {
- do
- {
- if (m_nCurrentBin == 0)
- {
- m_nCurrentBin = XN_HASH_LAST_BIN;
- m_Iterator = m_pHash->m_Bins[XN_HASH_LAST_BIN]->end();
- return *this;
- }
- m_nCurrentBin--;
- } while (m_pHash->m_Bins[m_nCurrentBin] == NULL);
- m_Iterator = m_pHash->m_Bins[m_nCurrentBin]->rbegin();
- }
- return *this;
- }
-
- /**
- * Support iterator--, go to the previous object in the hash, returning the old value
- */
- ConstIterator operator--(int)
- {
- ConstIterator other(*this);
- --*this;
- return other;
- }
-
- /**
- * Operator to check if 2 iterators point to the same object
- *
- * @param other [in] instance to compare with
- */
- XnBool operator==(const ConstIterator& other) const
- {
- return m_Iterator == other.m_Iterator;
- }
-
- /**
- * Operator to check if 2 iterators point to different objects
- *
- * @param other [in] instance to compare with
- */
- XnBool operator!=(const ConstIterator& other) const
- {
- return m_Iterator != other.m_Iterator;
- }
-
- /**
- * Get the key of the current object (const version)
- */
- const XnKey& Key() const
- {
- return ((XnNode*)(*m_Iterator))->Data();
- }
-
- /**
- * Get the value of the current object (const version)
- */
- const XnValue& Value() const
- {
- return ((XnNode*)(*m_Iterator))->Next()->Data();
- }
-
- /**
- * Get the entire current object (non-const version)
- */
- XnNode* GetNode()
- {
- return m_Iterator.GetNode();
- }
-
- /**
- * Get the entire current object (const version)
- */
- const XnNode* GetNode() const
- {
- return m_Iterator.GetNode();
- }
-
- protected:
- /**
- * constructor to be used from inside the XnHash
- *
- * @param pHash [in] The hash to which the iterator belongs
- * @param nBin [in] The bin of the current object
- * @param listIterator [in] Iterator on the bin (each bin is a XnList)
- */
- ConstIterator(const XnHash* pHash, XnUInt16 nBin, XnList::Iterator listIterator) :
- m_pHash(pHash), m_nCurrentBin(nBin), m_Iterator(listIterator)
- {
- // Find the first valid
- while (m_Iterator == m_pHash->m_Bins[m_nCurrentBin]->end() &&
- m_Iterator != m_pHash->m_Bins[XN_HASH_LAST_BIN]->end())
- {
- do
- {
- m_nCurrentBin++;
- } while (m_pHash->m_Bins[m_nCurrentBin] == NULL);
- m_Iterator = m_pHash->m_Bins[m_nCurrentBin]->begin();
- }
- }
-
- /**
- * constructor to be used from inside the XnHash. It points to the first value in the hash.
- *
- * @param pHash [in] The hash to which the iterator belongs
- */
- ConstIterator(const XnHash* pHash) :
- m_pHash(pHash), m_nCurrentBin(0), m_Iterator(m_pHash->m_Bins[XN_HASH_LAST_BIN]->end()) {}
-
- /** The hash to which the iterator belongs */
- const XnHash* m_pHash;
- /** The bin of the current object */
- XnUInt16 m_nCurrentBin;
- /** Iterator for the specific bin */
- XnList::Iterator m_Iterator;
- };
-
- /**
- * Iterator to the XnHash
- */
- class Iterator : public ConstIterator
- {
- public:
- friend class XnHash;
-
- /**
- * Copy constructor
- *
- * @param other [in] instance to copy from
- */
- inline Iterator(const Iterator& other) : ConstIterator(other) {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- inline Iterator& operator++()
- {
- ++(*(ConstIterator*)this);
- return (*this);
- }
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline Iterator operator++(int)
- {
- Iterator result = *this;
- ++*this;
- return (result);
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline Iterator& operator--()
- {
- --(*(ConstIterator*)this);
- return (*this);
- }
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline Iterator operator--(int)
- {
- Iterator result = *this;
- --*this;
- return (result);
- }
-
- /**
- * Get the key of the current object (const version)
- */
- XnKey& Key() const { return (XnKey&)ConstIterator::Key(); }
-
- /**
- * Get the value of the current object (const version)
- */
- XnValue& Value() const { return (XnValue&)ConstIterator::Value(); }
-
- protected:
- /**
- * constructor to be used from inside the XnHash
- *
- * @param pHash [in] The hash to which the iterator belongs
- * @param nBin [in] The bin of the current object
- * @param listIterator [in] Iterator on the bin (each bin is a XnList)
- */
- Iterator(const XnHash* pHash, XnUInt16 nBin, XnList::Iterator listIterator) :
- ConstIterator(pHash, nBin, listIterator)
- {}
-
- /**
- * constructor to be used from inside the XnHash. It points to the first value in the hash.
- *
- * @param pHash [in] The hash to which the iterator belongs
- */
- Iterator(const XnHash* pHash) : ConstIterator(pHash) {}
-
- Iterator(const ConstIterator& other) : ConstIterator(other) {}
- };
-
- friend class ConstIterator;
-
-public:
- /**
- * Definition of a hash function - receive key, and outputs HashValue
- */
- typedef XnHashValue (*XnHashFunction)(const XnKey& key);
- /**
- * Definition of comparison function - receives 2 keys, returns 0 on equality
- */
- typedef XnInt32 (*XnCompareFunction)(const XnKey& key1, const XnKey& key2);
-
- /**
- * Constructor. Initializes internal representations.
- */
- XnHash()
- {
- m_nInitStatus = Init();
- }
-
- /**
- * Destructor. Destroys internal representations.
- */
- virtual ~XnHash()
- {
- if (m_Bins != NULL)
- {
- for (int i = 0; i < XN_HASH_NUM_BINS; ++i)
- {
- XN_DELETE(m_Bins[i]);
- }
- XN_DELETE_ARR(m_Bins);
- }
- }
-
- /**
- * Returns the status of the initialization of the hash.
- * @returns XN_STATUS_OK if the hash was initialized successfully, or an error code otherwise
- * (e.g. if memory could not be allocated).
- */
- XnStatus GetInitStatus() const
- {
- return m_nInitStatus;
- }
-
- /**
- * Set a new key-value entry. If key exists, will replace value.
- *
- * @param key [in] The key to which to associate the value
- * @param value [in] The value to add to the XnHash
- */
- XnStatus Set(const XnKey& key, const XnValue& value)
- {
- XnHashValue HashValue = (*m_HashFunction)(key);
-
- // Check if key already exists
- if (m_Bins[HashValue] != NULL)
- {
- Iterator hiter(this);
- if (Find(key, HashValue, hiter) == XN_STATUS_OK)
- {
- // Replace value
- hiter.Value() = value;
- return XN_STATUS_OK;
- }
- }
- else
- {
- // First time trying to access this bin, create it.
- m_Bins[HashValue] = XN_NEW(XnList);
- if (m_Bins[HashValue] == NULL)
- {
- return XN_STATUS_ALLOC_FAILED;
- }
- if (HashValue < m_nMinBin)
- m_nMinBin = HashValue;
- }
-
- // Get a new node for the key
- XnNode* pKeyNode = XnNode::Allocate();
- if (pKeyNode == NULL)
- {
- return XN_STATUS_ALLOC_FAILED;
- }
- pKeyNode->Data() = key;
-
- // Get a new node for the value
- XnNode* pValueNode = XnNode::Allocate();
- if (pValueNode == NULL)
- {
- XnNode::Deallocate(pKeyNode);
- return XN_STATUS_ALLOC_FAILED;
- }
- pValueNode->Data() = value;
-
- // Concatenate the value node to the key node
- pKeyNode->Next() = pValueNode;
- pValueNode->Next() = NULL;
-
- // Add the 2 nodes as the value to the key's list
- XnStatus ListStatus = m_Bins[HashValue]->AddLast(XnValue(pKeyNode));
- if (ListStatus != XN_STATUS_OK)
- {
- // Add failed. return the 2 nodes to the pool
- XnNode::Deallocate(pKeyNode);
- XnNode::Deallocate(pValueNode);
- return ListStatus;
- }
-
- return XN_STATUS_OK;
- }
-
- /**
- * Get the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param value [out] The retrieved value
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(const XnKey& key, XnValue& value) const
- {
- // Check if key exists
- Iterator hiter(this);
- XnStatus FindStatus = Find(key, hiter);
- if (FindStatus != XN_STATUS_OK)
- {
- // Key doesn't exist!
- return FindStatus;
- }
- value = hiter.Value();
-
- return XN_STATUS_OK;
- }
-
- /**
- * Remove a key-value entry from the XnHash
- *
- * @param key [in] The key of the entry
- * @param value [out] The value that was in the removed entry
-
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Remove(const XnKey& key, XnValue& value)
- {
- // find the entry to which the key belongs
- Iterator hiter(this);
-
- XnStatus FindStatus = Find(key, hiter);
- if (FindStatus != XN_STATUS_OK)
- {
- // no such entry!
- return FindStatus;
- }
-
- // Remove by iterator
- value = hiter.Value();
- return Remove(hiter);
- }
-
- /**
- * Remove an entry from the XnHash by iterator
- *
- * @param iter [in] Iterator pointing to an entry in the hash
- * @param key [out] The key that was in the removed entry
- * @param value [out] The value that was in the removed entry
- *
- * @return XN_STATUS_ILLEGAL_POSITION if iterator is invalid
- */
- XnStatus Remove(ConstIterator iter, XnKey& key, XnValue& value)
- {
- if (iter == end())
- {
- // Can't remove invalid node
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- // Get value and key, to return to the caller
- value = iter.Value();
- key = iter.Key();
-
- return Remove(iter);
- }
-
- /**
- * Remove an entry from the XnHash by iterator
- *
- * @param iter [in] Iterator pointing to an entry in the hash
- *
- * @return XN_STATUS_ILLEGAL_POSITION if iterator is invalid
- */
- virtual XnStatus Remove(ConstIterator iter)
- {
- if (iter == end())
- {
- // Can't remove invalid node
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- XnNode* pNode = iter.GetNode();
-
- XnNode* pKeyNode = (XnNode*)(pNode->Data());
- XnNode* pValueNode = pKeyNode->Next();
-
- // Return the nodes to the pool
- XnNode::Deallocate(pKeyNode);
- XnNode::Deallocate(pValueNode);
-
- pNode->Previous()->Next() = pNode->Next();
- pNode->Next()->Previous() = pNode->Previous();
-
- XnNode::Deallocate(pNode);
-
- return XN_STATUS_OK;
- }
-
-
- /**
- * Remove all entries from the XnHash.
- */
- XnStatus Clear()
- {
- while (begin() != end())
- Remove(begin());
-
- return XN_STATUS_OK;
- }
-
- /**
- * Checks if hash is empty.
- */
- XnBool IsEmpty() const
- {
- return (begin() == end());
- }
-
- /**
- * Gets the number of entries in the hash.
- */
- XnUInt32 Size() const
- {
- XnUInt32 nSize = 0;
- for (Iterator iter = begin(); iter != end(); ++iter, ++nSize)
- ;
-
- return nSize;
- }
-
- /**
- * Get an iterator pointing to the entry to which the key belongs
- *
- * @param key [in] The key of the entry
- * @param hiter [out] Iterator to the entry described by key
- *
- * @return XN_STATUS_NO_MATCH No such key in the XnHash
- */
- XnStatus Find(const XnKey& key, ConstIterator& hiter) const
- {
- return ConstFind(key, hiter);
- }
-
- /**
- * Get an iterator pointing to the entry to which the key belongs
- *
- * @param key [in] The key of the entry
- * @param hiter [out] Iterator to the entry described by key
- *
- * @return XN_STATUS_NO_MATCH No such key in the XnHash
- */
- XnStatus Find(const XnKey& key, Iterator& hiter)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- ConstIterator& it = hiter;
- nRetVal = ConstFind(key, it);
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
-
- /**
- * Get an iterator to the beginning of the XnHash (non-const version)
- */
- Iterator begin()
- {
- return Iterator(this, m_nMinBin, m_Bins[m_nMinBin]->begin());
- }
-
- /**
- * Get an iterator to the beginning of the XnHash (const version)
- */
- ConstIterator begin() const
- {
- return ConstIterator(this, m_nMinBin, m_Bins[m_nMinBin]->begin());
- }
-
- /**
- * Get an iterator to the end of the XnHash (position is invalid) (non-const version)
- */
- Iterator end()
- {
- return Iterator(this, XN_HASH_LAST_BIN, m_Bins[XN_HASH_LAST_BIN]->end());
- }
-
- /**
- * Get an iterator to the end of the XnHash (position is invalid) (const version)
- */
- ConstIterator end() const
- {
- return ConstIterator(this, XN_HASH_LAST_BIN, m_Bins[XN_HASH_LAST_BIN]->end());
- }
-
- /**
- * Change the hash function. The XnHash must be empty for this to succeed.
- *
- * @param hashFunction [in] The new hash function
- *
- * @return XN_STATUS_IS_NOT_EMPTY if the XnHash isn't empty
- */
- XnStatus SetHashFunction(XnHashFunction hashFunction)
- {
- if (begin() != end())
- {
- return XN_STATUS_IS_NOT_EMPTY;
- }
- m_HashFunction = hashFunction;
- return XN_STATUS_OK;
- }
-
- /**
- * Change the comparison function. The XnHash must be empty for this to succeed.
- *
- * @param compareFunction [in] The new hash function
- *
- * @return XN_STATUS_IS_NOT_EMPTY if the XnHash isn't empty
- */
- XnStatus SetCompareFunction(XnCompareFunction compareFunction)
- {
- if (begin() != end())
- {
- return XN_STATUS_IS_NOT_EMPTY;
- }
- m_CompareFunction = compareFunction;
- return XN_STATUS_OK;
- }
-
-protected:
-
- XnStatus Init()
- {
- m_Bins = XN_NEW_ARR(XnList*, XN_HASH_NUM_BINS);
- XN_VALIDATE_ALLOC_PTR(m_Bins);
-
- for (int i = 0; i < XN_HASH_NUM_BINS; i++)
- {
- m_Bins[i] = NULL;
- }
-
- m_Bins[XN_HASH_LAST_BIN] = XN_NEW(XnList); // We need this for an end() iterator
- m_nMinBin = XN_HASH_LAST_BIN;
-
- XN_VALIDATE_ALLOC_PTR(m_Bins[XN_HASH_LAST_BIN]);
- m_CompareFunction = &XnDefaultCompareFunction;
- m_HashFunction = &XnDefaultHashFunction;
- return XN_STATUS_OK;
- }
-
- /**
- * Get an iterator pointing to the entry to which the key belongs
- *
- * @param key [in] The key of the entry
- * @param hashValue [in] The hash value of the key
- * @param hiter [out] Iterator to the entry described by key
- *
- * @return XN_STATUS_NO_MATCH No such key in the XnHash
- */
- XnStatus Find(const XnKey& key, XnHashValue hashValue, ConstIterator& hiter) const
- {
- if (m_Bins[hashValue] != NULL)
- {
- hiter = ConstIterator(this, hashValue, m_Bins[hashValue]->begin());
- for (XnList::ConstIterator iter = m_Bins[hashValue]->begin();
- iter != m_Bins[hashValue]->end(); ++iter, ++hiter)
- {
- if ((*m_CompareFunction)(key, hiter.Key()) == 0)
- return XN_STATUS_OK;
- }
- }
-
- return XN_STATUS_NO_MATCH;
- }
-
-
- /** Each bin is a XnList */
- XnList** m_Bins;
-
- XnUInt16 m_nMinBin;
-
- /* Status of initialization - could be an error if memory could not be allocated. */
- XnStatus m_nInitStatus;
-
- /** The current hash function */
- XnHashFunction m_HashFunction;
- /** The current comparison function */
- XnCompareFunction m_CompareFunction;
-
-private:
- XN_DISABLE_COPY_AND_ASSIGN(XnHash);
-
- XnStatus ConstFind(const XnKey& key, ConstIterator& hiter) const
- {
- XnHashValue HashValue = (*m_HashFunction)(key);
- return Find(key, HashValue, hiter);
- }
-};
-
-/**
-* Declares a default Key Manager for type @a KeyType. It is given the name @a ClassName.
-* The manager uses the translator @a KeyTranslator, and is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_DEFAULT_KEY_MANAGER_DECL(decl, KeyType, ClassName, KeyTranslator) \
- class decl ClassName \
- { \
- public: \
- inline static XnHashValue Hash(KeyType const& key) \
- { \
- const XnKey _key = KeyTranslator::GetAsValue(key); \
- return XnDefaultHashFunction(_key); \
- } \
- inline static XnInt32 Compare(KeyType const& key1, KeyType const& key2) \
- { \
- const XnKey _key1 = KeyTranslator::GetAsValue(key1); \
- const XnKey _key2 = KeyTranslator::GetAsValue(key2); \
- return XnDefaultCompareFunction(_key1, _key2); \
- } \
- };
-
-/**
-* Declares a default Key Manager for type @a KeyType. It is given the name @a ClassName.
-* The manager uses the translator @a KeyTranslator.
-*/
-#define XN_DECLARE_DEFAULT_KEY_MANAGER(KeyType, ClassName, KeyTranslator) \
- XN_DECLARE_DEFAULT_KEY_MANAGER_DECL(, KeyType, ClassName, KeyTranslator)
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* @a KeyTranslator and @a ValueTranslator for storing keys and values, and @a KeyManager for managing the keys.
-* It is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_HASH_DECL(decl, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator, KeyManager) \
- class decl ClassName : public XnHash \
- { \
- public: \
- class decl ConstIterator : public XnHash::ConstIterator \
- { \
- public: \
- friend class ClassName; \
- inline ConstIterator(const ConstIterator& other) : XnHash::ConstIterator(other) {} \
- inline ConstIterator& operator++() \
- { \
- ++(*(XnHash::ConstIterator*)this); \
- return (*this); \
- } \
- inline ConstIterator operator++(int) \
- { \
- ConstIterator result = *this; \
- ++*this; \
- return result; \
- } \
- inline ConstIterator& operator--() \
- { \
- --(*(XnHash::ConstIterator*)this); \
- return (*this); \
- } \
- inline ConstIterator operator--(int) \
- { \
- ConstIterator result = *this; \
- --*this; \
- return result; \
- } \
- inline KeyType const& Key() const \
- { \
- return KeyTranslator::GetFromValue(XnHash::ConstIterator::Key()); \
- } \
- inline ValueType const& Value() const \
- { \
- return ValueTranslator::GetFromValue(XnHash::ConstIterator::Value()); \
- } \
- protected: \
- inline ConstIterator(const XnHash::ConstIterator& other) : \
- XnHash::ConstIterator(other) {} \
- }; \
- class decl Iterator : public ConstIterator \
- { \
- public: \
- friend class ClassName; \
- inline Iterator(const Iterator& other) : ConstIterator(other) {} \
- inline Iterator& operator++() \
- { \
- ++(*(ConstIterator*)this); \
- return (*this); \
- } \
- inline Iterator operator++(int) \
- { \
- Iterator result = *this; \
- ++*this; \
- return result; \
- } \
- inline Iterator& operator--() \
- { \
- --(*(ConstIterator*)this); \
- return (*this); \
- } \
- inline Iterator operator--(int) \
- { \
- Iterator result = *this; \
- --*this; \
- return result; \
- } \
- inline KeyType& Key() const \
- { \
- return (KeyType&)ConstIterator::Key(); \
- } \
- inline ValueType& Value() const \
- { \
- return (ValueType&)ConstIterator::Value(); \
- } \
- protected: \
- inline Iterator(const XnHash::Iterator& other) : ConstIterator(other) {} \
- }; \
- public: \
- ClassName() \
- { \
- SetHashFunction(Hash); \
- SetCompareFunction(Compare); \
- } \
- virtual ~ClassName() \
- { \
- while (!IsEmpty()) \
- Remove(begin()); \
- } \
- XnStatus Set(KeyType const& key, ValueType const& value) \
- { \
- Iterator oldIt = begin(); \
- if (Find(key, oldIt) == XN_STATUS_OK) \
- { \
- oldIt.Value() = value; \
- } \
- else \
- { \
- XnKey _key = KeyTranslator::CreateValueCopy(key); \
- XnValue _value = ValueTranslator::CreateValueCopy(value); \
- XnStatus nRetVal = XnHash::Set(_key, _value); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- KeyTranslator::FreeValue(_key); \
- ValueTranslator::FreeValue(_value); \
- return (nRetVal); \
- } \
- } \
- return XN_STATUS_OK; \
- } \
- XnStatus Get(KeyType const& key, ValueType& value) const \
- { \
- XnKey _key = KeyTranslator::GetAsValue(key); \
- XnValue _value; \
- XnStatus nRetVal = XnHash::Get(_key, _value); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- value = ValueTranslator::GetFromValue(_value); \
- return XN_STATUS_OK; \
- } \
- XnStatus Get(KeyType const& key, ValueType*& pValue) const \
- { \
- XnKey _key = KeyTranslator::GetAsValue(key); \
- XnValue _value; \
- XnStatus nRetVal = XnHash::Get(_key, _value); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- pValue = &ValueTranslator::GetFromValue(_value); \
- return XN_STATUS_OK; \
- } \
- XnStatus Remove(KeyType const& key) \
- { \
- ValueType dummy; \
- return Remove(key, dummy); \
- } \
- XnStatus Remove(KeyType const& key, ValueType& value) \
- { \
- ConstIterator it = end(); \
- XnStatus nRetVal = Find(key, it); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- value = it.Value(); \
- return Remove(it); \
- } \
- inline XnStatus Remove(ConstIterator iter) \
- { \
- XnKey key = KeyTranslator::GetAsValue(iter.Key()); \
- XnValue value = ValueTranslator::GetAsValue(iter.Value()); \
- XnStatus nRetVal = XnHash::Remove(iter); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- KeyTranslator::FreeValue(key); \
- ValueTranslator::FreeValue(value); \
- return XN_STATUS_OK; \
- } \
- XnStatus Find(KeyType const& key, ConstIterator& hiter) const \
- { \
- XnKey _key = KeyTranslator::GetAsValue(key); \
- XnHash::ConstIterator it = XnHash::end(); \
- XnStatus nRetVal = XnHash::Find(_key, it); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- hiter = it; \
- return XN_STATUS_OK; \
- } \
- XnStatus Find(KeyType const& key, Iterator& hiter) \
- { \
- XnKey _key = KeyTranslator::GetAsValue(key); \
- XnHash::Iterator it = XnHash::end(); \
- XnStatus nRetVal = XnHash::Find(_key, it); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- hiter = it; \
- return XN_STATUS_OK; \
- } \
- inline Iterator begin() { return XnHash::begin(); } \
- inline ConstIterator begin() const { return XnHash::begin(); } \
- inline Iterator end() { return XnHash::end(); } \
- inline ConstIterator end() const { return XnHash::end(); } \
- protected: \
- virtual XnStatus Remove(XnHash::ConstIterator iter) \
- { \
- return Remove(ConstIterator(iter)); \
- } \
- inline static XnHashValue Hash(const XnKey& key) \
- { \
- KeyType const& _key = KeyTranslator::GetFromValue(key); \
- return KeyManager::Hash(_key); \
- } \
- inline static XnInt32 Compare(const XnKey& key1, const XnKey& key2) \
- { \
- KeyType const _key1 = KeyTranslator::GetFromValue(key1); \
- KeyType const _key2 = KeyTranslator::GetFromValue(key2); \
- return KeyManager::Compare(_key1, _key2); \
- } \
- private: \
- XN_DISABLE_COPY_AND_ASSIGN(ClassName); \
- };
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* @a KeyTranslator and @a ValueTranslator for storing keys and values, and @a KeyManager for managing the keys.
-*/
-#define XN_DECLARE_HASH(KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator, KeyManager) \
- XN_DECLARE_HASH_DECL(, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator, KeyManager)
-
-#define _XN_DEFAULT_KEY_MANAGER_NAME(ClassName) _##ClassName##Manager
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* @a KeyTranslator and @a ValueTranslator for storing keys and values. It declares and uses a default manager.
-* It is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_DEFAULT_MANAGER_HASH_DECL(decl, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator) \
- XN_DECLARE_DEFAULT_KEY_MANAGER_DECL(decl, KeyType, _XN_DEFAULT_KEY_MANAGER_NAME(ClassName), KeyTranslator) \
- XN_DECLARE_HASH_DECL(decl, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator, _XN_DEFAULT_KEY_MANAGER_NAME(ClassName))
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* @a KeyTranslator and @a ValueTranslator for storing keys and values. It declares and uses a default manager.
-*/
-#define XN_DECLARE_DEFAULT_MANAGER_HASH(decl, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator) \
- XN_DECLARE_DEFAULT_MANAGER_HASH_DECL(, KeyType, ValueType, ClassName, KeyTranslator, ValueTranslator)
-
-#define _XN_DEFAULT_KEY_TRANSLATOR(ClassName) _##ClassName##KeyTranslator
-#define _XN_DEFAULT_VALUE_TRANSLATOR(ClassName) _##ClassName##ValueTranslator
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* default translators for storing keys and values. It declares and uses a default manager.
-* It is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_DEFAULT_HASH_DECL(decl, KeyType, ValueType, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, KeyType, _XN_DEFAULT_KEY_TRANSLATOR(ClassName)) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, ValueType, _XN_DEFAULT_VALUE_TRANSLATOR(ClassName)) \
- XN_DECLARE_DEFAULT_MANAGER_HASH_DECL(decl, KeyType, ValueType, ClassName, _XN_DEFAULT_KEY_TRANSLATOR(ClassName), _XN_DEFAULT_VALUE_TRANSLATOR(ClassName))
-
-/**
-* Declares a hash table from @a KeyType to @a ValueType named @a ClassName. The hash table uses
-* default translators for storing keys and values. It declares and uses a default manager.
-*/
-#define XN_DECLARE_DEFAULT_HASH(KeyType, ValueType, ClassName) \
- XN_DECLARE_DEFAULT_HASH_DECL(, KeyType, ValueType, ClassName)
-
-#endif // _XN_HASH_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h
deleted file mode 100644
index 7708fd45..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnHashT.h
+++ /dev/null
@@ -1,668 +0,0 @@
-#ifndef _XN_HASH_T_H_
-#define _XN_HASH_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-#include <XnListT.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-typedef XnUInt8 XnHashCode;
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-template<class _TKey, class _TValue>
-struct XnKeyValuePair
-{
- typedef _TKey TKey;
- typedef _TValue TValue;
-
- XnKeyValuePair() : key(TKey()), value(TValue()) {}
- XnKeyValuePair(TKey key, TValue value) : key(key), value(value) {}
- XnKeyValuePair(const XnKeyValuePair& other) : key(other.key), value(other.value) {}
-
-public:
- TKey const& Key() const { return key; }
- TValue const& Value() const { return value; }
- TValue& Value() { return value; }
-
-private:
- TKey key;
- TValue value;
-};
-
-template<class TKey>
-class XnDefaultKeyManagerT
-{
-public:
- static XnHashCode Hash(TKey const& key)
- {
- return (((XnSizeT)key) & 0xff);
- }
-
- static XnInt32 Compare(TKey const& key1, TKey const& key2)
- {
- return XnInt32(XnSizeT(key1)-XnSizeT(key2));
- }
-};
-
-template<class TKey,
- class TValue,
- class TKeyManager = XnDefaultKeyManagerT<TKey>,
- class TAlloc = XnLinkedNodeDefaultAllocatorT<XnKeyValuePair<TKey, TValue> > >
-class XnHashT
-{
-public:
- typedef XnKeyValuePair<TKey, TValue> TPair;
- typedef XnListT<TPair, TAlloc> TPairList;
-
- enum
- {
- LAST_BIN = (1 << (sizeof(XnHashCode)*8)),
- NUM_BINS = LAST_BIN + 1,
- };
-
- class ConstIterator
- {
- public:
- ConstIterator() : m_ppBins(NULL), m_nCurrBin(0)
- {}
-
- ConstIterator(TPairList* const* apBins, XnUInt32 nCurrBin, typename TPairList::ConstIterator currIt)
- : m_ppBins(apBins), m_nCurrBin(nCurrBin), m_currIt(currIt)
- {
- if (nCurrBin != LAST_BIN && m_currIt == m_ppBins[m_nCurrBin]->End())
- {
- // this does not point to an actual entry. run to next one.
- ++*this;
- }
- }
-
- ConstIterator(const ConstIterator& other)
- : m_ppBins(other.m_ppBins), m_nCurrBin(other.m_nCurrBin), m_currIt(other.m_currIt)
- {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- ConstIterator& operator++()
- {
- XN_ASSERT(m_nCurrBin != LAST_BIN);
-
- // increment internal bin iterator
- if (m_currIt != m_ppBins[m_nCurrBin]->End())
- {
- ++m_currIt;
- }
-
- // check if we need to move to next bin
- if (m_currIt == m_ppBins[m_nCurrBin]->End())
- {
- // go forward through bins, until we either reach the end or a non-empty bin
- do
- {
- ++m_nCurrBin;
- } while (m_nCurrBin < LAST_BIN &&
- (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty()));
-
- m_currIt = m_ppBins[m_nCurrBin]->Begin();
- }
-
- return *this;
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- ConstIterator operator++(int)
- {
- ConstIterator retVal(*this);
- ++*this;
- return retVal;
- }
-
- /**
- * Support --iterator, go to the previous object in the hash
- */
- ConstIterator& operator--()
- {
- XN_ASSERT(m_nCurrBin != LAST_BIN);
-
- // decrement internal bin iterator
- if (m_currIt != m_ppBins[m_nCurrBin]->ReverseEnd())
- {
- --m_currIt;
- }
-
- // check if we need to move to previous bin
- if (m_currIt == m_ppBins[m_nCurrBin]->ReverseEnd())
- {
- // go backwards through bins, until we either reach the end or a non-empty bin
- do
- {
- if (m_nCurrBin == 0)
- {
- m_nCurrBin = LAST_BIN;
- break;
- }
- else
- {
- --m_nCurrBin;
- }
- } while (m_ppBins[m_nCurrBin] == NULL || m_ppBins[m_nCurrBin]->IsEmpty());
-
- m_currIt = m_ppBins[m_nCurrBin]->Begin();
- }
-
- return *this;
- }
-
- /**
- * Support iterator--, go to the previous object in the hash, returning the old value
- */
- ConstIterator operator--(int)
- {
- ConstIterator retVal(*this);
- --*this;
- return retVal;
- }
-
- /**
- * Operator to check if two iterators point to the same object
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator==(const ConstIterator& other) const
- {
- return m_currIt == other.m_currIt;
- }
-
- /**
- * Operator to check if two iterators point to different objects
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator!=(const ConstIterator& other) const
- {
- return m_currIt != other.m_currIt;
- }
-
- /**
- * Get the value of the current object (const version)
- */
- inline TPair const& operator*() const
- {
- return *m_currIt;
- }
-
- /**
- * Get a pointer to the value of the current object (const version)
- */
- inline TPair const* operator->() const
- {
- return m_currIt.operator->();
- }
-
- protected:
- friend class XnHashT;
-
- TPairList* const* m_ppBins;
- XnUInt32 m_nCurrBin;
- typename TPairList::ConstIterator m_currIt;
- };
-
- class Iterator : public ConstIterator
- {
- public:
- Iterator() : ConstIterator()
- {}
-
- Iterator(TPairList** apBins, XnUInt32 nCurrBin, typename TPairList::Iterator currIt)
- : ConstIterator(apBins, nCurrBin, currIt)
- {}
-
- Iterator(const Iterator& other) : ConstIterator(other)
- {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- Iterator& operator++()
- {
- ++(*(ConstIterator*)this);
- return (*this);
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline Iterator operator++(int)
- {
- Iterator retVal(*this);
- ++*this;
- return (retVal);
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline Iterator& operator--()
- {
- --(*(ConstIterator*)this);
- return (*this);
- }
-
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline Iterator operator--(int)
- {
- Iterator retVal(*this);
- --*this;
- return (retVal);
- }
-
- /**
- * Get the value of the current object
- */
- inline TPair& operator*() const
- {
- return const_cast<TPair&>(*this->m_currIt);
- }
-
- /**
- * Get a pointer to the value of the current object
- */
- inline TPair* operator->() const
- {
- return const_cast<TPair*>(this->m_currIt.operator->());
- }
- };
-
- XnHashT()
- {
- Init();
- }
-
- XnHashT(const XnHashT& other)
- {
- Init();
- *this = other;
- }
-
- XnHashT& operator=(const XnHashT& other)
- {
- Clear();
-
- XnStatus nRetVal = XN_STATUS_OK;
-
- for (ConstIterator it = other.Begin(); it != other.End(); ++it)
- {
- nRetVal = Set(it->Key(), it->Value());
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- }
-
- return *this;
- }
-
- ~XnHashT()
- {
- // NOTE: we don't want to delete LAST_BIN (it points to the m_lastBin member)
- for (XnUInt32 i = 0; i < LAST_BIN; ++i)
- {
- if (m_apBins[i] != NULL)
- {
- XN_DELETE(m_apBins[i]);
- }
- }
- }
-
- /**
- * An iterator to the first entry of the list (non-const version)
- */
- Iterator Begin()
- {
- return Iterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
- }
-
- /**
- * An iterator to the first entry of the list (const version)
- */
- ConstIterator Begin() const
- {
- return ConstIterator(m_apBins, m_nMinBin, m_apBins[m_nMinBin]->Begin());
- }
-
- /**
- * An iterator 1to the end of the list (non-const version). The position is invalid.
- */
- Iterator End()
- {
- return Iterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
- }
-
- /**
- * An iterator to the end of the list (const version). The position is invalid.
- */
- ConstIterator End() const
- {
- return ConstIterator(m_apBins, LAST_BIN, m_apBins[LAST_BIN]->Begin());
- }
-
- /**
- * Set a new key-value entry. If key exists, will replace value.
- *
- * @param key [in] The key to which to associate the value
- * @param value [in] The value to add to the XnHash
- */
- XnStatus Set(const TKey& key, const TValue& value)
- {
- XnHashCode nHash = TKeyManager::Hash(key);
-
- // check if bin exists
- if (m_apBins[nHash] == NULL)
- {
- // create it
- XN_VALIDATE_NEW(m_apBins[nHash], TPairList);
-
- if (nHash < m_nMinBin)
- {
- m_nMinBin = nHash;
- }
- }
-
- // now check if key is already in the bin
- for (typename TPairList::Iterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
- {
- if (TKeyManager::Compare(it->Key(), key) == 0)
- {
- // replace it
- it->Value() = value;
- return (XN_STATUS_OK);
- }
- }
-
- // if we got here, key is not in bin. Add it.
- return m_apBins[nHash]->AddLast(TPair(key, value));
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- *
- * @return End() if value doesn't exist
- */
- ConstIterator Find(TKey const& key) const
- {
- XnUInt32 nBin = LAST_BIN;
- typename TPairList::ConstIterator it;
- if (TRUE == Find(key, nBin, it))
- {
- return ConstIterator(m_apBins, nBin, it);
- }
- else
- {
- return End();
- }
- }
-
- /**
- * Get an iterator pointing to the pair in the hash.
- *
- * @param key [in] The searched key
- *
- * @return End() if value doesn't exist
- */
- Iterator Find(TKey const& key)
- {
- XnUInt32 nBin = LAST_BIN;
- typename TPairList::Iterator it;
- if (TRUE == Find(key, nBin, it))
- {
- return Iterator(m_apBins, nBin, it);
- }
- else
- {
- return End();
- }
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- * @param it [out] An iterator to the entry in the hash.
- *
- * @return XN_STATUS_NO_MATCH if value doesn't exist
- */
- XnStatus Find(TKey const& key, ConstIterator& it) const
- {
- it = Find(key);
- return (it == End() ? XN_STATUS_NO_MATCH : XN_STATUS_OK);
- }
-
- /**
- * Get an iterator pointing to the pair in the hash (const version).
- *
- * @param key [in] The searched key
- * @param it [out] An iterator to the entry in the hash.
- *
- * @return XN_STATUS_NO_MATCH if value doesn't exist
- */
- XnStatus Find(TKey const& key, Iterator& it)
- {
- it = Find(key);
- return (it == End() ? XN_STATUS_NO_MATCH : XN_STATUS_OK);
- }
-
- /**
- * Get the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param value [out] The retrieved value
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue& value) const
- {
- ConstIterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- value = it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get a pointer to the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param pValue [out] A const pointer to the value that is stored in the hash.
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue const*& pValue) const
- {
- ConstIterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- pValue = &it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param value [out] The retrieved value
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue& value)
- {
- Iterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- value = it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Get a pointer to the value associated with the supplied key
- *
- * @param key [in] The key of the entry
- * @param pValue [out] A pointer to the value that is stored in the hash
- *
- * @return XN_STATUS_NO_MATCH if no such key exists
- */
- XnStatus Get(TKey const& key, TValue*& pValue)
- {
- Iterator it = Find(key);
- if (it == End())
- {
- return XN_STATUS_NO_MATCH;
- }
- else
- {
- pValue = &it->Value();
- return XN_STATUS_OK;
- }
- }
-
- /**
- * Gets a reference to the value of a specific key. If this key is not in the hash, it will be added.
- *
- * @param key [in] The key of the entry.
- */
- TValue& operator[](TKey const& key)
- {
- XnStatus nRetVal = XN_STATUS_OK;
- Iterator it = Find(key);
- if (it == End())
- {
- nRetVal = Set(key, TValue());
- XN_ASSERT(nRetVal == XN_STATUS_OK);
-
- it = Find(key);
- XN_ASSERT(it != End());
- }
-
- return it->Value();
- }
-
- XnStatus Remove(ConstIterator it)
- {
- // Verify iterator is valid
- if (it == End())
- {
- XN_ASSERT(FALSE);
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- XN_ASSERT(m_apBins == it.m_ppBins);
- XN_ASSERT(m_apBins[it.m_nCurrBin] != NULL);
-
- return m_apBins[it.m_nCurrBin]->Remove(it.m_currIt);
- }
-
- XnStatus Remove(TKey const& key)
- {
- ConstIterator it = Find(key);
- if (it != End())
- {
- return Remove(it);
- }
- else
- {
- return XN_STATUS_NO_MATCH;
- }
- }
-
- /**
- * Remove all entries from the XnHash.
- */
- XnStatus Clear()
- {
- while (Begin() != End())
- Remove(Begin());
-
- return XN_STATUS_OK;
- }
-
- /**
- * Checks if hash is empty.
- */
- XnBool IsEmpty() const
- {
- return (Begin() == End());
- }
-
- /**
- * Gets the number of entries in the hash.
- */
- XnUInt32 Size() const
- {
- XnUInt32 nSize = 0;
- for (ConstIterator iter = Begin(); iter != End(); ++iter, ++nSize)
- ;
-
- return nSize;
- }
-
-private:
- XnBool Find(TKey const& key, XnUInt32& nBin, typename TPairList::ConstIterator& currIt) const
- {
- XnHashCode nHash = TKeyManager::Hash(key);
-
- if (m_apBins[nHash] != NULL)
- {
- // look for value in bin
- for (typename TPairList::ConstIterator it = m_apBins[nHash]->Begin(); it != m_apBins[nHash]->End(); ++it)
- {
- if (TKeyManager::Compare(it->Key(), key) == 0)
- {
- nBin = nHash;
- currIt = it;
- return TRUE;
- }
- }
- }
-
- // if we got here, key wasn't found
- return FALSE;
- }
-
- void Init()
- {
- xnOSMemSet(m_apBins, 0, sizeof(m_apBins));
- m_apBins[LAST_BIN] = &m_lastBin;
- m_nMinBin = LAST_BIN;
- }
-
- TPairList* m_apBins[NUM_BINS];
- TPairList m_lastBin;
- XnUInt32 m_nMinBin;
-};
-
-
-
-#endif // _XN_HASH_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnInternalDefs.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnInternalDefs.h
deleted file mode 100644
index c14bb055..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnInternalDefs.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __NIINTERNALDEFS_H__
-#define __NIINTERNALDEFS_H__
-
-#define XN_MOCK_NODE_NAME "Mock"
-
-#endif // __NIINTERNALDEFS_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLicensing.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLicensing.h
deleted file mode 100644
index cc0f5b8f..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLicensing.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_LICENSING_H__
-#define __XN_LICENSING_H__
-
-/**
- * @ingroup cref
- * @defgroup lic Licenses
- * This page details functions for license management.
- * @{
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/**
- * Adds a license to the context.
- *
- * @param pContext [in] OpenNI context.
- * @param pLicense [in] A license key.
- */
-XN_C_API XnStatus XN_C_DECL xnAddLicense(XnContext* pContext, const XnLicense* pLicense);
-
-/**
- * Enumerates all licenses currently registered. The list of licenses should later be freed
- * by calling @ref xnFreeLicensesList().
- *
- * @param pContext [in] OpenNI context.
- * @param paLicenses [out] An array of license pointers.
- * @param pnCount [out] The number of licenses in the array.
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateLicenses(
- XnContext* pContext,
- XnLicense** paLicenses,
- XnUInt32* pnCount
- );
-
-/**
- * Frees a list of licenses.
- *
- * @param aLicenses [in] The list to free.
- */
-XN_C_API void XN_C_DECL xnFreeLicensesList(XnLicense* aLicenses);
-
-/** @} */
-
-#endif // __XN_LICENSING_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnList.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnList.h
deleted file mode 100644
index 82665f83..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnList.h
+++ /dev/null
@@ -1,749 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_LIST_H
-#define _XN_LIST_H
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnDataTypes.h>
-#include <IXnNodeAllocator.h>
-#include <XnNodeAllocator.h>
-#include <XnNode.h>
-#include <XnStatusCodes.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-/**
- * The linked list
- */
-class XnList
-{
-public:
- class ConstIterator
- {
- public:
- friend class XnList;
-
- /**
- * Copy constructor
- *
- * @param other [in] instance to copy from
- */
- ConstIterator(const ConstIterator& other) : m_pCurrent(other.m_pCurrent) {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- ConstIterator& operator++()
- {
- m_pCurrent = m_pCurrent->Next();
- return *this;
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- ConstIterator operator++(int)
- {
- ConstIterator other(m_pCurrent);
- m_pCurrent = m_pCurrent->Next();
- return other;
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- ConstIterator& operator--()
- {
- m_pCurrent = m_pCurrent->Previous();
- return *this;
- }
-
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- ConstIterator operator--(int)
- {
- ConstIterator other = *this;
- --*this;
- return other;
- }
-
- /**
- * Operator to check if 2 iterators point to the same object
- *
- * @param other [in] instance to compare with
- */
- XnBool operator==(const ConstIterator& other) const
- {
- return m_pCurrent == other.m_pCurrent;
- }
- /**
- * Operator to check if 2 iterators point to different objects
- *
- * @param other [in] instance to compare with
- */
- XnBool operator!=(const ConstIterator& other) const
- {
- return m_pCurrent != other.m_pCurrent;
- }
-
- /**
- * Get the value of the current object (const version)
- */
- const XnValue& operator*() const
- {
- return m_pCurrent->Data();
- }
-
-
- /**
- * Get the entire current object (const version)
- */
- const XnNode* GetNode() const
- {
- return m_pCurrent;
- }
-
- /**
- * Get the entire current object (non-const version)
- */
- XnNode* GetNode()
- {
- return m_pCurrent;
- }
-
- protected:
- /**
- * constructor to be used from inside the XnList. It points to the node supplied.
- *
- * @param pNode [in] The XnNode to which to currently point
- */
- ConstIterator(XnNode* pNode) : m_pCurrent(pNode) {}
-
- /** The current XnNode */
- XnNode* m_pCurrent;
- };
-
- /**
- * Iterator to the XnList
- */
- class Iterator : public ConstIterator
- {
- public:
- friend class XnList;
-
- /**
- * Copy constructor
- *
- * @param other [in] instance to copy from
- */
- inline Iterator(const Iterator& other) : ConstIterator(other) {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- inline Iterator& operator++()
- {
- ++(*(ConstIterator*)this);
- return (*this);
- }
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline Iterator operator++(int)
- {
- Iterator result = *this;
- ++*this;
- return (result);
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline Iterator& operator--()
- {
- --(*(ConstIterator*)this);
- return (*this);
- }
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline Iterator operator--(int)
- {
- Iterator result = *this;
- --*this;
- return (result);
- }
-
- /**
- * Get the value of the current object
- */
- inline XnValue& operator*() const { return ((XnValue&)**(ConstIterator*)this); }
-
- protected:
- /**
- * constructor to be used from inside the XnList. It points to the node supplied.
- *
- * @param pNode [in] The XnNode to which to currently point
- */
- inline Iterator(XnNode* pNode) : ConstIterator(pNode) {}
- };
-
-public:
- /**
- * Constructor. Initialize internal representations
- */
- XnList()
- {
- //Default node allocator is XnNodeAllocator
- Init(XN_NEW(XnNodeAllocator));
- m_bOwnsAllocator = TRUE;
- }
-
- /**
- * Destructor. Destroy internal representations
- */
- virtual ~XnList()
- {
- Clear();
-
- // Return base node to the pool
- m_pNodeAllocator->Deallocate(m_pBase);
-
- if (m_bOwnsAllocator)
- {
- //We created the allocator in this object, so we must release it
- XN_DELETE(m_pNodeAllocator);
- }
- }
-
- /**
- * Add a new value at the beginning of list
- *
- * @param value [in] The value to add to the head of the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available.
- */
- XnStatus AddFirst(const XnValue& value)
- {
- return Add(m_pBase, value);
- }
-
- /**
- * Add a new value at the end of the list
- *
- * @param value [in] The value to add to the tail of the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available.
- */
- XnStatus AddLast(const XnValue& value)
- {
- return Add(rbegin().m_pCurrent, value);
- }
-
- /**
- * Add a new value after the object pointed to by the iterator
- *
- * @param where [in] iterator to the position after which to add the new value
- * @param val [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available,
- * XN_STATUS_ILLEGAL_POSITION iterator is invalid
- */
- XnStatus AddAfter(ConstIterator where, const XnValue& val)
- {
- if (where == end())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- return Add(where.m_pCurrent, val);
- }
-
- /**
- * Add a new value before the object pointed to by the iterator
- *
- * @param where [in] iterator to the position before which to add the new value
- * @param val [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available,
- */
- XnStatus AddBefore(ConstIterator where, const XnValue& val)
- {
- if (where == end())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- return Add(where.m_pCurrent->Previous(), val);
- }
-
-
- /**
- * Get an iterator pointing to a value in the list.
- *
- * @param value [in] The searched value
- *
- * @return end() if value doesn't exist
- */
- Iterator Find(const XnValue& value)
- {
- if (IsEmpty())
- {
- return end();
- }
-
- Iterator iter = begin();
- for (; iter != end(); ++iter)
- {
- if (*iter == value)
- break;
- }
- return iter;
- }
-
-
- /**
- * Get an iterator pointing to a value in the list.
- *
- * @param value [in] The searched value
- *
- * @return end() if value doesn't exist
- */
- ConstIterator Find(const XnValue& value) const
- {
- if (IsEmpty())
- {
- return end();
- }
-
- ConstIterator iter = begin();
- for (; iter != end(); ++iter)
- {
- if (*iter == value)
- break;
- }
- return iter;
- }
-
-
- /**
- * Remove a value from the list
- *
- * @param where [in] Iterator pointing to an entry in the list
- * @param value [out] The value that was in the removed entry
- *
- * @return XN_STATUS_ILLEGAL_POSITION iterator was invalid
- */
- XnStatus Remove(ConstIterator where, XnValue& value)
- {
- value = *where;
- return Remove(where);
- }
-
- /**
- * Remove a value from the list
- *
- * @param where [in] Iterator pointing to an entry in the list
- *
- * @return XN_STATUS_ILLEGAL_POSITION iterator was invalid
- */
- virtual XnStatus Remove(ConstIterator where)
- {
- // Verify iterator is valid
- if (where == end())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
- if (IsEmpty())
- {
- return XN_STATUS_IS_EMPTY;
- }
-
- XnNode* pToRemove = where.m_pCurrent;
-
- // Connect other nodes to bypass the one removed
- pToRemove->Previous()->Next() = pToRemove->Next();
- pToRemove->Next()->Previous() = pToRemove->Previous();
-
- // Return removed node to the pool
- m_pNodeAllocator->Deallocate(pToRemove);
-
- return XN_STATUS_OK;
- }
-
-
- /**
- * Remove all entries from the list
- */
- XnStatus Clear()
- {
- while (!IsEmpty())
- Remove(begin());
-
- return XN_STATUS_OK;
- }
-
- /**
- * Check if list is empty
- */
- XnBool IsEmpty() const
- {
- return (begin() == end());
- }
-
- /**
- * Current size of the list
- */
- XnUInt32 Size() const
- {
- XnUInt32 nSize = 0;
- for (ConstIterator iter = begin(); iter != end(); ++iter, ++nSize)
- ;
-
- return nSize;
- }
-
- /**
- * An iterator to the first entry of the list (non-const version)
- */
- Iterator begin()
- {
- return Iterator(m_pBase->Next());
- }
-
- /**
- * An iterator to the first entry of the list (const version)
- */
- ConstIterator begin() const
- {
- return ConstIterator(m_pBase->Next());
- }
-
- /**
- * An iterator 1to the end of the list (non-const version). The position is invalid.
- */
- Iterator end()
- {
- return Iterator(m_pBase);
- }
-
- /**
- * An iterator to the end of the list (const version). The position is invalid.
- */
- ConstIterator end() const
- {
- return ConstIterator(m_pBase);
- }
-
- /**
- * An iterator to the last entry of the list (non-const version)
- */
- Iterator rbegin()
- {
- return Iterator(m_pBase->Previous());
- }
-
- /**
- * An iterator to the last entry of the list (const version)
- */
- ConstIterator rbegin() const
- {
- return ConstIterator(m_pBase->Previous());
- }
-
- /**
- * An iterator to the beginning of the list (non-const version). This position is invalid
- */
- Iterator rend()
- {
- return Iterator(m_pBase);
- }
-
- /**
- * An iterator to the beginning of the list (const version). This position is invalid
- */
- ConstIterator rend() const
- {
- return ConstIterator(m_pBase);
- }
-
-protected:
- friend class XnNodeManager;
-
- /**
- * Constructor. Initialize internal representations
- */
- XnList(INiNodeAllocator* pNodeAllocator)
- {
- Init(pNodeAllocator);
- m_bOwnsAllocator = FALSE;
- }
-
- void Init(INiNodeAllocator* pNodeAllocator)
- {
- m_pNodeAllocator = pNodeAllocator;
- // Allocate a node to act as base node.
- m_pBase = m_pNodeAllocator->Allocate();
- if (m_pBase == NULL)
- {
- // OZOZ: Allocation failed in ctor...
- }
-
- m_pBase->Next() = m_pBase->Previous() = m_pBase;
- }
-
- /**
- * Add a new value to the list
- *
- * @param pWhere [in] The XnNode after which to add the new value
- * @param val [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available,
- */
- XnStatus Add(XnNode* pWhere, const XnValue& val)
- {
- // Get a node from the pool for the entry
- XnNode* pNewNode = m_pNodeAllocator->Allocate();
- if (pNewNode == NULL)
- {
- return XN_STATUS_ALLOC_FAILED;
- }
- // push new node to position
- pNewNode->Data() = val;
- pNewNode->Next() = pWhere->Next();
- pNewNode->Previous() = pWhere;
- pWhere->Next()->Previous() = pNewNode;
- pWhere->Next() = pNewNode;
-
- return XN_STATUS_OK;
- }
-
-
- /** The base node for the list */
- XnNode* m_pBase;
-
- INiNodeAllocator* m_pNodeAllocator;
- XnBool m_bOwnsAllocator;
-
-private:
- XN_DISABLE_COPY_AND_ASSIGN(XnList);
-};
-
-/**
-* Declares a list of type @a Type, which is named @a ClassName. The list uses translator @a Translator,
-* and is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_LIST_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator) \
- class decl ClassName : public XnList \
- { \
- public: \
- class decl ConstIterator : public XnList::ConstIterator \
- { \
- public: \
- friend class ClassName; \
- inline ConstIterator(const ConstIterator& other) : XnList::ConstIterator(other) {} \
- inline ConstIterator& operator++() \
- { \
- ++(*(XnList::ConstIterator*)this); \
- return (*this); \
- } \
- inline ConstIterator operator++(int) \
- { \
- ConstIterator result = *this; \
- ++*this; \
- return result; \
- } \
- inline ConstIterator& operator--() \
- { \
- --(*(XnList::ConstIterator*)this); \
- return (*this); \
- } \
- inline ConstIterator operator--(int) \
- { \
- ConstIterator result = *this; \
- --*this; \
- return result; \
- } \
- inline Type const& operator*() const \
- { \
- return Translator::GetFromValue(**((XnList::ConstIterator*)this)); \
- } \
- inline Type const* operator->() const { return (&**this); } \
- protected: \
- inline ConstIterator(XnNode* pNode) : XnList::ConstIterator(pNode) {} \
- inline ConstIterator(const XnList::ConstIterator& other) : \
- XnList::ConstIterator(other) \
- {} \
- }; \
- class decl Iterator : public ConstIterator \
- { \
- public: \
- friend class ClassName; \
- Iterator(const Iterator& other) : ConstIterator(other) {} \
- inline Iterator& operator++() \
- { \
- ++(*(ConstIterator*)this); \
- return (*this); \
- } \
- inline Iterator operator++(int) \
- { \
- Iterator result = *this; \
- ++*this; \
- return result; \
- } \
- inline Iterator& operator--() \
- { \
- --(*(ConstIterator*)this); \
- return (*this); \
- } \
- inline Iterator operator--(int) \
- { \
- Iterator result = *this; \
- --*this; \
- return result; \
- } \
- inline Type& operator*() const { return ((Type&)**(ConstIterator*)this); } \
- inline Type* operator->() const { return (&**this); } \
- protected: \
- inline Iterator(XnNode* pNode) : ConstIterator(pNode) {} \
- inline Iterator(const XnList::Iterator& other) : ConstIterator(other) {} \
- }; \
- public: \
- ClassName() \
- { \
- } \
- ~ClassName() \
- { \
- while (!IsEmpty()) \
- Remove(begin()); \
- } \
- inline XnStatus AddFirst(Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = XnList::AddFirst(val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- inline XnStatus AddLast(Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = XnList::AddLast(val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- inline XnStatus AddAfter(ConstIterator where, Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = XnList::AddAfter(where, val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- inline XnStatus AddBefore(ConstIterator where, Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = XnList::AddBefore(where, val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- inline ConstIterator Find(Type const& value) const \
- { \
- XnValue _value = Translator::GetAsValue(value); \
- return XnList::Find(_value); \
- } \
- inline Iterator Find(Type const& value) \
- { \
- XnValue _value = Translator::GetAsValue(value); \
- return XnList::Find(_value); \
- } \
- inline XnStatus Remove(ConstIterator where) \
- { \
- XnValue val = Translator::GetAsValue(*where); \
- XnStatus nRetVal = XnList::Remove(where); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- Translator::FreeValue(val); \
- return XN_STATUS_OK; \
- } \
- inline XnStatus Remove(Type const& value) \
- { \
- Iterator it = Find(value); \
- return Remove(it); \
- } \
- inline Iterator begin() { return XnList::begin(); } \
- inline ConstIterator begin() const { return XnList::begin(); } \
- inline Iterator end() { return XnList::end(); } \
- inline ConstIterator end() const { return XnList::end(); } \
- inline Iterator rbegin() { return XnList::rbegin(); } \
- inline ConstIterator rbegin() const { return XnList::rbegin(); } \
- inline Iterator rend() { return XnList::rend(); } \
- inline ConstIterator rend() const { return XnList::rend(); } \
- protected: \
- virtual XnStatus Remove(XnList::ConstIterator where) \
- { \
- return Remove(ConstIterator(where)); \
- } \
- private: \
- XN_DISABLE_COPY_AND_ASSIGN(ClassName); \
- };
-
-/**
-* Declares a list of type @a Type, which is named @a ClassName. The list uses translator @a Translator.
-*/
-#define XN_DECLARE_LIST_WITH_TRANSLATOR(Type, ClassName, Translator) \
- XN_DECLARE_LIST_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator)
-
-/**
-* Declares a list of type @a Type, which is named @a ClassName. The list uses creates a default translator
-* and is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_LIST_DECL(decl, Type, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
- XN_DECLARE_LIST_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName))
-
-/**
-* Declares a list of type @a Type, which is named @a ClassName. The list uses creates a default translator.
-*/
-#define XN_DECLARE_LIST(Type, ClassName) \
- XN_DECLARE_LIST_DECL(, Type, ClassName)
-
-#endif // _XN_LIST_H
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnListT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnListT.h
deleted file mode 100644
index 8cbe992d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnListT.h
+++ /dev/null
@@ -1,556 +0,0 @@
-#ifndef _XNLISTT_H_
-#define _XNLISTT_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnPlatform.h>
-#include <XnDataTypes.h>
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-
-/**
- * A node in a linked list.
- *
- * @tparam T the type of value in the list.
- */
-template<class T>
-struct XnLinkedNodeT
-{
- XnLinkedNodeT() : pPrev(NULL), pNext(NULL) {}
- XnLinkedNodeT(T const& value) : pPrev(NULL), pNext(NULL), value(value) {}
-
- struct XnLinkedNodeT<T>* pPrev;
- struct XnLinkedNodeT<T>* pNext;
- T value;
-};
-
-/**
- * A default allocator for nodes in the linked list. The default allocator calls 'new' for allocating
- * new nodes and 'delete' for deallocating them.
- *
- * For information on how to use allocator, see @ref XnListT.
- *
- * @tparam T the type of value in the list.
- */
-template<class T>
-class XnLinkedNodeDefaultAllocatorT
-{
-public:
- typedef XnLinkedNodeT<T> LinkedNode;
-
- static LinkedNode* Allocate(T const& value)
- {
- return XN_NEW(LinkedNode, value);
- }
-
- static void Deallocate(LinkedNode* pNode)
- {
- XN_DELETE(pNode);
- }
-};
-
-/**
- * A linked list.
- *
- * @tparam T The type of value in the list
- * @tparam TAlloc [Optional] A class for allocating and deallocating nodes in the list.
- * The allocator must have two static methods: Allocate() and Deallocate().
- */
-template<class T, class TAlloc = XnLinkedNodeDefaultAllocatorT<T> >
-class XnListT
-{
-public:
- typedef XnLinkedNodeT<T> LinkedNode;
- typedef T TValue;
- typedef TAlloc TAllocator;
-
- /**
- * An iterator for iterating the list without modifying values.
- */
- class ConstIterator
- {
- public:
- inline ConstIterator() : m_pCurrent(NULL) {}
-
- inline ConstIterator(LinkedNode* pNode) : m_pCurrent(pNode) {}
-
- inline ConstIterator(const ConstIterator& other) : m_pCurrent(other.m_pCurrent) {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- inline ConstIterator& operator++()
- {
- m_pCurrent = m_pCurrent->pNext;
- return *this;
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline ConstIterator operator++(int)
- {
- ConstIterator retVal(*this);
- ++*this;
- return retVal;
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline ConstIterator& operator--()
- {
- m_pCurrent = m_pCurrent->pPrev;
- return *this;
- }
-
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline ConstIterator operator--(int)
- {
- ConstIterator retVal(*this);
- --*this;
- return retVal;
- }
-
- /**
- * Operator to check if two iterators point to the same object
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator==(const ConstIterator& other) const
- {
- return m_pCurrent == other.m_pCurrent;
- }
-
- /**
- * Operator to check if two iterators point to different objects
- *
- * @param other [in] instance to compare with
- */
- inline XnBool operator!=(const ConstIterator& other) const
- {
- return m_pCurrent != other.m_pCurrent;
- }
-
- /**
- * Get the value of the current object (const version)
- */
- inline T const& operator*() const
- {
- return m_pCurrent->value;
- }
-
- /**
- * Get a pointer to the value of the current object (const version)
- */
- inline T const* operator->() const
- {
- return &m_pCurrent->value;
- }
-
- protected:
- friend class XnListT;
-
- /** The current XnNode */
- LinkedNode* m_pCurrent;
- };
-
- /**
- * An iterator for iterating the list
- */
- class Iterator : public ConstIterator
- {
- public:
- inline Iterator() : ConstIterator() {}
-
- inline Iterator(LinkedNode* pNode) : ConstIterator(pNode) {}
-
- inline Iterator(const Iterator& other) : ConstIterator(other) {}
-
- /**
- * Support ++iterator, go to the next object in the list
- */
- inline Iterator& operator++()
- {
- ++(*(ConstIterator*)this);
- return (*this);
- }
-
- /**
- * Support iterator++, go to the next object in the list, returning the old value
- */
- inline Iterator operator++(int)
- {
- Iterator retVal(*this);
- ++*this;
- return (retVal);
- }
-
- /**
- * Support --iterator, go to the next object in the list
- */
- inline Iterator& operator--()
- {
- --(*(ConstIterator*)this);
- return (*this);
- }
- /**
- * Support iterator--, go to the next object in the list, returning the old value
- */
- inline Iterator operator--(int)
- {
- Iterator retVal(*this);
- --*this;
- return (retVal);
- }
-
- /**
- * Get the value of the current object
- */
- inline T& operator*() const
- {
- return this->m_pCurrent->value;
- }
-
- /**
- * Get a pointer to the value of the current object
- */
- inline T* operator->() const
- {
- return &this->m_pCurrent->value;
- }
- };
-
-public:
- XnListT()
- {
- Init();
- }
-
- XnListT(const XnListT& other)
- {
- Init();
- *this = other;
- }
-
- XnListT& operator=(const XnListT& other)
- {
- Clear();
-
- XnStatus nRetVal = XN_STATUS_OK;
-
- for (ConstIterator it = other.Begin(); it != other.End(); ++it)
- {
- nRetVal = AddLast(*it);
- XN_ASSERT(nRetVal == XN_STATUS_OK);
- }
-
- return *this;
- }
-
- ~XnListT()
- {
- Clear();
- }
-
- /**
- * An iterator to the first entry of the list (non-const version)
- */
- Iterator Begin()
- {
- return Iterator(m_anchor.pNext);
- }
-
- /**
- * An iterator to the first entry of the list (const version)
- */
- ConstIterator Begin() const
- {
- return ConstIterator(const_cast<LinkedNode*>(m_anchor.pNext));
- }
-
- /**
- * An iterator 1to the end of the list (non-const version). This position is invalid.
- */
- Iterator End()
- {
- return Iterator(&m_anchor);
- }
-
- /**
- * An iterator to the end of the list (const version). This position is invalid.
- */
- ConstIterator End() const
- {
- return ConstIterator(const_cast<LinkedNode*>(&m_anchor));
- }
-
- /**
- * An iterator to the last entry of the list (non-const version)
- */
- Iterator ReverseBegin()
- {
- return Iterator(m_anchor.pPrev);
- }
-
- /**
- * An iterator to the last entry of the list (const version)
- */
- ConstIterator ReverseBegin() const
- {
- return ConstIterator(const_cast<LinkedNode*>(m_anchor.pPrev));
- }
-
- /**
- * An iterator to the beginning of the list (non-const version). This position is invalid.
- */
- Iterator ReverseEnd()
- {
- return Iterator(&m_anchor);
- }
-
- /**
- * An iterator to the beginning of the list (const version). This position is invalid.
- */
- ConstIterator ReverseEnd() const
- {
- return ConstIterator(const_cast<LinkedNode*>(&m_anchor));
- }
-
- /**
- * Add a new value after the object pointed to by the iterator
- *
- * @param where [in] iterator to the position after which to add the new value
- * @param value [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED failed to allocate new node
- * XN_STATUS_ILLEGAL_POSITION iterator is invalid
- */
- XnStatus AddAfter(ConstIterator where, T const& value)
- {
- if (where == End())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- return InsertAfter(where.m_pCurrent, value);
- }
-
- /**
- * Add a new value before the object pointed to by the iterator
- *
- * @param where [in] iterator to the position before which to add the new value
- * @param value [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED failed to allocate new node
- * XN_STATUS_ILLEGAL_POSITION iterator is invalid
- */
- XnStatus AddBefore(ConstIterator where, T const& value)
- {
- if (where == End())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- return InsertAfter(where.m_pCurrent->pPrev, value);
- }
-
- /**
- * Add a new value at the beginning of list
- *
- * @param value [in] The value to add to the head of the list
- *
- * @return XN_STATUS_ALLOC_FAILED failed to allocate new node
- */
- XnStatus AddFirst(T const& value)
- {
- return InsertAfter(&m_anchor, value);
- }
-
- /**
- * Add a new value at the end of the list
- *
- * @param value [in] The value to add to the tail of the list
- *
- * @return XN_STATUS_ALLOC_FAILED failed to allocate new node
- */
- XnStatus AddLast(T const& value)
- {
- return InsertAfter(ReverseBegin().m_pCurrent, value);
- }
-
- /**
- * Get an iterator pointing to a value in the list.
- *
- * @param value [in] The searched value
- *
- * @return End() if value doesn't exist
- */
- ConstIterator Find(T const& value) const
- {
- ConstIterator iter = Begin();
- for (; iter != End(); ++iter)
- {
- if (*iter == value)
- break;
- }
- return iter;
- }
-
- /**
- * Get an iterator pointing to a value in the list.
- *
- * @param value [in] The searched value
- *
- * @return End() if value doesn't exist
- */
- Iterator Find(T const& value)
- {
- ConstIterator iter = const_cast<const XnListT<T>*>(this)->Find(value);
- return Iterator(iter.m_pCurrent);
- }
-
- /**
- * Remove a value from the list
- *
- * @param where [in] Iterator pointing to an entry in the list
- *
- * @return XN_STATUS_ILLEGAL_POSITION iterator was invalid
- */
- XnStatus Remove(ConstIterator where)
- {
- // Verify iterator is valid
- if (where == End())
- {
- return XN_STATUS_ILLEGAL_POSITION;
- }
-
- XnLinkedNodeT<T>* pToRemove = where.m_pCurrent;
-
- // Connect other nodes to bypass the one removed
- pToRemove->pPrev->pNext = pToRemove->pNext;
- pToRemove->pNext->pPrev = pToRemove->pPrev;
-
- --m_nSize;
-
- // Free memory
- TAlloc::Deallocate(pToRemove);
-
- return XN_STATUS_OK;
- }
-
- /**
- * Removes the first occurrence of a value from the list
- *
- * @param value [in] The value to be removed
- *
- * @return XN_STATUS_NO_MATCH value wasn't found.
- */
- XnStatus Remove(T const& value)
- {
- ConstIterator it = Find(value);
- if (it != End())
- {
- return Remove(it);
- }
- else
- {
- return XN_STATUS_NO_MATCH;
- }
- }
-
- /**
- * Remove all entries from the list
- */
- XnStatus Clear()
- {
- while (!IsEmpty())
- Remove(Begin());
-
- return XN_STATUS_OK;
- }
-
- /**
- * Check if list is empty
- */
- XnBool IsEmpty() const
- {
- return (m_nSize == 0);
- }
-
- /**
- * Gets the current size of the list
- */
- XnUInt32 Size() const
- {
- return m_nSize;
- }
-
- /**
- * Copies all values in the list to an array.
- *
- * @param pArray A pre-allocated array that values should be copied to. The allocation size can be
- determined using @ref Size().
- */
- void CopyTo(T* pArray) const
- {
- XN_ASSERT(pArray != NULL);
-
- XnUInt32 i = 0;
- for (ConstIterator iter = Begin(); iter != End(); ++iter, ++i)
- {
- pArray[i] = *iter;
- }
- }
-
-protected:
- /**
- * Add a new value to the list
- *
- * @param pAfter [in] The node after which to add the new value
- * @param val [in] The value to add to the list
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the list because no nodes are available,
- */
- XnStatus InsertAfter(LinkedNode* pAfter, T const& val)
- {
- // Get a node from the pool for the entry
- LinkedNode* pNewNode = TAlloc::Allocate(val);
- if (pNewNode == NULL)
- {
- XN_ASSERT(FALSE);
- return XN_STATUS_ALLOC_FAILED;
- }
- pNewNode->pPrev = pAfter;
- pNewNode->pNext = pAfter->pNext;
-
- // push new node to position
- pAfter->pNext->pPrev = pNewNode;
- pAfter->pNext = pNewNode;
-
- ++m_nSize;
-
- return XN_STATUS_OK;
- }
-
- // A dummy node, pointing to first node, and last node points back to it.
- LinkedNode m_anchor;
-
- XnUInt32 m_nSize;
-
-private:
- void Init()
- {
- m_anchor.pNext = &m_anchor;
- m_anchor.pPrev = &m_anchor;
- m_nSize = 0;
- }
-};
-
-#endif // _XNLISTT_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLog.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLog.h
deleted file mode 100644
index e26a0b50..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLog.h
+++ /dev/null
@@ -1,545 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_LOG_H_
-#define _XN_LOG_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnOS.h"
-#include "XnLogTypes.h"
-#include "XnDump.h"
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-
-/**
- * @name Initialization
- * Functions for initializing and shutting down the logger.
- * @{
- */
-
-/**
-* This function initializes the log system.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogInitSystem();
-
-/**
-* This function initializes the log from an INI file.
-*
-* @param csINIFile [in] The name of the INI file.
-* @param csSectionName [in] The name of the section to read values from.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogInitFromINIFile(const XnChar* csINIFile, const XnChar* csSectionName);
-
-/**
-* This function initializes the log from an XML file.
-*
-* @param strFileName [in] The name of the XML file.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogInitFromXmlFile(const XnChar* strFileName);
-
-/**
-* This function closes the log.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogClose();
-
-// @}
-
-/**
- * @name Filtering Log Messages
- * Functions for managing filters on the log system.
- * @{
- */
-
-/**
-* Sets the minimum severity to be output from a specific mask (logger name).
-*
-* @param strMask [in] Name of the logger.
-* @param minSeverity [in] Minimum severity to be output. Use @ref XN_LOG_SEVERITY_NONE to output nothing.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogSetMaskMinSeverity(const XnChar* strMask, XnLogSeverity minSeverity);
-
-/**
-* Gets the minimum severity to be output from a specific mask (logger name).
-*
-* @param strMask [in] Name of the logger.
-*
-* @returns The minimum severity, or @ref XN_LOG_SEVERITY_NONE is mask will output nothing.
-*/
-XN_C_API XnLogSeverity XN_C_DECL xnLogGetMaskMinSeverity(const XnChar* strMask);
-
-// @}
-
-/**
- * @name Log Writers
- * Functions for managing which writers are active in the log system (i.e. which outputs
- * will be generated).
- * @{
- */
-
-/**
- * Registers a new Log Writer to receive log entries.
- *
- * @param pWriter [in] The writer to register
- */
-XN_C_API XnStatus XN_C_DECL xnLogRegisterLogWriter(XnLogWriter* pWriter);
-
-/**
- * Unregisters a Log Writer from receiving log entries.
- *
- * @param pWriter [in] The writer to unregister
- */
-XN_C_API void XN_C_DECL xnLogUnregisterLogWriter(XnLogWriter* pWriter);
-
-/**
-* Configures if log entries will be printed to console.
-*
-* @param bConsoleOutput [in] TRUE to print log entries to console, FALSE otherwise.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogSetConsoleOutput(XnBool bConsoleOutput);
-
-/**
-* Configures if log entries will be printed to a log file.
-*
-* @param bFileOutput [in] TRUE to print log entries to the file, FALSE otherwise.
-*/
-XN_C_API XnStatus XN_C_DECL xnLogSetFileOutput(XnBool bFileOutput);
-
-// @}
-
-/**
- * @name File Output
- * Functions for configuring how files are created.
- * @{
- */
-
-/**
-* This function closes current log file, and starts a new one (if file writer is currently active)
-*/
-XN_C_API XnStatus XN_C_DECL xnLogStartNewFile();
-
-/**
-* Configures if log entries in file will include the file and line that caused them.
-*
-* @param bLineInfo [in] TRUE to print file and line, FALSE otherwise
-*/
-XN_C_API XnStatus XN_C_DECL xnLogSetLineInfo(XnBool bLineInfo);
-
-/**
- * Configures the folder under which logs will be written.
- *
- * @param strOutputFolder [in] Folder to write to
- */
-XN_C_API XnStatus XN_C_DECL xnLogSetOutputFolder(const XnChar* strOutputFolder);
-
-/**
- * Gets current log file name
- *
- * @param strFileName [in] A buffer to be filled
- * @param nBufferSize [in] The size of the buffer
- */
-XN_C_API XnStatus XN_C_DECL xnLogGetFileName(XnChar* strFileName, XnUInt32 nBufferSize);
-
-// @}
-
-/**
- * @name Logger API
- * Functions for writing entries to the log (used mainly by middleware developers)
- * @{
- */
-
-/**
-* Opens a logger for writing.
-*
-* @param strMask [in] Name of the logger to open.
-*/
-XN_C_API XnLogger* XN_C_DECL xnLoggerOpen(const XnChar* strMask);
-
-/**
-* Writes a single log entry.
-*
-* @param pLogger [in] Logger to write to
-* @param severity [in] Severity of the log entry
-* @param strFile [in] Name of the source file
-* @param nLine [in] Line in the source file
-* @param strFormat [in] Format string
-*
-* It is advised to use one of the @ref xnLoggerVerbose, @ref xnLoggerInfo, @ref xnLoggerWarning or
-* @ref xnLoggerError macros instead of calling this method directly.
-*/
-XN_C_API void XN_C_DECL xnLoggerWrite(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFile, XnUInt32 nLine, const XnChar* strFormat, ...);
-
-/**
-* Writes to a logger without an entry format (i.e. no timestamp, mask name, etc.)
-*
-* @param pLogger [in] Logger to write to
-* @param severity [in] Severity of the log entry
-* @param strFormat [in] Format string
-*/
-XN_C_API void XN_C_DECL xnLoggerWriteNoEntry(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFormat, ...);
-
-/**
-* Writes binary data to a logger, formatting it to readable text.
-*
-* @param pLogger [in] Logger to write to
-* @param severity [in] Severity of the log entry
-* @param strFile [in] Name of the source file
-* @param nLine [in] Line in the source file
-* @param pBinData [in] A pointer to the binary data to be written
-* @param nDataSize [in] The number of bytes to write
-* @param strFormat [in] Format string for the binary data header
-*/
-XN_C_API void XN_C_DECL xnLoggerWriteBinaryData(XnLogger* pLogger, XnLogSeverity severity, const XnChar* strFile, XnUInt32 nLine, XnUChar* pBinData, XnUInt32 nDataSize, const XnChar* strFormat, ...);
-
-/**
-* Checks if a specific severity is enabled for this logger.
-*
-* @param pLogger [in] Logger to check
-* @param severity [in] Severity to check.
-*/
-XN_C_API XnBool XN_C_DECL xnLoggerIsEnabled(XnLogger* pLogger, XnLogSeverity severity);
-
-/**
-* Closes a logger previsouly opened using @ref xnLoggerOpen().
-*
-* @param pLogger [in] The logger to be closed.
-*/
-XN_C_API void XN_C_DECL _xnLoggerClose(XnLogger* pLogger);
-
-/**
-* Closes a logger and NULLs the handle.
-*
-* @param pLogger [in] The logger to be closed.
-*/
-#define xnLoggerClose(pLogger) \
- { \
- _xnLoggerClose(pLogger); \
- pLogger = NULL; \
- }
-
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- /**
- * Helper macro for logging. Checks inline if logger is enabled and adds source file and line info.
- */
- #define xnLoggerWriteHelper(pLogger, severity, csFormat, ...) \
- if (pLogger != NULL && severity >= pLogger->nMinSeverity) \
- { \
- xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, __VA_ARGS__); \
- }
-
- /**
- * Helper macro for logging. Issues a verbose log entry.
- */
- #define xnLoggerVerbose(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat, __VA_ARGS__)
- /**
- * Helper macro for logging. Issues an info log entry.
- */
- #define xnLoggerInfo(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, __VA_ARGS__)
- /**
- * Helper macro for logging. Issues a warning log entry.
- */
- #define xnLoggerWarning(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, __VA_ARGS__)
- /**
- * Helper macro for logging. Issues an error log entry.
- */
- #define xnLoggerError(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, __VA_ARGS__)
-
- /**
- * Helper macro for returning from a function while logging
- *
- * @param pLogger [in] The logger to be closed.
- * @param nRetVal [in] The return value from the function.
- * @param severity [in] Severity of the log entry
- * @param csFormat [in] Format string
- */
- #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat, ...) \
- { \
- xnLoggerWriteHelper(pLogger, severity, csFormat, __VA_ARGS__); \
- return (nRetVal); \
- }
-
- /**
- * Helper macro for returning from a function while logging a warning
- *
- * @param pLogger [in] The logger to be closed.
- * @param nRetVal [in] The return value from the function.
- * @param csFormat [in] Format string
- */
- #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat, ...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat, __VA_ARGS__)
-
- /**
- * Helper macro for returning from a function while logging an error
- *
- * @param pLogger [in] The logger to be closed.
- * @param nRetVal [in] The return value from the function.
- * @param csFormat [in] Format string
- */
- #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat, ...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat, __VA_ARGS__)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define xnLoggerWriteHelper(pLogger, severity, csFormat, ...) \
- if (pLogger != NULL && severity >= pLogger->nMinSeverity) \
- { \
- xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, ##__VA_ARGS__); \
- }
-
- #define xnLoggerVerbose(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat,## __VA_ARGS__)
- #define xnLoggerInfo(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, ##__VA_ARGS__)
- #define xnLoggerWarning(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, ##__VA_ARGS__)
- #define xnLoggerError(pLogger, csFormat, ...) xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, ##__VA_ARGS__)
-
- /* Writes to the log and returns nRetVal */
- #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat, ...) \
- { \
- xnLoggerWriteHelper(pLogger, severity, csFormat, ##__VA_ARGS__); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat, ...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat, ##__VA_ARGS__)
-
- /* Logs an error and returns nRetVal */
- #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat, ...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat, ##__VA_ARGS__)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define xnLoggerWriteHelper(pLogger, severity, csFormat...) \
- if (pLogger != NULL && severity >= pLogger->nMinSeverity) \
- { \
- xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat); \
- }
-
- #define xnLoggerVerbose(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat)
- #define xnLoggerInfo(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat)
- #define xnLoggerWarning(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat)
- #define xnLoggerError(pLogger, csFormat...) xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat)
-
- /* Writes to the log and returns nRetVal */
- #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat...) \
- { \
- xnLoggerWriteHelper(pLogger, severity, csFormat); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat)
-
- /* Logs an error and returns nRetVal */
- #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat...) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
- #define xnLoggerWriteHelper(pLogger, severity, csFormat, arg) \
- if (pLogger != NULL && severity >= pLogger->nMinSeverity) \
- { \
- xnLoggerWrite(pLogger, severity, __FILE__, __LINE__, csFormat, arg); \
- }
-
- #define xnLoggerVerbose(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_VERBOSE, csFormat, arg)
- #define xnLoggerInfo(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_INFO, csFormat, arg)
- #define xnLoggerWarning(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_WARNING, csFormat, arg)
- #define xnLoggerError(pLogger, csFormat, arg) xnLoggerWriteHelper(pLogger, XN_LOG_ERROR, csFormat, arg)
-
- /* Writes to the log and returns nRetVal */
- #define XN_RETURN_WITH_LOG(pLogger, nRetVal, severity, csFormat) \
- { \
- xnLoggerWriteHelper(pLogger, severity, csFormat); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_RETURN_WITH_WARNING_LOG(pLogger, nRetVal, csFormat) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_WARNING, csFormat)
-
- /* Logs an error and returns nRetVal */
- #define XN_RETURN_WITH_ERROR_LOG(pLogger, nRetVal, csFormat) \
- XN_RETURN_WITH_LOG(pLogger, nRetVal, XN_LOG_ERROR, csFormat)
-
-#else
- #error Xiron Log - Unknown VAARGS type!
-#endif
-
-// @}
-
-/**
- * @name Misc.
- * Miscellaneous functions regarding the log system.
- * @{
- */
-
-/**
- * Creates a new file under the logs directory.
- *
- * @param strName [in] Name of the file to create
- * @param bSessionBased [in] TRUE for a session-based file, FALSE otherwise. A session based
- * file also includes the timestamp and process ID of the running
- * process as a prefix to its name.
- * @param csFullPath [in/out] A buffer to be filled with full path of the created file
- * @param nPathBufferSize [in] The size of the <c>csFullPath</c> buffer
- * @param phFile [out] The file handle
- */
-XN_C_API XnStatus XN_C_DECL xnLogCreateNewFile(const XnChar* strName, XnBool bSessionBased, XnChar* csFullPath, XnUInt32 nPathBufferSize, XN_FILE_HANDLE* phFile);
-
-// @}
-
-#define XN_MASK_RETVAL_CHECKS "RetValChecks"
-
-#if XN_PLATFORM == XN_PLATFORM_ARC
-extern "C" XnLogger* XN_LOGGER_RETVAL_CHECKS;
-#else
-XN_C_API XnLogger* XN_LOGGER_RETVAL_CHECKS;
-#endif
-
-/** Validates return value and writes log message with appropriate status string **/
-#define XN_IS_STATUS_OK_LOG_ERROR(what, nRetVal) \
- if (nRetVal != XN_STATUS_OK) \
- { \
- xnLoggerError(XN_LOGGER_RETVAL_CHECKS, "Failed to " what ": %s", xnGetStatusString(nRetVal)); \
- XN_ASSERT(FALSE); \
- return (nRetVal); \
- }
-
-
-#ifndef __XN_NO_BC__
-
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnLogSetMaskMinSeverity() instead") XN_C_DECL xnLogSetMaskState(const XnChar* csMask, XnBool bEnabled);
-XN_C_API XnStatus XN_API_DEPRECATED("Please use xnLogSetMaskMinSeverity() instead") XN_C_DECL xnLogSetSeverityFilter(XnLogSeverity nMinSeverity);
-XN_C_API XnBool XN_C_DECL xnLogIsEnabled(const XnChar* csLogMask, XnLogSeverity nSeverity);
-XN_C_API void XN_C_DECL xnLogWrite(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, const XnChar* csFormat, ...);
-XN_C_API void XN_C_DECL xnLogWriteNoEntry(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFormat, ...);
-XN_C_API void XN_C_DECL xnLogWriteBinaryData(const XnChar* csLogMask, XnLogSeverity nSeverity, const XnChar* csFile, XnUInt32 nLine, XnUChar* pBinData, XnUInt32 nDataSize, const XnChar* csFormat, ...);
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnLogCreateNewFile() instead") XN_C_DECL xnLogCreateFile(const XnChar* strFileName, XN_FILE_HANDLE* phFile);
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnLogCreateNewFile() instead") XN_C_DECL xnLogCreateFileEx(const XnChar* strFileName, XnBool bSessionBased, XN_FILE_HANDLE* phFile);
-
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define xnLogVerbose(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, __VA_ARGS__)
- #define xnLogInfo(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, __VA_ARGS__)
- #define xnLogWarning(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, __VA_ARGS__)
- #define xnLogError(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, __VA_ARGS__)
-
- /* Writes to the log and returns nRetVal */
- #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...) \
- { \
- xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, __VA_ARGS__); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, __VA_ARGS__)
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, __VA_ARGS__)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define xnLogVerbose(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
- #define xnLogInfo(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
- #define xnLogWarning(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
- #define xnLogError(csLogMask, csFormat, ...) xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, ##__VA_ARGS__)
-
- /* Writes to the log and returns nRetVal */
- #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat, ...) \
- { \
- xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, ##__VA_ARGS__); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, ...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, ##__VA_ARGS__)
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, ...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, ##__VA_ARGS__)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define xnLogVerbose(csLogMask, csFormat...) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat)
- #define xnLogInfo(csLogMask, csFormat...) xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat)
- #define xnLogWarning(csLogMask, csFormat...) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat)
- #define xnLogError(csLogMask, csFormat...) xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat)
-
- /* Writes to the log and returns nRetVal */
- #define XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat...) \
- { \
- xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat)
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat...) \
- XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat)
-
- /* If nRetVal is not ok, writes to the log and returns nRetVal */
- #define XN_IS_STATUS_OK_LOG(nRetVal, nSeverity, csLogMask, csFormat...) \
- if (nRetVal != XN_STATUS_OK) \
- { \
- XN_LOG_RETURN(nRetVal, nSeverity, csLogMask, csFormat) \
- }
-
- /* If nRetVal is not ok, logs a warning and returns nRetVal */
- #define XN_IS_STATUS_OK_WARNING(nRetVal, csLogMask, csFormat...) \
- XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_WARNING, csLogMask, csFormat)
-
- /* If nRetVal is not ok, logs an error and returns nRetVal */
- #define XN_IS_STATUS_OK_ERROR(nRetVal, csLogMask, csFormat...) \
- XN_IS_STATUS_OK_LOG(nRetVal, XN_LOG_ERROR, csLogMask, csFormat)
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_NO_VAARGS
- #define xnLogVerbose(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_VERBOSE, __FILE__, __LINE__, csFormat, args)
- #define xnLogInfo(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_INFO, __FILE__, __LINE__, csFormat, args)
- #define xnLogWarning(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_WARNING, __FILE__, __LINE__, csFormat, args)
- #define xnLogError(csLogMask, csFormat, args) xnLogWrite(csLogMask, XN_LOG_ERROR, __FILE__, __LINE__, csFormat, args)
-
- /* Writes to the log and returns nRetVal */
- #define XN_LOG_RETURN(nRetVal, nSeverity csLogMask, csFormat, args) \
- { \
- xnLogWrite(csLogMask, nSeverity, __FILE__, __LINE__, csFormat, args); \
- return (nRetVal); \
- }
-
- /* Logs a warning and returns nRetVal */
- #define XN_LOG_WARNING_RETURN(nRetVal, csLogMask, csFormat, args) \
- XN_LOG_RETURN(nRetVal, XN_LOG_WARNING, csLogMask, csFormat, args)
-
- /* Logs an error and returns nRetVal */
- #define XN_LOG_ERROR_RETURN(nRetVal, csLogMask, csFormat, args) \
- XN_LOG_RETURN(nRetVal, XN_LOG_ERROR, csLogMask, csFormat, args)
-
-#else
- #error Xiron Log - Unknown VAARGS type!
-#endif
-
-#endif // ifndef __XN_NO_BC__
-
-#endif //_XN_LOG_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogTypes.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogTypes.h
deleted file mode 100644
index c8da2b87..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogTypes.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_LOG_TYPES_H__
-#define __XN_LOG_TYPES_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-#include "XnTypes.h"
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_LOG_DIR_NAME "Log"
-#define XN_MASK_LOG "Log"
-#define XN_LOG_MASK_ALL "ALL"
-#define XN_LOG_MAX_MASK_NAME 16
-
-//---------------------------------------------------------------------------
-// Enums
-//---------------------------------------------------------------------------
-typedef enum XnLogSeverity
-{
- XN_LOG_VERBOSE = 0,
- XN_LOG_INFO = 1,
- XN_LOG_WARNING = 2,
- XN_LOG_ERROR = 3,
- XN_LOG_SEVERITY_NONE = 10,
-} XnLogSeverity;
-
-//---------------------------------------------------------------------------
-// Structs
-//---------------------------------------------------------------------------
-typedef struct XnLogger
-{
- volatile XnLogSeverity nMinSeverity;
- void* pInternal;
-} XnLogger;
-
-typedef struct XnLogEntry
-{
- XnUInt64 nTimestamp;
- XnLogSeverity nSeverity;
- const XnChar* strSeverity;
- const XnChar* strMask;
- const XnChar* strMessage;
- const XnChar* strFile;
- XnUInt32 nLine;
-} XnLogEntry;
-
-typedef struct XnLogWriter
-{
- void* pCookie;
- void (XN_CALLBACK_TYPE* WriteEntry)(const XnLogEntry* pEntry, void* pCookie);
- void (XN_CALLBACK_TYPE* WriteUnformatted)(const XnChar* strMessage, void* pCookie);
- void (XN_CALLBACK_TYPE* OnConfigurationChanged)(void* pCookie);
- void (XN_CALLBACK_TYPE* OnClosing)(void* pCookie);
-} XnLogWriter;
-
-#endif // __XN_LOG_TYPES_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogWriterBase.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogWriterBase.h
deleted file mode 100644
index 33bed1c6..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnLogWriterBase.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_LOG_WRITER_BASE_H__
-#define __XN_LOG_WRITER_BASE_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnLogTypes.h>
-#include <XnLog.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-class XnLogWriterBase
-{
-public:
- XnLogWriterBase() : m_bRegistered(FALSE)
- {
- m_cObject.pCookie = this;
- m_cObject.WriteEntry = WriteEntryCallback;
- m_cObject.WriteUnformatted = WriteUnformattedCallback;
- m_cObject.OnConfigurationChanged = OnConfigurationChangedCallback;
- m_cObject.OnClosing = OnClosingCallback;
- }
-
- virtual ~XnLogWriterBase()
- {
- Unregister();
- }
-
- XnStatus Register()
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- if (!m_bRegistered)
- {
- OnRegister();
-
- nRetVal = xnLogRegisterLogWriter(&m_cObject);
- if (nRetVal != XN_STATUS_OK)
- {
- OnUnregister();
- return (nRetVal);
- }
-
- m_bRegistered = TRUE;
- }
-
- return (XN_STATUS_OK);
- }
-
- void Unregister()
- {
- if (m_bRegistered)
- {
- xnLogUnregisterLogWriter(&m_cObject);
- m_bRegistered = FALSE;
-
- OnUnregister();
- }
- }
-
- inline XnBool IsRegistered() { return m_bRegistered; }
-
- virtual void WriteEntry(const XnLogEntry* pEntry) = 0;
- virtual void WriteUnformatted(const XnChar* strMessage) = 0;
- virtual void OnConfigurationChanged() {};
- virtual void OnClosing()
- {
- Unregister();
- };
-
- operator const XnLogWriter*() const
- {
- return &m_cObject;
- }
-
-protected:
- virtual void OnRegister() {}
- virtual void OnUnregister() {}
-
-private:
- static void XN_CALLBACK_TYPE WriteEntryCallback(const XnLogEntry* pEntry, void* pCookie)
- {
- XnLogWriterBase* pThis = (XnLogWriterBase*)pCookie;
- pThis->WriteEntry(pEntry);
- }
- static void XN_CALLBACK_TYPE WriteUnformattedCallback(const XnChar* strMessage, void* pCookie)
- {
- XnLogWriterBase* pThis = (XnLogWriterBase*)pCookie;
- pThis->WriteUnformatted(strMessage);
- }
- static void XN_CALLBACK_TYPE OnConfigurationChangedCallback(void* pCookie)
- {
- XnLogWriterBase* pThis = (XnLogWriterBase*)pCookie;
- pThis->OnConfigurationChanged();
- }
- static void XN_CALLBACK_TYPE OnClosingCallback(void* pCookie)
- {
- XnLogWriterBase* pThis = (XnLogWriterBase*)pCookie;
- pThis->OnClosing();
- }
-
- XnLogWriter m_cObject;
- XnBool m_bRegistered;
-};
-
-#endif // __XN_LOG_WRITER_BASE_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnMacros.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnMacros.h
deleted file mode 100644
index 694bc2ad..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnMacros.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_MACROS_H_
-#define _XN_MACROS_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnStatusCodes.h"
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-
-/** Returns the (x)th power of 2. */
-#define XN_SETBITMASK(x) (1 << x-1)
-
-/** Returns Y if X is NULL. */
-#define XN_RET_IF_NULL(x, y) \
- if (x == NULL) \
- { \
- return (y); \
- }
-
-/** Returns Y if X isn't XN_STATUS_OK. */
-#define XN_IS_STATUS_OK_RET(x, y) \
- if (x != XN_STATUS_OK) \
- { \
- return (y); \
- }
-
-/** Jumps to the ErrorCleanUp label if X isn't XN_STATUS_OK and return Y. */
-#define XN_IS_STATUS_OK_GOCLEANUP_RET(x, y) \
- if (x != XN_STATUS_OK) \
- { \
- x = y; \
- goto ErrorCleanUp; \
- }
-
-/** Returns X if X isn't XN_STATUS_OK. */
-#define XN_IS_STATUS_OK(x) \
- XN_IS_STATUS_OK_RET(x, x)
-
-#define XN_IS_STATUS_OK_ASSERT(x) \
- if (x != XN_STATUS_OK) \
- { \
- XN_ASSERT(FALSE); \
- return (x); \
- }
-
-
-/** Jumps to the ErrorCleanUp label if X isn't XN_STATUS_OK. */
-#define XN_IS_STATUS_OK_GOCLEANUP(x) \
- if (x != XN_STATUS_OK) \
- { \
- goto ErrorCleanUp; \
- }
-
-/** Returns Y if X isn't XN_STATUS_OK. */
-#define XN_IS_BOOL_OK_RET(x, y) \
- if (x != TRUE) \
- { \
- return (y); \
- }
-
-/** Jumps to the ErrorCleanUp label if X isn't XN_STATUS_OK and returns Y. */
-#define XN_IS_BOOL_OK_GOCLEANUP_RET(x, y) \
- if (x != TRUE) \
- { \
- goto ErrorCleanUp; \
- }
-
-/** Jumps to the ErrorCleanUp label if X isn't XN_STATUS_OK and returns Y. */
-#define XN_GOCLEANUP_RET(x, y) \
- x = y; \
- goto ErrorCleanUp;
-
-/** Returns Y if X is null. */
-#define XN_VALIDATE_PTR(x,y) \
- if (x == NULL) \
- { \
- return (y); \
- }
-
-/** Returns an output overflow error if x is beyond y */
-#define XN_CHECK_INPUT_OVERFLOW(x, y) \
- if (x > y) \
- { \
- return (XN_STATUS_INPUT_BUFFER_OVERFLOW); \
- }
-
-/** Returns an input overflow error if x is beyond y */
-#define XN_CHECK_OUTPUT_OVERFLOW(x, y) \
- if (x > y) \
- { \
- return (XN_STATUS_OUTPUT_BUFFER_OVERFLOW); \
- }
-
-/** Disables Copy ctor and assignment operator. Should be placed under "private:" section. */
-#define XN_DISABLE_COPY_AND_ASSIGN(TypeName) \
- TypeName(const TypeName&); \
- void operator=(const TypeName&);
-
-/** Disables the "local variable is initialized but not referenced" warning (if you need
- to use this variable in an assert */
-#define XN_REFERENCE_VARIABLE(x) \
- ((void)x)
-
-#endif //_XN_MACROS_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCFunctions.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCFunctions.h
deleted file mode 100644
index f588a0a0..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCFunctions.h
+++ /dev/null
@@ -1,1995 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef XN_MODULE_C_FUNCTIONS_H_
-#define XN_MODULE_C_FUNCTIONS_H_
-
-#include "XnModuleCppInterface.h"
-
-using namespace xn;
-
-#ifdef XN_NO_DYNAMIC_CAST
-#include "XnDerivedCast.h"
-#endif
-
-#define _XN_VALIDATE_CAPABILITY_INTERFACE_RET(capInterface, retVal) \
- if (capInterface == NULL) \
- return retVal;
-
-#define _XN_VALIDATE_CAPABILITY_INTERFACE(capInterface) \
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(capInterface, XN_STATUS_INVALID_OPERATION)
-
-XnBool XN_CALLBACK_TYPE __ModuleIsCapabilitySupported(XnModuleNodeHandle hInstance, const XnChar* strCapabilityName)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->IsCapabilitySupported(strCapabilityName);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleInitNotifications(XnModuleNodeHandle hInstance, XnNodeNotifications* pNotifications, void* pCookie)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleExtendedSerializationInterface* pInterface = pNode->GetExtendedSerializationInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->NotifyExState(pNotifications, pCookie);
-}
-void XN_CALLBACK_TYPE __ModuleStopNotifications(XnModuleNodeHandle hInstance)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleExtendedSerializationInterface* pInterface = pNode->GetExtendedSerializationInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterExNotifications();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetLockState(XnModuleNodeHandle hInstance, XnBool bLocked)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleLockAwareInterface* pInterface = pNode->GetLockAwareInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetLockState(bLocked);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleGetLockState(XnModuleNodeHandle hInstance)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleLockAwareInterface* pInterface = pNode->GetLockAwareInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->GetLockState();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToLockChange(XnModuleNodeHandle hInstance, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleLockAwareInterface* pInterface = pNode->GetLockAwareInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToLockChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromLockChange(XnModuleNodeHandle hInstance, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleLockAwareInterface* pInterface = pNode->GetLockAwareInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromLockChange(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetErrorState(XnModuleNodeHandle hInstance)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleErrorStateInterface* pInterface = pNode->GetErrorStateInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, XN_STATUS_OK);
- return pInterface->GetErrorState();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToErrorStateChange(XnModuleNodeHandle hInstance, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleErrorStateInterface* pInterface = pNode->GetErrorStateInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToErrorStateChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromErrorStateChange(XnModuleNodeHandle hInstance, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleErrorStateInterface* pInterface = pNode->GetErrorStateInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromErrorStateChange(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGeneralIntGetRange(XnModuleNodeHandle hInstance, const XnChar* strCap, XnInt32* pnMin, XnInt32* pnMax, XnInt32* pnStep, XnInt32* pnDefault, XnBool* pbIsAutoSupported)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleGeneralIntInterface* pInterface = pNode->GetGeneralIntInterface(strCap);
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetRange(strCap, *pnMin, *pnMax, *pnStep, *pnDefault, *pbIsAutoSupported);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGeneralIntGet(XnModuleNodeHandle hInstance, const XnChar* strCap, XnInt32* pnValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleGeneralIntInterface* pInterface = pNode->GetGeneralIntInterface(strCap);
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->Get(strCap, *pnValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGeneralIntSet(XnModuleNodeHandle hInstance, const XnChar* strCap, XnInt32 nValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleGeneralIntInterface* pInterface = pNode->GetGeneralIntInterface(strCap);
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->Set(strCap, nValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGeneralIntRegisterToValueChange
- (XnModuleNodeHandle hInstance, const XnChar* strCap, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleGeneralIntInterface* pInterface = pNode->GetGeneralIntInterface(strCap);
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToValueChange(strCap, handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleGeneralIntUnregisterFromValueChange
- (XnModuleNodeHandle hInstance, const XnChar* strCap, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- ModuleGeneralIntInterface* pInterface = pNode->GetGeneralIntInterface(strCap);
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromValueChange(strCap, hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetIntProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt64 nValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->SetIntProperty(strName, nValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetRealProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnDouble dValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->SetRealProperty(strName, dValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetStringProperty(XnModuleNodeHandle hInstance, const XnChar* strName, const XnChar* strValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->SetStringProperty(strName, strValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetGeneralProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, const void* pBuffer)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->SetGeneralProperty(strName, nBufferSize, pBuffer);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetIntProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt64* pnValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->GetIntProperty(strName, *pnValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetRealProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnDouble* pdValue)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->GetRealProperty(strName, *pdValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetStringProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnChar* csValue, XnUInt32 nBufSize)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->GetStringProperty(strName, csValue, nBufSize);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetGeneralProperty(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, void* pBuffer)
-{
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance;
- return pNode->GetGeneralProperty(strName, nBufferSize, pBuffer);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetOutputStream(XnModuleNodeHandle hInstance, void *pCookie, XnRecorderOutputStreamInterface *pStream)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->SetOutputStream(pCookie, pStream);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetInputStream(XnModuleNodeHandle hInstance, void *pStreamCookie, XnPlayerInputStreamInterface *pStream)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->SetInputStream(pStreamCookie, pStream);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleReadNext(XnModuleNodeHandle hInstance)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->ReadNext();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetRepeat(XnModuleNodeHandle hInstance, XnBool bRepeat)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->SetRepeat(bRepeat);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSeekToTimeStamp(XnModuleNodeHandle hInstance, XnInt64 nTimeOffset, XnPlayerSeekOrigin origin)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->SeekToTimeStamp(nTimeOffset, origin);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSeekToFrame(XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->SeekToFrame(strNodeName, nFrameOffset, origin);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleTellTimestamp(XnModuleNodeHandle hInstance, XnUInt64* pnTimestamp)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->TellTimestamp(*pnTimestamp);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleTellFrame(XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnUInt32* pnFrame)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->TellFrame(strNodeName, *pnFrame);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetNumFrames(XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnUInt32* pnFrames)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->GetNumFrames(strNodeName, *pnFrames);
-}
-
-const XnChar* XN_CALLBACK_TYPE __ModuleGetSupportedFormat(XnModuleNodeHandle hInstance)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->GetSupportedFormat();
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsEOF(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->IsEOF();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToEndOfFileReached(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->RegisterToEndOfFileReached(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromEndOfFileReached(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- pNode->UnregisterFromEndOfFileReached(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetNodeNotifications(XnModuleNodeHandle hInstance, void *pNodeNotificationsCookie, XnNodeNotifications *pNodeNotifications)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModulePlayer* pNode = dynamic_cast<ModulePlayer*>(pProdNode);
- return pNode->SetNodeNotifications(pNodeNotificationsCookie, pNodeNotifications);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeAdded(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, XnProductionNodeType type, XnCodecID compression)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeAdded(strNodeName, type, compression);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeRemoved(XnModuleNodeHandle hGenerator, const XnChar *strNodeName)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeRemoved(strNodeName);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeIntPropChanged(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, const XnChar* strPropName, XnUInt64 nValue)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeIntPropChanged(strNodeName, strPropName, nValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeRealPropChanged(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, const XnChar* strPropName, XnDouble dValue)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeRealPropChanged(strNodeName, strPropName, dValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeStringPropChanged(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, const XnChar* strPropName, const XnChar* strValue)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeStringPropChanged(strNodeName, strPropName, strValue);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeGeneralPropChanged(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeGeneralPropChanged(strNodeName, strPropName, nBufferSize, pBuffer);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeNewData(XnModuleNodeHandle hGenerator, const XnChar *strNodeName, XnUInt64 nTimeStamp, XnUInt32 nFrame, const void *pData, XnUInt32 nSize)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeNewData(strNodeName, nTimeStamp, nFrame, pData, nSize);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleOnNodeStateReady(XnModuleNodeHandle hGenerator, const XnChar *strNodeName)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleRecorder* pNode = dynamic_cast<ModuleRecorder*>(pProdNode);
- return pNode->OnNodeStateReady(strNodeName);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetDeviceName(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModuleDevice* pNode = dynamic_cast<ModuleDevice*>(pProdNode);
- ModuleDeviceIdentificationInterface* pInterface = pNode->GetIdentificationInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetDeviceName(strBuffer, *pnBufferSize);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetVendorSpecificData(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModuleDevice* pNode = dynamic_cast<ModuleDevice*>(pProdNode);
- ModuleDeviceIdentificationInterface* pInterface = pNode->GetIdentificationInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetVendorSpecificData(strBuffer, *pnBufferSize);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetSerialNumber(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hInstance;
- ModuleDevice* pNode = dynamic_cast<ModuleDevice*>(pProdNode);
- ModuleDeviceIdentificationInterface* pInterface = pNode->GetIdentificationInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetSerialNumber(strBuffer, *pnBufferSize);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetMirror(XnModuleNodeHandle hGenerator, XnBool bMirror)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleMirrorInterface* pInterface = pNode->GetMirrorInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetMirror(bMirror);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsMirrored(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleMirrorInterface* pInterface = pNode->GetMirrorInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsMirrored();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToMirrorChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleMirrorInterface* pInterface = pNode->GetMirrorInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToMirrorChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromMirrorChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleMirrorInterface* pInterface = pNode->GetMirrorInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromMirrorChange(hCallback);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsViewPointSupported(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ProductionNode node(hNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsViewPointSupported(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetViewPoint(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ProductionNode node(hNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetViewPoint(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleResetViewPoint(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->ResetViewPoint();
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsViewPointAs(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- ProductionNode node(hNode);
- return pInterface->IsViewPointAs(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToViewPointChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToViewPointChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromViewPointChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleAlternativeViewPointInterface* pInterface = pNode->GetAlternativeViewPointInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromViewPointChange(hCallback);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleCanFrameSyncWith(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- ProductionNode node(hNode);
- return pInterface->CanFrameSyncWith(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleFrameSyncWith(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- ProductionNode node(hNode);
- return pInterface->FrameSyncWith(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleStopFrameSyncWith(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- ProductionNode node(hNode);
- return pInterface->StopFrameSyncWith(node);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsFrameSyncedWith(XnModuleNodeHandle hGenerator, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- ProductionNode node(hNode);
- return pInterface->IsFrameSyncedWith(node);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToFrameSyncChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToFrameSyncChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromFrameSyncChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- ModuleFrameSyncInterface* pInterface = pNode->GetFrameSyncInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromFrameSyncChange(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleStartGenerating(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->StartGenerating();
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsGenerating(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->IsGenerating();
-}
-
-void XN_CALLBACK_TYPE __ModuleStopGenerating(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- pNode->StopGenerating();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToGenerationRunningChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->RegisterToGenerationRunningChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromGenerationRunningChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- pNode->UnregisterFromGenerationRunningChange(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToNewDataAvailable(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->RegisterToNewDataAvailable(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromNewDataAvailable(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- pNode->UnregisterFromNewDataAvailable(hCallback);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsNewDataAvailable(XnModuleNodeHandle hGenerator, XnUInt64* pnTimestamp)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->IsNewDataAvailable(*pnTimestamp);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleUpdateData(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->UpdateData();
-}
-
-const void* XN_CALLBACK_TYPE __ModuleGetData(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->GetData();
-}
-
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetDataSize(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->GetDataSize();
-}
-
-XnUInt64 XN_CALLBACK_TYPE __ModuleGetTimestamp(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->GetTimestamp();
-}
-
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetFrameID(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGenerator* pNode = dynamic_cast<ModuleGenerator*>(pProdNode);
- return pNode->GetFrameID();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetCropping(XnModuleNodeHandle hGenerator, const XnCropping* pCropping)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleCroppingInterface* pInterface = pNode->GetCroppingInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetCropping(*pCropping);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetCropping(XnModuleNodeHandle hGenerator, XnCropping* pCropping)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleCroppingInterface* pInterface = pNode->GetCroppingInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetCropping(*pCropping);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToCroppingChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleCroppingInterface* pInterface = pNode->GetCroppingInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToCroppingChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromCroppingChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleCroppingInterface* pInterface = pNode->GetCroppingInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromCroppingChange(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetPowerLineFrequency(XnModuleNodeHandle hGenerator, XnPowerLineFrequency nFrequency)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleAntiFlickerInterface* pInterface = pNode->GetAntiFlickerInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetPowerLineFrequency(nFrequency);
-}
-
-XnPowerLineFrequency XN_CALLBACK_TYPE __ModuleGetPowerLineFrequency(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleAntiFlickerInterface* pInterface = pNode->GetAntiFlickerInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, XN_POWER_LINE_FREQUENCY_OFF);
- return pInterface->GetPowerLineFrequency();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToPowerLineFrequencyChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleAntiFlickerInterface* pInterface = pNode->GetAntiFlickerInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToPowerLineFrequencyChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromPowerLineFrequencyChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- ModuleAntiFlickerInterface* pInterface = pNode->GetAntiFlickerInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromPowerLineFrequencyChange(hCallback);
-}
-
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetSupportedMapOutputModesCount(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->GetSupportedMapOutputModesCount();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetSupportedMapOutputModes(XnModuleNodeHandle hGenerator, XnMapOutputMode* aModes, XnUInt32* pnCount)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->GetSupportedMapOutputModes(aModes, *pnCount);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetMapOutputMode(XnModuleNodeHandle hGenerator, const XnMapOutputMode* pOutputMode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->SetMapOutputMode(*pOutputMode);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetMapOutputMode(XnModuleNodeHandle hGenerator, XnMapOutputMode* pOutputMode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->GetMapOutputMode(*pOutputMode);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToMapOutputModeChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->RegisterToMapOutputModeChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromMapOutputModeChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- pNode->UnregisterFromMapOutputModeChange(hCallback);
-}
-
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetBytesPerPixel(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleMapGenerator* pNode = dynamic_cast<ModuleMapGenerator*>(pProdNode);
- return pNode->GetBytesPerPixel();
-}
-
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetSupportedUserPositionsCount(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- ModuleUserPositionInterface* pInterface = pNode->GetUserPositionInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, 0);
- return pInterface->GetSupportedUserPositionsCount();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetUserPosition(XnModuleNodeHandle hGenerator, XnUInt32 nIndex, const XnBoundingBox3D* pPosition)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- ModuleUserPositionInterface* pInterface = pNode->GetUserPositionInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetUserPosition(nIndex, *pPosition);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleGetUserPosition(XnModuleNodeHandle hGenerator, XnUInt32 nIndex, XnBoundingBox3D* pPosition)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- ModuleUserPositionInterface* pInterface = pNode->GetUserPositionInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetUserPosition(nIndex, *pPosition);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToUserPositionChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- ModuleUserPositionInterface* pInterface = pNode->GetUserPositionInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToUserPositionChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromUserPositionChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- ModuleUserPositionInterface* pInterface = pNode->GetUserPositionInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromUserPositionChange(hCallback);
-}
-
-XnDepthPixel XN_CALLBACK_TYPE __ModuleGetDeviceMaxDepth(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- return pNode->GetDeviceMaxDepth();
-}
-
-void XN_CALLBACK_TYPE __ModuleGetFieldOfView(XnModuleNodeHandle hGenerator, XnFieldOfView* pFOV)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- pNode->GetFieldOfView(*pFOV);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToFieldOfViewChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- return pNode->RegisterToFieldOfViewChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromFieldOfViewChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- pNode->UnregisterFromFieldOfViewChange(hCallback);
-}
-
-XnDepthPixel* XN_CALLBACK_TYPE __ModuleGetDepthMap(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleDepthGenerator* pNode = dynamic_cast<ModuleDepthGenerator*>(pProdNode);
- return pNode->GetDepthMap();
-}
-
-XnUInt8* XN_CALLBACK_TYPE __ModuleGetImageMap(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- return pNode->GetImageMap();
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsPixelFormatSupported(XnModuleNodeHandle hGenerator, XnPixelFormat Format)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- return pNode->IsPixelFormatSupported(Format);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleSetPixelFormat(XnModuleNodeHandle hGenerator, XnPixelFormat Format)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- return pNode->SetPixelFormat(Format);
-}
-
-XnPixelFormat XN_CALLBACK_TYPE __ModuleGetPixelFormat(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- return pNode->GetPixelFormat();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToPixelFormatChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- return pNode->RegisterToPixelFormatChange(handler, pCookie, *phCallback);
-}
-
-void XN_CALLBACK_TYPE __ModuleUnregisterFromPixelFormatChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleImageGenerator* pNode = dynamic_cast<ModuleImageGenerator*>(pProdNode);
- pNode->UnregisterFromPixelFormatChange(hCallback);
-}
-
-XnIRPixel* XN_CALLBACK_TYPE __ModuleGetIRMap(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleIRGenerator* pNode = dynamic_cast<ModuleIRGenerator*>(pProdNode);
- return pNode->GetIRMap();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleAddGesture(XnModuleNodeHandle hGenerator, const XnChar* strGesture, XnBoundingBox3D* pArea)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->AddGesture(strGesture, pArea);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRemoveGesture(XnModuleNodeHandle hGenerator, const XnChar* strGesture)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->RemoveGesture(strGesture);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetActiveGestures(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt16* pnGestures)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->GetActiveGestures(pstrGestures, *pnGestures);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetAllActiveGestures(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* pnGestures)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->GetAllActiveGestures(pstrGestures, nNameLength, *pnGestures);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleEnumerateGestures(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt16* pnGestures)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->EnumerateGestures(pstrGestures, *pnGestures);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleEnumerateAllGestures(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* pnGestures)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->EnumerateAllGestures(pstrGestures, nNameLength, *pnGestures);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsGestureAvailable(XnModuleNodeHandle hGenerator, const XnChar* strGesture)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->IsGestureAvailable(strGesture);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsGestureProgressSupported(XnModuleNodeHandle hGenerator, const XnChar* strGesture)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->IsGestureProgressSupported(strGesture);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterGestureCallbacks(XnModuleNodeHandle hGenerator, XnModuleGestureRecognized RecognizedCB, XnModuleGestureProgress ProgressCB, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->RegisterGestureCallbacks(RecognizedCB, ProgressCB, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterGestureCallbacks(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- pNode->UnregisterGestureCallbacks(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToGestureChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->RegisterToGestureChange(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromGestureChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- pNode->UnregisterFromGestureChange(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToGestureIntermediateStageCompleted(XnModuleNodeHandle hGenerator, XnModuleGestureIntermediateStageCompleted handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->RegisterToGestureIntermediateStageCompleted(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromGestureIntermediateStageCompleted(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- pNode->UnregisterFromGestureIntermediateStageCompleted(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToGestureReadyForNextIntermediateStage(XnModuleNodeHandle hGenerator, XnModuleGestureReadyForNextIntermediateStage handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- return pNode->RegisterToGestureReadyForNextIntermediateStage(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromGestureReadyForNextIntermediateStage(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleGestureGenerator* pNode = dynamic_cast<ModuleGestureGenerator*>(pProdNode);
- pNode->UnregisterFromGestureReadyForNextIntermediateStage(hCallback);
-}
-
-const XnLabel* XN_CALLBACK_TYPE __ModuleGetLabelMap(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleSceneAnalyzer* pNode = dynamic_cast<ModuleSceneAnalyzer*>(pProdNode);
- return pNode->GetLabelMap();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetFloor(XnModuleNodeHandle hGenerator, XnPlane3D* pPlane)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleSceneAnalyzer* pNode = dynamic_cast<ModuleSceneAnalyzer*>(pProdNode);
- return pNode->GetFloor(*pPlane);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterHandCallbacks(XnModuleNodeHandle hGenerator, XnModuleHandCreate CreateCB, XnModuleHandUpdate UpdateCB, XnModuleHandDestroy DestroyCB, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- return pNode->RegisterHandCallbacks(CreateCB, UpdateCB, DestroyCB, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterHandCallbacks(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- pNode->UnregisterHandCallbacks(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStopTracking(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- return pNode->StopTracking(user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStopTrackingAll(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- return pNode->StopTrackingAll();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStartTracking(XnModuleNodeHandle hGenerator, const XnPoint3D* pPosition)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- return pNode->StartTracking(*pPosition);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSetTrackingSmoothing(XnModuleNodeHandle hGenerator, XnFloat fSmoothingFactor)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- return pNode->SetSmoothing(fSmoothingFactor);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToHandTouchingFOVEdgeCallback(XnModuleNodeHandle hGenerator, XnModuleHandTouchingFOVEdge handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- ModuleHandTouchingFOVEdgeInterface* pInterface = pNode->GetHandTouchingFOVEdgeInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToHandTouchingFOVEdge(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromHandTouchingFOVEdgeCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleHandsGenerator* pNode = dynamic_cast<ModuleHandsGenerator*>(pProdNode);
- ModuleHandTouchingFOVEdgeInterface* pInterface = pNode->GetHandTouchingFOVEdgeInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, );
- pInterface->UnregisterFromHandTouchingFOVEdge(hCallback);
-}
-
-XnBool XN_CALLBACK_TYPE __ModuleIsJointAvailable(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsJointAvailable(eJoint);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsProfileAvailable(XnModuleNodeHandle hGenerator, XnSkeletonProfile eProfile)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsProfileAvailable(eProfile);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSetSkeletonProfile(XnModuleNodeHandle hGenerator, XnSkeletonProfile eProfile)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetSkeletonProfile(eProfile);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSetJointActive(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint, XnBool bState)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetJointActive(eJoint, bState);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsJointActive(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsJointActive(eJoint);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToJointConfigurationChange(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToJointConfigurationChange(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromJointConfigurationChange(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromJointConfigurationChange(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleEnumerateActiveJoints(XnModuleNodeHandle hGenerator, XnSkeletonJoint* pJoints, XnUInt16* pnJoints)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->EnumerateActiveJoints(pJoints, *pnJoints);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetSkeletonJoint(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation* pJoint)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetSkeletonJoint(user, eJoint, *pJoint);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetSkeletonJointPosition(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition* pJoint)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetSkeletonJointPosition(user, eJoint, *pJoint);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetSkeletonJointOrientation(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation* pJoint)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetSkeletonJointOrientation(user, eJoint, *pJoint);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsSkeletonTracking(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsTracking(user);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsSkeletonCalibrated(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsCalibrated(user);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsSkeletonCalibrating(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsCalibrating(user);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRequestSkeletonCalibration(XnModuleNodeHandle hGenerator, XnUserID user, XnBool bForce)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RequestCalibration(user, bForce);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleAbortSkeletonCalibration(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->AbortCalibration(user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSaveCalibrationDataToFile(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strFileName)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SaveCalibrationDataToFile(user, strFileName);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleLoadCalibrationDataFromFile(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strFileName)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->LoadCalibrationDataFromFile(user, strFileName);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSaveCalibrationData(XnModuleNodeHandle hGenerator, XnUserID user, XnUInt32 nSlot)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SaveCalibrationData(user, nSlot);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleLoadCalibrationData(XnModuleNodeHandle hGenerator, XnUserID user, XnUInt32 nSlot)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->LoadCalibrationData(user, nSlot);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleClearCalibrationData(XnModuleNodeHandle hGenerator, XnUInt32 nSlot)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->ClearCalibrationData(nSlot);
-}
-XnBool XN_CALLBACK_TYPE __ModuleIsCalibrationData(XnModuleNodeHandle hGenerator, XnUInt32 nSlot)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->IsCalibrationData(nSlot);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStartSkeletonTracking(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->StartTracking(user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStopSkeletonTracking(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->StopTracking(user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleResetSkeleton(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->Reset(user);
-}
-XnBool XN_CALLBACK_TYPE __ModuleNeedPoseForSkeletonCalibration(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, FALSE);
- return pInterface->NeedPoseForCalibration();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetSkeletonCalibrationPose(XnModuleNodeHandle hGenerator, XnChar* strPose)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetCalibrationPose(strPose);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSetSkeletonSmoothing(XnModuleNodeHandle hGenerator, XnFloat fSmoothingFactor)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->SetSmoothing(fSmoothingFactor);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterCalibrationCallbacks(XnModuleNodeHandle hGenerator, XnModuleCalibrationStart CalibrationStartCB, XnModuleCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterCalibrationCallbacks(CalibrationStartCB, CalibrationEndCB, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterCalibrationCallbacks(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterCalibrationCallbacks(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToCalibrationStartCallback(XnModuleNodeHandle hGenerator, XnModuleCalibrationStart handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToCalibrationStart(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromCalibrationStartCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromCalibrationStart(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToCalibrationInProgressCallback(XnModuleNodeHandle hGenerator, XnModuleCalibrationInProgress handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToCalibrationInProgress(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromCalibrationInProgressCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromCalibrationInProgress(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToCalibrationCompleteCallback(XnModuleNodeHandle hGenerator, XnModuleCalibrationComplete handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToCalibrationComplete(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromCalibrationCompleteCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModuleSkeletonInterface* pInterface = pNode->GetSkeletonInterface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromCalibrationComplete(hCallback);
-}
-///
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetNumberOfPoses(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface, 0);
- return pInterface->GetNumberOfPoses();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetAvailablePoses(XnModuleNodeHandle hGenerator, XnChar** pstrPoses, XnUInt32* pnPoses)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetAvailablePoses(pstrPoses, *pnPoses);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetAllAvailablePoses(XnModuleNodeHandle hGenerator, XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32* pnPoses)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->GetAllAvailablePoses(pstrPoses, nNameLength, *pnPoses);
-}
-
-
-XnStatus XN_CALLBACK_TYPE __ModuleStartPoseDetection(XnModuleNodeHandle hGenerator, const XnChar* strPose, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->StartPoseDetection(strPose, user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStopPoseDetection(XnModuleNodeHandle hGenerator, XnUserID user)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->StopPoseDetection(user);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleStopSinglePoseDetection(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strPose)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->StopSinglePoseDetection(user, strPose);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToPoseCallbacks(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback PoseDetectionStartCB, XnModulePoseDetectionCallback PoseDetectionEndCB, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToPoseDetectionCallbacks(PoseDetectionStartCB, PoseDetectionEndCB, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromPoseCallbacks(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromPoseDetectionCallbacks(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToPoseDetected(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToPoseDetected(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromPoseDetected(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromPoseDetected(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToOutOfPose(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToOutOfPose(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromOutOfPose(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromOutOfPose(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToPoseInProgressCallback(XnModuleNodeHandle hGenerator, XnModulePoseDetectionInProgressCallback handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE(pInterface);
- return pInterface->RegisterToPoseDetectionInProgress(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromPoseInProgressCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- ModulePoseDetectionInteface* pInterface = pNode->GetPoseDetectionInteface();
- _XN_VALIDATE_CAPABILITY_INTERFACE_RET(pInterface,);
- pInterface->UnregisterFromPoseDetectionInProgress(hCallback);
-}
-
-
-XnUInt16 XN_CALLBACK_TYPE __ModuleGetNumberOfUsers(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->GetNumberOfUsers();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetUsers(XnModuleNodeHandle hGenerator, XnUserID* pUsers, XnUInt16* pnUsers)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->GetUsers(pUsers, *pnUsers);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetUserCoM(XnModuleNodeHandle hGenerator, XnUserID user, XnPoint3D* pCoM)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->GetCoM(user, *pCoM);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetUserPixels(XnModuleNodeHandle hGenerator, XnUserID user, XnSceneMetaData* pScene)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->GetUserPixels(user, pScene);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterUserCallbacks(XnModuleNodeHandle hGenerator, XnModuleUserHandler NewUserCB, XnModuleUserHandler LostUserCB, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->RegisterUserCallbacks(NewUserCB, LostUserCB, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterUserCallbacks(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- pNode->UnregisterUserCallbacks(hCallback);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToUserExitCallback(XnModuleNodeHandle hGenerator, XnModuleUserHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->RegisterToUserExit(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromUserExitCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- pNode->UnregisterFromUserExit(hCallback);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToUserReEnterCallback(XnModuleNodeHandle hGenerator, XnModuleUserHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- return pNode->RegisterToUserReEnter(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromUserReEnterCallback(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleUserGenerator* pNode = dynamic_cast<ModuleUserGenerator*>(pProdNode);
- pNode->UnregisterFromUserReEnter(hCallback);
-}
-
-
-XnUChar* XN_CALLBACK_TYPE __ModuleGetAudioBuffer(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->GetAudioBuffer();
-}
-XnUInt32 XN_CALLBACK_TYPE __ModuleGetSupportedWaveOutputModesCount(XnModuleNodeHandle hGenerator)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->GetSupportedWaveOutputModesCount();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetSupportedWaveOutputModes(XnModuleNodeHandle hGenerator, XnWaveOutputMode* aSupportedModes, XnUInt32* pnCount)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->GetSupportedWaveOutputModes(aSupportedModes, *pnCount);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleSetWaveOutputMode(XnModuleNodeHandle hGenerator, const XnWaveOutputMode* pOutputMode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->SetWaveOutputMode(*pOutputMode);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleGetWaveOutputMode(XnModuleNodeHandle hGenerator, XnWaveOutputMode* pOutputMode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->GetWaveOutputMode(*pOutputMode);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleRegisterToWaveOutputModeChanges(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- return pNode->RegisterToWaveOutputModeChanges(handler, pCookie, *phCallback);
-}
-void XN_CALLBACK_TYPE __ModuleUnregisterFromWaveOutputModeChanges(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hGenerator;
- ModuleAudioGenerator* pNode = dynamic_cast<ModuleAudioGenerator*>(pProdNode);
- pNode->UnregisterFromWaveOutputModeChanges(hCallback);
-}
-
-XnCodecID XN_CALLBACK_TYPE __ModuleGetCodecID(XnModuleNodeHandle hCodec)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hCodec;
- ModuleCodec* pCodec = dynamic_cast<ModuleCodec*>(pProdNode);
- return pCodec->GetCodecID();
-}
-XnStatus XN_CALLBACK_TYPE __ModuleCodecInit(XnModuleNodeHandle hCodec, XnNodeHandle hNode)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hCodec;
- ModuleCodec* pCodec = dynamic_cast<ModuleCodec*>(pProdNode);
- return pCodec->Init(ProductionNode(hNode));
-}
-XnStatus XN_CALLBACK_TYPE __ModuleCompressData(XnModuleNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hCodec;
- ModuleCodec* pCodec = dynamic_cast<ModuleCodec*>(pProdNode);
- return pCodec->CompressData(pSrc, nSrcSize, pDst, nDstSize, pnBytesWritten);
-}
-XnStatus XN_CALLBACK_TYPE __ModuleDecompressData(XnModuleNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hCodec;
- ModuleCodec* pCodec = dynamic_cast<ModuleCodec*>(pProdNode);
- return pCodec->DecompressData(pSrc, nSrcSize, pDst, nDstSize, pnBytesWritten);
-}
-
-const XnChar* XN_CALLBACK_TYPE __ModuleScriptGetSupportedFormat(XnModuleNodeHandle hScript)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hScript;
- ModuleScriptNode* pScript = dynamic_cast<ModuleScriptNode*>(pProdNode);
- return pScript->GetSupportedFormat();
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleLoadScriptFromFile(XnModuleNodeHandle hScript, const XnChar* strFileName)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hScript;
- ModuleScriptNode* pScript = dynamic_cast<ModuleScriptNode*>(pProdNode);
- return pScript->LoadScriptFromFile(strFileName);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleLoadScriptFromString(XnModuleNodeHandle hScript, const XnChar* strScript)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hScript;
- ModuleScriptNode* pScript = dynamic_cast<ModuleScriptNode*>(pProdNode);
- return pScript->LoadScriptFromString(strScript);
-}
-
-XnStatus XN_CALLBACK_TYPE __ModuleScriptRun(XnModuleNodeHandle hScript, XnNodeInfoList* pCreatedNodes, XnEnumerationErrors* pErrors)
-{
- ModuleProductionNode* pProdNode = (ModuleProductionNode*)hScript;
- ModuleScriptNode* pScript = dynamic_cast<ModuleScriptNode*>(pProdNode);
- NodeInfoList createdNodes(pCreatedNodes);
- EnumerationErrors errors(pErrors);
- return pScript->Run(createdNodes, errors);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetExtendedSerializationInterface(XnModuleExtendedSerializationInterface* pInterface)
-{
- pInterface->InitNotifications = __ModuleInitNotifications;
- pInterface->StopNotifications = __ModuleStopNotifications;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetLockAwareInterface(XnModuleLockAwareInterface* pInterface)
-{
- pInterface->SetLockState = __ModuleSetLockState;
- pInterface->GetLockState = __ModuleGetLockState;
- pInterface->RegisterToLockChange = __ModuleRegisterToLockChange;
- pInterface->UnregisterFromLockChange = __ModuleUnregisterFromLockChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetErrorStateInterface(XnModuleErrorStateInterface* pInterface)
-{
- pInterface->GetErrorState = __ModuleGetErrorState;
- pInterface->RegisterToErrorStateChange = __ModuleRegisterToErrorStateChange;
- pInterface->UnregisterFromErrorStateChange = __ModuleUnregisterFromErrorStateChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetGeneralIntInterface(XnModuleGeneralIntInterface* pInterface)
-{
- pInterface->GetRange = __ModuleGeneralIntGetRange;
- pInterface->Get = __ModuleGeneralIntGet;
- pInterface->Set = __ModuleGeneralIntSet;
- pInterface->RegisterToValueChange = __ModuleGeneralIntRegisterToValueChange;
- pInterface->UnregisterFromValueChange = __ModuleGeneralIntUnregisterFromValueChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetProductionNodeInterface(XnModuleProductionNodeInterface* pInterface)
-{
- pInterface->IsCapabilitySupported = __ModuleIsCapabilitySupported;
- pInterface->SetIntProperty = __ModuleSetIntProperty;
- pInterface->SetRealProperty = __ModuleSetRealProperty;
- pInterface->SetStringProperty = __ModuleSetStringProperty;
- pInterface->SetGeneralProperty = __ModuleSetGeneralProperty;
- pInterface->GetIntProperty = __ModuleGetIntProperty;
- pInterface->GetRealProperty = __ModuleGetRealProperty;
- pInterface->GetStringProperty = __ModuleGetStringProperty;
- pInterface->GetGeneralProperty = __ModuleGetGeneralProperty;
-
- __ModuleGetExtendedSerializationInterface(pInterface->pExtendedSerializationInterface);
- __ModuleGetLockAwareInterface(pInterface->pLockAwareInterface);
- __ModuleGetErrorStateInterface(pInterface->pErrorStateInterface);
- __ModuleGetGeneralIntInterface(pInterface->pGeneralIntInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetDeviceIdentificationInterface(XnModuleDeviceIdentificationInterface* pInterface)
-{
- pInterface->GetDeviceName = __ModuleGetDeviceName;
- pInterface->GetVendorSpecificData = __ModuleGetVendorSpecificData;
- pInterface->GetSerialNumber = __ModuleGetSerialNumber;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetDeviceInterface(XnModuleDeviceInterface* pInterface)
-{
- __ModuleGetProductionNodeInterface(pInterface->pProductionNode);
- __ModuleGetDeviceIdentificationInterface(pInterface->pDeviceIdentificationInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetMirrorInterface(XnModuleMirrorInterface* pInterface)
-{
- pInterface->SetMirror = __ModuleSetMirror;
- pInterface->IsMirrored = __ModuleIsMirrored;
- pInterface->RegisterToMirrorChange = __ModuleRegisterToMirrorChange;
- pInterface->UnregisterFromMirrorChange = __ModuleUnregisterFromMirrorChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetAlternativeViewPointInterface(XnModuleAlternativeViewPointInterface* pInterface)
-{
- pInterface->IsViewPointSupported = __ModuleIsViewPointSupported;
- pInterface->SetViewPoint = __ModuleSetViewPoint;
- pInterface->ResetViewPoint = __ModuleResetViewPoint;
- pInterface->IsViewPointAs = __ModuleIsViewPointAs;
- pInterface->RegisterToViewPointChange = __ModuleRegisterToViewPointChange;
- pInterface->UnregisterFromViewPointChange = __ModuleUnregisterFromViewPointChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetFrameSyncInterface(XnModuleFrameSyncInterface* pInterface)
-{
- pInterface->CanFrameSyncWith = __ModuleCanFrameSyncWith;
- pInterface->FrameSyncWith = __ModuleFrameSyncWith;
- pInterface->StopFrameSyncWith = __ModuleStopFrameSyncWith;
- pInterface->IsFrameSyncedWith = __ModuleIsFrameSyncedWith;
- pInterface->RegisterToFrameSyncChange = __ModuleRegisterToFrameSyncChange;
- pInterface->UnregisterFromFrameSyncChange = __ModuleUnregisterFromFrameSyncChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetGeneratorInterface(XnModuleGeneratorInterface* pInterface)
-{
- __ModuleGetProductionNodeInterface(pInterface->pProductionNodeInterface);
- pInterface->StartGenerating = __ModuleStartGenerating;
- pInterface->IsGenerating = __ModuleIsGenerating;
- pInterface->StopGenerating = __ModuleStopGenerating;
- pInterface->RegisterToGenerationRunningChange = __ModuleRegisterToGenerationRunningChange;
- pInterface->UnregisterFromGenerationRunningChange = __ModuleUnregisterFromGenerationRunningChange;
- pInterface->RegisterToNewDataAvailable = __ModuleRegisterToNewDataAvailable;
- pInterface->UnregisterFromNewDataAvailable = __ModuleUnregisterFromNewDataAvailable;
- pInterface->IsNewDataAvailable = __ModuleIsNewDataAvailable;
- pInterface->UpdateData = __ModuleUpdateData;
- pInterface->GetData = __ModuleGetData;
- pInterface->GetDataSize = __ModuleGetDataSize;
- pInterface->GetTimestamp = __ModuleGetTimestamp;
- pInterface->GetFrameID = __ModuleGetFrameID;
- __ModuleGetMirrorInterface(pInterface->pMirrorInterface);
- __ModuleGetAlternativeViewPointInterface(pInterface->pAlternativeViewPointInterface);
- __ModuleGetFrameSyncInterface(pInterface->pFrameSyncInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetNodeNotificationsInterface(XnNodeNotifications *pInterface)
-{
- pInterface->OnNodeAdded = __ModuleOnNodeAdded;
- pInterface->OnNodeRemoved = __ModuleOnNodeRemoved;
- pInterface->OnNodeIntPropChanged = __ModuleOnNodeIntPropChanged;
- pInterface->OnNodeRealPropChanged = __ModuleOnNodeRealPropChanged;
- pInterface->OnNodeStringPropChanged = __ModuleOnNodeStringPropChanged;
- pInterface->OnNodeGeneralPropChanged = __ModuleOnNodeGeneralPropChanged;
- pInterface->OnNodeStateReady = __ModuleOnNodeStateReady;
- pInterface->OnNodeNewData = __ModuleOnNodeNewData;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetRecorderInterface(XnModuleRecorderInterface* pInterface)
-{
- pInterface->SetOutputStream = __ModuleSetOutputStream;
- __ModuleGetProductionNodeInterface(pInterface->pProductionNode);
- __ModuleGetNodeNotificationsInterface(pInterface->pNodeNotifications);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetPlayerInterface(XnModulePlayerInterface* pInterface)
-{
- __ModuleGetProductionNodeInterface(pInterface->pProductionNode);
- pInterface->SetInputStream = __ModuleSetInputStream;
- pInterface->ReadNext = __ModuleReadNext;
- pInterface->SetNodeNotifications = __ModuleSetNodeNotifications;
- pInterface->SetRepeat = __ModuleSetRepeat;
- pInterface->SeekToTimeStamp = __ModuleSeekToTimeStamp;
- pInterface->SeekToFrame = __ModuleSeekToFrame;
- pInterface->TellTimestamp = __ModuleTellTimestamp;
- pInterface->TellFrame = __ModuleTellFrame;
- pInterface->GetNumFrames = __ModuleGetNumFrames;
- pInterface->GetSupportedFormat = __ModuleGetSupportedFormat;
- pInterface->IsEOF = __ModuleIsEOF;
- pInterface->RegisterToEndOfFileReached = __ModuleRegisterToEndOfFileReached;
- pInterface->UnregisterFromEndOfFileReached = __ModuleUnregisterFromEndOfFileReached;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetCroppingInterface(XnModuleCroppingInterface* pInterface)
-{
- pInterface->SetCropping = __ModuleSetCropping;
- pInterface->GetCropping = __ModuleGetCropping;
- pInterface->RegisterToCroppingChange = __ModuleRegisterToCroppingChange;
- pInterface->UnregisterFromCroppingChange = __ModuleUnregisterFromCroppingChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetAntiFlickerInterface(XnModuleAntiFlickerInterface* pInterface)
-{
- pInterface->SetPowerLineFrequency = __ModuleSetPowerLineFrequency;
- pInterface->GetPowerLineFrequency = __ModuleGetPowerLineFrequency;
- pInterface->RegisterToPowerLineFrequencyChange = __ModuleRegisterToPowerLineFrequencyChange;
- pInterface->UnregisterFromPowerLineFrequencyChange = __ModuleUnregisterFromPowerLineFrequencyChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetMapGeneratorInterface(XnModuleMapGeneratorInterface* pInterface)
-{
- __ModuleGetGeneratorInterface(pInterface->pGeneratorInterface);
- pInterface->GetSupportedMapOutputModesCount = __ModuleGetSupportedMapOutputModesCount;
- pInterface->GetSupportedMapOutputModes = __ModuleGetSupportedMapOutputModes;
- pInterface->SetMapOutputMode = __ModuleSetMapOutputMode;
- pInterface->GetMapOutputMode = __ModuleGetMapOutputMode;
- pInterface->RegisterToMapOutputModeChange = __ModuleRegisterToMapOutputModeChange;
- pInterface->UnregisterFromMapOutputModeChange = __ModuleUnregisterFromMapOutputModeChange;
- pInterface->GetBytesPerPixel = __ModuleGetBytesPerPixel;
- __ModuleGetCroppingInterface(pInterface->pCroppingInterface);
- __ModuleGetAntiFlickerInterface(pInterface->pAntiFlickerInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetUserPositionInterface(XnModuleUserPositionCapabilityInterface* pInterface)
-{
- pInterface->GetSupportedUserPositionsCount = __ModuleGetSupportedUserPositionsCount;
- pInterface->SetUserPosition = __ModuleSetUserPosition;
- pInterface->GetUserPosition = __ModuleGetUserPosition;
- pInterface->RegisterToUserPositionChange = __ModuleRegisterToUserPositionChange;
- pInterface->UnregisterFromUserPositionChange = __ModuleUnregisterFromUserPositionChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetDepthGeneratorInterface(XnModuleDepthGeneratorInterface* pInterface)
-{
- __ModuleGetMapGeneratorInterface(pInterface->pMapInterface);
- pInterface->GetDeviceMaxDepth = __ModuleGetDeviceMaxDepth;
- pInterface->GetFieldOfView = __ModuleGetFieldOfView;
- pInterface->RegisterToFieldOfViewChange = __ModuleRegisterToFieldOfViewChange;
- pInterface->UnregisterFromFieldOfViewChange = __ModuleUnregisterFromFieldOfViewChange;
- pInterface->GetDepthMap = __ModuleGetDepthMap;
- __ModuleGetUserPositionInterface(pInterface->pUserPositionInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetImageGeneratorInterface(XnModuleImageGeneratorInterface* pInterface)
-{
- __ModuleGetMapGeneratorInterface(pInterface->pMapInterface);
- pInterface->GetImageMap = __ModuleGetImageMap;
- pInterface->IsPixelFormatSupported = __ModuleIsPixelFormatSupported;
- pInterface->SetPixelFormat = __ModuleSetPixelFormat;
- pInterface->GetPixelFormat = __ModuleGetPixelFormat;
- pInterface->RegisterToPixelFormatChange = __ModuleRegisterToPixelFormatChange;
- pInterface->UnregisterFromPixelFormatChange = __ModuleUnregisterFromPixelFormatChange;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetIRGeneratorInterface(XnModuleIRGeneratorInterface* pInterface)
-{
- __ModuleGetMapGeneratorInterface(pInterface->pMapInterface);
- pInterface->GetIRMap = __ModuleGetIRMap;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetGestureGeneratorInterface(XnModuleGestureGeneratorInterface* pInterface)
-{
- __ModuleGetGeneratorInterface(pInterface->pGeneratorInterface);
- pInterface->AddGesture = __ModuleAddGesture;
- pInterface->RemoveGesture = __ModuleRemoveGesture;
- pInterface->GetActiveGestures = __ModuleGetActiveGestures;
- pInterface->GetAllActiveGestures = __ModuleGetAllActiveGestures;
- pInterface->EnumerateGestures = __ModuleEnumerateGestures;
- pInterface->EnumerateAllGestures = __ModuleEnumerateAllGestures;
- pInterface->IsGestureAvailable = __ModuleIsGestureAvailable;
- pInterface->IsGestureProgressSupported = __ModuleIsGestureProgressSupported;
- pInterface->RegisterGestureCallbacks = __ModuleRegisterGestureCallbacks;
- pInterface->UnregisterGestureCallbacks = __ModuleUnregisterGestureCallbacks;
- pInterface->RegisterToGestureChange = __ModuleRegisterToGestureChange;
- pInterface->UnregisterFromGestureChange = __ModuleUnregisterFromGestureChange;
-
- pInterface->RegisterToGestureIntermediateStageCompleted = __ModuleRegisterToGestureIntermediateStageCompleted;
- pInterface->UnregisterFromGestureIntermediateStageCompleted = __ModuleUnregisterFromGestureIntermediateStageCompleted;
- pInterface->RegisterToGestureReadyForNextIntermediateStage = __ModuleRegisterToGestureReadyForNextIntermediateStage;
- pInterface->UnregisterFromGestureReadyForNextIntermediateStage = __ModuleUnregisterFromGestureReadyForNextIntermediateStage;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetSceneAnalyzerInterface(XnModuleSceneAnalyzerInterface* pInterface)
-{
- __ModuleGetMapGeneratorInterface(pInterface->pMapInterface);
- pInterface->GetLabelMap = __ModuleGetLabelMap;
- pInterface->GetFloor = __ModuleGetFloor;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetSkeletonInterface(XnModuleSkeletonCapabilityInterface* pInterface)
-{
- pInterface->IsJointAvailable = __ModuleIsJointAvailable;
- pInterface->IsProfileAvailable = __ModuleIsProfileAvailable;
- pInterface->SetSkeletonProfile = __ModuleSetSkeletonProfile;
- pInterface->SetJointActive = __ModuleSetJointActive;
- pInterface->IsJointActive = __ModuleIsJointActive;
- pInterface->RegisterToJointConfigurationChange = __ModuleRegisterToJointConfigurationChange;
- pInterface->UnregisterFromJointConfigurationChange = __ModuleUnregisterFromJointConfigurationChange;
- pInterface->EnumerateActiveJoints = __ModuleEnumerateActiveJoints;
- pInterface->GetSkeletonJoint = __ModuleGetSkeletonJoint;
- pInterface->GetSkeletonJointPosition = __ModuleGetSkeletonJointPosition;
- pInterface->GetSkeletonJointOrientation = __ModuleGetSkeletonJointOrientation;
- pInterface->IsTracking = __ModuleIsSkeletonTracking;
- pInterface->IsCalibrated = __ModuleIsSkeletonCalibrated;
- pInterface->IsCalibrating = __ModuleIsSkeletonCalibrating;
- pInterface->RequestCalibration = __ModuleRequestSkeletonCalibration;
- pInterface->AbortCalibration = __ModuleAbortSkeletonCalibration;
- pInterface->SaveCalibrationDataToFile = __ModuleSaveCalibrationDataToFile;
- pInterface->LoadCalibrationDataFromFile = __ModuleLoadCalibrationDataFromFile;
- pInterface->SaveCalibrationData = __ModuleSaveCalibrationData;
- pInterface->LoadCalibrationData = __ModuleLoadCalibrationData;
- pInterface->ClearCalibrationData = __ModuleClearCalibrationData;
- pInterface->IsCalibrationData = __ModuleIsCalibrationData;
- pInterface->StartTracking = __ModuleStartSkeletonTracking;
- pInterface->StopTracking = __ModuleStopSkeletonTracking;
- pInterface->Reset = __ModuleResetSkeleton;
- pInterface->NeedPoseForCalibration = __ModuleNeedPoseForSkeletonCalibration;
- pInterface->GetCalibrationPose = __ModuleGetSkeletonCalibrationPose;
- pInterface->SetSmoothing = __ModuleSetSkeletonSmoothing;
- pInterface->RegisterCalibrationCallbacks = __ModuleRegisterCalibrationCallbacks;
- pInterface->UnregisterCalibrationCallbacks = __ModuleUnregisterCalibrationCallbacks;
-
- pInterface->RegisterToCalibrationInProgress = __ModuleRegisterToCalibrationInProgressCallback;
- pInterface->UnregisterFromCalibrationInProgress = __ModuleUnregisterFromCalibrationInProgressCallback;
- pInterface->RegisterToCalibrationComplete = __ModuleRegisterToCalibrationCompleteCallback;
- pInterface->UnregisterFromCalibrationComplete = __ModuleUnregisterFromCalibrationCompleteCallback;
-
- pInterface->RegisterToCalibrationStart = __ModuleRegisterToCalibrationStartCallback;
- pInterface->UnregisterFromCalibrationStart = __ModuleUnregisterFromCalibrationStartCallback;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetPoseDetectionInterface(XnModulePoseDetectionCapabilityInterface* pInteface)
-{
- pInteface->GetNumberOfPoses = __ModuleGetNumberOfPoses;
- pInteface->GetAvailablePoses = __ModuleGetAvailablePoses;
- pInteface->GetAllAvailablePoses = __ModuleGetAllAvailablePoses;
- pInteface->StartPoseDetection = __ModuleStartPoseDetection;
- pInteface->StopPoseDetection = __ModuleStopPoseDetection;
- pInteface->StopSinglePoseDetection = __ModuleStopSinglePoseDetection;
- pInteface->RegisterToPoseCallbacks = __ModuleRegisterToPoseCallbacks;
- pInteface->UnregisterFromPoseCallbacks = __ModuleUnregisterFromPoseCallbacks;
-
- pInteface->RegisterToPoseDetectionInProgress = __ModuleRegisterToPoseInProgressCallback;
- pInteface->UnregisterFromPoseDetectionInProgress = __ModuleUnregisterFromPoseInProgressCallback;
-
- pInteface->RegisterToPoseDetected = __ModuleRegisterToPoseDetected;
- pInteface->UnregisterFromPoseDetected = __ModuleUnregisterFromPoseDetected;
- pInteface->RegisterToOutOfPose = __ModuleRegisterToOutOfPose;
- pInteface->UnregisterFromOutOfPose = __ModuleUnregisterFromOutOfPose;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetUserGeneratorInterface(XnModuleUserGeneratorInterface* pInterface)
-{
- __ModuleGetGeneratorInterface(pInterface->pGeneratorInterface);
-
- pInterface->GetNumberOfUsers = __ModuleGetNumberOfUsers;
- pInterface->GetUsers = __ModuleGetUsers;
- pInterface->GetCoM = __ModuleGetUserCoM;
- pInterface->GetUserPixels = __ModuleGetUserPixels;
- pInterface->RegisterUserCallbacks = __ModuleRegisterUserCallbacks;
- pInterface->UnregisterUserCallbacks = __ModuleUnregisterUserCallbacks;
-
- __ModuleGetSkeletonInterface(pInterface->pSkeletonInterface);
- __ModuleGetPoseDetectionInterface(pInterface->pPoseDetectionInterface);
-
- pInterface->RegisterToUserExit = __ModuleRegisterToUserExitCallback;
- pInterface->UnregisterFromUserExit = __ModuleUnregisterFromUserExitCallback;
- pInterface->RegisterToUserReEnter = __ModuleRegisterToUserReEnterCallback;
- pInterface->UnregisterFromUserReEnter = __ModuleUnregisterFromUserReEnterCallback;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetHandTouchingFOVEdgeInterface(XnModuleHandTouchingFOVEdgeCapabilityInterface* pInterface)
-{
- pInterface->RegisterToHandTouchingFOVEdge = __ModuleRegisterToHandTouchingFOVEdgeCallback;
- pInterface->UnregisterFromHandTouchingFOVEdge = __ModuleUnregisterFromHandTouchingFOVEdgeCallback;
-}
-void XN_CALLBACK_TYPE __ModuleGetHandsGeneratorInterface(XnModuleHandsGeneratorInterface* pInterface)
-{
- __ModuleGetGeneratorInterface(pInterface->pGeneratorInterface);
-
- pInterface->StartTracking = __ModuleStartTracking;
- pInterface->StopTracking = __ModuleStopTracking;
- pInterface->StopTrackingAll = __ModuleStopTrackingAll;
- pInterface->RegisterHandCallbacks = __ModuleRegisterHandCallbacks;
- pInterface->UnregisterHandCallbacks = __ModuleUnregisterHandCallbacks;
- pInterface->SetSmoothing = __ModuleSetTrackingSmoothing;
-
- __ModuleGetHandTouchingFOVEdgeInterface(pInterface->pHandTouchingFOVEdgeInterface);
-}
-
-void XN_CALLBACK_TYPE __ModuleGetAudioGeneratorInterface(XnModuleAudioGeneratorInterface* pInterface)
-{
- __ModuleGetGeneratorInterface(pInterface->pGeneratorInterface);
-
- pInterface->GetAudioBuffer = __ModuleGetAudioBuffer;
- pInterface->GetSupportedWaveOutputModesCount = __ModuleGetSupportedWaveOutputModesCount;
- pInterface->GetSupportedWaveOutputModes = __ModuleGetSupportedWaveOutputModes;
- pInterface->SetWaveOutputMode = __ModuleSetWaveOutputMode;
- pInterface->GetWaveOutputMode = __ModuleGetWaveOutputMode;
- pInterface->RegisterToWaveOutputModeChanges = __ModuleRegisterToWaveOutputModeChanges;
- pInterface->UnregisterFromWaveOutputModeChanges = __ModuleUnregisterFromWaveOutputModeChanges;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetCodecInterface(XnModuleCodecInterface* pInterface)
-{
- __ModuleGetProductionNodeInterface(pInterface->pProductionNode);
-
- pInterface->GetCodecID = __ModuleGetCodecID;
- pInterface->Init = __ModuleCodecInit;
- pInterface->CompressData = __ModuleCompressData;
- pInterface->DecompressData = __ModuleDecompressData;
-}
-
-void XN_CALLBACK_TYPE __ModuleGetScriptNodeInterface(XnModuleScriptNodeInterface* pInterface)
-{
- __ModuleGetProductionNodeInterface(pInterface->pProductionNode);
-
- pInterface->GetSupportedFormat = __ModuleScriptGetSupportedFormat;
- pInterface->LoadScriptFromFile = __ModuleLoadScriptFromFile;
- pInterface->LoadScriptFromString = __ModuleLoadScriptFromString;
- pInterface->Run = __ModuleScriptRun;
-}
-
-#endif /* XN_MODULE_C_FUNCTIONS_H_ */
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppInterface.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppInterface.h
deleted file mode 100644
index beb555e5..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppInterface.h
+++ /dev/null
@@ -1,605 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_MODULE_CPP_INTERFACE_H__
-#define __XN_MODULE_CPP_INTERFACE_H__
-
-/**
- * NOTE: this file should never be compiled into OpenNI. It must always remain
- * in this h-file only (to make sure nothing breaks when installing new OpenNI DLL).
- * It is only provided as a syntactic sugar for exporting interfaces.
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnModuleInterface.h"
-#include "XnListT.h"
-#include "XnCppWrapper.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-namespace xn
-{
- typedef XnListT<XnModuleGetExportedInterfacePtr> ExportedNodesList;
-
- class ModuleProductionNode;
-
- class Module
- {
- public:
- Module() {}
- virtual ~Module() {}
-
- virtual XnStatus Load() { return XN_STATUS_OK; }
- virtual void Unload() {}
-
- inline XnStatus AddExportedNode(XnModuleGetExportedInterfacePtr pEntryPoint) { return m_ExportedNodes.AddLast(pEntryPoint); }
-
- XnUInt32 GetExportedNodesCount() { return m_ExportedNodes.Size(); }
-
- XnStatus GetExportedNodes(XnModuleGetExportedInterfacePtr* aEntryPoints, XnUInt32 nCount)
- {
- if (nCount < m_ExportedNodes.Size())
- {
- return XN_STATUS_OUTPUT_BUFFER_OVERFLOW;
- }
-
- XnUInt32 i = 0;
- for (ExportedNodesList::ConstIterator it = m_ExportedNodes.Begin();
- it != m_ExportedNodes.End();
- ++it, ++i)
- {
- aEntryPoints[i] = *it;
- }
-
- return (XN_STATUS_OK);
- }
-
- private:
- ExportedNodesList m_ExportedNodes;
- };
-
- class ExtensionModule : public Module
- {
- public:
- virtual XnStatus Load()
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = Module::Load();
- XN_IS_STATUS_OK(nRetVal);
-
- nRetVal = RegisterNewTypes();
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
-
- protected:
- virtual XnStatus RegisterNewTypes() = 0;
- };
-
- class ModuleExportedProductionNode
- {
- public:
- ModuleExportedProductionNode() {}
- virtual ~ModuleExportedProductionNode() {}
-
- virtual void GetDescription(XnProductionNodeDescription* pDescription) = 0;
- virtual XnStatus EnumerateProductionTrees(Context& context, NodeInfoList& TreesList, EnumerationErrors* pErrors) = 0;
- virtual XnStatus Create(Context& context, const XnChar* strInstanceName, const XnChar* strCreationInfo, NodeInfoList* pNeededTrees, const XnChar* strConfigurationDir, ModuleProductionNode** ppInstance) = 0;
- virtual void Destroy(ModuleProductionNode* pInstance) = 0;
- };
-
- class ModuleExtendedSerializationInterface
- {
- public:
- virtual ~ModuleExtendedSerializationInterface() {}
- virtual XnStatus NotifyExState(XnNodeNotifications* pNotifications, void* pCookie) = 0;
- virtual void UnregisterExNotifications() = 0;
- };
-
- class ModuleLockAwareInterface
- {
- public:
- virtual ~ModuleLockAwareInterface() {}
- virtual XnStatus SetLockState(XnBool bLocked) = 0;
- virtual XnBool GetLockState() = 0;
- virtual XnStatus RegisterToLockChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromLockChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleErrorStateInterface
- {
- public:
- virtual ~ModuleErrorStateInterface() {}
- virtual XnStatus GetErrorState() = 0;
- virtual XnStatus RegisterToErrorStateChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromErrorStateChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleGeneralIntInterface
- {
- public:
- virtual XnStatus GetRange(const XnChar* strCap, XnInt32& nMin, XnInt32& nMax, XnInt32& nStep, XnInt32& nDefault, XnBool& bIsAutoSupported) = 0;
- virtual XnStatus Get(const XnChar* strCap, XnInt32& nValue) = 0;
- virtual XnInt32 Set(const XnChar* strCap, XnInt32 nValue) = 0;
- virtual XnStatus RegisterToValueChange(const XnChar* strCap, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromValueChange(const XnChar* strCap, XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleProductionNode()
- {
- xnOSMemSet(m_aInterfaces, 0, sizeof(m_aInterfaces));
- m_aInterfaces[XN_NODE_TYPE_PRODUCTION_NODE] = this;
- }
-#endif
- virtual ~ModuleProductionNode() {}
- virtual XnBool IsCapabilitySupported(const XnChar* /*strCapabilityName*/) { return FALSE; }
- virtual XnStatus SetIntProperty(const XnChar* /*strName*/, XnUInt64 /*nValue*/) { return XN_STATUS_ERROR; }
- virtual XnStatus SetRealProperty(const XnChar* /*strName*/, XnDouble /*dValue*/) { return XN_STATUS_ERROR; }
- virtual XnStatus SetStringProperty(const XnChar* /*strName*/, const XnChar* /*strValue*/) { return XN_STATUS_ERROR; }
- virtual XnStatus SetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, const void* /*pBuffer*/) { return XN_STATUS_ERROR; }
- virtual XnStatus GetIntProperty(const XnChar* /*strName*/, XnUInt64& /*nValue*/) const { return XN_STATUS_ERROR; }
- virtual XnStatus GetRealProperty(const XnChar* /*strName*/, XnDouble& /*dValue*/) const { return XN_STATUS_ERROR; }
- virtual XnStatus GetStringProperty(const XnChar* /*strName*/, XnChar* /*csValue*/, XnUInt32 /*nBufSize*/) const { return XN_STATUS_ERROR; }
- virtual XnStatus GetGeneralProperty(const XnChar* /*strName*/, XnUInt32 /*nBufferSize*/, void* /*pBuffer*/) const { return XN_STATUS_ERROR; }
- virtual ModuleExtendedSerializationInterface* GetExtendedSerializationInterface() { return NULL; }
- virtual ModuleLockAwareInterface* GetLockAwareInterface() { return NULL; }
- virtual ModuleErrorStateInterface* GetErrorStateInterface() { return NULL; }
- virtual ModuleGeneralIntInterface* GetGeneralIntInterface(const XnChar* /*strCap*/) { return NULL; }
-
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- void* m_aInterfaces[XN_NODE_TYPE_FIRST_EXTENSION];
-#endif
- };
-
- class ModuleDeviceIdentificationInterface
- {
- public:
- virtual ~ModuleDeviceIdentificationInterface() {}
- virtual XnStatus GetDeviceName(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
- virtual XnStatus GetVendorSpecificData(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
- virtual XnStatus GetSerialNumber(XnChar* strBuffer, XnUInt32& nBufferSize) = 0;
- };
-
- class ModuleDevice : virtual public ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleDevice() { m_aInterfaces[XN_NODE_TYPE_DEVICE] = this; }
-#endif
- virtual ~ModuleDevice() {}
- virtual ModuleDeviceIdentificationInterface* GetIdentificationInterface() { return NULL; }
- };
-
- class ModuleMirrorInterface
- {
- public:
- virtual ~ModuleMirrorInterface() {}
- virtual XnStatus SetMirror(XnBool bMirror) = 0;
- virtual XnBool IsMirrored() = 0;
- virtual XnStatus RegisterToMirrorChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromMirrorChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleAlternativeViewPointInterface
- {
- public:
- virtual ~ModuleAlternativeViewPointInterface() {}
- virtual XnBool IsViewPointSupported(ProductionNode& other) = 0;
- virtual XnStatus SetViewPoint(ProductionNode& other) = 0;
- virtual XnBool IsViewPointAs(ProductionNode& other) = 0;
- virtual XnStatus ResetViewPoint() = 0;
- virtual XnStatus RegisterToViewPointChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromViewPointChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleFrameSyncInterface
- {
- public:
- virtual XnBool CanFrameSyncWith(ProductionNode& other) = 0;
- virtual XnStatus FrameSyncWith(ProductionNode& other) = 0;
- virtual XnStatus StopFrameSyncWith(ProductionNode& other) = 0;
- virtual XnBool IsFrameSyncedWith(ProductionNode& other) = 0;
- virtual XnStatus RegisterToFrameSyncChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromFrameSyncChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleGenerator : virtual public ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleGenerator() { m_aInterfaces[XN_NODE_TYPE_GENERATOR] = this;}
-#endif
- virtual ~ModuleGenerator() {}
- virtual XnStatus StartGenerating() = 0;
- virtual XnBool IsGenerating() = 0;
- virtual void StopGenerating() = 0;
- virtual XnStatus RegisterToGenerationRunningChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromGenerationRunningChange(XnCallbackHandle hCallback) = 0;
- virtual XnStatus RegisterToNewDataAvailable(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromNewDataAvailable(XnCallbackHandle hCallback) = 0;
- virtual XnBool IsNewDataAvailable(XnUInt64& nTimestamp) = 0;
- virtual XnStatus UpdateData() = 0;
- virtual const void* GetData() = 0;
- virtual XnUInt32 GetDataSize() = 0;
- virtual XnUInt64 GetTimestamp() = 0;
- virtual XnUInt32 GetFrameID() = 0;
- virtual ModuleMirrorInterface* GetMirrorInterface() { return NULL; }
- virtual ModuleAlternativeViewPointInterface* GetAlternativeViewPointInterface() { return NULL; }
- virtual ModuleFrameSyncInterface* GetFrameSyncInterface() { return NULL; }
- };
-
- class ModuleNodeNotifications
- {
- public:
- virtual ~ModuleNodeNotifications() {}
- virtual XnStatus OnNodeAdded(const XnChar* strNodeName, XnProductionNodeType type, XnCodecID compression) = 0;
- virtual XnStatus OnNodeRemoved(const XnChar* strNodeName) = 0;
- virtual XnStatus OnNodeIntPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt64 nValue) = 0;
- virtual XnStatus OnNodeRealPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnDouble dValue) = 0;
- virtual XnStatus OnNodeStringPropChanged(const XnChar* strNodeName, const XnChar* strPropName, const XnChar* strValue) = 0;
- virtual XnStatus OnNodeStateReady(const XnChar* strNodeName) = 0;
- virtual XnStatus OnNodeGeneralPropChanged(const XnChar* strNodeName, const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer) = 0;
- virtual XnStatus OnNodeNewData(const XnChar* strNodeName, XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize) = 0;
- };
-
- class ModuleRecorder :
- virtual public ModuleProductionNode,
- virtual public ModuleNodeNotifications
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleRecorder() { m_aInterfaces[XN_NODE_TYPE_RECORDER] = this; }
-#endif
- virtual ~ModuleRecorder() {}
- virtual XnStatus SetOutputStream(void* pCookie, XnRecorderOutputStreamInterface* pStream) = 0;
- };
-
- class ModulePlayer : virtual public ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModulePlayer() { m_aInterfaces[XN_NODE_TYPE_PLAYER] = this; }
-#endif
- virtual ~ModulePlayer() {}
- virtual XnStatus SetInputStream(void* pStreamCookie, XnPlayerInputStreamInterface* pStream) = 0;
- virtual XnStatus ReadNext() = 0;
- virtual XnStatus SetNodeNotifications(void* pNodeNotificationsCookie, XnNodeNotifications* pNodeNotifications) = 0;
-
- virtual XnStatus SetRepeat(XnBool bRepeat) = 0;
- virtual XnStatus SeekToTimeStamp(XnInt64 nTimeOffset, XnPlayerSeekOrigin origin) = 0;
- virtual XnStatus SeekToFrame(const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin) = 0;
- virtual XnStatus TellTimestamp(XnUInt64& nTimestamp) = 0;
- virtual XnStatus TellFrame(const XnChar* strNodeName, XnUInt32& nFrame) = 0;
- virtual XnUInt32 GetNumFrames(const XnChar* strNodeName, XnUInt32& nFrames) = 0;
- virtual const XnChar* GetSupportedFormat() = 0;
- virtual XnBool IsEOF() = 0;
- virtual XnStatus RegisterToEndOfFileReached(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromEndOfFileReached(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleCroppingInterface
- {
- public:
- virtual ~ModuleCroppingInterface() {}
- virtual XnStatus SetCropping(const XnCropping &Cropping) = 0;
- virtual XnStatus GetCropping(XnCropping &Cropping) = 0;
- virtual XnStatus RegisterToCroppingChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromCroppingChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleAntiFlickerInterface
- {
- public:
- virtual ~ModuleAntiFlickerInterface() {}
- virtual XnStatus SetPowerLineFrequency(XnPowerLineFrequency nFrequency) = 0;
- virtual XnPowerLineFrequency GetPowerLineFrequency() = 0;
- virtual XnStatus RegisterToPowerLineFrequencyChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromPowerLineFrequencyChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleMapGenerator : virtual public ModuleGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleMapGenerator() { m_aInterfaces[XN_NODE_TYPE_MAP_GENERATOR] = this; }
-#endif
- virtual ~ModuleMapGenerator() {}
- virtual XnUInt32 GetSupportedMapOutputModesCount() = 0;
- virtual XnStatus GetSupportedMapOutputModes(XnMapOutputMode aModes[], XnUInt32& nCount) = 0;
- virtual XnStatus SetMapOutputMode(const XnMapOutputMode& Mode) = 0;
- virtual XnStatus GetMapOutputMode(XnMapOutputMode& Mode) = 0;
- virtual XnStatus RegisterToMapOutputModeChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromMapOutputModeChange(XnCallbackHandle hCallback) = 0;
- virtual XnUInt32 GetBytesPerPixel() = 0;
- virtual ModuleCroppingInterface* GetCroppingInterface() { return NULL; }
- virtual ModuleAntiFlickerInterface* GetAntiFlickerInterface() { return NULL; }
- };
-
- class ModuleUserPositionInterface
- {
- public:
- virtual ~ModuleUserPositionInterface() {}
- virtual XnUInt32 GetSupportedUserPositionsCount() = 0;
- virtual XnStatus SetUserPosition(XnUInt32 nIndex, const XnBoundingBox3D& Position) = 0;
- virtual XnStatus GetUserPosition(XnUInt32 nIndex, XnBoundingBox3D& Position) = 0;
- virtual XnStatus RegisterToUserPositionChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromUserPositionChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleDepthGenerator : virtual public ModuleMapGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleDepthGenerator() { m_aInterfaces[XN_NODE_TYPE_DEPTH] = this; }
-#endif
- virtual ~ModuleDepthGenerator() {}
- virtual const void* GetData() { return GetDepthMap(); }
- virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnDepthPixel); }
- virtual XnDepthPixel* GetDepthMap() = 0;
- virtual XnDepthPixel GetDeviceMaxDepth() = 0;
- virtual void GetFieldOfView(XnFieldOfView& FOV) = 0;
- virtual XnStatus RegisterToFieldOfViewChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromFieldOfViewChange(XnCallbackHandle hCallback) = 0;
- virtual ModuleUserPositionInterface* GetUserPositionInterface() { return NULL; }
- };
-
- class ModuleImageGenerator : virtual public ModuleMapGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleImageGenerator() { m_aInterfaces[XN_NODE_TYPE_IMAGE] = this; }
-#endif
- virtual ~ModuleImageGenerator() {}
- virtual const void* GetData() { return GetImageMap(); }
- virtual XnUInt32 GetBytesPerPixel() { return xnGetBytesPerPixelForPixelFormat(GetPixelFormat()); }
- virtual XnUInt8* GetImageMap() = 0;
- virtual XnBool IsPixelFormatSupported(XnPixelFormat Format) = 0;
- virtual XnStatus SetPixelFormat(XnPixelFormat Format) = 0;
- virtual XnPixelFormat GetPixelFormat() = 0;
- virtual XnStatus RegisterToPixelFormatChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromPixelFormatChange(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleIRGenerator : virtual public ModuleMapGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleIRGenerator() { m_aInterfaces[XN_NODE_TYPE_IR] = this; }
-#endif
- virtual ~ModuleIRGenerator() {}
- virtual const void* GetData() { return GetIRMap(); }
- virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnIRPixel); }
- virtual XnIRPixel* GetIRMap() = 0;
- };
-
- class ModuleGestureGenerator : virtual public ModuleGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleGestureGenerator() { m_aInterfaces[XN_NODE_TYPE_GESTURE] = this; }
-#endif
- virtual ~ModuleGestureGenerator() {}
- virtual const void* GetData() { return NULL; }
- virtual XnStatus AddGesture(const XnChar* strGesture, XnBoundingBox3D* pArea) = 0;
- virtual XnStatus RemoveGesture(const XnChar* strGesture) = 0;
- virtual XnStatus GetActiveGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
- virtual XnStatus GetAllActiveGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
- virtual XnStatus EnumerateGestures(XnChar** pstrGestures, XnUInt16& nGestures) = 0;
- virtual XnStatus EnumerateAllGestures(XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16& nGestures) = 0;
- virtual XnBool IsGestureAvailable(const XnChar* strGesture) = 0;
- virtual XnBool IsGestureProgressSupported(const XnChar* strGesture) = 0;
- virtual XnStatus RegisterGestureCallbacks(XnModuleGestureRecognized RecognizedCB, XnModuleGestureProgress ProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterGestureCallbacks(XnCallbackHandle hCallback) = 0;
- virtual XnStatus RegisterToGestureChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromGestureChange(XnCallbackHandle hCallback) = 0;
-
- virtual XnStatus RegisterToGestureIntermediateStageCompleted(XnModuleGestureIntermediateStageCompleted GestureIntermediateStageCompletedCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromGestureIntermediateStageCompleted(XnCallbackHandle hCallback) = 0;
- virtual XnStatus RegisterToGestureReadyForNextIntermediateStage(XnModuleGestureReadyForNextIntermediateStage ReadyForNextIntermediateStageCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromGestureReadyForNextIntermediateStage(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleSceneAnalyzer : virtual public ModuleMapGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleSceneAnalyzer() { m_aInterfaces[XN_NODE_TYPE_SCENE] = this; }
-#endif
- virtual ~ModuleSceneAnalyzer() {}
- virtual const void* GetData() { return GetLabelMap(); }
- virtual XnUInt32 GetBytesPerPixel() { return sizeof(XnLabel); }
- virtual const XnLabel* GetLabelMap() = 0;
- virtual XnStatus GetFloor(XnPlane3D& pPlane) = 0;
- };
-
- class ModuleHandTouchingFOVEdgeInterface
- {
- public:
- virtual ~ModuleHandTouchingFOVEdgeInterface() {}
- virtual XnStatus RegisterToHandTouchingFOVEdge(XnModuleHandTouchingFOVEdge TouchingFOVEdgeCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromHandTouchingFOVEdge(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleHandsGenerator : virtual public ModuleGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleHandsGenerator() { m_aInterfaces[XN_NODE_TYPE_HANDS] = this; }
-#endif
- virtual ~ModuleHandsGenerator() {}
- virtual const void* GetData() { return NULL; }
- virtual XnStatus RegisterHandCallbacks(XnModuleHandCreate CreateCB, XnModuleHandUpdate UpdateCB, XnModuleHandDestroy DestroyCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterHandCallbacks(XnCallbackHandle hCallback) = 0;
- virtual XnStatus StopTracking(XnUserID user) = 0;
- virtual XnStatus StopTrackingAll() = 0;
- virtual XnStatus StartTracking(const XnPoint3D& ptPosition) = 0;
- virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
-
- virtual ModuleHandTouchingFOVEdgeInterface* GetHandTouchingFOVEdgeInterface() { return NULL; }
- };
-
- class ModuleSkeletonInterface
- {
- public:
- virtual ~ModuleSkeletonInterface() {}
- virtual XnBool IsJointAvailable(XnSkeletonJoint eJoint) = 0;
- virtual XnBool IsProfileAvailable(XnSkeletonProfile eProfile) = 0;
- virtual XnStatus SetSkeletonProfile(XnSkeletonProfile eProfile) = 0;
- virtual XnStatus SetJointActive(XnSkeletonJoint eJoint, XnBool bState) = 0;
- virtual XnBool IsJointActive(XnSkeletonJoint eJoint) = 0;
- virtual XnStatus RegisterToJointConfigurationChange(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromJointConfigurationChange(XnCallbackHandle hCallback) = 0;
- virtual XnStatus EnumerateActiveJoints(XnSkeletonJoint* pJoints, XnUInt16& nJoints) = 0;
- virtual XnStatus GetSkeletonJoint(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation& jointTransformation) = 0;
- virtual XnStatus GetSkeletonJointPosition(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition& pJointPosition) = 0;
- virtual XnStatus GetSkeletonJointOrientation(XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation& pJointOrientation) = 0;
- virtual XnBool IsTracking(XnUserID user) = 0;
- virtual XnBool IsCalibrated(XnUserID user) = 0;
- virtual XnBool IsCalibrating(XnUserID user) = 0;
- virtual XnStatus RequestCalibration(XnUserID user, XnBool bForce) = 0;
- virtual XnStatus AbortCalibration(XnUserID user) = 0;
- virtual XnStatus SaveCalibrationDataToFile(XnUserID user, const XnChar* strFileName) = 0;
- virtual XnStatus LoadCalibrationDataFromFile(XnUserID user, const XnChar* strFileName) = 0;
- virtual XnStatus SaveCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
- virtual XnStatus LoadCalibrationData(XnUserID user, XnUInt32 nSlot) = 0;
- virtual XnStatus ClearCalibrationData(XnUInt32 nSlot) = 0;
- virtual XnBool IsCalibrationData(XnUInt32 nSlot) = 0;
- virtual XnStatus StartTracking(XnUserID user) = 0;
- virtual XnStatus StopTracking(XnUserID user) = 0;
- virtual XnStatus Reset(XnUserID user) = 0;
- virtual XnBool NeedPoseForCalibration() = 0;
- virtual XnStatus GetCalibrationPose(XnChar* strPose) = 0;
- virtual XnStatus SetSmoothing(XnFloat fSmoothingFactor) = 0;
- virtual XnStatus RegisterCalibrationCallbacks(XnModuleCalibrationStart CalibrationStartCB, XnModuleCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterCalibrationCallbacks(XnCallbackHandle hCallback) = 0;
-
- virtual XnStatus RegisterToCalibrationInProgress(XnModuleCalibrationInProgress CalibrationInProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromCalibrationInProgress(XnCallbackHandle hCallback) = 0;
- virtual XnStatus RegisterToCalibrationComplete(XnModuleCalibrationComplete CalibrationCompleteCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromCalibrationComplete(XnCallbackHandle hCallback) = 0;
-
- virtual XnStatus RegisterToCalibrationStart(XnModuleCalibrationStart handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromCalibrationStart(XnCallbackHandle hCallback) = 0;
- };
-
- class ModulePoseDetectionInteface
- {
- public:
- virtual ~ModulePoseDetectionInteface() {}
-
- virtual XnUInt32 GetNumberOfPoses() = 0;
- virtual XnStatus GetAvailablePoses(XnChar** pstrPoses, XnUInt32& nPoses) = 0;
- virtual XnStatus GetAllAvailablePoses(XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32& nPoses) = 0;
-
- virtual XnStatus StartPoseDetection(const XnChar* strPose, XnUserID user) = 0;
- virtual XnStatus StopPoseDetection(XnUserID user) = 0;
- virtual XnStatus StopSinglePoseDetection(XnUserID user, const XnChar* strPose) = 0;
-
- virtual XnStatus RegisterToPoseDetectionCallbacks(XnModulePoseDetectionCallback StartPoseCB, XnModulePoseDetectionCallback EndPoseCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromPoseDetectionCallbacks(XnCallbackHandle hCallback) = 0;
-
- virtual XnStatus RegisterToPoseDetectionInProgress(XnModulePoseDetectionInProgressCallback InProgressCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromPoseDetectionInProgress(XnCallbackHandle hCallback) = 0;
-
- virtual XnStatus RegisterToPoseDetected(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual XnStatus RegisterToOutOfPose(XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromPoseDetected(XnCallbackHandle hCallback) = 0;
- virtual void UnregisterFromOutOfPose(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleUserGenerator : virtual public ModuleGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleUserGenerator() { m_aInterfaces[XN_NODE_TYPE_USER] = this;}
-#endif
- virtual ~ModuleUserGenerator() {}
- virtual const void* GetData() { return NULL; }
- virtual XnUInt16 GetNumberOfUsers() = 0;
- virtual XnStatus GetUsers(XnUserID* pUsers, XnUInt16& nUsers) = 0;
- virtual XnStatus GetCoM(XnUserID user, XnPoint3D& com) = 0;
- virtual XnStatus GetUserPixels(XnUserID user, XnSceneMetaData *pScene) = 0;
- virtual XnStatus RegisterUserCallbacks(XnModuleUserHandler NewUserCB, XnModuleUserHandler LostUserCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterUserCallbacks(XnCallbackHandle hCallback) = 0;
- virtual ModuleSkeletonInterface* GetSkeletonInterface() { return NULL; }
- virtual ModulePoseDetectionInteface* GetPoseDetectionInteface() {return NULL;}
-
- virtual XnStatus RegisterToUserExit(XnModuleUserHandler UserExitCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromUserExit(XnCallbackHandle hCallback) = 0;
- virtual XnStatus RegisterToUserReEnter(XnModuleUserHandler UserReEnterCB, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromUserReEnter(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleAudioGenerator : virtual public ModuleGenerator
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleAudioGenerator() { m_aInterfaces[XN_NODE_TYPE_AUDIO] = this; }
-#endif
- virtual ~ModuleAudioGenerator() {}
- virtual const void* GetData() { return GetAudioBuffer(); }
- virtual XnUChar* GetAudioBuffer() = 0;
- virtual XnUInt32 GetSupportedWaveOutputModesCount() = 0;
- virtual XnStatus GetSupportedWaveOutputModes(XnWaveOutputMode aSupportedModes[], XnUInt32& nCount) = 0;
- virtual XnStatus SetWaveOutputMode(const XnWaveOutputMode& OutputMode) = 0;
- virtual XnStatus GetWaveOutputMode(XnWaveOutputMode& OutputMode) = 0;
- virtual XnStatus RegisterToWaveOutputModeChanges(XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle& hCallback) = 0;
- virtual void UnregisterFromWaveOutputModeChanges(XnCallbackHandle hCallback) = 0;
- };
-
- class ModuleCodec : virtual public ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleCodec() { m_aInterfaces[XN_NODE_TYPE_CODEC] = this; }
-#endif
- virtual ~ModuleCodec() {}
- virtual XnCodecID GetCodecID() const = 0;
- virtual XnStatus Init(const ProductionNode& node) = 0;
- virtual XnStatus CompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
- virtual XnStatus DecompressData(const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten) const = 0;
- };
-
- class ModuleScriptNode : virtual public ModuleProductionNode
- {
- public:
-#ifdef XN_NO_DYNAMIC_CAST
- ModuleScriptNode() { m_aInterfaces[XN_NODE_TYPE_SCRIPT] = this; }
-#endif
- virtual ~ModuleScriptNode() {}
- virtual const XnChar* GetSupportedFormat() = 0;
- virtual XnStatus LoadScriptFromFile(const XnChar* strFileName) = 0;
- virtual XnStatus LoadScriptFromString(const XnChar* strScript) = 0;
- virtual XnStatus Run(NodeInfoList& createdNodes, EnumerationErrors& errors) = 0;
- };
-}
-
-#endif // __XN_MODULE_CPP_INTERFACE_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppRegistratration.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppRegistratration.h
deleted file mode 100644
index 207edb9c..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleCppRegistratration.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_MODULE_CPP_REGISTRATION_H__
-#define __XN_MODULE_CPP_REGISTRATION_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnModuleCppInterface.h"
-#include <XnUtils.h>
-
-using namespace xn;
-
-//---------------------------------------------------------------------------
-// Internal Macros
-//---------------------------------------------------------------------------
-/** Defines module instance name. */
-#define _XN_MODULE_INST g_pTheModule
-
-#define _CONCAT(a,b) a##b
-
-inline XnModuleNodeHandle __ModuleNodeToHandle(xn::ModuleProductionNode* pNode)
-{
- return ((XnModuleNodeHandle)pNode);
-}
-
-#define __XN_EXPORT_NODE_COMMON(ExportedClass, ExportedName, Type) \
- /** Create a static global instance. */ \
- static ExportedClass* ExportedName = new ExportedClass(); \
- \
- void XN_CALLBACK_TYPE _CONCAT(ExportedClass,GetDescription)(XnProductionNodeDescription* pDescription) \
- { \
- ExportedName->GetDescription(pDescription); \
- } \
- \
- XnStatus XN_CALLBACK_TYPE _CONCAT(ExportedClass,EnumerateProductionTrees) \
- (XnContext* pContext, XnNodeInfoList* pTreesList, XnEnumerationErrors* pErrors) \
- { \
- Context context(pContext); \
- NodeInfoList list(pTreesList); \
- EnumerationErrors errors(pErrors); \
- return ExportedName->EnumerateProductionTrees(context, list, pErrors == NULL ? NULL : &errors); \
- } \
- \
- XnStatus XN_CALLBACK_TYPE _CONCAT(ExportedClass,Create)(XnContext* pContext, \
- const XnChar* strInstanceName, \
- const XnChar* strCreationInfo, \
- XnNodeInfoList* pNeededTrees, \
- const XnChar* strConfigurationDir, \
- XnModuleNodeHandle* phInstance) \
- { \
- xn::NodeInfoList* pNeeded = NULL; \
- if (pNeededTrees != NULL) \
- { \
- pNeeded = XN_NEW(xn::NodeInfoList, pNeededTrees); \
- } \
- ModuleProductionNode* pNode; \
- Context context(pContext); \
- XnStatus nRetVal = ExportedName->Create(context, strInstanceName, strCreationInfo, \
- pNeeded, strConfigurationDir, &pNode); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- XN_DELETE(pNeeded); \
- return (nRetVal); \
- } \
- *phInstance = __ModuleNodeToHandle(pNode); \
- XN_DELETE(pNeeded); \
- return (XN_STATUS_OK); \
- } \
- \
- void XN_CALLBACK_TYPE _CONCAT(ExportedClass,Destroy)(XnModuleNodeHandle hInstance) \
- { \
- ModuleProductionNode* pNode = (ModuleProductionNode*)hInstance; \
- ExportedName->Destroy(pNode); \
- } \
- \
- void XN_CALLBACK_TYPE _CONCAT(ExportedClass,GetExportedInterface)( \
- XnModuleExportedProductionNodeInterface* pInterface) \
- { \
- pInterface->GetDescription = _CONCAT(ExportedClass,GetDescription); \
- pInterface->EnumerateProductionTrees = _CONCAT(ExportedClass,EnumerateProductionTrees); \
- pInterface->Create = _CONCAT(ExportedClass,Create); \
- pInterface->Destroy = _CONCAT(ExportedClass,Destroy); \
- pInterface->GetInterface.General = __ModuleGetGetInterfaceFunc(Type); \
- } \
- \
- static XnStatus _CONCAT(ExportedClass,RegisterResult) = \
- _XN_MODULE_INST->AddExportedNode(_CONCAT(ExportedClass,GetExportedInterface));
-
-#define _XN_EXPORT_NODE_COMMON(ExportedClass, Type) \
- __XN_EXPORT_NODE_COMMON(ExportedClass, _g_##ExportedClass, Type)
-
-//---------------------------------------------------------------------------
-// Forward Declarations
-//---------------------------------------------------------------------------
-
-void XN_CALLBACK_TYPE __ModuleGetProductionNodeInterface(XnModuleProductionNodeInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetDeviceInterface(XnModuleDeviceInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetGeneratorInterface(XnModuleGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetMapGeneratorInterface(XnModuleMapGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetDepthGeneratorInterface(XnModuleDepthGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetImageGeneratorInterface(XnModuleImageGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetIRGeneratorInterface(XnModuleIRGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetUserGeneratorInterface(XnModuleUserGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetHandsGeneratorInterface(XnModuleHandsGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetGestureGeneratorInterface(XnModuleGestureGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetSceneAnalyzerInterface(XnModuleSceneAnalyzerInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetAudioGeneratorInterface(XnModuleAudioGeneratorInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetRecorderInterface(XnModuleRecorderInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetPlayerInterface(XnModulePlayerInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetCodecInterface(XnModuleCodecInterface* pInterface);
-void XN_CALLBACK_TYPE __ModuleGetScriptNodeInterface(XnModuleScriptNodeInterface* pInterface);
-
-//---------------------------------------------------------------------------
-// Utility Macros
-//---------------------------------------------------------------------------
-
-typedef void (XN_CALLBACK_TYPE *GetInterfaceFuncPtr)(void* pInterface);
-
-static GetInterfaceFuncPtr __ModuleGetGetInterfaceFunc(XnProductionNodeType type)
-{
- // start with concrete type
- if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_DEVICE))
- return (GetInterfaceFuncPtr)__ModuleGetDeviceInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_DEPTH))
- return (GetInterfaceFuncPtr)__ModuleGetDepthGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_IMAGE))
- return (GetInterfaceFuncPtr)__ModuleGetImageGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_IR))
- return (GetInterfaceFuncPtr)__ModuleGetIRGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_USER))
- return (GetInterfaceFuncPtr)__ModuleGetUserGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_GESTURE))
- return (GetInterfaceFuncPtr)__ModuleGetGestureGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_SCENE))
- return (GetInterfaceFuncPtr)__ModuleGetSceneAnalyzerInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_AUDIO))
- return (GetInterfaceFuncPtr)__ModuleGetAudioGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_RECORDER))
- return (GetInterfaceFuncPtr)__ModuleGetRecorderInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_PLAYER))
- return (GetInterfaceFuncPtr)__ModuleGetPlayerInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_HANDS))
- return (GetInterfaceFuncPtr)__ModuleGetHandsGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_CODEC))
- return (GetInterfaceFuncPtr)__ModuleGetCodecInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_SCRIPT))
- return (GetInterfaceFuncPtr)__ModuleGetScriptNodeInterface;
- // and continue with abstract ones
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_MAP_GENERATOR))
- return (GetInterfaceFuncPtr)__ModuleGetMapGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_GENERATOR))
- return (GetInterfaceFuncPtr)__ModuleGetGeneratorInterface;
- else if (xnIsTypeDerivedFrom(type, XN_NODE_TYPE_PRODUCTION_NODE))
- return (GetInterfaceFuncPtr)__ModuleGetProductionNodeInterface;
-
- // unknown
- XN_ASSERT(FALSE);
- return NULL;
-}
-
-/** Exports an OpenNI module from the DLL. */
-#if XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS
- #define XN_EXPORT_MODULE(ModuleClass) \
- /** Declare the static variable */ \
- ModuleClass __moduleInstance; \
- Module* _XN_MODULE_INST = &__moduleInstance;
-#else
- #define XN_EXPORT_MODULE(ModuleClass) \
- /** Declare the static variable */ \
- static ModuleClass __moduleInstance; \
- static Module* _XN_MODULE_INST = &__moduleInstance;
-#endif
-
-/** Exports a node from the DLL. */
-#define XN_EXPORT_NODE(ExportedClass, nodeType) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, nodeType)
-
-/** Exports a device node from the DLL. */
-#define XN_EXPORT_DEVICE(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_DEVICE)
-
-/** Exports a depth generator from the DLL. */
-#define XN_EXPORT_DEPTH(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_DEPTH)
-
-/** Exports an image generator from the DLL. */
-#define XN_EXPORT_IMAGE(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_IMAGE)
-
-/** Exports an IR generator from the DLL. */
-#define XN_EXPORT_IR(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_IR)
-
-#define XN_EXPORT_USER(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_USER)
-
-#define XN_EXPORT_HANDS(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_HANDS)
-
-#define XN_EXPORT_GESTURE(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_GESTURE)
-
-#define XN_EXPORT_SCENE(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_SCENE)
-
-/** Exports an Audio generator from the DLL. */
-#define XN_EXPORT_AUDIO(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_AUDIO)
-
-/** Exports a Recorder from the DLL. */
-#define XN_EXPORT_RECORDER(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_RECORDER)
-
-/** Exports a Player from the DLL. */
-#define XN_EXPORT_PLAYER(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_PLAYER)
-
-#define XN_EXPORT_CODEC(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_CODEC)
-
-#define XN_EXPORT_SCRIPT(ExportedClass) \
- _XN_EXPORT_NODE_COMMON(ExportedClass, XN_NODE_TYPE_SCRIPT)
-
-//---------------------------------------------------------------------------
-// Exported C functions
-//---------------------------------------------------------------------------
-#if XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS
- #include <XnModuleCFunctions.h>
- #define XN_MODULE_FUNC_TYPE XN_C_API_EXPORT
- extern Module* _XN_MODULE_INST;
-#else
- #define XN_MODULE_FUNC_TYPE static
- static Module* _XN_MODULE_INST;
-#endif
-
-XN_MODULE_FUNC_TYPE XnStatus XN_C_DECL XN_MODULE_LOAD()
-{
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = _XN_MODULE_INST->Load();
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
-}
-
-XN_MODULE_FUNC_TYPE void XN_C_DECL XN_MODULE_UNLOAD()
-{
- _XN_MODULE_INST->Unload();
-}
-
-XN_MODULE_FUNC_TYPE XnUInt32 XN_C_DECL XN_MODULE_GET_EXPORTED_NODES_COUNT()
-{
- return _XN_MODULE_INST->GetExportedNodesCount();
-}
-
-XN_MODULE_FUNC_TYPE XnStatus XN_C_DECL XN_MODULE_GET_EXPORTED_NODES_ENTRY_POINTS(XnModuleGetExportedInterfacePtr* aEntryPoints, XnUInt32 nCount)
-{
- return _XN_MODULE_INST->GetExportedNodes(aEntryPoints, nCount);
-}
-
-XN_MODULE_FUNC_TYPE void XN_C_DECL XN_MODULE_GET_OPEN_NI_VERSION(XnVersion* pVersion)
-{
- pVersion->nMajor = XN_MAJOR_VERSION;
- pVersion->nMinor = XN_MINOR_VERSION;
- pVersion->nMaintenance = XN_MAINTENANCE_VERSION;
- pVersion->nBuild = XN_BUILD_VERSION;
-}
-
-#if !XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS
-#include <XnUtils.h>
-
-static XnOpenNIModuleInterface moduleInterface =
-{
- XN_MODULE_LOAD,
- XN_MODULE_UNLOAD,
- XN_MODULE_GET_EXPORTED_NODES_COUNT,
- XN_MODULE_GET_EXPORTED_NODES_ENTRY_POINTS,
- XN_MODULE_GET_OPEN_NI_VERSION
-};
-static XnStatus registerResult = xnRegisterModuleWithOpenNI(&moduleInterface, NULL, __FILE__);
-#endif
-
-#endif // __XN_MODULE_CPP_REGISTRATION_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleInterface.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleInterface.h
deleted file mode 100644
index a973d692..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnModuleInterface.h
+++ /dev/null
@@ -1,1351 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_MODULE_INTERFACE_H__
-#define __XN_MODULE_INTERFACE_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_MODULE_LOAD xnModuleLoad
-#define XN_MODULE_UNLOAD xnModuleUnload
-#define XN_MODULE_GET_EXPORTED_NODES_COUNT xnModuleGetExportedNodesCount
-#define XN_MODULE_GET_EXPORTED_NODES_ENTRY_POINTS xnModuleGetExportedNodesEntryPoints
-#define XN_MODULE_GET_OPEN_NI_VERSION xnModuleGetOpenNIVersion
-
-//---------------------------------------------------------------------------
-// Forward Declarations
-//---------------------------------------------------------------------------
-struct XnModuleProductionNodeInterface;
-struct XnModuleDeviceInterface;
-struct XnModuleDepthGeneratorInterface;
-struct XnModuleImageGeneratorInterface;
-struct XnModuleIRGeneratorInterface;
-struct XnModuleGestureGeneratorInterface;
-struct XnModuleUserGeneratorInterface;
-struct XnModuleHandsGeneratorInterface;
-struct XnModuleSceneAnalyzerInterface;
-struct XnModuleAudioGeneratorInterface;
-struct XnModuleRecorderInterface;
-struct XnModulePlayerInterface;
-struct XnModuleGeneratorInterface;
-struct XnModuleCodecInterface;
-struct XnModuleScriptNodeInterface;
-struct XnModuleMapGeneratorInterface;
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-typedef void (XN_CALLBACK_TYPE* XnModuleGetExportedInterfacePtr)(XnModuleExportedProductionNodeInterface* pInterface);
-typedef XnStatus (XN_C_DECL* XnModuleLoadPtr)();
-typedef void (XN_C_DECL* XnModuleUnloadPtr)();
-typedef XnUInt32 (XN_C_DECL* XnModuleGetExportedNodesCountPtr)();
-typedef XnStatus (XN_C_DECL* XnModuleGetExportedNodesEntryPointsPtr)(XnModuleGetExportedInterfacePtr* aEntryPoints, XnUInt32 nCount);
-typedef void (XN_C_DECL* XnModuleGetOpenNIVersionPtr)(XnVersion* pVersion);
-
-typedef struct XnOpenNIModuleInterface
-{
- XnModuleLoadPtr pLoadFunc;
- XnModuleUnloadPtr pUnloadFunc;
- XnModuleGetExportedNodesCountPtr pGetCountFunc;
- XnModuleGetExportedNodesEntryPointsPtr pGetEntryPointsFunc;
- XnModuleGetOpenNIVersionPtr pGetVersionFunc;
-} XnOpenNIModuleInterface;
-
-/** Prototype for state change callback function. **/
-typedef void (XN_CALLBACK_TYPE* XnModuleStateChangedHandler)(void* pCookie);
-
-// User
-typedef void (XN_CALLBACK_TYPE* XnModuleUserHandler)(XnUserID user, void* pCookie);
-
-// Hand touching FOV edge
-typedef void (XN_CALLBACK_TYPE* XnModuleHandTouchingFOVEdge)(XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, XnDirection eDir, void* pCookie);
-
-// UI
-typedef void (XN_CALLBACK_TYPE* XnModuleHandCreate)(XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleHandUpdate)(XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleHandDestroy)(XnUserID user, XnFloat fTime, void* pCookie);
-
-// Gesture Module
-typedef void (XN_CALLBACK_TYPE* XnModuleGestureRecognized)(const XnChar* strGesture, const XnPoint3D* pIDPosition, const XnPoint3D* pEndPosition, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleGestureProgress)(const XnChar* strGesture, const XnPoint3D* pPosition, XnFloat fProgress, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleGestureIntermediateStageCompleted)(const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleGestureReadyForNextIntermediateStage)(const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-
-// Skeleton
-typedef void (XN_CALLBACK_TYPE* XnModuleCalibrationStart)(XnUserID user, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleCalibrationEnd)(XnUserID user, XnBool bSuccess, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleCalibrationInProgress)(XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModuleCalibrationComplete)(XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-
-// Pose Detection
-typedef void (XN_CALLBACK_TYPE* XnModulePoseDetectionCallback)(const XnChar* strPose, XnUserID user, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnModulePoseDetectionInProgressCallback)(const XnChar* strPose, XnUserID user, XnPoseDetectionStatus poseError, void* pCookie);
-
-typedef struct XnModuleExportedProductionNodeInterface
-{
- /**
- * Gets a description of this generator.
- *
- * @param pDescription [in/out] A struct to be filled with the description.
- */
- void (XN_CALLBACK_TYPE* GetDescription)
- (XnProductionNodeDescription* pDescription);
-
- /**
- * Find all tree possibilities for this production node.
- *
- * @param pContext [in] Current OpenNI context
- * @param pNodesList [in] A list to be filled with production trees.
- * @param pErrors [in] Optional. An enumeration errors object to be passed to enumeration functions.
- */
- XnStatus (XN_CALLBACK_TYPE* EnumerateProductionTrees)
- (XnContext* pContext,
- XnNodeInfoList* pNodesList,
- XnEnumerationErrors* pErrors);
-
- /**
- * Creates an instance of this generator.
- *
- * @param pContext [in] Current OpenNI context
- * @param strInstanceName [in] The name of this new instance.
- * @param strCreationInfo [in] Optional creation info (returned from enumeration).
- * @param pNeededNodes [in] A list of inputs for this generator.
- * @param strConfigurationDir [in] The module configuration dir, or NULL if it doesn't have one.
- * @param phInstance [out] A handle to the created instance.
- */
- XnStatus (XN_CALLBACK_TYPE* Create)
- (XnContext* pContext,
- const XnChar* strInstanceName,
- const XnChar* strCreationInfo,
- XnNodeInfoList* pNeededNodes,
- const XnChar* strConfigurationDir,
- XnModuleNodeHandle* phInstance);
-
- /**
- * Destroys an instance previously created using Create().
- *
- * @param hGenerator [in] A handle to the instance to be destroyed.
- */
- void (XN_CALLBACK_TYPE* Destroy)
- (XnModuleNodeHandle hInstance);
-
- /**
- * Fills a struct with the entire interface exported. The type of the struct passed
- * to this function is determined according to the type this production node declares itself.
- * For example, a depth generator will be passed a pointer to a XnModuleDepthGeneratorInterface struct.
- *
- * @param pInterface [in/out] A pointer to a struct to be filled.
- */
- union
- {
- void (XN_CALLBACK_TYPE* ProductionNode)(struct XnModuleProductionNodeInterface* pInterface);
- void (XN_CALLBACK_TYPE* Device)(struct XnModuleDeviceInterface* pInterface);
- void (XN_CALLBACK_TYPE* Generator)(struct XnModuleGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* MapGenerator)(struct XnModuleMapGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* Depth)(struct XnModuleDepthGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* Image)(struct XnModuleImageGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* IR)(struct XnModuleIRGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* User)(struct XnModuleUserGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* Hands)(struct XnModuleHandsGeneratorInterface* pInterace);
- void (XN_CALLBACK_TYPE* Gesture)(struct XnModuleGestureGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* Scene)(struct XnModuleSceneAnalyzerInterface* pInterface);
- void (XN_CALLBACK_TYPE* Audio)(struct XnModuleAudioGeneratorInterface* pInterface);
- void (XN_CALLBACK_TYPE* Recorder)(struct XnModuleRecorderInterface* pInterface);
- void (XN_CALLBACK_TYPE* Player)(struct XnModulePlayerInterface* pInterface);
- void (XN_CALLBACK_TYPE* Codec)(struct XnModuleCodecInterface* pInterface);
- void (XN_CALLBACK_TYPE* Script)(struct XnModuleScriptNodeInterface* pInterface);
-
- void (XN_CALLBACK_TYPE* General)(void* pInterface);
- } GetInterface;
-
-} XnModuleExportedProductionNodeInterface;
-
-typedef struct XnModuleExtendedSerializationInterface
-{
- XnStatus (XN_CALLBACK_TYPE* InitNotifications)(XnModuleNodeHandle hInstance, XnNodeNotifications* pNotifications, void* pCookie);
- void (XN_CALLBACK_TYPE* StopNotifications)(XnModuleNodeHandle hInstance);
-
-} XnModuleExtendedSerializationInterface;
-
-typedef struct XnModuleLockAwareInterface
-{
- /**
- * Notifies the node its lock state was changed.
- *
- * @param hInstance [in] A handle to the instance.
- * @param bLocked [in] Current lock state.
- */
- XnStatus (XN_CALLBACK_TYPE* SetLockState)(XnModuleNodeHandle hInstance, XnBool bLocked);
-
- /**
- * Gets current lock state.
- *
- * @param hInstance [in] A handle to the instance.
- */
- XnBool (XN_CALLBACK_TYPE* GetLockState)(XnModuleNodeHandle hInstance);
-
- /**
- * Registers a callback function to lock changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when lock changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromLockChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToLockChange)
- (XnModuleNodeHandle hInstance, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToLockChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToLockChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromLockChange)
- (XnModuleNodeHandle hInstance, XnCallbackHandle hCallback);
-
-} XnModuleLockAwareInterface;
-
-typedef struct XnModuleErrorStateInterface
-{
- /**
- * Gets current error state of this node.
- *
- * @param hInstance [in] A handle to the instance.
- */
- XnStatus (XN_CALLBACK_TYPE* GetErrorState)(XnModuleNodeHandle hInstance);
-
- /**
- * Registers a callback function to error state changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when lock changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromErrorStateChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToErrorStateChange)
- (XnModuleNodeHandle hInstance, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToErrorStateChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToErrorStateChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromErrorStateChange)
- (XnModuleNodeHandle hInstance, XnCallbackHandle hCallback);
-
-} XnModuleErrorStateInterface;
-
-typedef struct XnModuleGeneralIntInterface
-{
- /**
- * Gets the range of this capability values
- *
- * @param hGenerator [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param pnMin [out] Minimum value
- * @param pnMax [out] Maximum value
- * @param pnStep [out] Step size
- * @param pnDefault [out] Default value
- * @param pbIsAutoSupported [out] TRUE if auto adjustment is supported, FALSE otherwise
- */
- XnStatus (XN_CALLBACK_TYPE* GetRange)(XnModuleNodeHandle hGenerator, const XnChar* strCap, XnInt32* pnMin, XnInt32* pnMax, XnInt32* pnStep, XnInt32* pnDefault, XnBool* pbIsAutoSupported);
-
- /**
- * Gets the current value of this capability
- *
- * @param hGenerator [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param pnValue [out] Current value
- */
- XnStatus (XN_CALLBACK_TYPE* Get)(XnModuleNodeHandle hGenerator, const XnChar* strCap, XnInt32* pnValue);
-
- /**
- * Sets the current value of this capability
- *
- * @param hGenerator [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param nValue [in] Value to set
- */
- XnStatus (XN_CALLBACK_TYPE* Set)(XnModuleNodeHandle hGenerator, const XnChar* strCap, XnInt32 nValue);
-
- /**
- * Registers a callback function to values changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param strCap [in] Name of the capability
- * @param handler [in] A pointer to a function that will be called when value changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromValueChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToValueChange)
- (XnModuleNodeHandle hGenerator, const XnChar* strCap, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToValueChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param strCap [in] Name of the capability
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToValueChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromValueChange)
- (XnModuleNodeHandle hGenerator, const XnChar* strCap, XnCallbackHandle hCallback);
-
-} XnModuleGeneralIntInterface;
-
-typedef struct XnModuleProductionNodeInterface
-{
- /**
- * Checks if the specified capability is supported.
- *
- * @param hInstance [in] A handle to the instance to be queried.
- * @param strCapabilityName [in] The name of the capability to check.
- */
- XnBool (XN_CALLBACK_TYPE* IsCapabilitySupported)(
- XnModuleNodeHandle hInstance,
- const XnChar* strCapabilityName
- );
-
- /**
- * [Optional] Sets a property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param nValue [in] New value
- */
- XnStatus (XN_CALLBACK_TYPE* SetIntProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt64 nValue);
- XnStatus (XN_CALLBACK_TYPE* SetRealProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnDouble dValue);
- XnStatus (XN_CALLBACK_TYPE* SetStringProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, const XnChar* strValue);
- XnStatus (XN_CALLBACK_TYPE* SetGeneralProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, const void* pBuffer);
-
- /**
- * [Optional] Gets a property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param pnValue [out] Current value
- */
- XnStatus (XN_CALLBACK_TYPE* GetIntProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt64* pnValue);
- XnStatus (XN_CALLBACK_TYPE* GetRealProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnDouble* pdValue);
- XnStatus (XN_CALLBACK_TYPE* GetStringProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnChar* csValue, XnUInt32 nBufSize);
- XnStatus (XN_CALLBACK_TYPE* GetGeneralProperty)(XnModuleNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, void* pBuffer);
-
- XnModuleExtendedSerializationInterface* pExtendedSerializationInterface;
- XnModuleLockAwareInterface* pLockAwareInterface;
- XnModuleErrorStateInterface* pErrorStateInterface;
- XnModuleGeneralIntInterface* pGeneralIntInterface;
-
-} XnModuleProductionNodeInterface;
-
-typedef struct XnModuleDeviceIdentificationInterface
-{
- /**
- * Gets the device name.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the device name.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the device name should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
- XnStatus (XN_CALLBACK_TYPE* GetDeviceName)(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
- /**
- * Gets a vendor-specific string.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the string.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the string should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
- XnStatus (XN_CALLBACK_TYPE* GetVendorSpecificData)(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
- /**
- * Gets the serial number of the device.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the string.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the string should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
- XnStatus (XN_CALLBACK_TYPE* GetSerialNumber)(XnModuleNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
-} XnModuleDeviceIdentificationInterface;
-
-typedef struct XnModuleDeviceInterface
-{
- XnModuleProductionNodeInterface* pProductionNode;
-
- XnModuleDeviceIdentificationInterface* pDeviceIdentificationInterface;
-
-} XnModuleDeviceInterface;
-
-typedef struct XnModuleMirrorInterface
-{
- /**
- * Sets current mirror configuration.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param bMirror [in] TRUE for mirroring output, FALSE otherwise.
- */
- XnStatus (XN_CALLBACK_TYPE* SetMirror)(XnModuleNodeHandle hInstance, XnBool bMirror);
-
- /**
- * Gets current mirroring configuration.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnBool (XN_CALLBACK_TYPE* IsMirrored)(XnModuleNodeHandle hInstance);
-
- /**
- * Registers a callback function to mirror changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when mirror changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromMirrorChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToMirrorChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToMirrorChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToMirrorChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromMirrorChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleMirrorInterface;
-
-typedef struct XnModuleAlternativeViewPointInterface
-{
- /**
- * Checks if this generator can change its output to look like as if it was taken from
- * a different location, represented by another generator.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The view point to be checked.
- *
- * @return TRUE if view point is supported, FALSE otherwise.
- */
- XnBool (XN_CALLBACK_TYPE* IsViewPointSupported)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Sets the view point of this generator to look like as if placed at another generator location.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The view point to be set.
- */
- XnStatus (XN_CALLBACK_TYPE* SetViewPoint)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Checks if current view point is as if coming from the other node view point.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The view point to be checked.
- */
- XnBool (XN_CALLBACK_TYPE* IsViewPointAs)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Sets the view point of this generator to its normal one.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnStatus (XN_CALLBACK_TYPE* ResetViewPoint)(XnModuleNodeHandle hGenerator);
-
- /**
- * Registers a callback function to view point changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when view point changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromViewPointChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToViewPointChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToViewPointChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToViewPointChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromViewPointChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleAlternativeViewPointInterface;
-
-typedef struct XnModuleFrameSyncInterface
-{
- /**
- * Checks if this generator can frame sync with another generator.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The node to be checked.
- *
- * @returns TRUE if frame sync is supported, FALSE otherwise.
- */
- XnBool (XN_CALLBACK_TYPE* CanFrameSyncWith)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Activates frame sync with another node
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The node to sync with.
- */
- XnStatus (XN_CALLBACK_TYPE* FrameSyncWith)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Stops frame sync with another node.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The node to stop sync with.
- */
- XnStatus (XN_CALLBACK_TYPE* StopFrameSyncWith)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Checks if frame synced with other node.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hOther [in] The node to be checked.
- */
- XnBool (XN_CALLBACK_TYPE* IsFrameSyncedWith)(XnModuleNodeHandle hGenerator, XnNodeHandle hOther);
-
- /**
- * Registers a callback function to frame sync changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when frame sync changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromFrameSyncChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToFrameSyncChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToFrameSyncChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToFrameSyncChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromFrameSyncChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleFrameSyncInterface;
-
-/** The interface of a generator. */
-typedef struct XnModuleGeneratorInterface
-{
- /**
- * Contains production node interface.
- */
- XnModuleProductionNodeInterface* pProductionNodeInterface;
-
- /**
- * Starts generation of the output.
- *
- * @param hGenerator [in] A handle to the instance to start generating.
- */
- XnStatus (XN_CALLBACK_TYPE* StartGenerating)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Checks if the generator is currently generating.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnBool (XN_CALLBACK_TYPE* IsGenerating)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Stops generation of the output.
- *
- * @param hGenerator [in] A handle to the instance to stop generating.
- */
- void (XN_CALLBACK_TYPE* StopGenerating)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Registers a callback function to be called when generation starts or stops.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when generation starts/stops.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromGenerationRunningChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToGenerationRunningChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToGenerationRunningChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToGenerationRunningChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromGenerationRunningChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- /**
- * Registers a callback function to be called when new data is available.
- *
- * @param handler [in] A pointer to a function that will be called when new data is available.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromNewDataAvailable().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToNewDataAvailable)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToNewDataAvailable().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToNewDataAvailable().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromNewDataAvailable)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- /**
- * Checks whether this node has new data (and so a call to @ref xn::Generator::WaitAndUpdateData() will not block).
- *
- * @param hGenerator [in] A handle to the instance to be updated.
- * @param pnTimestamp [out] If new data is available, the timestamp of that data.
- */
- XnBool (XN_CALLBACK_TYPE* IsNewDataAvailable)
- (XnModuleNodeHandle hGenerator, XnUInt64* pnTimestamp);
-
- /**
- * Updates the data to the latest available one. This function will only be called AFTER the node
- * notified OpenNI it has new data available.
- *
- * @param hGenerator [in] A handle to the instance to be updated.
- */
- XnStatus (XN_CALLBACK_TYPE* UpdateData)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Gets the size of current data, in bytes.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnUInt32 (XN_CALLBACK_TYPE* GetDataSize)(XnModuleNodeHandle hGenerator);
-
- /**
- * Gets the timestamp of current data, in microseconds.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnUInt64 (XN_CALLBACK_TYPE* GetTimestamp)(XnModuleNodeHandle hGenerator);
-
- /**
- * Gets the frame ID of current data.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnUInt32 (XN_CALLBACK_TYPE* GetFrameID)(XnModuleNodeHandle hGenerator);
-
- XnModuleMirrorInterface* pMirrorInterface;
- XnModuleAlternativeViewPointInterface* pAlternativeViewPointInterface;
- void* pObsolete1; // used to be pSeekingInterface (removed in 1.0.0.28)
- XnModuleFrameSyncInterface* pFrameSyncInterface;
-
- //Note: The GetData() function was added in version 1.0.0.28
- /**
- * Gets pointer to current data.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- const void* (XN_CALLBACK_TYPE* GetData)(XnModuleNodeHandle hGenerator);
-
-} XnModuleGeneratorInterface;
-
-typedef struct XnModuleRecorderInterface
-{
- /*
- * Sets the output stream for the recorder module.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pStreamToken [in] A token that the recorder module must save for passing to later stream calls.
- * @param pStream [in] The stream interface the recorder module must save for later stream calls.
- */
- XnStatus (XN_CALLBACK_TYPE* SetOutputStream)
- (XnModuleNodeHandle hInstance, void *pStreamToken, XnRecorderOutputStreamInterface *pStream);
-
- XnModuleProductionNodeInterface* pProductionNode;
- XnNodeNotifications* pNodeNotifications;
-} XnModuleRecorderInterface;
-
-typedef struct XnModulePlayerInterface
-{
- /*
- * Sets the input stream for the player module
- *
- * @param hInstance [in] A handle to the instance.
- * @param pStreamCookie [in] A cookie that the player module must save for passing to later stream calls.
- * @param pStream [in] The stream interface the player module must save for later stream calls.
- */
- XnStatus (XN_CALLBACK_TYPE* SetInputStream)
- (XnModuleNodeHandle hInstance, void *pStreamCookie, XnPlayerInputStreamInterface *pStream);
-
- /**
- * Reads next data from the input stream.
- *
- * @param hInstance [in] A handle to the instance.
- */
- XnStatus (XN_CALLBACK_TYPE* ReadNext)(XnModuleNodeHandle hInstance);
-
- /*
- * Sets the node notifications object to be used by the player. The player will use this object to
- * notify about events it encounters in the stream that was set with @ref SetInputStream().
- *
- * @param hInstance [in] A handle to the instance.
- * @param pNodeNotificationsCookie [in] A cookie that the player module must save for passing to node notification calls.
- * @param pNodeNotifications [in] The node notifications interface that the player module will use to raise node notifications it finds in the stream.
- */
- XnStatus (XN_CALLBACK_TYPE* SetNodeNotifications)
- (XnModuleNodeHandle hInstance, void *pNodeNotificationsCookie, XnNodeNotifications *pNodeNotifications);
-
- XnStatus (XN_CALLBACK_TYPE* SetRawNodeNotifications)
- (XnModuleNodeHandle hInstance, void *pRawNodeNotificationsCookie, XnNodeNotifications *pRawNodeNotifications);
-
-
- /*
- * Determines whether the player repeats the played stream or not.
- *
- * @param bRepeat [in] If TRUE, repeat is set to be ON. If FALSE, repeat is set to be OFF.
- */
- XnStatus (XN_CALLBACK_TYPE* SetRepeat)
- (XnModuleNodeHandle hInstance, XnBool bRepeat);
-
- XnStatus (XN_CALLBACK_TYPE* SeekToTimeStamp)
- (XnModuleNodeHandle hInstance, XnInt64 nTimeOffset, XnPlayerSeekOrigin origin);
-
- XnStatus (XN_CALLBACK_TYPE* SeekToFrame)
- (XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin);
-
- XnStatus (XN_CALLBACK_TYPE* TellTimestamp)
- (XnModuleNodeHandle hInstance, XnUInt64* pnTimestamp);
-
- XnStatus (XN_CALLBACK_TYPE* TellFrame)
- (XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnUInt32* pnFrame);
-
- XnStatus (XN_CALLBACK_TYPE* GetNumFrames)
- (XnModuleNodeHandle hInstance, const XnChar* strNodeName, XnUInt32* pnFrames);
-
- const XnChar* (XN_CALLBACK_TYPE* GetSupportedFormat)
- (XnModuleNodeHandle hInstance);
-
- XnBool (XN_CALLBACK_TYPE* IsEOF)
- (XnModuleNodeHandle hInstance);
-
- /**
- * Registers a callback function to be called when end-of-file was reached.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function to be called.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to UnregisterFromEndOfFileReached().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToEndOfFileReached)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using RegisterToEndOfFileReached().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from RegisterToEndOfFileReached().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromEndOfFileReached)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnModuleProductionNodeInterface* pProductionNode;
- void* pObsolete1; // used to be pSeekingInterface (removed in 1.0.0.28)
-
-} XnModulePlayerInterface;
-
-typedef struct XnModuleCroppingInterface
-{
- /**
- * Sets the cropping.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param pCropping [in] The cropping configuration to be set.
- */
- XnStatus (XN_CALLBACK_TYPE* SetCropping)(XnModuleNodeHandle hGenerator, const XnCropping* pCropping);
-
- /**
- * Gets current cropping configuration.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param pCropping [out] Current cropping configuration.
- */
- XnStatus (XN_CALLBACK_TYPE* GetCropping)(XnModuleNodeHandle hGenerator, XnCropping* pCropping);
-
- /**
- * Registers a callback function to cropping changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when cropping changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to UnregisterFromCroppingChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToCroppingChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using RegisterToCroppingChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from RegisterToCroppingChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromCroppingChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleCroppingInterface;
-
-typedef struct XnModuleAntiFlickerInterface
-{
- /**
- * Sets the power line frequency: 50 Hz, 60 Hz, or 0 to turn off anti-flicker.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param nFrequency [in] The frequency to be used.
- */
- XnStatus (XN_CALLBACK_TYPE* SetPowerLineFrequency)(XnModuleNodeHandle hGenerator, XnPowerLineFrequency nFrequency);
-
- /**
- * Gets the power line frequency.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnPowerLineFrequency (XN_CALLBACK_TYPE* GetPowerLineFrequency)(XnModuleNodeHandle hGenerator);
-
- /**
- * Registers a callback function to power line frequency changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when power line frequency changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromPowerLineFrequencyChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToPowerLineFrequencyChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToPowerLineFrequencyChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToPowerLineFrequencyChange().
- */
- void (XN_CALLBACK_TYPE* UnregisterFromPowerLineFrequencyChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleAntiFlickerInterface;
-
-typedef struct XnModuleMapGeneratorInterface
-{
- /**
- * Contains the generator interface.
- */
- XnModuleGeneratorInterface* pGeneratorInterface;
-
- /**
- * Gets the number of supported modes. This is useful for allocating an array that will be passed to
- * @ref GetSupportedMapOutputModes().
- *
- * @param hInstance [in] A handle to the instance.
- */
- XnUInt32 (XN_CALLBACK_TYPE* GetSupportedMapOutputModesCount)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Gets a list of all supported modes. The size of the array that should be passed can be obtained by calling
- * @ref GetSupportedMapOutputModesCount().
- *
- * @param hInstance [in] A handle to the instance.
- * @param aModes [in/out] An array to be filled with supported modes.
- * @param pnCount [in/out] In: number of elements allocated in the array. Out: number of elements
- * actually written to the array.
- */
- XnStatus (XN_CALLBACK_TYPE* GetSupportedMapOutputModes)
- (XnModuleNodeHandle hGenerator,
- XnMapOutputMode* aModes, XnUInt32* pnCount);
-
- /**
- * Sets the output mode.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param pOutputMode [in] The output mode to be set.
- */
- XnStatus (XN_CALLBACK_TYPE* SetMapOutputMode)
- (XnModuleNodeHandle hGenerator, const XnMapOutputMode* pOutputMode);
-
- /**
- * Gets the current output mode.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param pOutputMode [out] Current output mode.
- */
- XnStatus (XN_CALLBACK_TYPE* GetMapOutputMode)
- (XnModuleNodeHandle hGenerator, XnMapOutputMode* pOutputMode);
-
- /**
- * Registers a callback function to mode changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when mode changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to UnregisterFromMapOutputModeChange.
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToMapOutputModeChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using RegisterToMapOutputModeChange.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from RegisterToMapOutputModeChange.
- */
- void (XN_CALLBACK_TYPE* UnregisterFromMapOutputModeChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnModuleCroppingInterface* pCroppingInterface;
-
- // NOTE: GetBytesPerPixel() was added in OpenNI 1.0.0.30
- /**
- * Gets the number of bytes per pixel
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnUInt32 (XN_CALLBACK_TYPE* GetBytesPerPixel)
- (XnModuleNodeHandle hGenerator);
-
- XnModuleAntiFlickerInterface* pAntiFlickerInterface;
-
-} XnModuleMapGeneratorInterface;
-
-/**
- * A set of functions supported by depth generators who supports the User Position capability.
- */
-typedef struct XnModuleUserPositionCapabilityInterface
-{
- /**
- * Gets the number of user positions supported by this generator.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnUInt32 (XN_CALLBACK_TYPE* GetSupportedUserPositionsCount)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Sets the current user position.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param nIndex [in] The user position to set.
- * @param pPosition [in] The user position in the frame.
- */
- XnStatus (XN_CALLBACK_TYPE* SetUserPosition)(
- XnModuleNodeHandle hGenerator,
- XnUInt32 nIndex,
- const XnBoundingBox3D* pPosition);
-
- /**
- * Gets the current user position.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param nIndex [in] The user position to get.
- * @param pPosition [out] Current user position.
- */
- XnStatus (XN_CALLBACK_TYPE* GetUserPosition)
- (XnModuleNodeHandle hGenerator, XnUInt32 nIndex, XnBoundingBox3D* pPosition);
-
- /**
- * Registers a callback function to user position changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when user position changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to UnregisterFromUserPositionChange.
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToUserPositionChange)
- (XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using RegisterToUserPositionChange.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from RegisterToUserPositionChange.
- */
- void (XN_CALLBACK_TYPE* UnregisterFromUserPositionChange)
- (XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleUserPositionCapabilityInterface;
-
-/** Depth generator additional methods. */
-typedef struct XnModuleDepthGeneratorInterface
-{
- /**
- * Contains map generator interface.
- */
- XnModuleMapGeneratorInterface* pMapInterface;
-
- /**
- * Gets the current depth-map. This map is updated after a call to WaitAndUpdateData().
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnDepthPixel* (XN_CALLBACK_TYPE* GetDepthMap)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Gets the maximum depth the device can produce.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnDepthPixel (XN_CALLBACK_TYPE* GetDeviceMaxDepth)
- (XnModuleNodeHandle hGenerator);
-
- /**
- * Gets the field of view of the sensor, in radians.
- * This value will be used for translation between projective and real-world coordinates.
- * It is assumed that the sensor is a pinhole camera.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param pFOV [in] A struct to be filled with data.
- */
- void (XN_CALLBACK_TYPE* GetFieldOfView)(XnModuleNodeHandle hGenerator, XnFieldOfView* pFOV);
-
- /**
- * Registers a callback function to field of view changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when field of view changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref UnregisterFromFieldOfViewChange().
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToFieldOfViewChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref RegisterToFieldOfViewChange.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref RegisterToFieldOfViewChange.
- */
- void (XN_CALLBACK_TYPE* UnregisterFromFieldOfViewChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- /**
- * Contains User Position Capability interface.
- */
- XnModuleUserPositionCapabilityInterface* pUserPositionInterface;
-
-} XnModuleDepthGeneratorInterface;
-
-/** Image generator Interface. */
-typedef struct XnModuleImageGeneratorInterface
-{
- /**
- * Contains map generator interface.
- */
- XnModuleMapGeneratorInterface* pMapInterface;
-
- /** Gets the current image-map. This map is updated after a call to WaitAndUpdateData(). */
- XnUInt8* (XN_CALLBACK_TYPE* GetImageMap)(
- XnModuleNodeHandle hGenerator
- );
-
- /**
- * Checks if a specific pixel format is supported.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param Format [in] The format to check for.
- */
- XnBool (XN_CALLBACK_TYPE* IsPixelFormatSupported)(XnModuleNodeHandle hGenerator, XnPixelFormat Format);
-
- /**
- * Sets the pixel format of the image map.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param Format [in] The format to set.
- */
- XnStatus (XN_CALLBACK_TYPE* SetPixelFormat)(XnModuleNodeHandle hGenerator, XnPixelFormat Format);
-
- /**
- * Gets current pixel format.
- *
- * @param hGenerator [in] A handle to the instance.
- */
- XnPixelFormat (XN_CALLBACK_TYPE* GetPixelFormat)(XnModuleNodeHandle hGenerator);
-
- /**
- * Registers a callback function to pixel format changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when pixel format changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromPixelFormatChange.
- */
- XnStatus (XN_CALLBACK_TYPE* RegisterToPixelFormatChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
- /**
- * Unregisters a callback function which was registered using @ref xnRegisterToPixelFormatChange.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToPixelFormatChange.
- */
- void (XN_CALLBACK_TYPE* UnregisterFromPixelFormatChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleImageGeneratorInterface;
-
-/** IR generator Interface. */
-typedef struct XnModuleIRGeneratorInterface
-{
- /**
- * Contains map generator interface.
- */
- XnModuleMapGeneratorInterface* pMapInterface;
-
- /** Gets the current IR-map. This map is updated after a call to WaitAndUpdateData(). */
- XnIRPixel* (XN_CALLBACK_TYPE* GetIRMap)(
- XnModuleNodeHandle hGenerator
- );
-
-} XnModuleIRGeneratorInterface;
-
-/** Gesture generator Interface. */
-typedef struct XnModuleGestureGeneratorInterface
-{
- XnModuleGeneratorInterface* pGeneratorInterface;
-
- XnStatus (XN_CALLBACK_TYPE* AddGesture)(XnModuleNodeHandle hGenerator, const XnChar* strGesture, XnBoundingBox3D* pArea);
- XnStatus (XN_CALLBACK_TYPE* RemoveGesture)(XnModuleNodeHandle hGenerator, const XnChar* strGesture);
- XnStatus (XN_CALLBACK_TYPE* GetActiveGestures)(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt16* nGestures);
- XnStatus (XN_CALLBACK_TYPE* EnumerateGestures)(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt16* nGestures);
- XnBool (XN_CALLBACK_TYPE* IsGestureAvailable)(XnModuleNodeHandle hInstance, const XnChar* strGesture);
- XnBool (XN_CALLBACK_TYPE* IsGestureProgressSupported)(XnModuleNodeHandle hGenerator, const XnChar* strGesture);
- XnStatus (XN_CALLBACK_TYPE* RegisterGestureCallbacks)(XnModuleNodeHandle hGenerator, XnModuleGestureRecognized RecognizedCB, XnModuleGestureProgress ProgressCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterGestureCallbacks)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* RegisterToGestureChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromGestureChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* GetAllActiveGestures)(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* nGestures);
- XnStatus (XN_CALLBACK_TYPE* EnumerateAllGestures)(XnModuleNodeHandle hGenerator, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* nGestures);
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToGestureIntermediateStageCompleted)(XnModuleNodeHandle hGenerator, XnModuleGestureIntermediateStageCompleted GestureIntermediateStageCompletedCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromGestureIntermediateStageCompleted)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* RegisterToGestureReadyForNextIntermediateStage)(XnModuleNodeHandle hGenerator, XnModuleGestureReadyForNextIntermediateStage ReadyForNextIntermediateStageCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromGestureReadyForNextIntermediateStage)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleGestureGeneratorInterface;
-
-/** Scene Analyzer Interface. */
-typedef struct XnModuleSceneAnalyzerInterface
-{
- XnModuleMapGeneratorInterface* pMapInterface;
-
- const XnLabel* (XN_CALLBACK_TYPE* GetLabelMap)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* GetFloor)(XnModuleNodeHandle hGenerator, XnPlane3D* pPlane);
-} XnModuleSceneAnalyzerInterface;
-
-/**
-* A set of functions supported by user generators who supports the UI capability.
-*/
-typedef struct XnModuleHandTouchingFOVEdgeCapabilityInterface
-{
- XnStatus (XN_CALLBACK_TYPE* RegisterToHandTouchingFOVEdge)(XnModuleNodeHandle hGenerator, XnModuleHandTouchingFOVEdge, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromHandTouchingFOVEdge)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-} XnModuleHandTouchingFOVEdgeCapabilityInterface;
-
-typedef struct XnModuleHandsGeneratorInterface
-{
- XnModuleGeneratorInterface* pGeneratorInterface;
-
- XnStatus (XN_CALLBACK_TYPE* RegisterHandCallbacks)(XnModuleNodeHandle hGenerator, XnModuleHandCreate CreateCB, XnModuleHandUpdate UpdateCB, XnModuleHandDestroy DestroyCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterHandCallbacks)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* StopTracking)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* StopTrackingAll)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* StartTracking)(XnModuleNodeHandle hGenerator, const XnPoint3D* pPosition);
- XnStatus (XN_CALLBACK_TYPE* SetSmoothing)(XnModuleNodeHandle hGenerator, XnFloat fSmoothingFactor);
-
- XnModuleHandTouchingFOVEdgeCapabilityInterface* pHandTouchingFOVEdgeInterface;
-
-} XnModuleHandsGeneratorInterface;
-
-/**
-* A set of functions supported by user generators who supports the Skeleton capability.
-*/
-typedef struct XnModuleSkeletonCapabilityInterface
-{
- XnBool (XN_CALLBACK_TYPE* IsJointAvailable)(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint);
- XnBool (XN_CALLBACK_TYPE* IsProfileAvailable)(XnModuleNodeHandle hGenerator, XnSkeletonProfile eProfile);
- XnStatus (XN_CALLBACK_TYPE* SetSkeletonProfile)(XnModuleNodeHandle hGenerator, XnSkeletonProfile eProfile);
- XnStatus (XN_CALLBACK_TYPE* SetJointActive)(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint, XnBool bState);
- XnBool (XN_CALLBACK_TYPE* IsJointActive)(XnModuleNodeHandle hGenerator, XnSkeletonJoint eJoint);
- XnStatus (XN_CALLBACK_TYPE* RegisterToJointConfigurationChange)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromJointConfigurationChange)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* EnumerateActiveJoints)(XnModuleNodeHandle hGenerator, XnSkeletonJoint* pJoints, XnUInt16* pnJoints);
- XnStatus (XN_CALLBACK_TYPE* GetSkeletonJoint)(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation* pJoint);
- XnStatus (XN_CALLBACK_TYPE* GetSkeletonJointPosition)(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition* pJoint);
- XnStatus (XN_CALLBACK_TYPE* GetSkeletonJointOrientation)(XnModuleNodeHandle hGenerator, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation* pJoint);
- XnBool (XN_CALLBACK_TYPE* IsTracking)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnBool (XN_CALLBACK_TYPE* IsCalibrated)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnBool (XN_CALLBACK_TYPE* IsCalibrating)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* RequestCalibration)(XnModuleNodeHandle hGenerator, XnUserID user, XnBool bForce);
- XnStatus (XN_CALLBACK_TYPE* AbortCalibration)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* SaveCalibrationData)(XnModuleNodeHandle hGenerator, XnUserID user, XnUInt32 nSlot);
- XnStatus (XN_CALLBACK_TYPE* LoadCalibrationData)(XnModuleNodeHandle hGenerator, XnUserID user, XnUInt32 nSlot);
- XnStatus (XN_CALLBACK_TYPE* ClearCalibrationData)(XnModuleNodeHandle hGenerator, XnUInt32 nSlot);
- XnBool (XN_CALLBACK_TYPE* IsCalibrationData)(XnModuleNodeHandle hGenerator, XnUInt32 nSlot);
- XnStatus (XN_CALLBACK_TYPE* StartTracking)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* StopTracking)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* Reset)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnBool (XN_CALLBACK_TYPE* NeedPoseForCalibration)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* GetCalibrationPose)(XnModuleNodeHandle hGenerator, XnChar* strPose);
- XnStatus (XN_CALLBACK_TYPE* SetSmoothing)(XnModuleNodeHandle hGenerator, XnFloat fSmoothingFactor);
- XnStatus (XN_CALLBACK_TYPE* RegisterCalibrationCallbacks)(XnModuleNodeHandle hGenerator, XnModuleCalibrationStart CalibrationStartCB, XnModuleCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterCalibrationCallbacks)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* SaveCalibrationDataToFile)(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strFileName);
- XnStatus (XN_CALLBACK_TYPE* LoadCalibrationDataFromFile)(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strFileName);
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToCalibrationInProgress)(XnModuleNodeHandle hGenerator, XnModuleCalibrationInProgress CalibrationInProgressCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromCalibrationInProgress)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* RegisterToCalibrationComplete)(XnModuleNodeHandle hGenerator, XnModuleCalibrationComplete CalibrationCompleteCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromCalibrationComplete)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToCalibrationStart)(XnModuleNodeHandle hGenerator, XnModuleCalibrationStart handler, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromCalibrationStart)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-} XnModuleSkeletonCapabilityInterface;
-
-typedef struct XnModulePoseDetectionCapabilityInterface
-{
- XnUInt32 (XN_CALLBACK_TYPE* GetNumberOfPoses)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* GetAvailablePoses)(XnModuleNodeHandle hGenerator, XnChar** pstrPoses, XnUInt32* pnPoses);
- XnStatus (XN_CALLBACK_TYPE* StartPoseDetection)(XnModuleNodeHandle hGenerator, const XnChar* strPose, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* StopPoseDetection)(XnModuleNodeHandle hGenerator, XnUserID user);
- XnStatus (XN_CALLBACK_TYPE* RegisterToPoseCallbacks)(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback StartPoseCB, XnModulePoseDetectionCallback EndCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromPoseCallbacks)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* GetAllAvailablePoses)(XnModuleNodeHandle hGenerator, XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32* pnPoses);
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToPoseDetectionInProgress)(XnModuleNodeHandle hGenerator, XnModulePoseDetectionInProgressCallback PoseProgressCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromPoseDetectionInProgress)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToPoseDetected)(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromPoseDetected)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* RegisterToOutOfPose)(XnModuleNodeHandle hGenerator, XnModulePoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromOutOfPose)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- XnStatus (XN_CALLBACK_TYPE* StopSinglePoseDetection)(XnModuleNodeHandle hGenerator, XnUserID user, const XnChar* strPose);
-} XnModulePoseDetectionCapabilityInterface;
-
-/** User generator Interface. */
-typedef struct XnModuleUserGeneratorInterface
-{
- XnModuleGeneratorInterface* pGeneratorInterface;
-
- XnUInt16 (XN_CALLBACK_TYPE* GetNumberOfUsers)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* GetUsers)(XnModuleNodeHandle hGenerator, XnUserID* pUsers, XnUInt16* pnUsers);
- XnStatus (XN_CALLBACK_TYPE* GetCoM)(XnModuleNodeHandle hGenerator, XnUserID user, XnPoint3D* pCoM);
- XnStatus (XN_CALLBACK_TYPE* GetUserPixels)(XnModuleNodeHandle hGenerator, XnUserID user, XnSceneMetaData* pScene);
- XnStatus (XN_CALLBACK_TYPE* RegisterUserCallbacks)(XnModuleNodeHandle hGenerator, XnModuleUserHandler NewUserCB, XnModuleUserHandler LostUserCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterUserCallbacks)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
- /**
- * Contains Skeleton Capability interface.
- */
- XnModuleSkeletonCapabilityInterface* pSkeletonInterface;
- /**
- * Contains Pose Detection Capability interface
- */
- XnModulePoseDetectionCapabilityInterface* pPoseDetectionInterface;
-
- XnStatus (XN_CALLBACK_TYPE* RegisterToUserExit)(XnModuleNodeHandle hGenerator, XnModuleUserHandler UserExitCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromUserExit)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
- XnStatus (XN_CALLBACK_TYPE* RegisterToUserReEnter)(XnModuleNodeHandle hGenerator, XnModuleUserHandler UserReEnterCB, void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromUserReEnter)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleUserGeneratorInterface;
-
-/** Audio Generator Interface. */
-typedef struct XnModuleAudioGeneratorInterface
-{
- XnModuleGeneratorInterface* pGeneratorInterface;
-
- XnUChar* (XN_CALLBACK_TYPE* GetAudioBuffer)(XnModuleNodeHandle hGenerator);
- XnUInt32 (XN_CALLBACK_TYPE* GetSupportedWaveOutputModesCount)(XnModuleNodeHandle hGenerator);
- XnStatus (XN_CALLBACK_TYPE* GetSupportedWaveOutputModes)(XnModuleNodeHandle hGenerator, XnWaveOutputMode* aSupportedModes, XnUInt32* pnCount);
- XnStatus (XN_CALLBACK_TYPE* SetWaveOutputMode)(XnModuleNodeHandle hGenerator, const XnWaveOutputMode* OutputMode);
- XnStatus (XN_CALLBACK_TYPE* GetWaveOutputMode)(XnModuleNodeHandle hGenerator, XnWaveOutputMode* OutputMode);
- XnStatus (XN_CALLBACK_TYPE* RegisterToWaveOutputModeChanges)(XnModuleNodeHandle hGenerator, XnModuleStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
- void (XN_CALLBACK_TYPE* UnregisterFromWaveOutputModeChanges)(XnModuleNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-} XnModuleAudioGeneratorInterface;
-
-typedef struct XnModuleCodecInterface
-{
- XnModuleProductionNodeInterface* pProductionNode;
-
- XnCodecID (XN_CALLBACK_TYPE* GetCodecID)(XnModuleNodeHandle hCodec);
- XnStatus (XN_CALLBACK_TYPE* Init)(XnModuleNodeHandle hCodec, XnNodeHandle hNode);
- XnStatus (XN_CALLBACK_TYPE* CompressData)(XnModuleNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten);
- XnStatus (XN_CALLBACK_TYPE* DecompressData)(XnModuleNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize, void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten);
-
-} XnModuleCodecInterface;
-
-typedef struct XnModuleScriptNodeInterface
-{
- XnModuleProductionNodeInterface* pProductionNode;
-
- const XnChar* (XN_CALLBACK_TYPE* GetSupportedFormat)(XnModuleNodeHandle hScript);
- XnStatus (XN_CALLBACK_TYPE* LoadScriptFromFile)(XnModuleNodeHandle hScript, const XnChar* strFileName);
- XnStatus (XN_CALLBACK_TYPE* LoadScriptFromString)(XnModuleNodeHandle hScript, const XnChar* strScript);
- XnStatus (XN_CALLBACK_TYPE* Run)(XnModuleNodeHandle hScript, XnNodeInfoList* pCreatedNodes, XnEnumerationErrors* pErrors);
-
-} XnModuleScriptNodeInterface;
-
-#endif // __XN_MODULE_INTERFACE_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNode.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNode.h
deleted file mode 100644
index 025741a3..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNode.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_NODE_H_
-#define _XN_NODE_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnDataTypes.h>
-#include <XnBaseNode.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
- * The building block of the data types - XnNode
- */
-class XnNode : protected XnBaseNode
-{
-public:
- static XnNode *Allocate() { return (XnNode*)xnAllocateBaseNode(); }
- static void Deallocate(XnNode *pNode) { xnDeallocateBaseNode((XnBaseNode*)pNode); }
-
- /**
- * Constructor. Initialize internal representations
- */
- XnNode() { m_pNext = NULL; m_pPrevious = NULL; m_Data = NULL; }
-
- /**
- * Get the next XnNode (non-const version)
- */
- XnNode*& Next() {return (XnNode*&)m_pNext;}
- /**
- * Get the next XnNode (const version)
- */
- const XnNode* const Next() const {return (const XnNode*)m_pNext;}
-
- /**
- * Get the previous XnNode (non-const version)
- */
- XnNode*& Previous() {return (XnNode*&)m_pPrevious;}
- /**
- * Get the previous XnNode (non-const version)
- */
- const XnNode* const Previous() const {return (const XnNode*)m_pPrevious;}
-
- /**
- * Get the value in the node (non-const version)
- */
- XnValue& Data() {return m_Data;}
- /**
- * Get the value in the node (non-const version)
- */
- const XnValue& Data() const {return m_Data;}
-};
-
-#endif // _XN_NODE_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNodeAllocator.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNodeAllocator.h
deleted file mode 100644
index 757e4005..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnNodeAllocator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _NISIMPLENODEALLOCATOR_H
-#define _NISIMPLENODEALLOCATOR_H
-
-#include <IXnNodeAllocator.h>
-#include <XnNode.h>
-
-class XnNodeAllocator : public INiNodeAllocator
-{
-public:
- /**
- * Allocate a new XnNode
- *
- * @return NULL if allocating a new node failed
- */
- virtual XnNode *Allocate() { return XnNode::Allocate(); }
-
- /**
- * Release an XnNode
- *
- * @param pNode [in] The node to deallocate
- */
- virtual void Deallocate(XnNode *pNode) { XnNode::Deallocate(pNode); }
-};
-
-#endif //_NISIMPLENODEALLOCATOR_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOS.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOS.h
deleted file mode 100644
index e934655c..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOS.h
+++ /dev/null
@@ -1,784 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_OS_H__
-#define __XN_OS_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-#include "XnMacros.h"
-#include "XnStatusCodes.h"
-#include "XnOSStrings.h"
-#include "XnOSMemory.h"
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_MASK_OS "xnOS"
-
-// uncomment next line to activate memory profiling
-//#define XN_MEM_PROFILING
-
-//---------------------------------------------------------------------------
-// OS Identifier
-//---------------------------------------------------------------------------
-#if (XN_PLATFORM == XN_PLATFORM_WIN32)
- #include "Win32/XnOSWin32.h"
-#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM)
- #include "Linux-x86/XnOSLinux-x86.h"
-#elif defined(_ARC)
- #include "ARC/XnOSARC.h"
-#else
- #error OpenNI OS Abstraction Layer - Unsupported Platform!
-#endif
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-#define XN_MAX_OS_NAME_LENGTH 255
-
-typedef struct xnOSInfo
-{
- XnChar csOSName[XN_MAX_OS_NAME_LENGTH];
- XnChar csCPUName[XN_MAX_OS_NAME_LENGTH];
- XnUInt32 nProcessorsCount;
- XnUInt64 nTotalMemory;
-} xnOSInfo;
-
-typedef XnBool (XN_CALLBACK_TYPE* XnConditionFunc)(void* pConditionData);
-
-//---------------------------------------------------------------------------
-// Global Variables
-//---------------------------------------------------------------------------
-/** The time since Xiron Core was initialized */
-extern XnOSTimer g_xnOSHighResGlobalTimer;
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-// File open modes
-/** Open the file for reading. */
-#define XN_OS_FILE_READ 0x01
-/** Open the file for writing. */
-#define XN_OS_FILE_WRITE 0x02
-/** Create a new file (but only if it doesn't exist). */
-#define XN_OS_FILE_CREATE_NEW_ONLY 0x04
-/** Truncate the file if it already exists. */
-#define XN_OS_FILE_TRUNCATE 0x08
-/** File be opened in append mode */
-#define XN_OS_FILE_APPEND 0x10
-/** All writes will be immediately written to disk */
-#define XN_OS_FILE_AUTO_FLUSH 0x20
-
-// Seek types
-/** The seek type enum list. */
-typedef enum {
- /** Absolute seek from the file beginning. */
- XN_OS_SEEK_SET = 0,
- /** Relative seek from the current location. */
- XN_OS_SEEK_CUR,
- /** Absolute seek from the file ending. */
- XN_OS_SEEK_END
-} XnOSSeekType;
-
-//---------------------------------------------------------------------------
-// Network
-//---------------------------------------------------------------------------
-// Network socket type
-/** The network socket type. */
-typedef enum {
- /** UDP socket. */
- XN_OS_UDP_SOCKET = 0,
- /** TCP socket. */
- XN_OS_TCP_SOCKET
-} XnOSSocketType;
-
-#define XN_OS_NETWORK_LOCAL_HOST "127.0.0.1"
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-// Memory
-/** Validate that the input pointer X is not NULL. */
-#define XN_VALIDATE_INPUT_PTR(x) XN_VALIDATE_PTR(x, XN_STATUS_NULL_INPUT_PTR)
-
-/** Validate that the output pointer X is not NULL. */
-#define XN_VALIDATE_OUTPUT_PTR(x) XN_VALIDATE_PTR(x, XN_STATUS_NULL_OUTPUT_PTR)
-/** Validate that a X pointer after a memory allocation call is not NULL. */
-#define XN_VALIDATE_ALLOC_PTR(x) XN_VALIDATE_PTR(x, XN_STATUS_ALLOC_FAILED)
-
-/** Allocate Y bytes into the X pointer and make sure NULL wasn't returned. */
-#define XN_VALIDATE_ALLOC(x,y) \
- x = (y*)xnOSMalloc(sizeof(y)); \
- XN_VALIDATE_ALLOC_PTR(x);
-
-/** Allocate Z elements of Y type into the X pointer and make sure NULL wasn't returned. */
-#define XN_VALIDATE_CALLOC(x,y,z) \
- x = (y*)xnOSCalloc(z, sizeof(y)); \
- XN_VALIDATE_ALLOC_PTR(x);
-
-/** Allocate Y aligned bytes into the X pointer and make sure NULL wasn't returned. */
-#define XN_VALIDATE_ALIGNED_ALLOC(x,y,w) \
- x = (y*)xnOSMallocAligned(sizeof(y), w); \
- XN_VALIDATE_ALLOC_PTR(x);
-
-/** Allocate Z aligned elements of Y type into the X pointer and make sure NULL wasn't returned. */
-#define XN_VALIDATE_ALIGNED_CALLOC(x,y,z,w) \
- x = (y*)xnOSCallocAligned(z, sizeof(y), w); \
- XN_VALIDATE_ALLOC_PTR(x);
-
-/** Validate that the memory free request succeeded and set X to NULL. */
-#define XN_FREE_AND_NULL(x) \
- if (x != NULL) \
- { \
- xnOSFree(x); \
- x = NULL; \
- }
-/** Validate that the aligned memory free request succeeded and set X to NULL. */
-#define XN_ALIGNED_FREE_AND_NULL(x) \
- if (x != NULL) \
- { \
- xnOSFreeAligned(x); \
- x = NULL; \
- }
-
-
-/** Creates a new type object and validates that allocation succeeded. */
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define XN_VALIDATE_NEW(ptr, type, ...) \
- { \
- (ptr) = XN_NEW(type, __VA_ARGS__); \
- if ((ptr) == NULL) \
- { \
- return (XN_STATUS_ALLOC_FAILED); \
- } \
- }
-
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define XN_VALIDATE_NEW(ptr, type, ...) \
- { \
- (ptr) = XN_NEW(type, ##__VA_ARGS__); \
- if ((ptr) == NULL) \
- { \
- return (XN_STATUS_ALLOC_FAILED); \
- } \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define XN_VALIDATE_NEW(ptr, type...) \
- { \
- (ptr) = XN_NEW(type); \
- if ((ptr) == NULL) \
- { \
- return (XN_STATUS_ALLOC_FAILED); \
- } \
- }
-#else
- #define XN_VALIDATE_NEW(ptr, type) \
- { \
- (ptr) = XN_NEW(type); \
- if ((ptr) == NULL) \
- { \
- return (XN_STATUS_ALLOC_FAILED); \
- } \
- }
-#endif
-
-/** Creates a new type object, validates that allocation succeeded, and initializes the object (type must have an Init function). */
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define XN_VALIDATE_NEW_AND_INIT(ptr, type, ...) \
- { \
- XN_VALIDATE_NEW(ptr, type, __VA_ARGS__); \
- XnStatus rc = (ptr)->Init(); \
- if (rc != XN_STATUS_OK) \
- { \
- XN_DELETE(ptr); \
- return (rc); \
- } \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define XN_VALIDATE_NEW_AND_INIT(ptr, type, ...) \
- { \
- XN_VALIDATE_NEW(ptr, type, ##__VA_ARGS__); \
- XnStatus rc = (ptr)->Init(); \
- if (rc != XN_STATUS_OK) \
- { \
- XN_DELETE(ptr); \
- return (rc); \
- } \
- }
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define XN_VALIDATE_NEW_AND_INIT(ptr, type...) \
- { \
- XN_VALIDATE_NEW(ptr, type); \
- XnStatus rc = (ptr)->Init(); \
- if (rc != XN_STATUS_OK) \
- { \
- XN_DELETE(ptr); \
- return (rc); \
- } \
- }
-#else
- #define XN_VALIDATE_NEW_AND_INIT(ptr, type) \
- { \
- XN_VALIDATE_NEW(ptr, type); \
- XnStatus rc = (ptr)->Init(); \
- if (rc != XN_STATUS_OK) \
- { \
- XN_DELETE(ptr); \
- return (rc); \
- } \
- }
-#endif
-
-// Strings
-/** Append x into y (with z as the max size) and check the status via z. */
-#define XN_VALIDATE_STR_APPEND(w,x,y,z) \
- z = xnOSStrAppend(w, x, y); \
- XN_IS_STATUS_OK(z);
-
-/** Prefix x into y (with z as the max size) and check the status via z. */
-#define XN_VALIDATE_STR_PREFIX(w,x,y,z) \
- z = xnOSStrPrefix(w, x, y); \
- XN_IS_STATUS_OK(z);
-
-#define XN_VALIDATE_STR_COPY(w,x,y,z) \
- z = xnOSStrCopy(w, x, y); \
- XN_IS_STATUS_OK(z);
-
-#define XN_VALIDATE_STRN_COPY(v,w,x,y,z) \
- z = xnOSStrNCopy(v, w, x, y); \
- XN_IS_STATUS_OK(z);
-
-// INI
-/** Read a string from the INI file and check the status via z. */
-#define XN_VALIDATE_READ_INI_STR(u,v,w,x,y,z) \
- z = xnOSReadStringFromINI(u, v, w, x, y); \
- XN_IS_STATUS_OK(z);
-
-/** Read an int from the INI file and check the status via z. */
-#define XN_VALIDATE_READ_INI_INT(v,w,x,y,z) \
- z = xnOSReadIntFromINI(v, w, x, y); \
- XN_IS_STATUS_OK(z);
-
-/** Read a float from the INI file and check the status via z. */
-#define XN_VALIDATE_READ_INI_FLOAT(v,w,x,y,z) \
- z = xnOSReadFloatFromINI(v, w, x, y); \
- XN_IS_STATUS_OK(z);
-
-/** Read a double from the INI file and check the status via z. */
-#define XN_VALIDATE_READ_INI_DOUBLE(v,w,x,y,z) \
- z = xnOSReadDoubleFromINI(v, w, x, y); \
- XN_IS_STATUS_OK(z);
-
-// Mutex
-/** Lock the mutex x for a y period of time and check the status via z. */
-#define XN_VALIDATE_LOCK_MUTEX(x,y,z) \
- z = xnOSLockMutex(x, y); \
- XN_IS_STATUS_OK(z);
-
-/** UnLock the mutex x and check the status via z. */
-#define XN_VALIDATE_UNLOCK_MUTEX(x,z) \
- z = xnOSUnLockMutex(x); \
- XN_IS_STATUS_OK(z);
-
-// Files
-/** Returns XN_STATUS_OS_FILE_NOT_FOUND if the file x doesn't exists. */
-#define XN_VALIDATE_FILE_EXISTS_RET(x,y,z,w) \
- y = xnOSDoesFileExist(x, &z); \
- XN_IS_STATUS_OK(y); \
- if (z == FALSE) \
- { \
- return (w); \
- }
-#define XN_VALIDATE_FILE_EXISTS(x,y,z) \
- XN_VALIDATE_FILE_EXISTS_RET(x,y,z,XN_STATUS_OS_FILE_NOT_FOUND)
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-// Common
-XN_C_API XnStatus XN_C_DECL xnOSInit();
-XN_C_API XnStatus XN_C_DECL xnOSShutdown();
-XN_C_API XnStatus XN_C_DECL xnOSGetInfo(xnOSInfo* pOSInfo);
-
-
-#if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define XN_NEW(type, ...) new type(__VA_ARGS__)
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define XN_NEW(type, ...) new type(__VA_ARGS__)
-#elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_ARC_VAARGS_STYLE
- #define XN_NEW(type, arg...) new type(arg)
-#else
- #define XN_NEW(type, arg) new type(arg)
-#endif
-
-#define XN_NEW_ARR(type, count) new type[count]
-#define XN_DELETE(p) delete (p)
-#define XN_DELETE_ARR(p) delete[] (p)
-
-typedef enum
-{
- XN_ALLOCATION_MALLOC,
- XN_ALLOCATION_MALLOC_ALIGNED,
- XN_ALLOCATION_CALLOC,
- XN_ALLOCATION_CALLOC_ALIGNED,
- XN_ALLOCATION_NEW,
- XN_ALLOCATION_NEW_ARRAY
-} XnAllocationType;
-
-/**
-* Memory Profiling - Logs an allocation of memory.
-*/
-XN_C_API void* XN_C_DECL xnOSLogMemAlloc(void* pMemBlock, XnAllocationType nAllocType, XnUInt32 nBytes, const XnChar* csFunction, const XnChar* csFile, XnUInt32 nLine, const XnChar* csAdditional);
-
-/**
-* Memory Profiling - Logs freeing of memory.
-*/
-XN_C_API void XN_C_DECL xnOSLogMemFree(const void* pMemBlock);
-
-/**
-* Memory Profiling - Prints a current memory report to requested file.
-*/
-XN_C_API void XN_C_DECL xnOSWriteMemoryReport(const XnChar* csFileName);
-
-// for memory profiling, replace all malloc/calloc/free/new/delete calls
-#if (defined XN_MEM_PROFILING) && (!defined(XN_OS_IMPL))
- #ifdef _MSC_VER
- #pragma message("Compiling with Memory Profiling!")
- #elif defined(__INTEL_COMPILER)
- #warning "Compiling with Memory Profiling!"
- //TODO: Add warning for linux compiler(s)
- #endif
-
- #ifdef __cplusplus
- #include <new>
- static void* operator new(size_t size)
- {
- void* p = xnOSMalloc(size);
- return xnOSLogMemAlloc(p, XN_ALLOCATION_NEW, size, "", "", 0, "");
- }
- static void* operator new[](size_t size)
- {
- void* p = xnOSMalloc(size);
- return xnOSLogMemAlloc(p, XN_ALLOCATION_NEW, size, "", "", 0, "");
- }
- static void* operator new(size_t size, const XnChar* csFunction, const XnChar* csFile, XnUInt32 nLine, const XnChar* csAdditional)
- {
- void* p = xnOSMalloc(size);
- return xnOSLogMemAlloc(p, XN_ALLOCATION_NEW, size, csFunction, csFile, nLine, csAdditional);
- }
-
- // called only if ctor threw exception
- static void operator delete(void* p, const XnChar* /*csFunction*/, const XnChar* /*csFile*/, XnUInt32 /*nLine*/, const XnChar* /*csAdditional*/)
- {
- xnOSLogMemFree(p);
- xnOSFree(p);
- }
-
- static void operator delete(void* p)
- {
- xnOSLogMemFree(p);
- xnOSFree(p);
- }
-
- static void* operator new[](size_t size, const XnChar* csFunction, const XnChar* csFile, XnUInt32 nLine, const XnChar* csAdditional)
- {
- void* p = xnOSMalloc(size);
- return xnOSLogMemAlloc(p, XN_ALLOCATION_NEW_ARRAY, size, csFunction, csFile, nLine, csAdditional);
- }
-
- // called only if ctor threw exception
- static void operator delete[](void* p, const XnChar* /*csFunction*/, const XnChar* /*csFile*/, XnUInt32 /*nLine*/, const XnChar* /*csAdditional*/)
- {
- xnOSLogMemFree(p);
- xnOSFree(p);
- }
-
- static void operator delete[](void* p)
- {
- xnOSLogMemFree(p);
- xnOSFree(p);
- }
-
- #define xnOSMalloc(nAllocSize) xnOSLogMemAlloc(xnOSMalloc(nAllocSize), XN_ALLOCATION_MALLOC, nAllocSize, __FUNCTION__, __FILE__, __LINE__, NULL)
- #define xnOSMallocAligned(nAllocSize, nAlignment) xnOSLogMemAlloc(xnOSMallocAligned(nAllocSize, nAlignment), XN_ALLOCATION_MALLOC_ALIGNED, nAllocSize, __FUNCTION__, __FILE__, __LINE__, "Aligned to " XN_STRINGIFY(nAlignment))
- #define xnOSCalloc(nAllocNum, nAllocSize) xnOSLogMemAlloc(xnOSCalloc(nAllocNum, nAllocSize), XN_ALLOCATION_CALLOC, nAllocNum*nAllocSize, __FUNCTION__, __FILE__, __LINE__, NULL)
- #define xnOSCallocAligned(nAllocNum, nAllocSize, nAlignment) xnOSLogMemAlloc(xnOSCallocAligned(nAllocNum, nAllocSize, nAlignment), XN_ALLOCATION_CALLOC_ALIGNED, nAllocNum*nAllocSize, __FUNCTION__, __FILE__, __LINE__, "Aligned to " XN_STRINGIFY(nAlignment))
- #define xnOSFree(pMemBlock) { xnOSLogMemFree(pMemBlock); xnOSFree(pMemBlock); }
- #define xnOSFreeAligned(pMemBlock) { xnOSLogMemFree(pMemBlock); xnOSFreeAligned(pMemBlock); }
-
- #undef XN_NEW
- #undef XN_NEW_ARR
-
- #if XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_WIN32_VAARGS_STYLE
- #define XN_NEW(type, ...) new (__FUNCTION__, __FILE__, __LINE__, XN_STRINGIFY(type)) type(__VA_ARGS__)
- #elif XN_PLATFORM_VAARGS_TYPE == XN_PLATFORM_USE_GCC_VAARGS_STYLE
- #define XN_NEW(type, arg...) new (__FUNCTION__, __FILE__, __LINE__, XN_STRINGIFY(type)) type(arg)
- #else
- #define XN_NEW(type, arg) new (__FUNCTION__, __FILE__, __LINE__, XN_STRINGIFY(type)) type(arg)
- #endif
-
- #define XN_NEW_ARR(type, count) new (__FUNCTION__, __FILE__, __LINE__, XN_STRINGIFY(count) " " XN_STRINGIFY(type)) type[count]
-
- #endif
-#endif
-
-// Files
-XN_C_API XnStatus XN_C_DECL xnOSGetFileList(const XnChar* cpSearchPattern, const XnChar* cpPrefixPath, XnChar cpFileList[][XN_FILE_MAX_PATH], const XnUInt32 nMaxFiles, XnUInt32* pnFoundFiles);
-XN_C_API XnStatus XN_C_DECL xnOSOpenFile(const XnChar* cpFileName, const XnUInt32 nFlags, XN_FILE_HANDLE* pFile);
-XN_C_API XnStatus XN_C_DECL xnOSCloseFile(XN_FILE_HANDLE* pFile);
-XN_C_API XnStatus XN_C_DECL xnOSReadFile(const XN_FILE_HANDLE File, void* pBuffer, XnUInt32* pnBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSWriteFile(const XN_FILE_HANDLE File, const void* pBuffer, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnOSSeekFile64() instead") XN_C_DECL
- xnOSSeekFile (const XN_FILE_HANDLE File, const XnOSSeekType SeekType, const XnInt32 nOffset);
-XN_C_API XnStatus XN_C_DECL xnOSSeekFile64(const XN_FILE_HANDLE File, const XnOSSeekType SeekType, const XnInt64 nOffset);
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnOSTellFile64() instead") XN_C_DECL
- xnOSTellFile (const XN_FILE_HANDLE File, XnUInt32* nFilePos);
-XN_C_API XnStatus XN_C_DECL xnOSTellFile64(const XN_FILE_HANDLE File, XnUInt64* nFilePos);
-XN_C_API XnStatus XN_C_DECL xnOSFlushFile(const XN_FILE_HANDLE File);
-XN_C_API XnStatus XN_C_DECL xnOSDoesFileExist(const XnChar* cpFileName, XnBool* pbResult);
-XN_C_API XnStatus XN_C_DECL xnOSDoesDirecotyExist(const XnChar* cpDirName, XnBool* pbResult);
-XN_C_API XnStatus XN_C_DECL xnOSLoadFile(const XnChar* cpFileName, void* pBuffer, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSSaveFile(const XnChar* cpFileName, const void* pBuffer, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSAppendFile(const XnChar* cpFileName, const void* pBuffer, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnOSGetFileSize64() instead") XN_C_DECL
- xnOSGetFileSize (const XnChar* cpFileName, XnUInt32* pnFileSize);
-XN_C_API XnStatus XN_C_DECL xnOSGetFileSize64(const XnChar* cpFileName, XnUInt64* pnFileSize);
-XN_C_API XnStatus XN_C_DECL xnOSCreateDirectory(const XnChar* cpDirName);
-XN_C_API XnStatus XN_C_DECL xnOSGetDirName(const XnChar* cpFilePath, XnChar* cpDirName, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSGetFileName(const XnChar* cpFilePath, XnChar* cpFileName, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSGetFullPathName(const XnChar* strFilePath, XnChar* strFullPath, XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSGetCurrentDir(XnChar* cpDirName, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSSetCurrentDir(const XnChar* cpDirName);
-XN_C_API XnStatus XN_C_DECL xnOSDeleteFile(const XnChar* cpFileName);
-XN_C_API XnStatus XN_C_DECL xnOSDeleteEmptyDirectory(const XnChar* strDirName);
-XN_C_API XnStatus XN_C_DECL xnOSDeleteDirectoryTree(const XnChar* strDirName);
-
-// INI
-XN_C_API XnStatus XN_C_DECL xnOSReadStringFromINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, XnChar* cpDest, const XnUInt32 nDestLength);
-XN_C_API XnStatus XN_C_DECL xnOSReadFloatFromINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, XnFloat* fDest);
-XN_C_API XnStatus XN_C_DECL xnOSReadDoubleFromINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, XnDouble* fDest);
-XN_C_API XnStatus XN_C_DECL xnOSReadIntFromINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, XnUInt32* nDest);
-XN_C_API XnStatus XN_C_DECL xnOSWriteStringToINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, const XnChar* cpSrc);
-XN_C_API XnStatus XN_C_DECL xnOSWriteFloatToINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, const XnFloat fSrc);
-XN_C_API XnStatus XN_C_DECL xnOSWriteDoubleToINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, const XnDouble fSrc);
-XN_C_API XnStatus XN_C_DECL xnOSWriteIntToINI(const XnChar* cpINIFile, const XnChar* cpSection, const XnChar* cpKey, const XnUInt32 nSrc);
-
-// Shared libraries
-XN_C_API XnStatus XN_C_DECL xnOSLoadLibrary(const XnChar* cpFileName, XN_LIB_HANDLE* pLibHandle);
-XN_C_API XnStatus XN_C_DECL xnOSFreeLibrary(const XN_LIB_HANDLE LibHandle);
-XN_C_API XnStatus XN_C_DECL xnOSGetProcAddress(const XN_LIB_HANDLE LibHandle, const XnChar* cpProcName, XnFarProc* pProcAddr);
-
-struct timespec;
-
-// Time
-XN_C_API XnStatus XN_C_DECL xnOSGetEpochTime(XnUInt32* nEpochTime);
-XN_C_API XnStatus XN_C_DECL xnOSGetTimeStamp(XnUInt64* nTimeStamp);
-XN_C_API XnStatus XN_C_DECL xnOSGetHighResTimeStamp(XnUInt64* nTimeStamp);
-XN_C_API XnStatus XN_C_DECL xnOSSleep(XnUInt32 nMilliseconds);
-XN_C_API XnStatus XN_C_DECL xnOSStartTimer(XnOSTimer* pTimer);
-XN_C_API XnStatus XN_C_DECL xnOSStartHighResTimer(XnOSTimer* pTimer);
-XN_C_API XnStatus XN_C_DECL xnOSQueryTimer(XnOSTimer Timer, XnUInt64* pnTimeSinceStart);
-XN_C_API XnStatus XN_C_DECL xnOSStopTimer(XnOSTimer* pTimer);
-XN_C_API XnStatus XN_C_DECL xnOSGetMonoTime(struct timespec* pTime);
-XN_C_API XnStatus XN_C_DECL xnOSGetTimeout(struct timespec* pTime, XnUInt32 nMilliseconds);
-XN_C_API XnStatus XN_C_DECL xnOSGetAbsTimeout(struct timespec* pTime, XnUInt32 nMilliseconds);
-
-// Threads
-typedef enum XnThreadPriority
-{
- XN_PRIORITY_LOW,
- XN_PRIORITY_NORMAL,
- XN_PRIORITY_HIGH,
- XN_PRIORITY_CRITICAL
-} XnThreadPriority;
-
-XN_C_API XnStatus XN_C_DECL xnOSCreateThread(XN_THREAD_PROC_PROTO pThreadProc, const XN_THREAD_PARAM pThreadParam, XN_THREAD_HANDLE* pThreadHandle);
-XN_C_API XnStatus XN_C_DECL xnOSTerminateThread(XN_THREAD_HANDLE* pThreadHandle);
-XN_C_API XnStatus XN_C_DECL xnOSCloseThread(XN_THREAD_HANDLE* pThreadHandle);
-XN_C_API XnStatus XN_C_DECL xnOSWaitForThreadExit(XN_THREAD_HANDLE ThreadHandle, XnUInt32 nMilliseconds);
-XN_C_API XnStatus XN_C_DECL xnOSSetThreadPriority(XN_THREAD_HANDLE ThreadHandle, XnThreadPriority nPriority);
-XN_C_API XnStatus XN_C_DECL xnOSGetCurrentThreadID(XN_THREAD_ID* pThreadID);
-XN_C_API XnStatus XN_C_DECL xnOSWaitAndTerminateThread(XN_THREAD_HANDLE* pThreadHandle, XnUInt32 nMilliseconds);
-
-// Processes
-XN_C_API XnStatus XN_C_DECL xnOSGetCurrentProcessID(XN_PROCESS_ID* pProcID);
-XN_C_API XnStatus XN_C_DECL xnOSCreateProcess(const XnChar* strExecutable, XnUInt32 nArgs, const XnChar** pstrArgs, XN_PROCESS_ID* pProcID);
-
-// Mutex
-XN_C_API XnStatus XN_C_DECL xnOSCreateMutex(XN_MUTEX_HANDLE* pMutexHandle);
-XN_C_API XnStatus XN_C_DECL xnOSCreateNamedMutex(XN_MUTEX_HANDLE* pMutexHandle, const XnChar* cpMutexName);
-XN_C_API XnStatus XN_C_DECL xnOSCreateNamedMutexEx(XN_MUTEX_HANDLE* pMutexHandle, const XnChar* cpMutexName, XnBool bAllowOtherUsers);
-XN_C_API XnStatus XN_C_DECL xnOSCloseMutex(XN_MUTEX_HANDLE* pMutexHandle);
-XN_C_API XnStatus XN_C_DECL xnOSLockMutex(const XN_MUTEX_HANDLE MutexHandle, XnUInt32 nMilliseconds);
-XN_C_API XnStatus XN_C_DECL xnOSUnLockMutex(const XN_MUTEX_HANDLE MutexHandle);
-
-// Critical Sections
-XN_C_API XnStatus XN_C_DECL xnOSCreateCriticalSection(XN_CRITICAL_SECTION_HANDLE* pCriticalSectionHandle);
-XN_C_API XnStatus XN_C_DECL xnOSCloseCriticalSection(XN_CRITICAL_SECTION_HANDLE* pCriticalSectionHandle);
-XN_C_API XnStatus XN_C_DECL xnOSEnterCriticalSection(XN_CRITICAL_SECTION_HANDLE* pCriticalSectionHandle);
-XN_C_API XnStatus XN_C_DECL xnOSLeaveCriticalSection(XN_CRITICAL_SECTION_HANDLE* pCriticalSectionHandle);
-
-// Events
-XN_C_API XnStatus XN_C_DECL xnOSCreateEvent(XN_EVENT_HANDLE* pEventHandle, XnBool bManualReset);
-XN_C_API XnStatus XN_C_DECL xnOSCreateNamedEvent(XN_EVENT_HANDLE* pEventHandle, const XnChar* cpEventName, XnBool bManualReset);
-XN_C_API XnStatus XN_C_DECL xnOSCreateNamedEventEx(XN_EVENT_HANDLE* pEventHandle, const XnChar* cpEventName, XnBool bManualReset, XnBool bAllowOtherUsers);
-XN_C_API XnStatus XN_C_DECL xnOSOpenNamedEvent(XN_EVENT_HANDLE* pEventHandle, const XnChar* cpEventName);
-XN_C_API XnStatus XN_C_DECL xnOSOpenNamedEventEx(XN_EVENT_HANDLE* pEventHandle, const XnChar* cpEventName, XnBool bAllowOtherUsers);
-XN_C_API XnStatus XN_C_DECL xnOSCloseEvent(XN_EVENT_HANDLE* pEventHandle);
-XN_C_API XnStatus XN_C_DECL xnOSSetEvent(const XN_EVENT_HANDLE EventHandle);
-XN_C_API XnStatus XN_C_DECL xnOSResetEvent(const XN_EVENT_HANDLE EventHandle);
-XN_C_API XnStatus XN_C_DECL xnOSWaitEvent(const XN_EVENT_HANDLE EventHandle, XnUInt32 nMilliseconds);
-XN_C_API XnBool XN_C_DECL xnOSIsEventSet(const XN_EVENT_HANDLE EventHandle);
-
-// Semaphores
-XN_C_API XnStatus XN_C_DECL xnOSCreateSemaphore(XN_SEMAPHORE_HANDLE* pSemaphoreHandle, XnUInt32 nInitialCount);
-XN_C_API XnStatus XN_C_DECL xnOSLockSemaphore(XN_SEMAPHORE_HANDLE hSemaphore, XnUInt32 nMilliseconds);
-XN_C_API XnStatus XN_C_DECL xnOSUnlockSemaphore(XN_SEMAPHORE_HANDLE hSemaphore);
-XN_C_API XnStatus XN_C_DECL xnOSCloseSemaphore(XN_SEMAPHORE_HANDLE* pSemaphoreHandle);
-
-/**
-* Waits for a condition to be met. The condition is evaluated every time an event is set.
-*
-* @param EventHandle [in] The Event handle.
-* @param nMilliseconds [in] A timeout in milliseconds to wait.
-* @param pConditionFunc [in] A function that should be called to evaluate condition.
-* @param pConditionData [in] A cookie to be passed to the condition functions.
-*/
-XN_C_API XnStatus XN_C_DECL xnOSWaitForCondition(const XN_EVENT_HANDLE EventHandle, XnUInt32 nMilliseconds, XnConditionFunc pConditionFunc, void* pConditionData);
-
-// Network
-struct xnOSSocket;
-typedef struct xnOSSocket* XN_SOCKET_HANDLE;
-
-#define XN_SOCKET_DEFAULT_TIMEOUT 0xFFFEFFFE
-
-XN_C_API XnStatus XN_C_DECL xnOSInitNetwork();
-XN_C_API XnStatus XN_C_DECL xnOSShutdownNetwork();
-XN_C_API XnStatus XN_C_DECL xnOSCreateSocket(const XnOSSocketType SocketType, const XnChar* cpIPAddress, const XnUInt16 nPort, XN_SOCKET_HANDLE* SocketPtr);
-XN_C_API XnStatus XN_C_DECL xnOSCloseSocket(XN_SOCKET_HANDLE Socket);
-XN_C_API XnStatus XN_C_DECL xnOSBindSocket(XN_SOCKET_HANDLE Socket);
-XN_C_API XnStatus XN_C_DECL xnOSListenSocket(XN_SOCKET_HANDLE Socket);
-XN_C_API XnStatus XN_C_DECL xnOSAcceptSocket(XN_SOCKET_HANDLE ListenSocket, XN_SOCKET_HANDLE* AcceptSocketPtr, XnUInt32 nMillisecsTimeout);
-XN_C_API XnStatus XN_C_DECL xnOSConnectSocket(XN_SOCKET_HANDLE Socket, XnUInt32 nMillisecsTimeout);
-XN_C_API XnStatus XN_C_DECL xnOSSetSocketBufferSize(XN_SOCKET_HANDLE Socket, const XnUInt32 nSocketBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSSendNetworkBuffer(XN_SOCKET_HANDLE Socket, const XnChar* cpBuffer, const XnUInt32 nBufferSize);
-XN_C_API XnStatus XN_C_DECL xnOSSendToNetworkBuffer(XN_SOCKET_HANDLE Socket, const XnChar* cpBuffer, const XnUInt32 nBufferSize, XN_SOCKET_HANDLE SocketTo);
-XN_C_API XnStatus XN_C_DECL xnOSReceiveNetworkBuffer(XN_SOCKET_HANDLE Socket, XnChar* cpBuffer, XnUInt32* pnBufferSize, XnUInt32 nMillisecsTimeout);
-XN_C_API XnStatus XN_C_DECL xnOSReceiveFromNetworkBuffer(XN_SOCKET_HANDLE Socket, XnChar* cpBuffer, XnUInt32* pnBufferSize, XN_SOCKET_HANDLE* SocketFrom);
-
-// Shared Memory
-typedef struct XnOSSharedMemory XnOSSharedMemory, *XN_SHARED_MEMORY_HANDLE;
-
-/**
- * Creates a shared memory block and maps it to the process memory.
- *
- * @param strName [in] A machine-unique name that will be used by other processes to open this block.
- * @param nSize [in] The size of the buffer.
- * @param nAccessFlags [in] Creation flags. Can contain XN_OS_FILE_READ, XN_OS_FILE_WRITE or both.
- * @param phSharedMem [out] A handle to the shared-memory block.
- */
-XN_C_API XnStatus XN_C_DECL xnOSCreateSharedMemory(const XnChar* strName, XnUInt32 nSize, XnUInt32 nAccessFlags, XN_SHARED_MEMORY_HANDLE* phSharedMem);
-
-XN_C_API XnStatus XN_C_DECL xnOSCreateSharedMemoryEx(const XnChar* strName, XnUInt32 nSize, XnUInt32 nAccessFlags, XnBool bAllowOtherUsers, XN_SHARED_MEMORY_HANDLE* phSharedMem);
-
-/**
- * Opens a shared memory block, and returns the address in which it was mapped to the process' memory.
- *
- * @param strName [in] A machine-unique name that will be used by other processes to open this block.
- * @param nAccessFlags [in] Creation flags. Must contain XN_OS_FILE_READ, and optionally XN_OS_FILE_WRITE.
- * @param phSharedMem [out] A handle to the shared-memory block.
- */
-XN_C_API XnStatus XN_C_DECL xnOSOpenSharedMemory(const XnChar* strName, XnUInt32 nAccessFlags, XN_SHARED_MEMORY_HANDLE* phSharedMem);
-
-XN_C_API XnStatus XN_C_DECL xnOSOpenSharedMemoryEx(const XnChar* strName, XnUInt32 nAccessFlags, XnBool bAllowOtherUsers, XN_SHARED_MEMORY_HANDLE* phSharedMem);
-
-/**
- * Closes a shared memory block.
- *
- * @param hSharedMem [in] A handle to the block to be closed.
- */
-XN_C_API XnStatus XN_C_DECL xnOSCloseSharedMemory(XN_SHARED_MEMORY_HANDLE hSharedMem);
-
-/**
- * Gets the address in which the shared-memory block is mapped in this process.
- *
- * @param hSharedMem [in] A handle to the shared memory block.
- * @param ppAddress [out] The address.
- */
-XN_C_API XnStatus XN_C_DECL xnOSSharedMemoryGetAddress(XN_SHARED_MEMORY_HANDLE hSharedMem, void** ppAddress);
-
-// Keyboard
-XN_C_API XnBool XN_C_DECL xnOSWasKeyboardHit();
-XN_C_API XnChar XN_C_DECL xnOSReadCharFromInput();
-
-// Debug Utilities
-XN_C_API XnStatus XN_C_DECL xnOSGetCurrentCallStack(XnUInt32 nFramesToSkip, XnChar** astrFrames, XnUInt32 nMaxNameLength, XnUInt32* pnFrames);
-
-XN_STATUS_MESSAGE_MAP_START(XN_ERROR_GROUP_OS)
-XN_STATUS_MESSAGE(XN_STATUS_ALLOC_FAILED, "Memory allocation failed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_ALREADY_INIT, "Xiron OS already initialized!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NOT_INIT, "Xiron OS was not initialized!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_NOT_FOUND, "File not found!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INI_FILE_NOT_FOUND, "INI file not found!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_ALREDY_EXISTS, "File already exists!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_OPEN_FAILED, "Failed to open the file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_CLOSE_FAILED, "Failed to close the file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_READ_FAILED, "Failed to read from the file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_WRITE_FAILED, "Failed to write to the file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_SEEK_FAILED, "File seek failed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_TELL_FAILED, "File Tell failed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_FLUSH_FAILED, "File Flush failed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FILE_GET_SIZE_FAILED, "Get File Size failed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INI_READ_FAILED, "Failed to read from INI file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INI_WRITE_FAILED, "Failed to write into INI file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_SEEK_TYPE, "Invalid seek type!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_CREATION_FAILED, "Xiron OS failed to create a thread!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_TERMINATION_FAILED, "Xiron OS failed to terminate a thread!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_CLOSE_FAILED, "Xiron OS failed to close a thread!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_TIMEOUT, "Xiron OS got a thread timeout while waiting for a thread to exit!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_WAIT_FAILED, "Xiron OS failed to wait for a thread to exit!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_SET_PRIORITY_FAILED, "Xiron OS failed to set priority of a thread!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_THREAD_UNSUPPORTED_PRIORITY, "Thread priority is unsupported by Xiron OS!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_MUTEX_CREATION_FAILED, "Xiron OS failed to create a mutex!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_MUTEX_CLOSE_FAILED, "Xiron OS failed to close a mutex!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_MUTEX_LOCK_FAILED, "Xiron OS failed to lock a mutex!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_MUTEX_TIMEOUT, "Xiron OS got a mutex timeout!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_MUTEX_UNLOCK_FAILED, "Xiron OS failed to unlock a mutex!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_CREATION_FAILED, "Xiron OS failed to create an event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_CLOSE_FAILED, "Xiron OS failed to close an event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_SET_FAILED, "Xiron OS failed to set an event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_RESET_FAILED, "Xiron OS failed to reset an event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_TIMEOUT, "Xiron OS got an event timeout!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_WAIT_FAILED, "Xiron OS failed to wait on event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_CANCELED, "This Xiron OS event was canceled!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_CANT_LOAD_LIB, "Xiron OS failed to load shared library!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_CANT_FREE_LIB, "Xiron OS failed to free shared library!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_PROC_NOT_FOUND, "Xiron OS failed to get procedure address from shared library!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_INIT_FAILED, "Xiron OS failed to initialize the network subsystem!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SHUTDOWN_FAILED, "Xiron OS failed to shutdown the network subsystem!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_CREATION_FAILED, "Xiron OS failed to create a network socket!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_INVALID_SOCKET_TYPE, "Invalid Xiron OS socket type!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_BUFFER_FAILED, "Failed to change the Xiron OS socket buffer size!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SEND_FAILED, "Xiron OS failed to send a network buffer!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_RECEIVE_FAILED, "Xiron OS failed to receive a network buffer!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_BIND_FAILED, "Xiron OS failed to bind a network socket!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_LISTEN_FAILED, "Xiron OS failed to listen on a network socket!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_ACCEPT_FAILED, "Xiron OS failed to accept a network socket!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_SOCKET_CONNECT_FAILED, "Xiron OS failed to connect to a network socket!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_BAD_HOST_NAME, "Failed to resolve the host name!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_TIMEOUT, "Got a timeout while waiting for a network command to complete!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_TIMER_CREATION_FAILED, "Xiron OS failed to create a timer!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_TIMER_QUERY_FAILED, "Xiron OS failed to query a timer!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_TIMER, "This Xiron OS timer is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_FILE, "This Xiron OS file is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_SOCKET, "This Xiron OS socket is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_MUTEX, "This Xiron OS mutex is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_THREAD, "This Xiron OS thread is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_EVENT, "This Xiron OS event is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_LIBRARY, "This Xiron OS shared library is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_CRITICAL_SECTION, "This Xiron OS critical section is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_FORMAT_STRING, "Xiron OS got an invalid format string!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_UNSUPPORTED_FUNCTION, "This Xiron OS function is not supported!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_CREATE_DIR, "Failed to create a directory!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_DELETE_FILE, "Failed to delete a file!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_CREATE_SHARED_MEMORY, "Failed to create shared memory!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_OPEN_SHARED_MEMORY, "Failed to open shared memory!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_CLOSE_SHARED_MEMORY, "Failed to close shared memory!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ALREADY_INIT, "The Xiron USB subsystem was already initialize!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_NOT_INIT, "The Xiron USB subsystem was not initialized!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_INIT_FAILED, "The Xiron USB subsystem failed to initialize!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_SHUTDOWN_FAILED, "The Xiron USB subsystem failed to shutdown!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENUMERATE_FAILED, "The Xiron USB subsystem failed to enumerate devices!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_LOAD_FAILED, "The Xiron USB subsystem failed to load!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_FREE_FAILED, "The Xiron USB subsystem failed to free!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_REGISTER_FAILED, "The Xiron USB subsystem failed to register the device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_UNREGISTER_FAILED, "The Xiron USB subsystem failed to unregister the device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DEVICE_NOT_VALID, "Invalid Xiron USB device handle!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENDPOINT_NOT_VALID, "Invalid Xiron USB endpoint handle!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DRIVER_NOT_FOUND, "USB driver not found!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DEVICE_NOT_FOUND, "USB device not found!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DEVICE_OPEN_FAILED, "Failed to open the USB device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DEVICE_CLOSE_FAILED, "Failed to close the USB device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_DEVICE_GETINFO_FAILED, "Failed to get information about the USB device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_CONFIG_QUERY_FAILED, "USB config query failed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_INTERFACE_QUERY_FAILED, "USB interface query failed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENDPOINT_QUERY_FAILED, "USB endpoint query failed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_SET_ENDPOINT_POLICY_FAILED, "Failed to set USB endpoint policy!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_UNKNOWN_ENDPOINT_TYPE, "Unknown USB endpoint type!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_UNKNOWN_ENDPOINT_DIRECTION, "Unknown USB endpoint direction!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_GET_SPEED_FAILED, "Failed to get the device speed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_GET_DRIVER_VERSION, "Failed to get the USB driver version!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_UNKNOWN_DEVICE_SPEED, "Unknown USB device speed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_CONTROL_SEND_FAILED, "Failed to send a USB control request!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_CONTROL_RECV_FAILED, "Failed to receive a USB control request!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENDPOINT_READ_FAILED, "Failed to read from a USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENDPOINT_WRITE_FAILED, "Failed to write into a USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TRANSFER_TIMEOUT, "USB transfer timeout!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TRANSFER_STALL, "USB transfer stall!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TRANSFER_MICRO_FRAME_ERROR, "USB transfer micro frame error!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TRANSFER_UNKNOWN_ERROR, "Unknown USB transfer error!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ENDPOINT_NOT_FOUND, "USB endpoint not found on device!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_WRONG_ENDPOINT_TYPE, "Wrong USB endpoint type requested!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_WRONG_ENDPOINT_DIRECTION, "Wrong USB endpoint direction requested!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_WRONG_CONTROL_TYPE, "Wrong USB control type requested!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_UNSUPPORTED_ENDPOINT_TYPE, "Unsupported USB endpoint type!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_GOT_UNEXPECTED_BYTES, "Got unexpected bytes in USB transfer!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TOO_MUCH_DATA, "Got too much data in USB transfer!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_NOT_ENOUGH_DATA, "Didn't get enough data in USB transfer!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_BUFFER_TOO_SMALL, "USB Buffer is too small!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_OVERLAPIO_FAILED, "USB Overlapped I/O operation failed!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ABORT_FAILED, "Failed to abort USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_FLUSH_FAILED, "Failed to flush USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_RESET_FAILED, "Failed to reset USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_SET_INTERFACE_FAILED, "Failed to set USB interface!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_GET_INTERFACE_FAILED, "Failed to get USB interface!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_READTHREAD_NOT_INIT, "Read thread is not initialized for this USB end point!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_READTHREAD_ALREADY_INIT, "Read thread is already initialized for this USB end point!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_READTHREAD_SHUTDOWN_FAILED, "Read thread failed to shutdown properly!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_IS_BUSY, "USB is busy!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_NOT_BUSY, "USB is not busy!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_SET_CONFIG_FAILED, "Failed to set USB config!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_GET_CONFIG_FAILED, "Failed to get USB config!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_OPEN_ENDPOINT_FAILED, "Failed to open an USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_CLOSE_ENDPOINT_FAILED, "Failed to close an USB endpoint!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_ALREADY_OPEN, "A device is already opened!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_TRANSFER_PENDING, "USB transfer is still pending!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_INTERFACE_NOT_SUPPORTED, "USB interface is not supported!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_FAILED_TO_REGISTER_CALLBACK, "Failed to register the USB device callback!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_NETWORK_CONNECTION_CLOSED, "The network connection has been closed!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_EVENT_OPEN_FAILED, "Xiron OS failed to open an event!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_PROCESS_CREATION_FAILED, "Xiron OS failed to create a process!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_SEMAPHORE_CREATION_FAILED, "Xiron OS Failed to create a semaphore!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_SEMAPHORE_CLOSE_FAILED, "Xiron OS failed to close a semaphore!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_SEMAPHORE_LOCK_FAILED, "Xiron OS failed to lock a semaphore!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_SEMAPHORE_UNLOCK_FAILED, "Xiron OS failed to unlock a semaphore!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_SEMAPHORE_TIMEOUT, "Xiron OS got a semaphore timeout!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_INVALID_SEMAPHORE, "This Xiron OS semaphore is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_ENV_VAR_NOT_FOUND, "The environment variable could not be found!")
-XN_STATUS_MESSAGE(XN_STATUS_USB_NO_REQUEST_PENDING, "There is no request pending!")
-XN_STATUS_MESSAGE(XN_STATUS_OS_FAILED_TO_DELETE_DIR, "Failed to delete a directory!")
-XN_STATUS_MESSAGE_MAP_END(XN_ERROR_GROUP_OS)
-
-#endif //__XN_OS_H__
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h
deleted file mode 100644
index 4058feb7..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSCpp.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_OS_CPP_H__
-#define __XN_OS_CPP_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-class XnAutoCSLocker
-{
-public:
- inline XnAutoCSLocker(const XnAutoCSLocker& other) : m_hCS(other.m_hCS), m_bLocked(FALSE)
- {
- Lock();
- }
-
- inline XnAutoCSLocker& operator=(const XnAutoCSLocker& other)
- {
- Unlock();
- m_hCS = other.m_hCS;
- Lock();
- return *this;
- }
-
- inline XnAutoCSLocker(XN_CRITICAL_SECTION_HANDLE hCS) : m_hCS(hCS), m_bLocked(FALSE)
- {
- Lock();
- }
-
- inline ~XnAutoCSLocker()
- {
- Unlock();
- }
-
- inline void Lock()
- {
- if (!m_bLocked)
- {
- xnOSEnterCriticalSection(&m_hCS);
- m_bLocked = TRUE;
- }
- }
-
- inline void Unlock()
- {
- if (m_bLocked)
- {
- xnOSLeaveCriticalSection(&m_hCS);
- m_bLocked = FALSE;
- }
- }
-
-private:
- XN_CRITICAL_SECTION_HANDLE m_hCS;
- XnBool m_bLocked;
-};
-
-class XnAutoMutexLocker
-{
-public:
- inline XnAutoMutexLocker(XN_MUTEX_HANDLE hMutex, XnUInt32 nMilliseconds) : m_hMutex(hMutex)
- {
- m_nStatus = xnOSLockMutex(m_hMutex, nMilliseconds);
- }
-
- XnStatus GetStatus() const
- {
- return m_nStatus;
- }
-
- inline ~XnAutoMutexLocker()
- {
- if (m_nStatus == XN_STATUS_OK)
- {
- //Only unlock if we managed to lock in the first place
- xnOSUnLockMutex(m_hMutex);
- }
- }
-
-private:
- XN_MUTEX_HANDLE m_hMutex;
- XnStatus m_nStatus;
-};
-
-class XnOSEvent
-{
-public:
- XnOSEvent() : m_hEvent(NULL) {}
-
- ~XnOSEvent()
- {
- Close();
- }
-
- operator XN_EVENT_HANDLE() const
- {
- return m_hEvent;
- }
-
- XnStatus Create(XnBool bManualReset)
- {
- return xnOSCreateEvent(&m_hEvent, bManualReset);
- }
-
- XnStatus Create(const XnChar* strName, XnBool bManualReset, XnBool bAllowOtherUsers = FALSE)
- {
- return xnOSCreateNamedEventEx(&m_hEvent, strName, bManualReset, bAllowOtherUsers);
- }
-
- XnStatus Open(const XnChar* strName, XnBool bEnableOtherUsers = FALSE)
- {
- return xnOSOpenNamedEventEx(&m_hEvent, strName, bEnableOtherUsers);
- }
-
- XnStatus Close()
- {
- return (m_hEvent != NULL) ? xnOSCloseEvent(&m_hEvent) : XN_STATUS_OK;
- }
-
- XnStatus Set()
- {
- return xnOSSetEvent(m_hEvent);
- }
-
- XnStatus Reset()
- {
- return xnOSResetEvent(m_hEvent);
- }
-
- XnStatus Wait(XnUInt32 nMilliseconds)
- {
- return xnOSWaitEvent(m_hEvent, nMilliseconds);
- }
-
-private:
- XN_EVENT_HANDLE m_hEvent;
-};
-
-#endif // __XN_OS_CPP_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSMemory.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSMemory.h
deleted file mode 100644
index 183e4775..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSMemory.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XNOSMEMORY_H__
-#define __XNOSMEMORY_H__
-
-#include "XnPlatform.h"
-
-// Memory
-XN_C_API void* XN_C_DECL xnOSMalloc(const XnSizeT nAllocSize);
-XN_C_API void* XN_C_DECL xnOSMallocAligned(const XnSizeT nAllocSize, const XnSizeT nAlignment);
-XN_C_API void* XN_C_DECL xnOSCalloc(const XnSizeT nAllocNum, const XnSizeT nAllocSize);
-XN_C_API void* XN_C_DECL xnOSCallocAligned(const XnSizeT nAllocNum, const XnSizeT nAllocSize, const XnSizeT nAlignment);
-XN_C_API void* XN_C_DECL xnOSRealloc(void* pMemory, const XnSizeT nAllocSize);
-XN_C_API void* XN_C_DECL xnOSReallocAligned(void* pMemory, const XnSizeT nAllocSize, const XnSizeT nAlignment);
-XN_C_API void* XN_C_DECL xnOSRecalloc(void* pMemory, const XnSizeT nAllocNum, const XnSizeT nAllocSize);
-XN_C_API void XN_C_DECL xnOSFree(const void* pMemBlock);
-XN_C_API void XN_C_DECL xnOSFreeAligned(const void* pMemBlock);
-XN_C_API void XN_C_DECL xnOSMemCopy(void* pDest, const void* pSource, XnSizeT nCount);
-XN_C_API XnInt32 XN_C_DECL xnOSMemCmp(const void *pBuf1, const void *pBuf2, XnSizeT nCount);
-XN_C_API void XN_C_DECL xnOSMemSet(void* pDest, XnUInt8 nValue, XnSizeT nCount);
-XN_C_API void XN_C_DECL xnOSMemMove(void* pDest, const void* pSource, XnSizeT nCount);
-XN_C_API XnUInt64 XN_C_DECL xnOSEndianSwapUINT64(XnUInt64 nValue);
-XN_C_API XnUInt32 XN_C_DECL xnOSEndianSwapUINT32(XnUInt32 nValue);
-XN_C_API XnUInt16 XN_C_DECL xnOSEndianSwapUINT16(XnUInt16 nValue);
-XN_C_API XnFloat XN_C_DECL xnOSEndianSwapFLOAT(XnFloat fValue);
-
-
-#endif // __XNOSMEMORY_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSStrings.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSStrings.h
deleted file mode 100644
index 351904c4..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOSStrings.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XNOSSTRINGS_H__
-#define __XNOSSTRINGS_H__
-
-#include "XnPlatform.h"
-#include <stdarg.h>
-
-// Strings
-XN_C_API XnStatus XN_C_DECL xnOSStrPrefix(const XnChar* cpPrefixString, XnChar* cpDestString, const XnUInt32 nDestLength);
-XN_C_API XnStatus XN_C_DECL xnOSStrAppend(XnChar* cpDestString, const XnChar* cpSrcString, const XnUInt32 nDestLength);
-XN_C_API XnStatus XN_C_DECL xnOSStrCopy(XnChar* cpDestString, const XnChar* cpSrcString, const XnUInt32 nDestLength);
-XN_C_API XnUInt32 XN_C_DECL xnOSStrLen(const XnChar* cpStr);
-XN_C_API XnStatus XN_C_DECL xnOSStrNCopy(XnChar* cpDestString, const XnChar* cpSrcString, const XnUInt32 nCopyLength, const XnUInt32 nDestLength);
-XN_C_API XnStatus XN_C_DECL xnOSStrCRC32(const XnChar* cpString, XnUInt32* nCRC32);
-XN_C_API XnStatus XN_C_DECL xnOSStrNCRC32(XnUChar* cpBuffer, XnUInt32 nBufferSize, XnUInt32* nCRC32);
-XN_C_API XnStatus XN_C_DECL xnOSStrFormat(XnChar* cpDestString, const XnUInt32 nDestLength, XnUInt32* pnCharsWritten, const XnChar* cpFormat, ...);
-XN_C_API XnStatus XN_C_DECL xnOSStrFormatV(XnChar* cpDestString, const XnUInt32 nDestLength, XnUInt32* pnCharsWritten, const XnChar* cpFormat, va_list args);
-XN_C_API XnInt32 XN_C_DECL xnOSStrCmp(const XnChar* cpFirstString, const XnChar* cpSecondString);
-XN_C_API XnInt32 XN_C_DECL xnOSStrCaseCmp(const XnChar* cpFirstString, const XnChar* cpSecondString);
-XN_C_API void XN_C_DECL xnOSItoA(XnInt32 nValue, XnChar* cpStr, XnInt32 nBase);
-/** Should be freed using @ref xnOSFree() */
-XN_C_API XnChar* XN_C_DECL xnOSStrDup(const XnChar* strSource);
-XN_C_API XnStatus XN_C_DECL xnOSGetEnvironmentVariable(const XnChar* strEnv, XnChar* strDest, XnUInt32 nDestSize);
-XN_C_API XnStatus XN_C_DECL xnOSExpandEnvironmentStrings(const XnChar* strSrc, XnChar* strDest, XnUInt32 nDestSize);
-
-
-#endif // __XNOSSTRINGS_H__ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOpenNI.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOpenNI.h
deleted file mode 100644
index 13b5ff28..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnOpenNI.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_OPEN_NI_H__
-#define __XN_OPEN_NI_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnTypes.h"
-#include "XnContext.h"
-#include "XnLicensing.h"
-#include "XnUtils.h"
-#include "XnPrdNodeInfo.h"
-#include "XnQueries.h"
-#include "XnPrdNode.h"
-#include "XnEnumerationErrors.h"
-
-#include "XnVersion.h"
-#include "XnStatusCodes.h"
-#include "XnStatus.h"
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_MASK_OPEN_NI "OpenNI"
-
-//---------------------------------------------------------------------------
-// Enumeration and Creations
-//---------------------------------------------------------------------------
-
-#endif // __XN_OPEN_NI_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPlatform.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPlatform.h
deleted file mode 100644
index d60d9580..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPlatform.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_PLATFORM_H__
-#define __XN_PLATFORM_H__
-
-//---------------------------------------------------------------------------
-// Platform Defines
-//---------------------------------------------------------------------------
-#define XN_PLATFORM_WIN32 1
-#define XN_PLATFORM_XBOX360 2
-#define XN_PLATFORM_PS3 3
-#define XN_PLATFORM_WII 4
-#define XN_PLATFORM_LINUX_X86 5
-#define XN_PLATFORM_FILES_ONLY 6
-#define XN_PLATFORM_ARC 6
-#define XN_PLATFORM_LINUX_ARM 7
-#define XN_PLATFORM_MACOSX 8
-#define XN_PLATFORM_ANDROID_ARM 9
-
-#define XN_PLATFORM_IS_LITTLE_ENDIAN 1
-#define XN_PLATFORM_IS_BIG_ENDIAN 2
-
-#define XN_PLATFORM_USE_NO_VAARGS 1
-#define XN_PLATFORM_USE_WIN32_VAARGS_STYLE 2
-#define XN_PLATFORM_USE_GCC_VAARGS_STYLE 3
-#define XN_PLATFORM_USE_ARC_VAARGS_STYLE 4
-
-//---------------------------------------------------------------------------
-// Platform Identifier
-//---------------------------------------------------------------------------
-
-#if defined(__MINGW32__) // gcc-windows
- #include "mingw-win32/XnPlatformLinux-x86.h"
-#elif (_WIN32) // Microsoft Visual Studio
- #ifndef RC_INVOKED
- #if _MSC_VER < 1300 // Before MSVC7 (2003)
- #error Xiron Platform Abstraction Layer - Win32 - Microsoft Visual Studio versions below 2003 (7.0) are not supported!
- #endif
-
- #if _MSC_VER > 1600 // After MSVC8 (2010)
- #error Xiron Platform Abstraction Layer - Win32 - Microsoft Visual Studio versions above 2010 (10.0) are not supported!
- #endif
- #endif
-
- #include "Win32/XnPlatformWin32.h"
-#elif defined(ANDROID) && defined(__arm__)
- #include "Android-Arm/XnPlatformAndroid-Arm.h"
-#elif (linux && (i386 || __x86_64__))
- #include "Linux-x86/XnPlatformLinux-x86.h"
-#elif (linux && __arm__)
- #include "Linux-Arm/XnPlatformLinux-Arm.h"
-#elif _ARC
- #include "ARC/XnPlatformARC.h"
-#elif (__APPLE__)
- #include "MacOSX/XnPlatformMacOSX.h"
-#else
- #error OpenNI Platform Abstraction Layer - Unsupported Platform!
-#endif
-
-//---------------------------------------------------------------------------
-// Basic Common Macros
-//---------------------------------------------------------------------------
-#ifndef TRUE
- #define TRUE 1
-#endif
-
-#ifndef FALSE
- #define FALSE 0
-#endif
-
-#define XN_MIN(a,b) (((a) < (b)) ? (a) : (b))
-
-#define XN_MAX(a,b) (((a) > (b)) ? (a) : (b))
-
-typedef void (*XnFuncPtr)();
-
-#define XN_COMPILER_ASSERT(x) typedef int compileAssert[x ? 1 : -1]
-
-struct XnRegistrationHandleImpl;
-typedef struct XnRegistrationHandleImpl* XnRegistrationHandle;
-
-//---------------------------------------------------------------------------
-// API Export/Import Macros
-//---------------------------------------------------------------------------
-
-#ifdef __cplusplus
- #define XN_C_API_EXPORT extern "C" XN_API_EXPORT
- #define XN_C_API_IMPORT extern "C" XN_API_IMPORT
- #define XN_CPP_API_EXPORT XN_API_EXPORT
- #define XN_CPP_API_IMPORT XN_API_IMPORT
-#else
- #define XN_C_API_EXPORT XN_API_EXPORT
- #define XN_C_API_IMPORT XN_API_IMPORT
-#endif
-
-#ifdef XN_EXPORTS
- #define XN_C_API XN_C_API_EXPORT
- #define XN_CPP_API XN_CPP_API_EXPORT
-#else
- #define XN_C_API XN_C_API_IMPORT
- #define XN_CPP_API XN_CPP_API_IMPORT
-#endif
-
-#endif //__XN_PLATFORM_H__
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNode.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNode.h
deleted file mode 100644
index 1c491be8..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNode.h
+++ /dev/null
@@ -1,2614 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_PRD_NODE_H__
-#define __XN_PRD_NODE_H__
-
-/**
- * @ingroup cref
- * @defgroup prd_node Production Nodes Functionality
- * This page details functions that can be run on production nodes.
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup node Production Node
- *
- * A production node is the most basic unit of processing in OpenNI. The following functions can be
- * executed for every node in an OpenNI context.
- * @{
- */
-
-/**
- * @brief Gets information about a specific node, like its description, and dependent nodes.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API XnNodeInfo* XN_C_DECL xnGetNodeInfo(XnNodeHandle hNode);
-
-/**
- * @brief Gets the instance name of a node by its handle.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API const XnChar* XN_C_DECL xnGetNodeName(XnNodeHandle hNode);
-
-/**
- * @brief Gets the context a node belongs to. The context ref count is increased. The user
- * is responsible for releasing the context when it's no longer used.
- *
- * @param hNode [in] A handle to the node.
- */
-XN_C_API XnContext* XN_C_DECL xnGetRefContextFromNodeHandle(XnNodeHandle hNode);
-
-typedef XnContext* XnContextPtr;
-XN_C_API XnContextPtr XN_API_DEPRECATED("Please use xnGetRefContextFromNodeHandle() instead") XN_C_DECL xnGetContextFromNodeHandle(XnNodeHandle hNode);
-
-/**
- * @brief Checks if a production node supports specific capability.
- *
- * @param hInstance [in] A handle to the instance to be queried.
- * @param strCapabilityName [in] The name of the capability to check.
- */
-XN_C_API XnBool XN_C_DECL xnIsCapabilitySupported(XnNodeHandle hInstance, const XnChar* strCapabilityName);
-
-/**
- * @brief Sets an integer property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param nValue [in] New value
- */
-XN_C_API XnStatus XN_C_DECL xnSetIntProperty(XnNodeHandle hInstance, const XnChar* strName, XnUInt64 nValue);
-/**
- * @brief Sets a real property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param dValue [in] New value
- */
-XN_C_API XnStatus XN_C_DECL xnSetRealProperty(XnNodeHandle hInstance, const XnChar* strName, XnDouble dValue);
-/**
- * @brief Sets a string property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param strValue [in] New value
- */
-XN_C_API XnStatus XN_C_DECL xnSetStringProperty(XnNodeHandle hInstance, const XnChar* strName, const XnChar* strValue);
-/**
- * @brief Sets a buffer property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param nBufferSize [in] The size of the buffer passed, in bytes.
- * @param pBuffer [in] The data buffer.
- */
-XN_C_API XnStatus XN_C_DECL xnSetGeneralProperty(XnNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, const void* pBuffer);
-
-/**
- * @brief Gets an integer property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param pnValue [out] Current value
- */
-XN_C_API XnStatus XN_C_DECL xnGetIntProperty(XnNodeHandle hInstance, const XnChar* strName, XnUInt64* pnValue);
-/**
- * @brief Gets a real property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param pdValue [out] Current value
- */
-XN_C_API XnStatus XN_C_DECL xnGetRealProperty(XnNodeHandle hInstance, const XnChar* strName, XnDouble* pdValue);
-/**
- * @brief Gets a string property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param csValue [out] Current value
- * @param nBufSize [in] The size of the csValue buffer.
- */
-XN_C_API XnStatus XN_C_DECL xnGetStringProperty(XnNodeHandle hInstance, const XnChar* strName, XnChar* csValue, XnUInt32 nBufSize);
-/**
- * @brief Gets a buffer property.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strName [in] Property name
- * @param nBufferSize [in] The size of the buffer passed, in bytes.
- * @param pBuffer [in] The data buffer to be filled.
- */
-XN_C_API XnStatus XN_C_DECL xnGetGeneralProperty(XnNodeHandle hInstance, const XnChar* strName, XnUInt32 nBufferSize, void* pBuffer);
-
-/**
- * @brief Locks a node, not allowing any changes (any "set" function).
- *
- * @param hInstance [in] A handle to the node.
- * @param phLock [out] A handle of the lock, that can be used to manage the lock.
- */
-XN_C_API XnStatus XN_C_DECL xnLockNodeForChanges(XnNodeHandle hInstance, XnLockHandle* phLock);
-
-/**
- * @brief Unlocks a previously locked node.
- *
- * @param hInstance [in] A handle to the node.
- * @param hLock [in] The handle of the lock, returned from @ref xnLockNodeForChanges().
- */
-XN_C_API XnStatus XN_C_DECL xnUnlockNodeForChanges(XnNodeHandle hInstance, XnLockHandle hLock);
-
-/**
- * @brief Start changes request on a locked node, without releasing that lock.
- *
- * It allows "set" operations from the same context (same thread for that matter) until a call is made to
- * @ref xnLockedNodeEndChanges().
- *
- * @param hInstance [in] A handle to the node.
- * @param hLock [in] The handle of the lock, returned from @ref xnLockNodeForChanges().
- */
-XN_C_API XnStatus XN_C_DECL xnLockedNodeStartChanges(XnNodeHandle hInstance, XnLockHandle hLock);
-
-/**
- * @brief Ends changes request on a locked node.
- *
- * @param hInstance [in] A handle to the node.
- * @param hLock [in] The handle of the lock, returned from @ref xnLockNodeForChanges().
- */
-XN_C_API XnStatus XN_C_DECL xnLockedNodeEndChanges(XnNodeHandle hInstance, XnLockHandle hLock);
-
-/**
- * @brief Adds another node to the list of needed nodes for this node.
- *
- * @param hInstance [in] A handle to the node.
- * @param hNeededNode [in] The node that is needed by hInstance.
- */
-XN_C_API XnStatus XN_C_DECL xnAddNeededNode(XnNodeHandle hInstance, XnNodeHandle hNeededNode);
-
-/**
- * @brief Removes a needed node from the list of needed nodes.
- *
- * If this node is no longer needed by any other node, and @ref xnRefProductionNode() was not called on it,
- * it will be destroyed.
- *
- * @param hInstance [in] A handle to the node.
- * @param hNeededNode [in] The node to be removed from the list.
- */
-XN_C_API XnStatus XN_C_DECL xnRemoveNeededNode(XnNodeHandle hInstance, XnNodeHandle hNeededNode);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Device
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup device Device
- *
- * A device node represents a physical device. The following functions can be
- * executed for device nodes in an OpenNI context.
- * @{
- */
-
-/**
- * @brief Creates a device node.
- *
- * @param pContext [in] The context in which to create the device
- * @param phDevice [out] A handle to the created device
- * @param pQuery [in] Optional. Can be used to select which device to create. If not specified, this function may create any device node that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about device nodes that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateDevice(XnContext* pContext, XnNodeHandle* phDevice, XnNodeQuery* pQuery, XnEnumerationErrors* pErrors);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Device Identification Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup device
- * @defgroup device_id Device Identification Capability
- *
- * The Device Identification Capability (@ref XN_CAPABILITY_DEVICE_IDENTIFICATION) allows to identify
- * the device according to its name, to a vendor-specific string and its serial number.
- * @{
- */
-
-/**
- * Gets the device name.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the device name.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the device name should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
-XN_C_API XnStatus XN_C_DECL xnGetDeviceName(XnNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
-/**
- * Gets a vendor-specific string.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the string.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the string should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
-XN_C_API XnStatus XN_C_DECL xnGetVendorSpecificData(XnNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
-/**
- * Gets the serial number of the device.
- *
- * @param hInstance [in] A handle to the instance.
- * @param strBuffer [in] A buffer to accept the string.
- * @param pnBufferSize [in/out] Size of the buffer.
- *
- * @returns XN_STATUS_OK if succeeded, or XN_STATUS_OUTPUT_BUFFER_OVERFLOW if buffer is not sufficient.
- * in such a case, the string should be truncated to fit in the buffer, and pnBufferSize should be
- * updated to the required size.
- */
-XN_C_API XnStatus XN_C_DECL xnGetSerialNumber(XnNodeHandle hInstance, XnChar* strBuffer, XnUInt32* pnBufferSize);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// ErrorState Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup node
- * @defgroup err_state Error State Capability
- *
- * The Error State capability (@ref XN_CAPABILITY_ERROR_STATE) allows a node to report it is now in
- * an error state, and so, might not function correctly. An application may, at all times, check the
- * error state of a node, and it may also register a callback function to be called whenever that state
- * changes.
- *
- * The error state of a node is represented using @ref XnStatus. A value of XN_STATUS_OK means the node
- * is OK. Any other value represents some sort of error situation in the node.
- * @{
- */
-
-/**
- * @brief Gets current error state of this node.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns The error state of this node.
- */
-XN_C_API XnStatus XN_C_DECL xnGetNodeErrorState(XnNodeHandle hInstance);
-
-/**
- * @brief Registers a callback function to error state changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when error state changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromNodeErrorStateChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToNodeErrorStateChange
- (XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToNodeErrorStateChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToNodeErrorStateChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromNodeErrorStateChange
- (XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// GeneralIntCapability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup node
- * @defgroup general_int General Int Capability
- *
- * The General Int Capability is a set of method that is used by several capabilities. It allows
- * a general range value to be changed. If supported by the node, the value can also be set to
- * @ref XN_AUTO_CONTROL for automatic adjustment.
- *
- * The capabilities supporting this interface are:
- * - Brightness (@ref XN_CAPABILITY_BRIGHTNESS)
- * - Contrast (@ref XN_CAPABILITY_CONTRAST)
- * - Hue (@ref XN_CAPABILITY_HUE)
- * - Saturation (@ref XN_CAPABILITY_SATURATION)
- * - Sharpness (@ref XN_CAPABILITY_SHARPNESS)
- * - Gamma (@ref XN_CAPABILITY_GAMMA)
- * - WhiteBalance (@ref XN_CAPABILITY_COLOR_TEMPERATURE)
- * - BacklightCompensation (@ref XN_CAPABILITY_BACKLIGHT_COMPENSATION)
- * - Gain (@ref XN_CAPABILITY_GAIN)
- * - Pan (@ref XN_CAPABILITY_PAN)
- * - Tilt (@ref XN_CAPABILITY_TILT)
- * - Roll (@ref XN_CAPABILITY_ROLL)
- * - Zoom (@ref XN_CAPABILITY_ZOOM)
- * - Exposure (@ref XN_CAPABILITY_EXPOSURE)
- * - Iris (@ref XN_CAPABILITY_IRIS)
- * - Focus (@ref XN_CAPABILITY_FOCUS)
- * - Low Light Compensation (@ref XN_CAPABILITY_LOW_LIGHT_COMPENSATION)
- * @{
- */
-
-/**
- * @brief Gets the range of this capability values
- *
- * @param hNode [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param pnMin [out] Minimum value
- * @param pnMax [out] Maximum value
- * @param pnStep [out] Step size
- * @param pnDefault [out] Default value
- * @param pbIsAutoSupported [out] TRUE if auto adjustment is supported, FALSE otherwise
- */
-XN_C_API XnStatus XN_C_DECL xnGetGeneralIntRange(XnNodeHandle hNode, const XnChar* strCap, XnInt32* pnMin, XnInt32* pnMax, XnInt32* pnStep, XnInt32* pnDefault, XnBool* pbIsAutoSupported);
-
-/**
- * @brief Gets the current value of this capability
- *
- * @param hNode [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param pnValue [out] Current value
- */
-XN_C_API XnStatus XN_C_DECL xnGetGeneralIntValue(XnNodeHandle hNode, const XnChar* strCap, XnInt32* pnValue);
-
-/**
- * @brief Sets the current value of this capability
- *
- * @param hNode [in] A handle to the instance
- * @param strCap [in] Name of the capability
- * @param nValue [in] Value to set
- */
-XN_C_API XnStatus XN_C_DECL xnSetGeneralIntValue(XnNodeHandle hNode, const XnChar* strCap, XnInt32 nValue);
-
-/**
- * @brief Registers a callback function to values changes.
- *
- * @param hNode [in] A handle to the instance.
- * @param strCap [in] Name of the capability
- * @param handler [in] A pointer to a function that will be called when value changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromGeneralIntValueChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGeneralIntValueChange
- (XnNodeHandle hNode, const XnChar* strCap, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToGeneralIntValueChange().
- *
- * @param hNode [in] A handle to the instance.
- * @param strCap [in] Name of the capability
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToGeneralIntValueChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGeneralIntValueChange
- (XnNodeHandle hNode, const XnChar* strCap, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup generator Generator
- *
- * A Generator node is a production node that also generates continuous data. It supports all @ref node functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @name Controlling Generation
- * The following functions allows controlling if a node is currently generating data or not.
- * @{
- */
-
-/**
- * @brief Starts generation of the output. This will also cause all dependencies to start generating.
- *
- * @param hInstance [in] A handle to the instance to start generating.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a generator.
- */
-XN_C_API XnStatus XN_C_DECL xnStartGenerating(XnNodeHandle hInstance);
-
-/**
- * @brief Checks if this node is currently generating.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns FALSE if this production node is not a generator.
- */
-XN_C_API XnBool XN_C_DECL xnIsGenerating(XnNodeHandle hInstance);
-
-/**
- * @brief Stops generation of the output.
- *
- * @param hInstance [in] A handle to the instance to stop generating.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a generator.
- */
-XN_C_API XnStatus XN_C_DECL xnStopGenerating(XnNodeHandle hInstance);
-
-/**
- * @brief Registers a callback function to be called when generation starts or stops.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when generation starts/stops.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromGenerationRunningChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGenerationRunningChange
- (XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToGenerationRunningChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToGenerationRunningChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGenerationRunningChange
- (XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/// @}
-
-/**
- * @name Checking if new data is available
- * The following functions allows an application to know if and when a node has new data available.
- * When new data is available, the node data is still not replaced, until explicitly done so using one
- * of the update data functions.
- * @{
- */
-
-/**
- * @brief Registers a callback function to be called when new data is available.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when new data is available.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromNewDataAvailable().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToNewDataAvailable
- (XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToNewDataAvailable().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToNewDataAvailable().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromNewDataAvailable
- (XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Checks whether this node has new data (and so a call to @ref xnWaitAndUpdateData() will not block).
- *
- * @param hInstance [in] A handle to the instance.
- * @param pnTimestamp [out] [Optional] If not NULL, will be filled with that data timestamp.
- */
-XN_C_API XnBool XN_C_DECL xnIsNewDataAvailable(XnNodeHandle hInstance, XnUInt64* pnTimestamp);
-
-/// @}
-
-/**
- * @name Getting new data
- * @{
- */
-
-/**
- * @brief Updates the data to the latest available one. If needed, the call will block until new data is available.
- *
- * @param hInstance [in] A handle to the instance to be updated.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a generator.
- */
-XN_C_API XnStatus XN_C_DECL xnWaitAndUpdateData(XnNodeHandle hInstance);
-
-/// @}
-
-/**
- * @name Data properties
- * @{
- */
-
-/**
- * @brief Checks whether current data is new. Meaning, did the data change on the last call to @ref xnWaitAndUpdateAll(),
- * @ref xnWaitOneUpdateAll() or @ref xnWaitAndUpdateData().
- *
- * @param hInstance [in] A handle to the instance.
- */
-XN_C_API XnBool XN_C_DECL xnIsDataNew(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current data.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not a generator.
- */
-XN_C_API const void* XN_C_DECL xnGetData(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the size of current data, in bytes.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns (XnUInt32)-1 if this production node is not a generator.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetDataSize(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the timestamp of current data, in microseconds.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns (XnUInt64)-1 if this production node is not a generator.
- */
-XN_C_API XnUInt64 XN_C_DECL xnGetTimestamp(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the frame ID of current data.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns (XnUInt32)-1 if this production node is not a generator.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetFrameID(XnNodeHandle hInstance);
-
-/** @} */
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Mirror Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup generator
- * @defgroup mirror Mirror Capability
- * The mirror capability (@ref XN_CAPABILITY_MIRROR) allows mirroring of the data produced by a @ref generator.
- * Mirroring is useful if the sensor is placed in front of the user (so that it sees the user right hand as the
- * left one), but applications want user to get a more natural feeling of control.
- * @{
- */
-
-/**
- * @brief Sets current mirror configuration.
- *
- * @param hInstance [in] A handle to the instance.
- * @param bMirror [in] TRUE for mirroring output, FALSE otherwise.
- */
-XN_C_API XnStatus XN_C_DECL xnSetMirror(XnNodeHandle hInstance, XnBool bMirror);
-
-/**
- * @brief Gets current mirroring configuration.
- *
- * @param hInstance [in] A handle to the instance.
- */
-XN_C_API XnBool XN_C_DECL xnIsMirrored(XnNodeHandle hInstance);
-
-/**
- * @brief Registers a callback function to mirror changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when mirror changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromMirrorChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToMirrorChange
- (XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToMirrorChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToMirrorChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromMirrorChange
- (XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Alternative View Point Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup generator
- * @defgroup altviewpoint Alternative View Point Capability
- * The Alternative View Point capability (@ref XN_CAPABILITY_ALTERNATIVE_VIEW_POINT) allows a @ref generator
- * to transform its data to appear as if the sensor is placed in another location. For example, when more
- * than one sensor is active (or one sensor that produces several outputs coming from close locations, yet not
- * the same one), one sensor can change its data to appear as if coming from the location of the other sensor,
- * so that both data buffers represent the same (for example depth and image maps, where the same coordinates
- * in the map represent the same location is the scene).
- * @{
- */
-
-/**
- * @brief Checks if this generator can change its output to look like it was taken from a different location, represented by another generator.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The view point to be checked.
- *
- * @returns TRUE if view point is supported, FALSE otherwise.
- */
-XN_C_API XnBool XN_C_DECL xnIsViewPointSupported(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Sets the view point of this generator to look like as if placed at another generator location.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The view point to be set.
- */
-XN_C_API XnStatus XN_C_DECL xnSetViewPoint(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Sets the view point of this generator to its normal one.
- *
- * @param hInstance [in] A handle to the instance.
- */
-XN_C_API XnStatus XN_C_DECL xnResetViewPoint(XnNodeHandle hInstance);
-
-/**
- * @brief Checks if current view point is as if coming from the other node view point.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The view point to be checked.
- */
-XN_C_API XnBool XN_C_DECL xnIsViewPointAs(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Registers a callback function to view point changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when view point changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromViewPointChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToViewPointChange(XnNodeHandle hInstance, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToViewPointChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToViewPointChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromViewPointChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// FrameSync Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup generator
- * @defgroup framesync Frame-Sync Capability
- * The Frame Sync capability (@ref XN_CAPABILITY_FRAME_SYNC) allows two sensors producing frame data to synchronize
- * their frames so that they arrive at the same time. This allows smaller latency between two maps of the same scene
- * (for example depth and image).
- * @{
- */
-
-/**
- * @brief Checks if this generator can frame sync to another node.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The node to be checked.
- *
- * @returns TRUE if frame sync to node is supported, FALSE otherwise.
- */
-XN_C_API XnBool XN_C_DECL xnCanFrameSyncWith(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Activates frame sync with the other node.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The node to sync to.
- */
-XN_C_API XnStatus XN_C_DECL xnFrameSyncWith(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Stops frame sync with the other node.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The node to sync to.
- */
-XN_C_API XnStatus XN_C_DECL xnStopFrameSyncWith(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Checks if current view point is as if coming from the other node view point.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hOther [in] The node to be checked.
- */
-XN_C_API XnBool XN_C_DECL xnIsFrameSyncedWith(XnNodeHandle hInstance, XnNodeHandle hOther);
-
-/**
- * @brief Registers a callback function to view point changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when frame sync changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromFrameSyncChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToFrameSyncChange(XnNodeHandle hInstance, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToFrameSyncChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToFrameSyncChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromFrameSyncChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Map Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup mapgen Map Generator
- * A Map Generator node is a @ref generator that has output data in the form of a pixel map. It supports all @ref generator functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Gets the number of supported modes. This is useful for allocating an array that will be passed to @ref xnGetSupportedMapOutputModes().
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns 0 if this production node is not a map generator.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetSupportedMapOutputModesCount(XnNodeHandle hInstance);
-
-/**
- * @brief Gets a list of all supported modes. The size of the array that should be passed can be obtained by calling @ref xnGetSupportedMapOutputModesCount().
- *
- * @param hInstance [in] A handle to the instance.
- * @param aModes [in/out] An array to be filled with supported modes.
- * @param pnCount [in/out] In: number of elements allocated in the array. Out: number of elements
- * actually written to the array.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a map generator.
- */
-XN_C_API XnStatus XN_C_DECL xnGetSupportedMapOutputModes(XnNodeHandle hInstance, XnMapOutputMode* aModes, XnUInt32* pnCount);
-
-/**
- * @brief Sets the output mode.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pOutputMode [in] The output mode to be set.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a map generator.
- */
-XN_C_API XnStatus XN_C_DECL xnSetMapOutputMode(XnNodeHandle hInstance, const XnMapOutputMode* pOutputMode);
-
-/**
- * @brief Gets the current output mode.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pOutputMode [out] Current output mode.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a map generator.
- */
-XN_C_API XnStatus XN_C_DECL xnGetMapOutputMode(XnNodeHandle hInstance, XnMapOutputMode* pOutputMode);
-
-/**
- * @brief Registers a callback function to mode changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when mode changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromMapOutputModeChange.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a map generator.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToMapOutputModeChange(XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToMapOutputModeChange.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToMapOutputModeChange.
- */
-XN_C_API void XN_C_DECL xnUnregisterFromMapOutputModeChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Gets the number of bytes per pixel for this map generator.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns (XnUInt32)-1 if this production node is not a map generator.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetBytesPerPixel(XnNodeHandle hInstance);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Cropping Capability
-//---------------------------------------------------------------------------
-
-
-/**
- * @ingroup mapgen
- * @defgroup cropping Cropping Capability
- * The Cropping capability (@ref XN_CAPABILITY_CROPPING) allows a @ref mapgen to output a selected area
- * of the frame instead of the entire frame. When cropping is turned on, the data buffer looks just like
- * resolution is smaller, meaning data is packed. For example if the MapGenerator is working in VGA resolution
- * (640x480) and the application chose a cropping of 300x200, then after first 300 pixels the next pixel row
- * begins. Pixels outside the cropping area are not returned in the buffer (and not just being blacked out).
- * This is very useful for performance boost.
- * @{
- */
-
-/**
- * @brief Sets the cropping.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pCropping [in] The cropping configuration to be set.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the Cropping capability.
- */
-XN_C_API XnStatus XN_C_DECL xnSetCropping(XnNodeHandle hInstance, const XnCropping* pCropping);
-
-/**
- * @brief Gets current cropping configuration.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pCropping [out] Current cropping configuration.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the Cropping capability.
- */
-XN_C_API XnStatus XN_C_DECL xnGetCropping(XnNodeHandle hInstance, XnCropping* pCropping);
-
-/**
- * @brief Registers a callback function to cropping changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when cropping changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromCroppingChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToCroppingChange(XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToCroppingChange().
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from xnRegisterToCroppingChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromCroppingChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Anti Flicker Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup mapgen
- * @defgroup anti_flicker Anti Flicker Capability
- * The Anti Flicker capability (@ref XN_CAPABILITY_ANTI_FLICKER) allows a @ref mapgen to time its frames
- * in such a way that no flickering will take place due to electric light frequencies.
- * @{
- */
-
-/**
- * @brief Sets the power line frequency: 50 Hz, 60 Hz, or 0 to turn off anti-flicker.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param nFrequency [in] The frequency to be used.
- */
-XN_C_API XnStatus XN_C_DECL xnSetPowerLineFrequency(XnNodeHandle hGenerator, XnPowerLineFrequency nFrequency);
-
-/**
- * @brief Gets the power line frequency.
- *
- * @param hGenerator [in] A handle to the instance.
- * @returns (XnUInt32)-1 if node does not support this capability
- */
-XN_C_API XnPowerLineFrequency XN_C_DECL xnGetPowerLineFrequency(XnNodeHandle hGenerator);
-
-/**
- * @brief Registers a callback function to power line frequency changes.
- *
- * @param hGenerator [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when power line frequency changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromPowerLineFrequencyChange().
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToPowerLineFrequencyChange
- (XnNodeHandle hGenerator, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToPowerLineFrequencyChange().
- *
- * @param hGenerator [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToPowerLineFrequencyChange().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromPowerLineFrequencyChange
- (XnNodeHandle hGenerator, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Depth Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup depthgen Depth Generator
- * A Depth Generator node is a @ref mapgen that outputs depth maps. It supports all @ref mapgen functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates a depth generator.
- *
- * @param pContext [in] The context in which to create the depth generator
- * @param phDepthGenerator [out] A handle to the created depth generator
- * @param pQuery [in] Optional. Can be used to select which depth generator to create. If not specified, this function may create any depth generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about depth generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateDepthGenerator(
- XnContext* pContext,
- XnNodeHandle* phDepthGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors);
-
-/**
- * @brief Gets the maximum depth the device can produce.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns -1 if this production node is not a depth generator.
- */
-XN_C_API XnDepthPixel XN_C_DECL xnGetDeviceMaxDepth(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the Field-Of-View of the depth generator, in radians.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pFOV [in] A struct to be filled with field of view.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a depth generator.
- */
-XN_C_API XnStatus XN_C_DECL xnGetDepthFieldOfView(XnNodeHandle hInstance, XnFieldOfView* pFOV);
-
-/**
- * @brief Registers a callback function to field of view changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when field of view changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromDepthFieldOfViewChange.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the User Position capability.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToDepthFieldOfViewChange(XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToDepthFieldOfViewChange.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToDepthFieldOfViewChange.
- */
-XN_C_API void XN_C_DECL xnUnregisterFromDepthFieldOfViewChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Converts a list of points from projective coordinates to real world coordinates.
- *
- * @param hInstance [in] A handle to the instance.
- * @param nCount [in] The number of points to translate.
- * @param aProjective [in] An array of projective coordinates points.
- * @param aRealWorld [in/out] An array to be filled with real world coordinates points.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a depth generator.
- */
-XN_C_API XnStatus XN_C_DECL xnConvertProjectiveToRealWorld(
- XnNodeHandle hInstance, XnUInt32 nCount, const XnPoint3D* aProjective, XnPoint3D* aRealWorld);
-
-/**
- * @brief Converts a list of points from projective coordinates to real world coordinates.
- *
- * @param hInstance [in] A handle to the instance.
- * @param nCount [in] The number of points to translate.
- * @param aRealWorld [in] An array of real world coordinates points.
- * @param aProjective [in/out] An array to be filled with projective coordinates points.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not a depth generator.
- */
-XN_C_API XnStatus XN_C_DECL xnConvertRealWorldToProjective(
- XnNodeHandle hInstance, XnUInt32 nCount, const XnPoint3D* aRealWorld, XnPoint3D* aProjective);
-
-/**
- * @brief Gets the current depth-map. This map is updated after a call to @ref xnWaitAndUpdateData().
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not a depth generator.
- */
-XN_C_API XnDepthPixel* XN_C_DECL xnGetDepthMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current depth-map meta data.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pMetaData [in] The struct to be filled.
- */
-XN_C_API void XN_C_DECL xnGetDepthMetaData(XnNodeHandle hInstance, XnDepthMetaData* pMetaData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// User Position Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup depthgen
- * @defgroup userpos User Position Capability
- * The User Position capability (@ref XN_CAPABILITY_USER_POSITION) allows a @ref depthgen to change its
- * output, so that it would be optimized in specific locations in the scene.
- * @{
- */
-
-/**
- * @brief Gets the number of user positions supported by this generator.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns 0 if this production node does not support the User Position capability.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetSupportedUserPositionsCount(XnNodeHandle hInstance);
-
-/**
- * @brief Sets the current user position.
- *
- * @param hInstance [in] A handle to the instance.
- * @param nIndex [in] The user position to set.
- * @param pPosition [in] The user position in the frame.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the User Position capability.
- */
-XN_C_API XnStatus XN_C_DECL xnSetUserPosition(XnNodeHandle hInstance, XnUInt32 nIndex, const XnBoundingBox3D* pPosition);
-
-/**
- * @brief Gets the current user position.
- *
- * @param hInstance [in] A handle to the instance.
- * @param nIndex [in] The user position to get.
- * @param pPosition [out] The user position.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the User Position capability.
- */
-XN_C_API XnStatus XN_C_DECL xnGetUserPosition(XnNodeHandle hInstance, XnUInt32 nIndex, XnBoundingBox3D* pPosition);
-
-/**
- * @brief Registers a callback function to user position changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when user position changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromUserPositionChange.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the User Position capability.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToUserPositionChange(XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToUserPositionChange.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToUserPositionChange.
- */
-XN_C_API void XN_C_DECL xnUnregisterFromUserPositionChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Image Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup imagegen Image Generator
- * An Image Generator node is a @ref mapgen that outputs image maps. It supports all @ref mapgen functions,
- * and adds additional functions.
- * Image maps may arrive in different pixel formats.
- * @{
- */
-
-/**
- * @brief Creates an image generator.
- *
- * @param pContext [in] The context in which to create the image generator.
- * @param phImageGenerator [out] A handle to the created image generator.
- * @param pQuery [in] Optional. Can be used to select which image generator to create. If not specified, this function may create any image generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about image generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateImageGenerator(
- XnContext* pContext,
- XnNodeHandle* phImageGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Gets the current RGB24 image-map.
- * This map is updated after a call to @ref xnWaitAndUpdateData(). It is assumed that the node is currently in RGB24 pixel format.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an image generator.
- */
-XN_C_API XnRGB24Pixel* XN_C_DECL xnGetRGB24ImageMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current YUV422 image-map.
- * This map is updated after a call to @ref xnWaitAndUpdateData(). It is assumed that the node is currently in YUV422 pixel format.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an image generator.
- */
-XN_C_API XnYUV422DoublePixel* XN_C_DECL xnGetYUV422ImageMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current Grayscale8 image-map.
- * This map is updated after a call to @ref xnWaitAndUpdateData(). It is assumed that the node is currently in Grayscale8 pixel format.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an image generator.
- */
-XN_C_API XnGrayscale8Pixel* XN_C_DECL xnGetGrayscale8ImageMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current Grayscale16 image-map.
- * This map is updated after a call to @ref xnWaitAndUpdateData(). It is assumed that the node is currently in Grayscale16 pixel format.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an image generator.
- */
-XN_C_API XnGrayscale16Pixel* XN_C_DECL xnGetGrayscale16ImageMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current image-map as a byte buffer.
- *
- * This map is updated after a call to @ref xnWaitAndUpdateData().
- * It is highly advised not to use this function. Instead, if you know the format of the image, use
- * @ref xnGetRGB24ImageMap(), @ref xnGetYUV422ImageMap(), @ref xnGetGrayscale8ImageMap() or
- * @ref xnGetGrayscale16ImageMap().
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an image generator.
- */
-XN_C_API XnUInt8* XN_C_DECL xnGetImageMap(XnNodeHandle hInstance);
-
-/**
- * @brief Checks if a specific pixel format is supported.
- *
- * @param hInstance [in] A handle to the instance.
- * @param Format [in] The format to check for.
- */
-XN_C_API XnBool XN_C_DECL xnIsPixelFormatSupported(XnNodeHandle hInstance, XnPixelFormat Format);
-
-/**
- * @brief Sets the pixel format of the image map.
- *
- * @param hInstance [in] A handle to the instance.
- * @param Format [in] The format to set.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node is not an image generator.
- */
-XN_C_API XnStatus XN_C_DECL xnSetPixelFormat(XnNodeHandle hInstance, XnPixelFormat Format);
-
-/**
- * @brief Gets current pixel format.
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns -1 if this production node is not an image generator.
- */
-XN_C_API XnPixelFormat XN_C_DECL xnGetPixelFormat(XnNodeHandle hInstance);
-
-/**
- * @brief Registers a callback function to pixel format changes.
- *
- * @param hInstance [in] A handle to the instance.
- * @param handler [in] A pointer to a function that will be called when pixel format changes.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Optional. Will be filled with a handle to be passed to @ref xnUnregisterFromPixelFormatChange.
- *
- * @returns XN_STATUS_INVALID_OPERATION if this production node does not support the User Position capability.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToPixelFormatChange(XnNodeHandle hInstance, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToPixelFormatChange.
- *
- * @param hInstance [in] A handle to the instance.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToPixelFormatChange.
- */
-XN_C_API void XN_C_DECL xnUnregisterFromPixelFormatChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Gets the current image-map meta data.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pMetaData [in] The struct to be filled.
- */
-XN_C_API void XN_C_DECL xnGetImageMetaData(XnNodeHandle hInstance, XnImageMetaData* pMetaData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// IR Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup irgen IR Generator
- * An IR Generator node is a @ref mapgen that outputs infra-red maps. It supports all @ref mapgen functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates an IR generator.
- *
- * @param pContext [in] The context in which to create the IR generator.
- * @param phIRGenerator [out] A handle to the created IR generator.
- * @param pQuery [in] Optional. Can be used to select which IR generator to create. If not specified, this function may create any IR generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about IR generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateIRGenerator(
- XnContext* pContext,
- XnNodeHandle* phIRGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Gets the current IR-map. This map is updated after a call to @ref xnWaitAndUpdateData().
- *
- * @param hInstance [in] A handle to the instance.
- *
- * @returns NULL if this production node is not an IR generator.
- */
-XN_C_API XnIRPixel* XN_C_DECL xnGetIRMap(XnNodeHandle hInstance);
-
-/**
- * @brief Gets the current IR-map meta data.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pMetaData [in] The struct to be filled.
- */
-XN_C_API void XN_C_DECL xnGetIRMetaData(XnNodeHandle hInstance, XnIRMetaData* pMetaData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Gesture Generators
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup gestures Gesture Generator
- * A Gestures Generator node is a @ref generator that recognizes certain gestures. It supports all @ref generator functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates a Gesture Generator.
- *
- * @param pContext [in] The context in which to create the gesture generator.
- * @param phGestureGenerator [out] A handle to the created gesture generator.
- * @param pQuery [in] Optional. Can be used to select which Gesture node to create. If not specified, this function may create any gesture node that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about gesture nodes that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateGestureGenerator(
- XnContext* pContext,
- XnNodeHandle* phGestureGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Turn on gesture. The generator will now look for this gesture
- *
- * @param hInstance [in] A handle to the instance
- * @param strGesture [in] The name of the gesture to look for
- * @param pArea [in] The area in which to look for the gesture (in Real-World coordinates)
- */
-XN_C_API XnStatus XN_C_DECL xnAddGesture(XnNodeHandle hInstance, const XnChar* strGesture, XnBoundingBox3D* pArea);
-/**
- * @brief Turn off gesture. The generator will no longer look for this gesture
- *
- * @param hInstance [in] A handle to the instance
- * @param strGesture [in] The name of the gesture to not look for anymore
- */
-XN_C_API XnStatus XN_C_DECL xnRemoveGesture(XnNodeHandle hInstance, const XnChar* strGesture);
-/**
- * @brief Get the names of the gestures that are currently active
- *
- * @param hInstance [in] A handle to the instance
- * @param pstrGestures [out] Preallocated memory, for the gesture names
- * @param nGestures [in,out] The size of the preallocated memory. Changed to number of gestures
- */
-XN_C_API XnStatus XN_C_DECL xnGetActiveGestures(XnNodeHandle hInstance, XnChar** pstrGestures, XnUInt16* nGestures);
-/**
- * @brief Get the names of the gestures that are currently active
- *
- * @param hInstance [in] A handle to the instance
- * @param pstrGestures [out] Preallocated memory, for the gesture names
- * @param nNameLength [in] Memory size for each gesture name
- * @param nGestures [in,out] The size of the preallocated memory. Changed to number of gestures
- */
-XN_C_API XnStatus XN_C_DECL xnGetAllActiveGestures(XnNodeHandle hInstance, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* nGestures);
-/**
- * @brief Get the names of all gestures available
- *
- * @param hInstance [in] A handle to the instance
- * @param pstrGestures [out] Preallocated memory, for the gesture names
- * @param nGestures [in,out] The size of the preallocated memory. Changed to number of gestures
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateGestures(XnNodeHandle hInstance, XnChar** pstrGestures, XnUInt16* nGestures);
-/**
- * @brief Get the names of all gestures available
- *
- * @param hInstance [in] A handle to the instance
- * @param pstrGestures [out] Preallocated memory, for the gesture names
- * @param nNameLength [in] Memory size for each gesture name
- * @param nGestures [in,out] The size of the preallocated memory. Changed to number of gestures
- */
-XN_C_API XnStatus XN_C_DECL xnEnumerateAllGestures(XnNodeHandle hInstance, XnChar** pstrGestures, XnUInt32 nNameLength, XnUInt16* nGestures);
-
-/**
- * @brief Get the number of all gestures available
- *
- * @param hInstance [in] A handle to the instance
- * @return the number of gestures available
- */
-XN_C_API XnUInt16 XN_C_DECL xnGetNumberOfAvailableGestures(XnNodeHandle hInstance);
-
-
-/**
- * @brief Check if a specific gesture is available in this generator
- *
- * @param hInstance [in] A handle to the instance
- * @param strGesture [in] Name of the gesture to check
- */
-XN_C_API XnBool XN_C_DECL xnIsGestureAvailable(XnNodeHandle hInstance, const XnChar* strGesture);
-/**
- * @brief Check if the specific gesture supports 'in progress' callbacks
- *
- * @param hInstance [in] A handle to the instance
- * @param strGesture [in] Name of the gesture to check
- */
-XN_C_API XnBool XN_C_DECL xnIsGestureProgressSupported(XnNodeHandle hInstance, const XnChar* strGesture);
-/**
- * @brief Register to all gesture callbacks.
- *
- * @param hInstance [in] A handle to the instance
- * @param RecognizedCB [in] A callback to be called when a gesture is recognized
- * @param ProgressCB [in] A callback to be called when a gesture is on its way to be recognized
- * @param pCookie [in] User's cookie, to be delivered to the callbacks
- * @param phCallback [out] The handle to these callbacks, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterGestureCallbacks(XnNodeHandle hInstance, XnGestureRecognized RecognizedCB, XnGestureProgress ProgressCB, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from gesture callbacks
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterGestureCallbacks(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
- * @brief Register to when gestures are added or removed
- *
- * @param hInstance [in] A handle to the instance
- * @param handler [in] The callback to be called when gesture configuration changes.
- * @param pCookie [in] User's cookie, to be delivered to the callbacks
- * @param phCallback [out] The handle to these callbacks, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGestureChange(XnNodeHandle hInstance, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from when gestures are added or removed
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGestureChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Register to when a gesture is in progress
- *
- * @param hInstance [in] A handle to the instance
- * @param handler [in] The callback to be called when the gesture is in progress
- * @param pCookie [in] User's cookie, to be delivered to the callback
- * @param phCallback [out] The handle to the callback, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGestureIntermediateStageCompleted(XnNodeHandle hInstance, XnGestureIntermediateStageCompleted handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from when a gesture is in progress
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGestureIntermediateStageCompleted(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
- * @brief Register to when a gesture is ready for its next stage (specific to the gesture)
- *
- * @param hInstance [in] A handle to the instance
- * @param handler [in] The callback to be called when the gesture is ready for its next stage
- * @param pCookie [in] User's cookie, to be delivered to the callback
- * @param phCallback [out] The handle to this callback, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToGestureReadyForNextIntermediateStage(XnNodeHandle hInstance, XnGestureReadyForNextIntermediateStage handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from when a gesture is ready for its next stage
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterFromGestureReadyForNextIntermediateStage(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/** @} */
-
-//---------------------------------------------------------------------------
-// Scene Analysis
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup scene Scene Analyzer
- * A Scene Analyzer node is a @ref mapgen that performs scene analysis. It supports all @ref mapgen functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates an scene analyzer.
- *
- * @param pContext [in] The context in which to create the scene analyzer.
- * @param phSceneAnalyzer [out] A handle to the created scene analyzer.
- * @param pQuery [in] Optional. Can be used to select which scene analyzer to create. If not specified, this function may create any scene analyzer that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about scene analyzers that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateSceneAnalyzer(
- XnContext* pContext,
- XnNodeHandle* phSceneAnalyzer,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Gets the label map, describing the current segmentation of the scene.
- *
- * @param hInstance [in] A handle to the instance
- */
-XN_C_API const XnLabel* XN_C_DECL xnGetLabelMap(XnNodeHandle hInstance);
-/**
- * @brief Gets a description of the floor, if it was found.
- *
- * @param hInstance [in] A handle to the instance
- * @param pPlane [out] A description of the floor
- */
-XN_C_API XnStatus XN_C_DECL xnGetFloor(XnNodeHandle hInstance, XnPlane3D* pPlane);
-
-/**
- * @brief Gets the current scene meta data.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pMetaData [in] The struct to be filled.
- */
-XN_C_API void XN_C_DECL xnGetSceneMetaData(XnNodeHandle hInstance, XnSceneMetaData* pMetaData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// User Generator
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup user User Generator
- * A User Generator node is a @ref generator that identifies a user in the scene. It supports all @ref generator functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates a user generator.
- *
- * @param pContext [in] The context in which to create the user generator.
- * @param phUserGenerator [out] A handle to the created user generator.
- * @param pQuery [in] Optional. Can be used to select which user generator to create. If not specified, this function may create any user generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about user generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateUserGenerator(
- XnContext* pContext,
- XnNodeHandle* phUserGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
- * @brief Get current number of users
- *
- * @param hInstance [in] A handle to the instance
- */
-XN_C_API XnUInt16 XN_C_DECL xnGetNumberOfUsers(XnNodeHandle hInstance);
-/**
- * @brief Get the current users
- *
- * @param hInstance [in] A handle to the instance
- * @param pUsers [out] Preallocated memory for the users
- * @param pnUsers [in,out] The size of the preallocated memory. Changes to the number of users
- */
-XN_C_API XnStatus XN_C_DECL xnGetUsers(XnNodeHandle hInstance, XnUserID* pUsers, XnUInt16* pnUsers);
-/**
- * @brief Get the center of mass of a user
- *
- * @param hInstance [in] A handle to the instance
- * @param user [in] The user for which to get the center of mass
- * @param pCoM [out] The center of mass
- */
-XN_C_API XnStatus XN_C_DECL xnGetUserCoM(XnNodeHandle hInstance, XnUserID user, XnPoint3D* pCoM);
-/**
- * @brief Get the pixels that belong to a user.
- *
- * The output is in a XnSceneMetaData object, holding a map of the pixels of the scene,
- * with the user's label as the value in the places corresponding with the user's pixels.
- * Pixels outside the user will not contain the user's ID.
- * ID 0 means a request for the pixels of all users. In this case, the background will get the label 0.
- *
- * @param hInstance [in] A handle to the instance
- * @param user [in] The user for which to get the pixels
- * @param pScene [out] XnSceneMetaData object, that holds the pixels of the user
- */
-XN_C_API XnStatus XN_C_DECL xnGetUserPixels(XnNodeHandle hInstance, XnUserID user, XnSceneMetaData* pScene);
-/**
- * @brief Register to user callbacks
- *
- * @param hInstance [in] A handle to the instance
- * @param NewUserCB [in] Callback to be called when a new user is identified
- * @param LostUserCB [in] Callback to be called when an existing user is no longer identified
- * @param pCookie [in] User's cookie, to be delivered to the callbacks
- * @param phCallback [out] The handle to these callbacks, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterUserCallbacks(XnNodeHandle hInstance, XnUserHandler NewUserCB, XnUserHandler LostUserCB, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from user callbacks
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterUserCallbacks(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Register to when the user exits the scene (but not lost yet)
- *
- * @param hInstance [in] A handle to the instance
- * @param handler [in] Callback to be called when a user leaves the scene
- * @param pCookie [in] User's cookie, to be delivered to the callbacks
- * @param phCallback [out] The handle to this callback, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToUserExit(XnNodeHandle hInstance, XnUserHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from when a user exits the scene
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterFromUserExit(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
- * @brief Register to when a user re-enters the scene after exiting
- *
- * @param hInstance [in] A handle to the instance
- * @param handler [in] Callback to be called when a user leaves the scene
- * @param pCookie [in] User's cookie, to be delivered to the callbacks
- * @param phCallback [out] The handle to this callback, to allow unregistration
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToUserReEnter(XnNodeHandle hInstance, XnUserHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
- * @brief Unregister from when a user re-enters the scene
- *
- * @param hInstance [in] A handle to the instance
- * @param hCallback [in] The handle received from registration
- */
-XN_C_API void XN_C_DECL xnUnregisterFromUserReEnter(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/** @} */
-
-//---------------------------------------------------------------------------
-// Skeleton Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup user
- * @defgroup skeleton Skeleton Capability
- * The Skeleton capability (@ref XN_CAPABILITY_SKELETON) allows a @ref user to also output the skeleton
- * data of the user, meaning, where every joint is located.
- * @{
- */
-
-/**
- * @brief Check if generator supports a specific joint.
- *
- * @param hInstance [in] A handle to the instance
- * @param eJoint [in] The joint to check
- */
-XN_C_API XnBool XN_C_DECL xnIsJointAvailable(XnNodeHandle hInstance, XnSkeletonJoint eJoint);
-/**
-* @brief Check if generator supports a specific profile.
-*
-* @param hInstance [in] A handle to the instance
-* @param eProfile [in] The profile to check
-*/
-XN_C_API XnBool XN_C_DECL xnIsProfileAvailable(XnNodeHandle hInstance, XnSkeletonProfile eProfile);
-/**
-* @brief Set the profile. this will set some joints to be active, and others to be inactive.
-*
-* @param hInstance [in] A handle to the instance
-* @param eProfile [in] The profile to set
-*/
-XN_C_API XnStatus XN_C_DECL xnSetSkeletonProfile(XnNodeHandle hInstance, XnSkeletonProfile eProfile);
-/**
-* @brief Change the state of a specific joint, to be active or inactive
-*
-* @param hInstance [in] A handle to the instance
-* @param eJoint [in] The joint
-* @param bState [in] The new state
-*/
-XN_C_API XnStatus XN_C_DECL xnSetJointActive(XnNodeHandle hInstance, XnSkeletonJoint eJoint, XnBool bState);
-/**
-* @brief Check if joint is currently active
-*
-* @param hInstance [in] A handle to the instance
-* @param eJoint [in] The joint to check
-*/
-XN_C_API XnBool XN_C_DECL xnIsJointActive(XnNodeHandle hInstance, XnSkeletonJoint eJoint);
-/**
-* @brief Register to joint configuration changes - when joints are activated and deactivated
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] The callback to be called when a joint is activated or deactivated
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToJointConfigurationChange(XnNodeHandle hInstance, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from joint configuration changes
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromJointConfigurationChange(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
-* @brief Get all active joints
-*
-* @param hInstance [in] A handle to the instance
-* @param pJoints [out] Preallocated memory for the joints
-* @param pnJoints [in,out] The size of the preallocated memory. Changed to the number of the active joints.
-*/
-XN_C_API XnStatus XN_C_DECL xnEnumerateActiveJoints(XnNodeHandle hInstance, XnSkeletonJoint* pJoints, XnUInt16* pnJoints);
-/**
-* @brief Get a specific joint's full information
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] The ID of the user to which the skeleton belongs
-* @param eJoint [in] The interesting joint
-* @param pJoint [out] The joint's full information
-*/
-XN_C_API XnStatus XN_C_DECL xnGetSkeletonJoint(XnNodeHandle hInstance, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointTransformation* pJoint);
-/**
-* @brief Get a specific joint's position
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] The ID of the user to which the skeleton belongs
-* @param eJoint [in] The interesting joint
-* @param pJoint [out] The joint's current position
-*/
-XN_C_API XnStatus XN_C_DECL xnGetSkeletonJointPosition(XnNodeHandle hInstance, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointPosition* pJoint);
-/**
-* @brief Get a specific joint's orientation
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] The ID of the user to which the skeleton belongs
-* @param eJoint [in] The interesting joint
-* @param pJoint [out] The joint's current orientation
-*/
-XN_C_API XnStatus XN_C_DECL xnGetSkeletonJointOrientation(XnNodeHandle hInstance, XnUserID user, XnSkeletonJoint eJoint, XnSkeletonJointOrientation* pJoint);
-/**
- * @brief Check if skeleton is being tracked
- *
- * @param hInstance [in] A handle to the instance
- * @param user [in] Id of the user to check
- */
-XN_C_API XnBool XN_C_DECL xnIsSkeletonTracking(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Check if skeleton is being calibrated
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnBool XN_C_DECL xnIsSkeletonCalibrated(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Check if skeleton is being calibrated
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnBool XN_C_DECL xnIsSkeletonCalibrating(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Request calibration when possible
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-* @param bForce [in] Disregard previous calibration
-*/
-XN_C_API XnStatus XN_C_DECL xnRequestSkeletonCalibration(XnNodeHandle hInstance, XnUserID user, XnBool bForce);
-/**
-* @brief stop calibration
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnStatus XN_C_DECL xnAbortSkeletonCalibration(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Save the calibration data to file
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] the user for which the calibration is saved
-* @param strFileName [in] The file to which to save the calibration data
-*/
-XN_C_API XnStatus XN_C_DECL xnSaveSkeletonCalibrationDataToFile(XnNodeHandle hInstance, XnUserID user, const XnChar* strFileName);
-/**
-* @brief Load previously saved calibration data from file
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] the user to be assigned the calibration data
-* @param strFileName [in] The file from which to load the calibration data.
-*/
-XN_C_API XnStatus XN_C_DECL xnLoadSkeletonCalibrationDataFromFile(XnNodeHandle hInstance, XnUserID user, const XnChar* strFileName);
-/**
- * @brief Save the calibration data
- *
- * @param hInstance [in] A handle to the instance
- * @param user [in] the user for which the calibration is saved
- * @param nSlot [in] The slot to use for saving the calibration data
- */
-XN_C_API XnStatus XN_C_DECL xnSaveSkeletonCalibrationData(XnNodeHandle hInstance, XnUserID user, XnUInt32 nSlot);
-/**
-* @brief Load previously saved calibration data.
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] the user to be assigned the calibration data
-* @param nSlot [in] The slot to use for saving the calibration data.
-*/
-XN_C_API XnStatus XN_C_DECL xnLoadSkeletonCalibrationData(XnNodeHandle hInstance, XnUserID user, XnUInt32 nSlot);
-/**
-* @brief Clear the requested slot from any saved calibration data.
-*
-* @param hInstance [in] A handle to the instance
-* @param nSlot [in] The slot to clear
-*/
-XN_C_API XnStatus XN_C_DECL xnClearSkeletonCalibrationData(XnNodeHandle hInstance, XnUInt32 nSlot);
-/**
-* @brief Check if a specific slot already holds calibration data
-*
-* @param hInstance [in] A handle to the instance
-* @param nSlot [in] The slot to check
-*/
-XN_C_API XnBool XN_C_DECL xnIsSkeletonCalibrationData(XnNodeHandle hInstance, XnUInt32 nSlot);
-/**
-* @brief Start tracking a skeleton
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnStatus XN_C_DECL xnStartSkeletonTracking(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Stop tracking a skeleton
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnStatus XN_C_DECL xnStopSkeletonTracking(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Reset the skeleton - discard calibration
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of the user to check
-*/
-XN_C_API XnStatus XN_C_DECL xnResetSkeleton(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Check if a specific pose is required for calibration
-*
-* @param hInstance [in] A handle to the instance
-*/
-XN_C_API XnBool XN_C_DECL xnNeedPoseForSkeletonCalibration(XnNodeHandle hInstance);
-/**
-* @brief Get the pose that is required for calibration
-*
-* @param hInstance [in] A handle to the instance
-* @param strPose [in] Name of the required pose
-*/
-XN_C_API XnStatus XN_C_DECL xnGetSkeletonCalibrationPose(XnNodeHandle hInstance, XnChar* strPose);
-/**
-* @brief Set the skeleton's smoothing factor
-*
-* @param hInstance [in] A handle to the instance
-* @param fFactor [in] The smoothing factor
-*/
-XN_C_API XnStatus XN_C_DECL xnSetSkeletonSmoothing(XnNodeHandle hInstance, XnFloat fFactor);
-/**
-* @brief Register to calibration callbacks.
-*
-* @param hInstance [in] A handle to the instance
-* @param CalibrationStartCB [in] Callback to be called when calibration is starting
-* @param CalibrationEndCB [in] Callback to be called when calibration is complete
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_API_DEPRECATED("Please use RegisterToCalibrationStart/Complete") XN_C_DECL xnRegisterCalibrationCallbacks(XnNodeHandle hInstance, XnCalibrationStart CalibrationStartCB, XnCalibrationEnd CalibrationEndCB, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from calibration callbacks
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_API_DEPRECATED("Please use UnregisterFromCalibrationStart/Complete") XN_C_DECL xnUnregisterCalibrationCallbacks(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
-* @brief Register to calibration start callback
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when calibration starts
-* @param pCookie [in] User's cookie, to be delivered to the callback
-* @param phCallback [out] the handle to this callback, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToCalibrationStart(XnNodeHandle hInstance, XnCalibrationStart handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from calibration start callback
-*
-* @param [in] hInstance A handle to the instance
-* @param [in] hCallback The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromCalibrationStart(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
-* @brief Register to calibration status while calibration is in progress
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when calibration is in progress
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to this callback, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToCalibrationInProgress(XnNodeHandle hInstance, XnCalibrationInProgress handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from calibration status while in progress
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromCalibrationInProgress(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
-* @brief Register to when calibration is complete, with status
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when calibration is complete
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to this callback, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToCalibrationComplete(XnNodeHandle hInstance, XnCalibrationComplete handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from calibration complete with status
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromCalibrationComplete(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/** @} */
-
-//---------------------------------------------------------------------------
-// Pose Detection Capability
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup user
- * @defgroup pose Pose Detection Capability
- * The Pose capability (@ref XN_CAPABILITY_POSE_DETECTION) allows a @ref user to recognize when the user
- * is in a specific pose.
- * @{
- */
-
-/**
-* @brief Get the number of the supported poses
-*
-* @param hInstance [in] A handle to the instance
-*/
-XN_C_API XnUInt32 XN_C_DECL xnGetNumberOfPoses(XnNodeHandle hInstance);
-/**
-* @brief Get the names of the supported poses
-*
-* @param hInstance [in] A handle to the instance
-* @param pstrPoses [out] Pre-allocated memory for the names of the supported poses
-* @param pnPoses [in,out] In input - size of the preallocated memory, in output - the number of pose names
-*/
-XN_C_API XnStatus XN_C_DECL xnGetAvailablePoses(XnNodeHandle hInstance, XnChar** pstrPoses, XnUInt32* pnPoses);
-/**
-* @brief Get the names of the supported poses
-*
-* @param hInstance [in] A handle to the instance
-* @param pstrPoses [out] Pre-allocated memory for the names of the supported poses
-* @param nNameLength [in] Memory size for each pose name
-* @param pnPoses [in,out] In input - size of the preallocated memory, in output - the number of pose names
-*/
-XN_C_API XnStatus XN_C_DECL xnGetAllAvailablePoses(XnNodeHandle hInstance, XnChar** pstrPoses, XnUInt32 nNameLength, XnUInt32* pnPoses);
-
-/**
-* @brief Tests if a pose is supported
-*
-* @param hInstance [in] A handle to the instance
-* @param strPose [in] The pose string to test
-* @return True if the pose is supported and False otherwise.
-*/
-XN_C_API XnBool XN_C_DECL xnIsPoseSupported(XnNodeHandle hInstance, const XnChar* strPose);
-
-/**
-* @brief Gets the current pose status
-*
-* @param hInstance [in] A handle to the instance
-* @param userID [in] The user whose pose status we are interested in.
-* @param poseName [in] The pose we want to get a status on.
-* @param poseTime [out] The time stamp in which the user entered into the pose (0 if not in pose).
-* @param eStatus [out] The status of the user's pose, i.e. the progress error for getting into
-* pose (XnPoseDetectionStatus, the same as received from the in progress
-* callback. See @ref xnRegisterToPoseDetectionInProgress).
-* @param eState [out] The state of the user pose (i.e. in pose, out of pose).
-* @return The success status. The data is invalid if failed.
-*/
-XN_C_API XnStatus xnGetPoseStatus(XnNodeHandle hInstance, XnUserID userID, const XnChar* poseName, XnUInt64* poseTime, XnPoseDetectionStatus* eStatus, XnPoseDetectionState* eState);
-/**
-* @brief Start detection of a specific pose for a specific user
-*
-* @param hInstance [in] A handle to the instance
-* @param strPose [in] Name of requested pose
-* @param user [in] Id of user
-*/
-XN_C_API XnStatus XN_C_DECL xnStartPoseDetection(XnNodeHandle hInstance,const XnChar* strPose, XnUserID user);
-/**
-* @brief Stop detection of poses for a specific user
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of user
-*/
-XN_C_API XnStatus XN_C_DECL xnStopPoseDetection(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Stop detection of a specific pose for a specific user
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] Id of user
-* @param strPose [in] Name of the pose
-*/
-XN_C_API XnStatus XN_C_DECL xnStopSinglePoseDetection(XnNodeHandle hInstance, XnUserID user, const XnChar* strPose);
-/**
-* @brief Register to callbacks for pose events
-*
-* @param hInstance [in] A handle to the instance
-* @param PoseDetectionStartCB [in] Function to be called when the pose is detected
-* @param PoseDetectionEndCB [in] Function to be called when the user is out of pose
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_API_DEPRECATED("Please use PoseDetected and/or OutOfPose callbacks") XN_C_DECL xnRegisterToPoseCallbacks(XnNodeHandle hInstance, XnPoseDetectionCallback PoseDetectionStartCB, XnPoseDetectionCallback PoseDetectionEndCB, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from pose events
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_API_DEPRECATED("Please use PoseDetected and/or OutOfPose callbacks") XN_C_DECL xnUnregisterFromPoseCallbacks(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
-* @brief Register to callback when a user is in pose
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when the pose is detected
-* @param pCookie [in] User's cookie, to be delivered to the callback
-* @param phCallback [out] the handle to this callback, to allow unregistration
-*/
-XN_C_API XnStatus xnRegisterToPoseDetected(XnNodeHandle hInstance, XnPoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from pose detected callback
-*
-* @param [in] hInstance A handle to the instance
-* @param [in] hCallback The handle received from registration
-*/
-XN_C_API void xnUnregisterFromPoseDetected(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
-* @brief Register to callback when a use is no longer in pose
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when user isn't in pose anymore
-* @param pCookie [in] User's cookie, to be delivered to the callback
-* @param phCallback [out] the handle to this callback, to allow unregistration
-*/
-XN_C_API XnStatus xnRegisterToOutOfPose(XnNodeHandle hInstance, XnPoseDetectionCallback handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from out of pose callback
-*
-* @param [in] hInstance A handle to the instance
-* @param [in] hCallback The handle received from registration
-*/
-XN_C_API void xnUnregisterFromOutOfPose(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
-* @brief Register to callback for status when pose is detected
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Function to be called when pose detection is in progress
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToPoseDetectionInProgress(XnNodeHandle hInstance, XnPoseDetectionInProgress handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from pose status callback
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromPoseDetectionInProgress(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Hands Generator
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup hands Hands Generator
- * A Hands Generator node is a @ref generator that tracks hand points. It supports all @ref generator functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates an hands generator.
- *
- * @param pContext [in] The context in which to create the hands generator.
- * @param phHandsGenerator [out] A handle to the created hands generator.
- * @param pQuery [in] Optional. Can be used to select which hands generator to create. If not specified, this function may create any hands generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about hands generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateHandsGenerator(
- XnContext* pContext,
- XnNodeHandle* phHandsGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-/**
-* @brief Register to hands callbacks
-*
-* @param hInstance [in] A handle to the instance
-* @param CreateCB [in] Callback to be called when a new hand is created
-* @param UpdateCB [in] Callback to be called when an existing hand has a new position
-* @param DestroyCB [in] Callback to be called when an existing hand has vanished
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterHandCallbacks(XnNodeHandle hInstance, XnHandCreate CreateCB, XnHandUpdate UpdateCB, XnHandDestroy DestroyCB, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from hands callbacks
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterHandCallbacks(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/**
-* @brief Stop tracking a specific hand
-*
-* @param hInstance [in] A handle to the instance
-* @param user [in] The hand to stop tracking
-*/
-XN_C_API XnStatus XN_C_DECL xnStopTracking(XnNodeHandle hInstance, XnUserID user);
-/**
-* @brief Stop tracking all hands
-*
-* @param hInstance [in] A handle to the instance
-*/
-XN_C_API XnStatus XN_C_DECL xnStopTrackingAll(XnNodeHandle hInstance);
-/**
-* @brief Start tracking at a specific position
-*
-* @param hInstance [in] A handle to the instance
-* @param pPosition [in] The position at which there is a new hand
-*/
-XN_C_API XnStatus XN_C_DECL xnStartTracking(XnNodeHandle hInstance, const XnPoint3D* pPosition);
-/**
-* @brief Change smoothing factor
-*
-* @param hInstance [in] A handle to the instance
-* @param fFactor [in] Smoothing factor, in the range 0..1. 0 Means no smoothing, 1 means infinite smoothing. Inside the range is generator dependent.
-*/
-XN_C_API XnStatus XN_C_DECL xnSetTrackingSmoothing(XnNodeHandle hInstance, XnFloat fFactor);
-/** @} */
-
-//---------------------------------------------------------------------------
-// Hand Touching FOV Edge Capability
-//---------------------------------------------------------------------------
-
-/**
-* @ingroup user
-* @defgroup touchingEdge Hand Touching FOV Edge Capability
-* The Touching FOV Edge capability (@ref XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE) allows callbacks when a hand (from hands generator) is touching the edge of the FOV
-* @{
-*/
-
-/**
-* @brief Register to when a hand is approaching the edge of the FOV
-*
-* @param hInstance [in] A handle to the instance
-* @param handler [in] Callback to be called when a hand is approaching the FOV
-* @param pCookie [in] User's cookie, to be delivered to the callbacks
-* @param phCallback [out] The handle to these callbacks, to allow unregistration
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterToHandTouchingFOVEdge(XnNodeHandle hInstance, XnHandTouchingFOVEdge handler, void* pCookie, XnCallbackHandle* phCallback);
-/**
-* @brief Unregister from hand approaching the edge of the FOV
-*
-* @param hInstance [in] A handle to the instance
-* @param hCallback [in] The handle received from registration
-*/
-XN_C_API void XN_C_DECL xnUnregisterFromHandTouchingFOVEdge(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-/** @} */
-
-//---------------------------------------------------------------------------
-// Audio Generator
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup audio Audio Generator
- * An Audio Generator node is a @ref generator that outputs audio data. It supports all @ref generator functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates an audio generator.
- *
- * @param pContext [in] The context in which to create the audio generator.
- * @param phAudioGenerator [out] A handle to the created audio generator.
- * @param pQuery [in] Optional. Can be used to select which audio generator to create. If not specified, this function may create any audio generator that is available.
- * @param pErrors [in] Optional. If provided, will be filled with information about audio generators that could not be created.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateAudioGenerator(
- XnContext* pContext,
- XnNodeHandle* phAudioGenerator,
- XnNodeQuery* pQuery,
- XnEnumerationErrors* pErrors
- );
-
-XN_C_API XnUChar* XN_C_DECL xnGetAudioBuffer(XnNodeHandle hInstance);
-XN_C_API XnUInt32 XN_C_DECL xnGetSupportedWaveOutputModesCount(XnNodeHandle hInstance);
-XN_C_API XnStatus XN_C_DECL xnGetSupportedWaveOutputModes(XnNodeHandle hInstance, XnWaveOutputMode* aSupportedModes, XnUInt32* pnCount);
-XN_C_API XnStatus XN_C_DECL xnSetWaveOutputMode(XnNodeHandle hInstance, const XnWaveOutputMode* OutputMode);
-XN_C_API XnStatus XN_C_DECL xnGetWaveOutputMode(XnNodeHandle hInstance, XnWaveOutputMode* OutputMode);
-XN_C_API XnStatus XN_C_DECL xnRegisterToWaveOutputModeChanges(XnNodeHandle hInstance, XnStateChangedHandler handler, void* pCookie, XnCallbackHandle* phCallback);
-XN_C_API void XN_C_DECL xnUnregisterFromWaveOutputModeChanges(XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Gets the current audio meta data.
- *
- * @param hInstance [in] A handle to the instance.
- * @param pMetaData [in] The struct to be filled.
- */
-XN_C_API void XN_C_DECL xnGetAudioMetaData(XnNodeHandle hInstance, XnAudioMetaData* pMetaData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Mocks
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup mocks Mock Nodes
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnMockDepthSetData(XnNodeHandle hInstance, XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnDepthPixel* pData);
-XN_C_API XnStatus XN_C_DECL xnMockImageSetData(XnNodeHandle hInstance, XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnUInt8* pData);
-XN_C_API XnStatus XN_C_DECL xnMockIRSetData(XnNodeHandle hInstance, XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnIRPixel* pData);
-XN_C_API XnStatus XN_C_DECL xnMockAudioSetData(XnNodeHandle hInstance, XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const XnUInt8* pData);
-XN_C_API XnStatus XN_C_DECL xnMockRawSetData(XnNodeHandle hInstance, XnUInt32 nFrameID, XnUInt64 nTimestamp, XnUInt32 nDataSize, const void* pData);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Codecs
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup codec Codec
- * A Codec node is a @ref node that allows compression and decompression of data. It supports all @ref node functions,
- * and adds additional functions.
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnCreateCodec(XnContext* pContext, XnCodecID codecID, XnNodeHandle hInitializerNode, XnNodeHandle* phCodec);
-XN_C_API XnCodecID XN_C_DECL xnGetCodecID(XnNodeHandle hCodec);
-XN_C_API XnStatus XN_C_DECL xnEncodeData(XnNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize,
- void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten);
-XN_C_API XnStatus XN_C_DECL xnDecodeData(XnNodeHandle hCodec, const void* pSrc, XnUInt32 nSrcSize,
- void* pDst, XnUInt32 nDstSize, XnUInt* pnBytesWritten);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Recorder
-//---------------------------------------------------------------------------
-/**
- * @ingroup prd_node
- * @defgroup recorder Recorder
- * A Recorder node is a @ref node that allows recording of data. It supports all @ref node functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates a recorder.
- *
- * @param pContext [in] The context in which to create the recorder.
- * @param strFormatName [in] Optional. The name of the format the recorded file will be in. If NULL, file will be in ONI format.
- * @param phRecorder [out] A pointer to the created recorder handle.
- */
-XN_C_API XnStatus XN_C_DECL xnCreateRecorder(XnContext* pContext, const XnChar* strFormatName, XnNodeHandle* phRecorder);
-
-/**
- * @brief Tells the recorder where to record.
- *
- * @param hRecorder [in] A handle to the recorder
- * @param destType [in] The type of medium to record to. Currently only XN_RECORD_MEDIUM_FILE is supported.
- * @param strDest [in] Recording destination. If destType is XN_RECORD_MEDIUM_FILE, this specifies a file name.
- */
-XN_C_API XnStatus XN_C_DECL xnSetRecorderDestination(XnNodeHandle hRecorder, XnRecordMedium destType, const XnChar* strDest);
-
-/**
- * @brief Returns the recoder's destination
- *
- * @param hRecorder [in] A handle to the recorder
- * @param pDestType [out] The type of medium the recorder is set to record.
- * @param strDest [out] Recording destination. If destType is XN_RECORD_MEDIUM_FILE, this specifies a file name.
- * @param nBufSize [in] The size of the strDest buffer.
- */
-XN_C_API XnStatus XN_C_DECL xnGetRecorderDestination(XnNodeHandle hRecorder, XnRecordMedium* pDestType, XnChar* strDest, XnUInt32 nBufSize);
-
-/**
- * @brief Adds a node to recording and start recording it. This function must be called on each node that is to be
- * recorded with this recorder.
- *
- * @param hRecorder [in] A handle to the recorder.
- * @param hNode [in] The node to add to the recording.
- * @param compression [in] The type of compression that will be used to encode the node's data
- * (See @ref XnCodecIDs.h). If XN_CODEC_NULL is specified, a default compression
- * will be chosen according to the node type.
- */
-XN_C_API XnStatus XN_C_DECL xnAddNodeToRecording(XnNodeHandle hRecorder, XnNodeHandle hNode, XnCodecID compression);
-
-/**
- * @brief Removes node from recording and stop recording it. This function can be called on a node that was added to
- * recording with @ref xnAddNodeToRecording.
- *
- * @param hRecorder [in] A handle to the recorder.
- * @param hNode [in] The node to remove from recording.
- */
-XN_C_API XnStatus XN_C_DECL xnRemoveNodeFromRecording(XnNodeHandle hRecorder, XnNodeHandle hNode);
-
-/**
- * @brief Records one frame of data from each node that was added to the recorder with @ref xnAddNodeToRecording.
- *
- * @param hRecorder [in] A handle to the recorder.
- */
-XN_C_API XnStatus XN_C_DECL xnRecord(XnNodeHandle hRecorder);
-
-/**
- * @brief Gets a string representation of the recording format.
- *
- * @param hRecorder [in] A handle to the recorder.
- */
-XN_C_API const XnChar* XN_C_DECL xnGetRecorderFormat(XnNodeHandle hRecorder);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// Player
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup player Player
- * A Player node is a @ref node that allows playing of a recording. It supports all @ref node functions,
- * and adds additional functions.
- * @{
- */
-
-/**
- * @brief Creates a player.
- *
- * @param pContext [in] The context in which to create the player.
- * @param strFormatName [in] The name of the recording format that the created player should play.
- * @param phPlayer [out] Pointer to the created player handle.
- */
-XN_C_API XnStatus XN_C_DECL xnCreatePlayer(XnContext* pContext, const XnChar* strFormatName, XnNodeHandle* phPlayer);
-
-/**
- * @brief Determines whether the player will automatically rewind to the beginning of the recording when reaching the end.
- *
- * @param hPlayer [in] A handle to the player.
- * @param bRepeat [in] Determines whether the player will repeat or not.
- *
- * @remark If bRepeat is set to TRUE, the player will automatically rewind when reaching the end.
- * @remark If bRepeat is set to FALSE, the player will stop playing when reaching the end, and will raise the event that was registered with @ref xnRegisterToEndOfFileReached(). In this state, @ref xnIsPlayerAtEOF() returns TRUE.
- */
-XN_C_API XnStatus XN_C_DECL xnSetPlayerRepeat(XnNodeHandle hPlayer, XnBool bRepeat);
-
-/**
- * @brief Sets the source for the player, i.e. where the played events will come from.
-
- * The only supported source type at this point is a file.
- *
- * @param hPlayer [in] A handle to the player.
- * @param sourceType [in] The type of source to set. Currently only XN_RECORD_MEDIUM_FILE is supported.
- * @param strSource [in] The source from which to play. If sourceType is XN_RECORD_MEDIUM_FILE, strSource specifies a file name.
- *
- * @sa xnGetPlayerSource()
- */
-XN_C_API XnStatus XN_C_DECL xnSetPlayerSource(XnNodeHandle hPlayer, XnRecordMedium sourceType, const XnChar* strSource);
-
-/**
- * @brief Gets the player's source, i.e where the played events come from.
- *
- * @param hPlayer [in] A handle to the player.
- * @param pSourceType [out] The player's source type.
- * @param strSource [in] The player's source.
- * @param nBufSize [in] The size of the buffer specified by strSource.
- *
- * @sa xnSetPlayerSource()
- */
-XN_C_API XnStatus XN_C_DECL xnGetPlayerSource(XnNodeHandle hPlayer, XnRecordMedium* pSourceType, XnChar* strSource, XnUInt32 nBufSize);
-
-/**
- * @brief Reads the next data element from the player.
- *
- * Can cause data updates and/or property updates of the played nodes.
- *
- * @param hPlayer [in] A handle to the player.
- */
-XN_C_API XnStatus XN_C_DECL xnPlayerReadNext(XnNodeHandle hPlayer);
-
-/**
- * @brief Seeks the player to a specific timestamp, so that playing will continue from that point onwards.
- * @note For the built-in ONI player, this function is not currently supported and always returns XN_STATUS_NOT_IMPLEMENTED.
- *
- * @param hPlayer [in] A handle to the player.
- * @param nTimeOffset [in] The offset, in microseconds, to move, relative to the specified origin. See the remark below.
- * @param origin [in] The origin to seek from. See the remark below.
- *
- * @remark The meaning of the nTimeOffset parameter changes according to the origin parameter:
- *
- * <table>
- * <tr><td><b>origin</b></td><td><b>Meaning of the nTimeOffset parameter</b></td>
- * <tr><td>XN_PLAYER_SEEK_SET</td><td>nTimeOffset specifies the total time passed since the beginning of the recording. Note that nTimeOffset will be case to XnUInt64 in this case.</td>
- * <tr><td>XN_PLAYER_SEEK_CUR</td><td>nTimeOffset specifies a period of time to move, relative to the current player position. A positive value means move forward, and a negative value means move backwards.</td>
- * <tr><td>XN_PLAYER_SEEK_END</td><td>nTimeOffset specifies a period of time to move, relative to the end of the recording. This must be a negative value.</td></tr>
- * </table>
- */
-XN_C_API XnStatus XN_C_DECL xnSeekPlayerToTimeStamp(XnNodeHandle hPlayer, XnInt64 nTimeOffset, XnPlayerSeekOrigin origin);
-
-/**
- * @brief Seeks the player to a specific frame of a specific played node, so that playing will continue from that frame onwards.
- *
- * @param hPlayer [in] A handle to the player.
- * @param strNodeName [in] The name of the node whose frame is to be sought.
- * @param nFrameOffset [in] The number of frames to move, relative to the specified origin. See the remark below.
- * @param origin [in] The origin to seek from. See the remark below.
- *
- * @remark The meaning of the nTimeOffset parameter changes according to the origin parameter:
- *
- * <table>
- * <tr><td><b>origin</b></td><td><b>Meaning of the nFrameOffset parameter</b></td>
- * <tr><td>XN_PLAYER_SEEK_SET</td><td>nFrameOffset specifies the total number of frames since the beginning of the node's recording. Note that nFrameOffset will be case to XnUInt64 in this case.</td>
- * <tr><td>XN_PLAYER_SEEK_CUR</td><td>nFrameOffset specifies the number of frames to move, relative to the current frame of the specifies node. A positive value means move forward, and a negative value means move backwards.</td>
- * <tr><td>XN_PLAYER_SEEK_END</td><td>nFrameOffset specifies the number of frames to move, relative to the end of the node's recording. This must be a negative value.</td></tr>
- * </table>
- *
- * @note You can get different results using this function for different values of strNodeName, because the frame numbers of different nodes are not necessarily in sync.
- */
-XN_C_API XnStatus XN_C_DECL xnSeekPlayerToFrame(XnNodeHandle hPlayer, const XnChar* strNodeName, XnInt32 nFrameOffset, XnPlayerSeekOrigin origin);
-
-/**
- * @brief Reports the current timestamp of a player, i.e. the amount of time passed since the beginning of the recording.
- *
- * @param hPlayer [in] A handle to the player.
- * @param pnTimestamp [out] A pointer to the retrieved timestamp in microseconds.
- */
-XN_C_API XnStatus XN_C_DECL xnTellPlayerTimestamp(XnNodeHandle hPlayer, XnUInt64* pnTimestamp);
-
-/**
- * @brief Reports the current frame number of a specific node played by a player.
- *
- * @param hPlayer [in] A handle to the player.
- * @param strNodeName [in] The name of the node for which to report the frame number.
- * @param pnFrame [out] A pointer to the reported frame number.
- *
- * @remark Different nodes that belong to the player can have different frame numbers, because the nodes are not necessarily in sync.
- */
-XN_C_API XnStatus XN_C_DECL xnTellPlayerFrame(XnNodeHandle hPlayer, const XnChar* strNodeName, XnUInt32* pnFrame);
-
-/**
- * @brief Retrieves the number of frames of a specific node played by a player.
- *
- * @param hPlayer [in] A handle to the player.
- * @param strNodeName [in] The name of the node for which to retrieve the number of frames.
- * @param pnFrames [out] A pointer to the retrieved number of frames.
- */
-XN_C_API XnStatus XN_C_DECL xnGetPlayerNumFrames(XnNodeHandle hPlayer, const XnChar* strNodeName, XnUInt32* pnFrames);
-
-/**
- * @brief Gets the name of the format supported by a player.
- *
- * @param hPlayer [in] A handle to the player.
- * @returns The name of the format supported by the player, or NULL if hPlayer is NULL.
- */
-XN_C_API const XnChar* XN_C_DECL xnGetPlayerSupportedFormat(XnNodeHandle hPlayer);
-
-/**
- * @brief Retrieves a list of the nodes played by a player.
- *
- * @param hPlayer [in] A handle to the player.
- * @param ppList [out] A pointer to the retrieved list of nodes.
- *
- * @remark This function fills the pointer that is pointed to by ppList with a newly allocated node info list
- * of the played nodes. This list must later be freed by the caller with @ref xnNodeInfoListFree().
- */
-XN_C_API XnStatus XN_C_DECL xnEnumeratePlayerNodes(XnNodeHandle hPlayer, XnNodeInfoList** ppList);
-
-/**
- * @brief Checks whether the player is at the end-of-file marker.
- * @note In the built-in ONI player, this function will never return TRUE for a player that is in repeat mode, although the event registered with @ref xnRegisterToEndOfFileReached() will be fired.
- *
- * @param hPlayer [in] A handle to the player.
- *
- * @sa xnSetPlayerRepeat()
- */
-XN_C_API XnBool XN_C_DECL xnIsPlayerAtEOF(XnNodeHandle hPlayer);
-
-/**
- * @brief Registers a callback function to be called when end-of-file is reached.
- *
- * @param hPlayer [in] A handle to the player.
- * @param handler [in] A pointer to a function that will be called.
- * @param pCookie [in] A user cookie that will be passed to the callback function.
- * @param phCallback [out] Will be filled with a handle to be passed to @ref xnUnregisterFromEndOfFileReached().
- *
- * @sa xnSetPlayerRepeat()
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterToEndOfFileReached
- (XnNodeHandle hPlayer, XnStateChangedHandler handler,
- void* pCookie, XnCallbackHandle* phCallback);
-
-/**
- * @brief Unregisters a callback function which was registered using @ref xnRegisterToEndOfFileReached().
- *
- * @param hInstance [in] A handle to the player.
- * @param hCallback [in] The handle to the callback returned from @ref xnRegisterToEndOfFileReached().
- */
-XN_C_API void XN_C_DECL xnUnregisterFromEndOfFileReached
- (XnNodeHandle hInstance, XnCallbackHandle hCallback);
-
-/**
- * @brief Sets the playback speed, as a ratio of the time passed in the recording.
- * A value of 1.0 means the player will try to output frames in the rate they were recorded (according to
- * their timestamps).
- * A value bigger than 1.0 means fast-forward, and a value between 0.0 and 1.0 means slow-motion.
- * The special value of XN_PLAYBACK_SPEED_FASTEST (0.0) means there will be no delay, and that frames will
- * be returned as soon as asked for.
- *
- * @param hInstance [in] A handle to the player.
- * @param dSpeed [in] The speed ratio (see function description).
- */
-XN_C_API XnStatus XN_C_DECL xnSetPlaybackSpeed(XnNodeHandle hInstance, XnDouble dSpeed);
-
-/**
- * @brief Gets the playback speed. see @ref xnSetPlaybackSpeed() for more details.
- *
- * @param hInstance [in] A handle to the player.
- * @returns speed ratio, or -1.0 if this node is not a player.
- */
-XN_C_API XnDouble XN_C_DECL xnGetPlaybackSpeed(XnNodeHandle hInstance);
-
-/** @} */
-
-//---------------------------------------------------------------------------
-// ScriptNode
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup prd_node
- * @defgroup script_node Script Node
- * A Script node is a @ref node that allows running scripts, and acts as a lifetime manager for nodes created
- * by that script.
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnCreateScriptNode(XnContext* pContext, const XnChar* strFormat, XnNodeHandle* phScript);
-XN_C_API const XnChar* XN_C_DECL xnScriptNodeGetSupportedFormat(XnNodeHandle hScript);
-XN_C_API XnStatus XN_C_DECL xnLoadScriptFromFile(XnNodeHandle hScript, const XnChar* strFileName);
-XN_C_API XnStatus XN_C_DECL xnLoadScriptFromString(XnNodeHandle hScript, const XnChar* strScript);
-XN_C_API XnStatus XN_C_DECL xnScriptNodeRun(XnNodeHandle hScript, XnEnumerationErrors* pErrors);
-
-/** @} */
-
-#endif // __XN_PRD_NODE_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfo.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfo.h
deleted file mode 100644
index 23a081d5..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfo.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_PRD_NODE_INFO_H__
-#define __XN_PRD_NODE_INFO_H__
-
-/**
- * @ingroup cref
- * @defgroup prdnodeinfo Production Node Info
- * This page describes the functionality of a production node info object. Each info object
- * can represent a possible production node, or an existing one.
- * @{
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-
-
-/**
- * Allocates a node info object, and sets its details.
- *
- * @param pDescription [in] The description for the new node info object.
- * @param strCreationInfo [in] The creation info for the new node info object.
- * @param pNeededNodes [in] A list of node info's that are needed by the new node info.
- * @param ppNodeInfo [out] A pointer to pointer to the new node info object.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoAllocate(const XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnNodeInfoList* pNeededNodes, XnNodeInfo** ppNodeInfo);
-
-/**
- * Frees a node info object
- *
- * @param pNodeInfo [in] The node info object to free.
- */
-XN_C_API void XN_C_DECL xnNodeInfoFree(XnNodeInfo* pNodeInfo);
-
-/**
- * Sets the instance name of the node info object. The name can only be set BEFORE the instance is
- * created.
- *
- * @param pNodeInfo [in] A production node info object.
- * @param strInstanceName [in] The name to give to this instance.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoSetInstanceName(XnNodeInfo* pNodeInfo, const XnChar* strInstanceName);
-
-/**
- * Gets the description of the production node.
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API const XnProductionNodeDescription* XN_C_DECL xnNodeInfoGetDescription(XnNodeInfo* pNodeInfo);
-
-/**
- * Creates a printable representation of the production tree.
- *
- * @param pNodeInfo [in] A production node info object.
- * @param csResult [in] A buffer to be filled with the printable representation.
- * @param nSize [in] Size of the buffer.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoGetTreeStringRepresentation(XnNodeInfo* pNodeInfo, XnChar* csResult, XnUInt32 nSize);
-
-/**
- * Gets the instance name of the production node.
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API const XnChar* XN_C_DECL xnNodeInfoGetInstanceName(XnNodeInfo* pNodeInfo);
-
-/**
- * Gets the creation info of the production node.
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API const XnChar* XN_C_DECL xnNodeInfoGetCreationInfo(XnNodeInfo* pNodeInfo);
-
-/**
- * Gets the list of needed nodes of the production node.
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API XnNodeInfoList* XN_C_DECL xnNodeInfoGetNeededNodes(XnNodeInfo* pNodeInfo);
-
-/**
- * Gets the handle of the production node. For nodes that weren't created yet, NULL is returned.
- * If a handle is returned, it should be released when no longer used by calling @ref xnProductionNodeRelease().
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API XnNodeHandle XN_C_DECL xnNodeInfoGetRefHandle(XnNodeInfo* pNodeInfo);
-
-XN_C_API XnNodeHandle XN_API_DEPRECATED("Please use xnNodeInfoGetRefHandle() instead") XN_C_DECL xnNodeInfoGetHandle(XnNodeInfo* pNodeInfo);
-
-/**
- * Gets the additional data object attached to the node info object.
- *
- * @param pNodeInfo [in] A production node info object.
- */
-XN_C_API const void* XN_C_DECL xnNodeInfoGetAdditionalData(XnNodeInfo* pNodeInfo);
-
-/** @} */
-
-#endif // __XN_PRD_NODE_INFO_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h
deleted file mode 100644
index 6fa22eb0..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPrdNodeInfoList.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_PRD_NODE_INFO_LIST_H__
-#define __XN_PRD_NODE_INFO_LIST_H__
-
-/**
- * @ingroup cref
- * @defgroup infolist Production Node Info List
- * This page details functions for handling production nodes lists. The lists are implemented as
- * doubly-linked lists, but it's not recommended to access the list members directly.
- * instead, use the provided functions for handling the list.
- *
- * @section append Adding and Removing Node Info Objects
- *
- * Nodes can be added to the list using @ref xnNodeInfoListAdd(). Note that once an info object
- * is part of the list, it will be freed if that list is freed. A node can be removed by calling @ref
- * xnNodeInfoListRemove(), which also frees that element.
- *
- * A short example:
- * @code
-// Start with an empty list
-XnNodeInfoList* pList;
-nRetVal = xnNodeInfoListAllocate(&pList);
-// TODO: check error code
-
-// Add first
-pList = xnNodeInfoListAdd(pList, pDescription1, NULL, NULL);
-
-// Add second
-pList = xnNodeInfoListAdd(pList, pDescription2, NULL, NULL);
- * @endcode
- *
- * @section enum Enumeration
- *
- * Forward Iteration:
- * @code
-for (XnNodeInfoListIterator it = xnNodeInfoListGetFirst(pList);
- xnNodeInfoListIteratorIsValid(it);
- it = xnNodeInfoListGetNext(it))
-{
- XnNodeInfo* pCurrent = xnNodeInfoListGetCurrent(it);
- ...
-}
- * @endcode
- *
- * Backwards Iteration:
- * @code
-for (XnNodeInfoListIterator it = xnNodeInfoListGetLast(pList);
- xnNodeInfoListIteratorIsValid(it);
- it = xnNodeInfoListGetPrevious(it))
-{
- XnNodeInfo* pCurrent = xnNodeInfoListGetCurrent(it);
- ...
-}
- * @endcode
- * @{
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/**
- * Allocates a @ref XnNodeInfoList object. This object should be freed using @ref xnNodeInfoListFree().
- *
- * @param ppList [out] The list.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAllocate(XnNodeInfoList** ppList);
-
-/**
- * Frees a @ref XnNodeInfoList object previously allocated with @ref xnNodeInfoListAllocate().
- *
- * @param pList [out] The list.
- */
-XN_C_API void XN_C_DECL xnNodeInfoListFree(XnNodeInfoList* pList);
-
-/**
- * Creates and adds a single @ref XnNodeInfo object to the list. See also @ref xnNodeInfoListAddEx().
- *
- * @param pList [in] The list.
- * @param pDescription [in] The description of this production node.
- * @param strCreationInfo [in] Optional. Additional needed information for instantiation.
- * @param pNeededNodes [in] Optional. A list of needed nodes.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAdd(XnNodeInfoList* pList, const XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnNodeInfoList* pNeededNodes);
-
-/**
- * Creates and adds a single @ref XnNodeInfo object to the list, with additional data. This data can be later
- * extracted using the @ref xnNodeInfoGetAdditionalData(). Before the node info object is freed, the pFreeHandler
- * callback will be called, so it could free the additional data object.
- *
- * @param pList [in] The list.
- * @param pDescription [in] The description of this production node.
- * @param strCreationInfo [in] Optional. Additional needed information for instantiation.
- * @param pNeededNodes [in] Optional. A list of needed nodes.
- * @param pAdditionalData [in] Additional data, which is specific to this node.
- * @param pFreeHandler [in] Optional. A callback function for freeing the additional data.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddEx(XnNodeInfoList* pList, const XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnNodeInfoList* pNeededNodes, const void* pAdditionalData, XnFreeHandler pFreeHandler);
-
-/**
- * Adds a single @ref XnNodeInfo object to the list.
- *
- * @param pList [in] The list.
- * @param pNode [in] The node to add.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddNode(XnNodeInfoList* pList, XnNodeInfo* pNode);
-
-/**
- * Adds a node from another list to this list (the node is not removed from the other list).
- *
- * @param pList [in] The list.
- * @param otherListIt [in] An iterator obtained from another list.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAddNodeFromList(XnNodeInfoList* pList, XnNodeInfoListIterator otherListIt);
-
-/**
- * Removes an element from the list, and frees it.
- *
- * @param pList [in] The list.
- * @param it [in] Iterator to the element that should be removed.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListRemove(XnNodeInfoList* pList, XnNodeInfoListIterator it);
-
-/**
- * Clears a node info list, freeing all the elements in it.
- *
- * @param pList [in] The list to be freed.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListClear(XnNodeInfoList* pList);
-
-/**
- * Appends another list at the end of this list. Note that the other list becomes empty,
- * but still needs to be freed.
- *
- * @param pList [in] A list.
- * @param pOther [in] The list to be appended.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeInfoListAppend(XnNodeInfoList* pList, XnNodeInfoList* pOther);
-
-/**
-* Checks if the given list is empty
-*
-* @param pList [in] A list.
-*/
-XN_C_API XnBool XN_C_DECL xnNodeInfoListIsEmpty(XnNodeInfoList* pList);
-
-/**
- * Gets the first element of the list.
- *
- * @param pList [in] [Optional] A list.
- *
- * @returns an iterator to the first element of the list, or NULL if the list is empty.
- */
-XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetFirst(XnNodeInfoList* pList);
-
-/**
- * Gets the last element of the list.
- *
- * @param pList [in] [Optional] A list.
- *
- * @returns an iterator to the last element of the list, or NULL if the list is empty.
- */
-XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetLast(XnNodeInfoList* pList);
-
-/**
- * Checks if the current iterator points to a valid location.
- *
- * @param it [in] An iterator.
- */
-XN_C_API XnBool XN_C_DECL xnNodeInfoListIteratorIsValid(XnNodeInfoListIterator it);
-
-/**
- * Gets current element from an iterator.
- *
- * @param it [in] An iterator.
- *
- * @returns an @ref XnNodeInfo pointer.
- */
-XN_C_API XnNodeInfo* XN_C_DECL xnNodeInfoListGetCurrent(XnNodeInfoListIterator it);
-
-/**
- * Gets an iterator to the next element from a current iterator.
- *
- * @param it [in] An iterator.
- *
- * @returns an iterator to the next element.
- */
-XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetNext(XnNodeInfoListIterator it);
-
-/**
- * Gets an iterator to the previous element from a current iterator.
- *
- * @param it [in] An iterator.
- *
- * @returns an iterator to the previous element.
- */
-XN_C_API XnNodeInfoListIterator XN_C_DECL xnNodeInfoListGetPrevious(XnNodeInfoListIterator it);
-
-/** @} */
-
-#endif // __XN_PRD_NODE_INFO_LIST_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnProfiling.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnProfiling.h
deleted file mode 100644
index 87d20269..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnProfiling.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PROFILING_H_
-#define _XN_PROFILING_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define INVALID_PROFILING_HANDLE -1
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-typedef XnInt32 XnProfilingHandle;
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-
-/**
-* Initializes profiling.
-*
-* @param nProfilingInterval [in] The number of milliseconds between profiler printings. A value
-* of zero means profiling is off.
-*/
-XN_C_API XnStatus XN_C_DECL xnProfilingInit(XnUInt32 nProfilingInterval = 0);
-
-/**
-* Initializes using INI file.
-*
-* @param cpINIFileName [in] Name of INI file.
-* @param cpSectionName [in] Name of section in INI file.
-*/
-XN_C_API XnStatus XN_C_DECL xnProfilingInitFromINI(const XnChar* cpINIFileName, const XnChar* cpSectionName);
-
-/**
-* Shuts down profiling.
-*/
-XN_C_API XnStatus XN_C_DECL xnProfilingShutdown();
-
-/**
-* Returns TRUE if profiling is active, or FALSE otherwise.
-*/
-XN_C_API XnBool XN_C_DECL xnProfilingIsActive();
-
-/**
-* Start a profiled section. This function is not meant to be used directly. Please use the
-* XN_PROFILING_START_SECTION macro.
-*
-* @param csSectionName [in] The name of the profiled section.
-* @param bMT [in] TRUE if this section is multi-threaded, FALSE otherwise.
-* @param pHandle [out] A handle to be used each time this section executes again.
-*/
-XN_C_API XnStatus XN_C_DECL xnProfilingSectionStart(const char* csSectionName, XnBool bMT, XnProfilingHandle* pHandle);
-
-/**
-* Ends a profiled section. This function is not meant to be used directly. Please use the
-* XN_PROFILING_END_SECTION macro.
-*
-* @param pHandle [in] A handle returned from xnProfilingSectionStart.
-*/
-XN_C_API XnStatus XN_C_DECL xnProfilingSectionEnd(XnProfilingHandle* pHandle);
-
-
-/**
-* Starts a profiled section. The code section between this declaration
-* and the following XN_PROFILING_END_SECTION declaration will be time-measured.
-*
-* @param name [in] The name of the section (for printing purposes).
-* @param mt [in] TRUE if this section is multi-threaded, FALSE otherwise.
-*/
-#define _XN_PROFILING_START_SECTION(name, mt) \
- { \
- static XnProfilingHandle __profiling = INVALID_PROFILING_HANDLE; \
- if (xnProfilingIsActive()) \
- { \
- xnProfilingSectionStart(name, mt, &__profiling); \
- }
-
-#define XN_PROFILING_START_SECTION(name) _XN_PROFILING_START_SECTION(name, FALSE)
-#define XN_PROFILING_START_MT_SECTION(name) _XN_PROFILING_START_SECTION(name, TRUE)
-
-/**
-* Ends a profiled section.
-*/
-#define XN_PROFILING_END_SECTION \
- if (__profiling != INVALID_PROFILING_HANDLE) \
- { \
- xnProfilingSectionEnd(&__profiling); \
- } \
- }
-
-/**
-* Starts a profiled section, giving it the name of the current function.
-* The code section between this declaration and the following XN_PROFILING_END_FUNCTION
-* declaration will be time-measured.
-*
-* @param name [in] The name of the section (for printing purposes).
-*/
-#define XN_PROFILING_START_FUNCTION XN_PROFILING_START_SECTION(__FUNCTION__)
-
-/**
-* Ends a profiled function.
-*/
-#define XN_PROFILING_END_FUNCTION XN_PROFILING_END_SECTION
-
-#endif //_XN_PROFILING_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPropNames.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPropNames.h
deleted file mode 100644
index 68f47138..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnPropNames.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_PROP_NAMES_H__
-#define __XN_PROP_NAMES_H__
-
-//ProductionNode
-#define XN_PROP_STATE_READY "xnStateReady" // int. Meant only for mock nodes.
-
-//Generator
-#define XN_PROP_IS_GENERATING "xnIsGenerating" //int
-#define XN_PROP_MIRROR "xnMirror" //int
-#define XN_PROP_TIMESTAMP "xnTimeStamp" //int
-#define XN_PROP_FRAME_ID "xnFrameID" //int
-#define XN_PROP_NEWDATA "xnNewData" //general. Meant only for mock nodes.
-#define XN_PROP_FRAME_SYNCED_WITH "xnFrameSyncedWith" // String. name of the frame synced
-
-//MapGenerator
-#define XN_PROP_MAP_OUTPUT_MODE "xnMapOutputMode" //general
-#define XN_PROP_SUPPORTED_MAP_OUTPUT_MODES_COUNT "xnSupportedMapOutputModesCount" //int
-#define XN_PROP_SUPPORTED_MAP_OUTPUT_MODES "xnSupportedMapOutputModes" //general
-#define XN_PROP_CROPPING "xnCropping" //general
-#define XN_PROP_BYTES_PER_PIXEL "xnBytesPerPixel" //int
-
-//ImageGenerator
-#define XN_PROP_SUPPORTED_PIXEL_FORMATS "xnSupportedPixelFormats" //general
-#define XN_PROP_PIXEL_FORMAT "xnPixelFormat" //int
-
-//GestureGenerator
-#define XN_PROP_GESTURE_RECOGNIZED "xnGestureRecognized" //general
-#define XN_PROP_GESTURE_PROGRESS "xnGestureProgress" //general
-
-//DepthGenerator
-#define XN_PROP_DEVICE_MAX_DEPTH "xnDeviceMaxDepth" //int
-#define XN_PROP_SUPPORTED_USER_POSITIONS_COUNT "xnSupportedUserPositionsCount" //int
-#define XN_PROP_USER_POSITIONS "xnUserPositions" //general
-#define XN_PROP_FIELD_OF_VIEW "xnFOV" // general (XnFieldOfView)
-
-//AudioGenerator
-#define XN_PROP_WAVE_OUTPUT_MODE "xnWaveOutputMode" //general
-#define XN_PROP_WAVE_SUPPORTED_OUTPUT_MODES_COUNT "xnWaveSupportedOutputModesCount" //int
-#define XN_PROP_WAVE_SUPPORTED_OUTPUT_MODES "xnWaveSupportedOutputModes" //general
-
-#endif //__XN_PROP_NAMES_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueries.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueries.h
deleted file mode 100644
index a78ebc1d..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueries.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_QUERIES_H__
-#define __XN_QUERIES_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnTypes.h"
-
-//---------------------------------------------------------------------------
-// Exported Functions
-//---------------------------------------------------------------------------
-/**
- * @ingroup cref
- * @defgroup queries Queries
- * This page details functions for building queries. Queries can be used during enumeration, and provide
- * an easy way for filtering results before they return to user.
- * @{
- */
-
-/**
- * Allocates a new query object. This object must be freed using @ref xnNodeQueryFree().
- *
- * @param ppQuery [out] Created query object.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQueryAllocate(XnNodeQuery** ppQuery);
-
-/**
- * Frees a query object previously created using @ref xnNodeQueryAllocate().
- *
- * @param pQuery [in] Query object.
- */
-XN_C_API void XN_C_DECL xnNodeQueryFree(XnNodeQuery* pQuery);
-
-/**
- * Sets the requested vendor.
- *
- * @param pQuery [in] Query object.
- * @param strVendor [in] Vendor Name.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetVendor(XnNodeQuery* pQuery, const XnChar* strVendor);
-
-/**
- * Sets the requested name.
- *
- * @param pQuery [in] Query object.
- * @param strName [in] Product Name.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetName(XnNodeQuery* pQuery, const XnChar* strName);
-
-/**
- * Sets the minimum required version.
- *
- * @param pQuery [in] Query object.
- * @param pMinVersion [in] Min Version.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetMinVersion(XnNodeQuery* pQuery, const XnVersion* pMinVersion);
-
-/**
- * Sets the maximum required version.
- *
- * @param pQuery [in] Query object.
- * @param pMaxVersion [in] Max Version.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetMaxVersion(XnNodeQuery* pQuery, const XnVersion* pMaxVersion);
-
-/**
- * Adds a capability that the node must support. Note that for checking if a capability is supported,
- * the node must be created (if it's not an existing one). This operation might take a bit longer...
- *
- * @param pQuery [in] Query object.
- * @param strNeededCapability [in] A needed capability name.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQueryAddSupportedCapability(XnNodeQuery* pQuery, const XnChar* strNeededCapability);
-
-/**
- * Adds a MapOutputMode that the node must support. Note that for checking if a capability is supported,
- * the node must be created (if it's not an existing one). This operation might take a bit longer...
- *
- * @param pQuery [in] Query object.
- * @param pMapOutputMode [in] A map output mode. Each field of the mode can be set to (-1), meaning
- * results will not be filtered by this field.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQueryAddSupportedMapOutputMode(XnNodeQuery* pQuery, const XnMapOutputMode* pMapOutputMode);
-
-/**
- * Sets the minimum required user positions this node supports. Note that for checking if a capability is supported,
- * the node must be created (if it's not an existing one). This operation might take a bit longer...
- *
- * @param pQuery [in] Query object.
- * @param nCount [in] The number of required positions.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetSupportedMinUserPositions(XnNodeQuery* pQuery, const XnUInt32 nCount);
-
-/**
- * Filter results so that only existing nodes will be returned.
- *
- * @param pQuery [in] Query object.
- * @param bExistingNode [in] TRUE to return only existing ones, FALSE otherwise.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetExistingNodeOnly(XnNodeQuery* pQuery, XnBool bExistingNode);
-
-/**
- * Filter results so that only non-existing nodes will be returned.
- *
- * @param pQuery [in] Query object.
- * @param bNonExistingNode [in] TRUE to return only non-existing ones, FALSE otherwise.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetNonExistingNodeOnly(XnNodeQuery* pQuery, XnBool bNonExistingNode);
-
-/**
- * Adds a needed node.
- *
- * @param pQuery [in] Query object.
- * @param strInstanceName [in] The name of the needed instance.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQueryAddNeededNode(XnNodeQuery* pQuery, const XnChar* strInstanceName);
-
-/**
- * Sets the creation info field of a query object.
- *
- * @param pQuery [in] Query object.
- * @param strCreationInfo [in] The creation info to set in the query.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQuerySetCreationInfo(XnNodeQuery* pQuery, const XnChar* strCreationInfo);
-
-/**
- * Filters a list of nodes according to query. The list will contain only nodes that match all query terms.
- * Note that some query terms might require creation of a node, and thus may take longer.
- *
- * @param pContext [in] OpenNI Context object.
- * @param pQuery [in] Query object.
- * @param pList [in] The list to be filtered.
- */
-XN_C_API XnStatus XN_C_DECL xnNodeQueryFilterList(XnContext* pContext, const XnNodeQuery* pQuery, XnNodeInfoList* pList);
-
-/** @} */
-
-#endif // __XN_QUERIES_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueue.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueue.h
deleted file mode 100644
index 04122ca3..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueue.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_QUEUE_H
-#define _XN_QUEUE_H
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnList.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
-* The queue
-*/
-class XnQueue
-{
-public:
- /**
- * Constructor. Initialize internal representations
- */
- XnQueue() {}
- /**
- * Destructor. Destroy internal representations
- */
- virtual ~XnQueue() {}
-
- /**
- * Initialized the queue. This method should be called before calling any other method.
- */
- virtual XnStatus Init()
- {
- return (XN_STATUS_OK);
- }
-
- /**
- * Push a new value to the queue
- *
- * @param value [in] The value to add to the queue
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the queue because no nodes are available.
- */
- virtual XnStatus Push(XnValue const& value)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = m_List.AddLast(value);
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
- /**
- * Pop the value at the top of the queue
- *
- * @param value [out] The value that was at the top of the queue
- *
- * @return XN_STATUS_IS_EMPTY The queue is empty
- */
- virtual XnStatus Pop(XnValue& value)
- {
- if (IsEmpty())
- {
- return XN_STATUS_IS_EMPTY;
- }
-
- value = *(m_List.begin());
- return m_List.Remove(m_List.begin());
- }
-
- /**
- * Get the value at the top of the queue (it is user responsibility to check queue is not empty)
- *
- * @return a reference to the object at head of the queue.
- */
- XnValue const& Top() const
- {
- return *(m_List.begin());
- }
-
- /**
- * Get the value at the top of the queue (it is user responsibility to check queue is not empty)
- *
- * @return a reference to the object at head of the queue.
- */
- XnValue& Top()
- {
- return *(m_List.begin());
- }
-
- /**
- * Check if queue is empty
- */
- XnBool IsEmpty() const
- {
- return m_List.IsEmpty();
- }
-
- /**
- * Get current size of queue
- */
- virtual XnUInt32 Size() const
- {
- return m_List.Size();
- }
-
-private:
- XN_DISABLE_COPY_AND_ASSIGN(XnQueue);
-
- /** The internal XnList with which the queue is implemented. */
- XnList m_List;
-};
-
-/**
-* Declares a queue of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue. It is declared using the declspec @a decl.
-* It inherits from @a base. Note that @a base must be a derivative of XnQueue.
-*/
-#define XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator, base) \
- class decl ClassName : public base \
- { \
- public: \
- ClassName() {} \
- ~ClassName() \
- { \
- /* We do this using Pop() to make sure memory is freed. */ \
- Type dummy; \
- while (Size() != 0) \
- Pop(dummy); \
- } \
- XnStatus Push(Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = base::Push(val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- XnStatus Pop(Type& value) \
- { \
- XnValue val; \
- XnStatus nRetVal = base::Pop(val); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- value = Translator::GetFromValue(val); \
- Translator::FreeValue(val); \
- return XN_STATUS_OK; \
- } \
- inline Type const& Top() const { return Translator::GetFromValue(base::Top()); }\
- inline Type& Top() { return Translator::GetFromValue(base::Top()); } \
- private: \
- XN_DISABLE_COPY_AND_ASSIGN(ClassName); \
- };
-
-/**
-* Declares a queue of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue.
-* It inherits from @a base. Note that @a base must be a derivative of XnQueue.
-*/
-#define XN_DECLARE_QUEUE_WITH_TRANSLATOR(Type, ClassName, Translator, base) \
- XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator, base)
-
-/**
-* Declares a queue of type @a Type, named @a ClassName, that uses the default translator.
-* It is declared using the declspec @a decl.
-*/
-#define XN_DECLARE_QUEUE_DECL(decl, Type, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
- XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName), XnQueue)
-
-/**
-* Declares a queue of type @a Type, named @a ClassName, that uses the default translator.
-*/
-#define XN_DECLARE_QUEUE(Type, ClassName) \
- XN_DECLARE_QUEUE_DECL(, Type, ClassName)
-
-#endif // _XN_QUEUE_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueueT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueueT.h
deleted file mode 100644
index 3320d118..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnQueueT.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef _XN_QUEUE_T_H_
-#define _XN_QUEUE_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnListT.h>
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-template<class T, class TAlloc = XnLinkedNodeDefaultAllocatorT<T> >
-class XnQueueT : protected XnListT<T, TAlloc>
-{
-public:
- typedef XnListT<T, TAlloc> Base;
-
- XnQueueT() : Base() {}
-
- XnQueueT(const XnQueueT& other) : Base()
- {
- *this = other;
- }
-
- XnQueueT& operator=(const XnQueueT& other)
- {
- Base::operator=(other);
- // no other members
- return *this;
- }
-
- ~XnQueueT() {}
-
- using Base::ConstIterator;
- using Base::IsEmpty;
-
- XnStatus Push(T const& value)
- {
- return Base::AddLast(value);
- }
-
- XnStatus Pop(T& value)
- {
- Iterator it = Begin();
- if (it == End())
- {
- return XN_STATUS_IS_EMPTY;
- }
- value = *it;
- return Base::Remove(it);
- }
-
- T const& Top() const { return *Begin(); }
- T& Top() { return *Begin(); }
-
- using Base::Begin;
- using Base::End;
- using Base::Size;
-};
-
-
-
-#endif // _XN_QUEUE_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnScheduler.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnScheduler.h
deleted file mode 100644
index a5a790c4..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnScheduler.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_SCHEDULER_H_
-#define _XN_SCHEDULER_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-#define XN_MASK_SCHEDULER "Scheduler"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-struct XnScheduler; // forward declaration
-typedef struct XnScheduler XnScheduler;
-
-struct XnScheduledTask; // forward declaration
-typedef struct XnScheduledTask XnScheduledTask;
-
-typedef void (XN_CALLBACK_TYPE* XnTaskCallbackFuncPtr)(void* pCallbackArg);
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-
-/**
-* Starts a scheduler thread. Multiple timers can be added to the created scheduler.
-*
-* @param ppScheduler [out] Upon successful return, holds a handle to created scheduler.
-*/
-XN_C_API XnStatus XN_C_DECL xnSchedulerStart(XnScheduler** ppScheduler);
-
-/**
-* Shuts down a scheduler thread. All timers on that scheduler will be stopped.
-*
-* @param ppScheduler [in/out] A pointer to the scheduler to be shut down.
-*/
-XN_C_API XnStatus XN_C_DECL xnSchedulerShutdown(XnScheduler** ppScheduler);
-
-/**
-* Adds a task to the scheduler.
-*
-* @param pScheduler [in] The scheduler to handle this task.
-* @param nInterval [in] The interval, in milliseconds, in which callback should be called.
-* @param pCallback [in] The function to be called when time arrived.
-* @param pCallbackArg [in] The argument that will be passed to the callback method.
-* @param ppTask [out] Upon successful return, holds a handle to the started task.
-*/
-XN_C_API XnStatus XN_C_DECL xnSchedulerAddTask(XnScheduler* pScheduler, XnUInt64 nInterval, XnTaskCallbackFuncPtr pCallback, void* pCallbackArg, XnScheduledTask** ppTask);
-
-/**
-* Removes a task from the scheduler.
-*
-* @param pScheduler [in] The scheduler this task is registered to.
-* @param ppTask [in/out] The task to be removed from the scheduler.
-*/
-XN_C_API XnStatus XN_C_DECL xnSchedulerRemoveTask(XnScheduler* pScheduler, XnScheduledTask** ppTask);
-
-/**
-* Changes scheduling of a specific task.
-*
-* @param pScheduler [in] The scheduler this task is registered to.
-* @param pTask [in] The task to be removed from the scheduler.
-* @param nInterval [in] The new interval to be used.
-*/
-XN_C_API XnStatus XN_C_DECL xnSchedulerRescheduleTask(XnScheduler* pScheduler, XnScheduledTask* pTask, XnUInt64 nInterval);
-
-#endif //_XN_SCHEDULER_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStack.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStack.h
deleted file mode 100644
index 7231bc7f..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStack.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_STACK_H
-#define _XN_STACK_H
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnList.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
-* The stack
-*/
-class XnStack
-{
-public:
- /**
- * Constructor. Initialize internal representations
- */
- XnStack() {}
- /**
- * Destructor. Destroy internal representations
- */
- ~XnStack() {}
-
- /**
- * Push a new value to the stack
- *
- * @param value [in] The value to add to the stack
- *
- * @return XN_STATUS_ALLOC_FAILED Failed to add to the stack because no nodes are available.
- */
- XnStatus Push(XnValue const& value)
- {
- return m_List.AddFirst(value);
- }
-
- /**
- * Pop the value at the top of the stack
- *
- * @param value [out] The value that was at the top of the stack
- *
- * @return XN_STATUS_IS_EMPTY The stack is empty
- */
- XnStatus Pop(XnValue& value)
- {
- if (IsEmpty())
- {
- return XN_STATUS_IS_EMPTY;
- }
-
- value = *(m_List.begin());
- return m_List.Remove(m_List.begin());
- }
-
- /**
- * Get the value at the top of the queue (it is user responsibility to check queue is not empty)
- *
- * @return a reference to the object at head of the queue.
- */
- XnValue const& Top() const
- {
- return *(m_List.begin());
- }
-
- /**
- * Get the value at the top of the queue (it is user responsibility to check queue is not empty)
- *
- * @return a reference to the object at head of the queue.
- */
- XnValue& Top()
- {
- return *(m_List.begin());
- }
-
- /**
- * Check if stack is empty
- */
- XnBool IsEmpty() const
- {
- return m_List.IsEmpty();
- }
-
- /**
- * Get current size of the stack
- */
- XnUInt32 Size() const
- {
- return m_List.Size();
- }
-
-private:
- XN_DISABLE_COPY_AND_ASSIGN(XnStack);
-
- /** The internal XnList with which the stack is implemented. */
- XnList m_List;
-};
-
-/**
-* Declares a stack of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue. It is declared using the declspec @a decl.
-*/
-#define XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator) \
- /* Note: we use queue declaration, as this is the same interface. */ \
- XN_DECLARE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator, XnStack)
-
-/**
-* Declares a stack of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue.
-*/
-#define XN_DECLARE_STACK_WITH_TRANSLATOR(Type, ClassName, Translator) \
- XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(, ClassName, Translator)
-
-/**
-* Declares a stack of type @a Type, named @a ClassName, that uses the default translator.
-* It is declared using the declspec @a decl.
-*/
-#define XN_DECLARE_STACK_DECL(decl, Type, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
- XN_DECLARE_STACK_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName))
-
-/**
-* Declares a stack of type @a Type, named @a ClassName, that uses the default translator.
-*/
-#define XN_DECLARE_STACK(Type, ClassName) \
- XN_DECLARE_STACK_DECL(, Type, ClassName)
-
-
-#endif // _XN_STACK_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStackT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStackT.h
deleted file mode 100644
index 2963a5f8..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStackT.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef _XN_STACK_T_H_
-#define _XN_STACK_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnListT.h"
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-template<class T, class TAlloc = XnLinkedNodeDefaultAllocatorT<T> >
-class XnStackT : protected XnListT<T, TAlloc>
-{
-public:
- typedef XnListT<T, TAlloc> Base;
-
- typedef typename Base::ConstIterator ConstIterator;
-
- XnStackT() : Base() {}
-
- XnStackT(const XnStackT& other) : Base()
- {
- *this = other;
- }
-
- XnStackT& operator=(const XnStackT& other)
- {
- Base::operator=(other);
- // no other members
- return *this;
- }
-
- ~XnStackT() {}
-
- XnBool IsEmpty() const { return Base::IsEmpty(); }
-
- XnStatus Push(T const& value) { return Base::AddFirst(value); }
-
- XnStatus Pop(T& value)
- {
- ConstIterator it = Begin();
- if (it == End())
- {
- return XN_STATUS_IS_EMPTY;
- }
- value = *it;
- return Base::Remove(it);
- }
-
- T const& Top() const { return *Begin(); }
- T& Top() { return *Begin(); }
-
- ConstIterator Begin() const { return Base::Begin(); }
- ConstIterator End() const { return Base::End(); }
-};
-
-#endif // _XN_STACK_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatus.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatus.h
deleted file mode 100644
index f279a515..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatus.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_OPEN_NI_STATUS_H__
-#define __XN_OPEN_NI_STATUS_H__
-
-#include "XnPlatform.h"
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-/** Defines the XnStatus type.
- * The high word represents the group to which this error belongs to.
- * The low word is a sequential number inside the group. */
-typedef XnUInt32 XnStatus;
-
-/** Definition of the OK error code. */
-#define XN_STATUS_OK ((XnStatus)0)
-
-//---------------------------------------------------------------------------
-// API
-//---------------------------------------------------------------------------
-
-/**
- * Converts a Xiron Status enumerator into a meaningful error string.
- *
- * @param Status [in] The input Xiron Status to be converted to a string.
- *
- * @return A string representation of the Xiron status.
- */
-XN_C_API const XnChar* XN_C_DECL xnGetStatusString(const XnStatus Status);
-
-/**
-* Gets the name of a Xiron Status as a string.
-*
-* @param Status [in] The input Xiron Status.
-*
-* @return A string representation of the Xiron status name.
-*/
-XN_C_API const XnChar* XN_C_DECL xnGetStatusName(const XnStatus Status);
-
-/**
-* Prints a user message with a description of the error.
-*
-* @param Status [in] The input Xiron Status.
-* @param csUserMessage [in] A user message.
-*
-*/
-XN_C_API void XN_C_DECL xnPrintError(const XnStatus Status, const XnChar* csUserMessage);
-
-//---------------------------------------------------------------------------
-// Enums
-//---------------------------------------------------------------------------
-/** A list of modules for Xiron status. */
-typedef enum XnErrorGroup
-{
- XN_ERROR_GROUP_NI = 1,
- XN_ERROR_GROUP_OS = 2,
- XN_ERROR_GROUP_PRIMESENSE = 3,
-} XnErrorGroup;
-
-/** Constructs a status code from a module and an error code. */
-#define XN_STATUS_MAKE(group, code) ((group << 16) | code)
-
-/** Returns the group of the status. */
-#define XN_STATUS_GROUP(status) XnUInt16(status >> 16)
-
-/** Returns the code of the status. */
-#define XN_STATUS_CODE(status) XnUInt16(status & 0x0000FFFF)
-
-/** Marks the beginning of a message map of a specific module. */
-#define XN_STATUS_MESSAGE_MAP_START_FROM(group, first) \
- enum _##group##first##Errors \
- { \
- group##first##_OK = XN_STATUS_MAKE(group, first),
-
-#define XN_STATUS_MESSAGE_MAP_START(group) \
- XN_STATUS_MESSAGE_MAP_START_FROM(group, 0)
-
-/** Adds an entry to the message map. */
-#define XN_STATUS_MESSAGE(csName, csMessage) \
- csName,
-
-/** Marks the end of a message map. */
-#define XN_STATUS_MESSAGE_MAP_END_FROM(group, first) \
- };
-
-#define XN_STATUS_MESSAGE_MAP_END(group) \
- XN_STATUS_MESSAGE_MAP_END_FROM(group, 0)
-
-#endif // __XN_OPEN_NITE_STATUS_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusCodes.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusCodes.h
deleted file mode 100644
index 77337142..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusCodes.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_STATUS_CODES_H__
-#define __XN_STATUS_CODES_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnStatus.h"
-
-//---------------------------------------------------------------------------
-// Status Messages
-//---------------------------------------------------------------------------
-XN_STATUS_MESSAGE_MAP_START(XN_ERROR_GROUP_NI)
-XN_STATUS_MESSAGE(XN_STATUS_ERROR, "Error!")
-XN_STATUS_MESSAGE(XN_STATUS_NOT_INIT, "Module was not initialized!")
-XN_STATUS_MESSAGE(XN_STATUS_ALREADY_INIT, "Module was already initialized!")
-XN_STATUS_MESSAGE(XN_STATUS_NULL_INPUT_PTR, "Input pointer is null!")
-XN_STATUS_MESSAGE(XN_STATUS_NULL_OUTPUT_PTR, "Output pointer is null!")
-XN_STATUS_MESSAGE(XN_STATUS_INPUT_BUFFER_OVERFLOW, "Input buffer overflow!")
-XN_STATUS_MESSAGE(XN_STATUS_OUTPUT_BUFFER_OVERFLOW, "Output buffer overflow!")
-XN_STATUS_MESSAGE(XN_STATUS_INTERNAL_BUFFER_TOO_SMALL, "Internal buffer is too small!")
-XN_STATUS_MESSAGE(XN_STATUS_INVALID_BUFFER_SIZE, "The buffer is of wrong size!")
-XN_STATUS_MESSAGE(XN_STATUS_NO_MATCH, "No match found")
-XN_STATUS_MESSAGE(XN_STATUS_IS_EMPTY, "No items in data structure")
-XN_STATUS_MESSAGE(XN_STATUS_IS_NOT_EMPTY, "Items in data structure")
-XN_STATUS_MESSAGE(XN_STATUS_ILLEGAL_POSITION, "Can't perform operation at this position in the data structure")
-XN_STATUS_MESSAGE(XN_STATUS_NOT_IMPLEMENTED, "Function was not implemented!")
-XN_STATUS_MESSAGE(XN_STATUS_NO_MODULES_FOUND, "OpenNI library can't find any module!")
-XN_STATUS_MESSAGE(XN_STATUS_INVALID_GENERATOR, "Module generator is not valid!")
-XN_STATUS_MESSAGE(XN_STATUS_UNKNOWN_GENERATOR_TYPE, "Generator type is unknown!")
-XN_STATUS_MESSAGE(XN_STATUS_INVALID_OPERATION, "This operation is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_MISSING_NEEDED_TREE, "A needed production node is missing!")
-XN_STATUS_MESSAGE(XN_STATUS_CORRUPT_FILE, "The file is corrupted!")
-XN_STATUS_MESSAGE(XN_STATUS_BAD_PARAM, "The value is invalid!")
-XN_STATUS_MESSAGE(XN_STATUS_NODE_IS_LOCKED, "The node is locked for changes!")
-XN_STATUS_MESSAGE(XN_STATUS_WAIT_DATA_TIMEOUT, "A timeout has occurred when waiting for new data!")
-XN_STATUS_MESSAGE(XN_STATUS_BAD_TYPE, "The operation requires an object of a different type!")
-XN_STATUS_MESSAGE(XN_STATUS_UNSUPPORTED_VERSION, "Unsupported version")
-XN_STATUS_MESSAGE(XN_STATUS_PROPERTY_NOT_SET, "The property is not set")
-XN_STATUS_MESSAGE(XN_STATUS_BAD_FILE_EXT, "Bad file extension")
-XN_STATUS_MESSAGE(XN_STATUS_NODE_NOT_LOADED, "No node with the requested description is loaded")
-XN_STATUS_MESSAGE(XN_STATUS_NO_NODE_PRESENT, "Can't create any node of the requested type!")
-XN_STATUS_MESSAGE(XN_STATUS_BAD_NODE_NAME, "No node by the specified name exists")
-XN_STATUS_MESSAGE(XN_STATUS_UNSUPPORTED_CODEC, "Failed to find a matching codec")
-XN_STATUS_MESSAGE(XN_STATUS_EOF, "End of file reached")
-XN_STATUS_MESSAGE(XN_STATUS_MULTIPLE_NODES_ERROR, "More than one node is in error state!")
-XN_STATUS_MESSAGE(XN_STATUS_DEVICE_NOT_CONNECTED, "The device is not connected!")
-XN_STATUS_MESSAGE(XN_STATUS_NO_LICENSE, "No license to use this module!")
-XN_STATUS_MESSAGE(XN_STATUS_NO_SUCH_PROPERTY, "There is no such property")
-XN_STATUS_MESSAGE(XN_STATUS_NODE_ALREADY_RECORDED, "This node is already recorded!")
-XN_STATUS_MESSAGE(XN_STATUS_PROTO_BAD_INTERFACE, "Bad protocol interface")
-XN_STATUS_MESSAGE(XN_STATUS_PROTO_BAD_MSG_TYPE, "Bad protocol message type")
-XN_STATUS_MESSAGE(XN_STATUS_PROTO_BAD_CID, "Bad protocol CID")
-XN_STATUS_MESSAGE(XN_STATUS_PROTO_BAD_NODE_ID, "Bad protocol node ID")
-XN_STATUS_MESSAGE(XN_STATUS_PROTO_BAD_MSG_SIZE, "Bad protocol message size")
-XN_STATUS_MESSAGE(XN_STATUS_NO_SUCH_USER, "User could not be found")
-XN_STATUS_MESSAGE(XN_STATUS_USER_IS_NOT_BEING_TRACKED, "User is not being tracked")
-XN_STATUS_MESSAGE(XN_STATUS_JOINT_IS_NOT_ACTIVE, "Joint is not active")
-XN_STATUS_MESSAGE_MAP_END(XN_ERROR_GROUP_NI)
-
-#endif // __XN_STATUS_CODES_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusRegister.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusRegister.h
deleted file mode 100644
index 6c23949a..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStatusRegister.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_STATUS_REGISTER_H__
-#define __XN_STATUS_REGISTER_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnStatus.h"
-
-//---------------------------------------------------------------------------
-// Structs
-//---------------------------------------------------------------------------
-typedef struct XnErrorCodeData
-{
- /** The code of this error. */
- XnUInt32 nCode;
- /** The name of this error. */
- const XnChar* csName;
- /** A user message describing this error. */
- const XnChar* csMessage;
-} XnErrorCodeData;
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-/**
-* This function registers error codes to the message map.
-*
-* @param nGroup [in] The group for which these errors belong to.
-* @param nFirst [in] The first value.
-* @param nCount [in] The number of status messages to register.
-* @param pErrorCodeData [in] An array of status messages.
-*/
-XN_C_API XnStatus XN_C_DECL xnRegisterErrorCodeMessages(XnUInt16 nGroup, XnUInt16 nFirst, XnUInt16 nCount, XnErrorCodeData* pErrorCodeData);
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-#undef XN_STATUS_MESSAGE_MAP_START_FROM
-#undef XN_STATUS_MESSAGE
-#undef XN_STATUS_MESSAGE_MAP_END_FROM
-
-#define _XN_ERROR_GROUP_NAME(group, first) _s_##group##first##_errors
-
-#define XN_STATUS_MESSAGE_MAP_START_FROM(group, first) \
- static XnErrorCodeData _XN_ERROR_GROUP_NAME(group, first)[] = \
- { \
- { first, XN_STRINGIFY(group) "_OK", XN_STRINGIFY(group) " OK" },
-
-/** Adds an entry to the message map. */
-#define XN_STATUS_MESSAGE(csName, csMessage) \
- { 0, XN_STRINGIFY(csName), csMessage },
-
-/** Marks the end of a message map. */
-#define XN_STATUS_MESSAGE_MAP_END_FROM(group, first) \
- }; \
- static XnStatus s_##group##first##_result = xnRegisterErrorCodeMessages(group, first, sizeof(_XN_ERROR_GROUP_NAME(group, first)) / sizeof(XnErrorCodeData), _XN_ERROR_GROUP_NAME(group, first));
-
-#define XN_STATUS_REGISTER
-
-#endif //__XN_STATUS_REGISTER_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHash.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHash.h
deleted file mode 100644
index ec875133..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHash.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_STRINGS_HASH_H
-#define _XN_STRINGS_HASH_H
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnHash.h"
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-class XnStringsKeyManager
-{
-public:
- static XnHashValue Hash(const XnChar* const& key)
- {
- XnUInt32 nCRC = 0;
- xnOSStrCRC32(key, &nCRC);
-
- // convert from UINT32 to XnHashValue
- return nCRC % (1 << (sizeof(XnHashValue)*8));
- }
-
- static XnInt32 Compare(const XnChar* const& key1, const XnChar* const& key2)
- {
- return strcmp(key1, key2);
- }
-};
-
-class XnStringsKeyTranslator
-{
-public:
- static XnValue CreateValueCopy(const XnChar* const& orig)
- {
- // we should copy string, so we can keep the key
- XnUInt32 nLen = xnOSStrLen(orig) + 1; // with null termination
- XnChar* pcKey = (XnChar*)xnOSMalloc(nLen);
- xnOSStrCopy(pcKey, orig, nLen);
- return (pcKey);
- }
-
- static void FreeValue(XnValue& Value)
- {
- XnChar* pcKey = (XnChar*)Value;
- xnOSFree(pcKey);
- }
-
- static XnValue GetAsValue(const XnChar* const& orig)
- {
- return (XnValue)orig;
- }
-
- static const XnChar* const& GetFromValue(const XnValue& Value)
- {
- return (const XnChar* const&)Value;
- }
-
- static const XnChar*& GetFromValue(XnValue& Value)
- {
- return (const XnChar*&)Value;
- }
-};
-
-/**
-* Declares a hash table from strings to @a ValueType that's named @a ClassName and uses @a ValueTranslator
-* to translate values. It is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_STRINGS_HASH_WITH_TRANSLATOR_DECL(decl, ValueType, ClassName, ValueTranslator) \
- XN_DECLARE_HASH_DECL(decl, const XnChar*, ValueType, ClassName, XnStringsKeyTranslator, ValueTranslator, XnStringsKeyManager) \
-
-/**
-* Declares a hash table from strings to @a ValueType that's named @a ClassName and uses @a ValueTranslator
-* to translate values.
-*/
-#define XN_DECLARE_STRINGS_HASH_WITH_TRANSLATOR(ValueType, ClassName, ValueTranslator) \
- XN_DECLARE_STRINGS_HASH_WITH_TRANSLATOR_DECL(, ValueType, ClassName, ValueTranslator)
-
-/**
-* Declares a hash table from strings to @a ValueType that's named @a ClassName and uses default translator
-* to translate values. It is declared using the @a decl declspec.
-*/
-#define XN_DECLARE_STRINGS_HASH_DECL(decl, ValueType, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, ValueType, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
- XN_DECLARE_STRINGS_HASH_WITH_TRANSLATOR_DECL(decl, ValueType, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
-
-/**
-* Declares a hash table from strings to @a ValueType that's named @a ClassName and uses default translator
-* to translate values.
-*/
-#define XN_DECLARE_STRINGS_HASH(ValueType, ClassName) \
- XN_DECLARE_STRINGS_HASH_DECL(, ValueType, ClassName)
-
-XN_DECLARE_STRINGS_HASH(XnValue, XnStringsHash)
-
-
-#endif //_XN_STRINGS_HASH_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h
deleted file mode 100644
index 57602211..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnStringsHashT.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef _XN_STRINGS_HASH_T_H_
-#define _XN_STRINGS_HASH_T_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnHashT.h"
-
-//---------------------------------------------------------------------------
-// Code
-//---------------------------------------------------------------------------
-class XnStringsHashKeyManager
-{
-public:
- static XnHashCode Hash(const XnChar* const& key)
- {
- XnUInt32 nCRC = 0;
- xnOSStrCRC32(key, &nCRC);
-
- // convert from UINT32 to XnHashValue
- return nCRC % (1 << (sizeof(XnHashCode)*8));
- }
-
- static XnInt32 Compare(const XnChar* const& key1, const XnChar* const& key2)
- {
- return strcmp(key1, key2);
- }
-};
-
-template<class TValue>
-class XnStringsNodeAllocator
-{
-public:
- typedef XnKeyValuePair<const XnChar*, TValue> TPair;
- typedef XnLinkedNodeT<TPair> TLinkedNode;
-
- static TLinkedNode* Allocate(TPair const& pair)
- {
- XnChar* pKeyCopy = xnOSStrDup(pair.Key());
- if (pKeyCopy == NULL)
- {
- return NULL;
- }
-
- return XN_NEW(TLinkedNode, TPair(pKeyCopy, pair.Value()));
- }
-
- static void Deallocate(TLinkedNode* pNode)
- {
- XN_ASSERT(pNode != NULL);
- XN_ASSERT(pNode->value.Key() != NULL);
-
- xnOSFree(pNode->value.Key());
- XN_DELETE(pNode);
- }
-};
-
-template<class TValue>
-class XnStringsHashT : public XnHashT<const XnChar*, TValue, XnStringsHashKeyManager, XnStringsNodeAllocator<TValue> >
-{
- typedef XnHashT<const XnChar*, TValue, XnStringsHashKeyManager, XnStringsNodeAllocator<TValue> > Base;
-
-public:
- XnStringsHashT() : Base() {}
-
- XnStringsHashT(const XnStringsHashT& other) : Base()
- {
- *this = other;
- }
-
- XnStringsHashT& operator=(const XnStringsHashT& other)
- {
- Base::operator=(other);
- // no other members
- return *this;
- }
-};
-
-class XnStringsSet : public XnStringsHashT<void*>
-{
- typedef XnStringsHashT<void*> Base;
-
-public:
- XnStatus Set(const XnChar* key)
- {
- return Base::Set(key, NULL);
- }
-};
-
-#endif // _XN_STRINGS_HASH_T_H_ \ No newline at end of file
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h
deleted file mode 100644
index a9ede311..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_THREAD_SAFE_QUEUE_H__
-#define __XN_THREAD_SAFE_QUEUE_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnQueue.h>
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-/**
-* A thread safe queue.
-*/
-class XnThreadSafeQueue : public XnQueue
-{
-public:
- XnThreadSafeQueue() : m_hLock(NULL) {}
-
- ~XnThreadSafeQueue()
- {
- xnOSCloseCriticalSection(&m_hLock);
- }
-
- XnStatus Init()
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = xnOSCreateCriticalSection(&m_hLock);
- XN_IS_STATUS_OK(nRetVal);
-
- return (XN_STATUS_OK);
- }
-
- XnStatus Push(XnValue const& value)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = xnOSEnterCriticalSection(&m_hLock);
- XN_IS_STATUS_OK(nRetVal);
-
- nRetVal = XnQueue::Push(value);
- xnOSLeaveCriticalSection(&m_hLock);
-
- return nRetVal;
- }
-
- XnStatus Pop(XnValue& value)
- {
- XnStatus nRetVal = XN_STATUS_OK;
-
- nRetVal = xnOSEnterCriticalSection(&m_hLock);
- XN_IS_STATUS_OK(nRetVal);
-
- nRetVal = XnQueue::Pop(value);
- xnOSLeaveCriticalSection(&m_hLock);
-
- return nRetVal;
- }
-
- XnUInt32 Size() const
- {
- xnOSEnterCriticalSection(&m_hLock);
- XnUInt32 nSize = XnQueue::Size();
- xnOSLeaveCriticalSection(&m_hLock);
- return (nSize);
- }
-
-private:
- // NOTE: we declare the lock as mutable, as it may change on const methods.
- mutable XN_CRITICAL_SECTION_HANDLE m_hLock;
-};
-
-/**
-* Declares a thread safe queue of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue. It is declared using the declspec @a decl.
-* It inherits from @a base. Note that @a base must be a derivative of XnQueue.
-*/
-#define XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, Translator) \
- class decl ClassName : public XnThreadSafeQueue \
- { \
- public: \
- ~ClassName() \
- { \
- /* We do this using Pop() to make sure memory is freed. */ \
- Type dummy; \
- while (Size() != 0) \
- Pop(dummy); \
- } \
- XnStatus Push(Type const& value) \
- { \
- XnValue val = Translator::CreateValueCopy(value); \
- XnStatus nRetVal = XnThreadSafeQueue::Push(val); \
- if (nRetVal != XN_STATUS_OK) \
- { \
- Translator::FreeValue(val); \
- return (nRetVal); \
- } \
- return XN_STATUS_OK; \
- } \
- XnStatus Pop(Type& value) \
- { \
- XnValue val; \
- XnStatus nRetVal = XnThreadSafeQueue::Pop(val); \
- if (nRetVal != XN_STATUS_OK) return (nRetVal); \
- value = Translator::GetFromValue(val); \
- Translator::FreeValue(val); \
- return XN_STATUS_OK; \
- } \
- };
-
-/**
-* Declares a thread safe queue of type @a Type, named @a ClassName. The class uses @a Translator for translating
-* from @a Type to XnValue.
-* It inherits from @a base. Note that @a base must be a derivative of XnQueue.
-*/
-#define XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR(Type, ClassName, Translator) \
- XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(, Type, ClassName, Translator)
-
-/**
-* Declares a thread safe queue of type @a Type, named @a ClassName, that uses the default translator.
-* It is declared using the declspec @a decl.
-*/
-#define XN_DECLARE_THREAD_SAFE_QUEUE_DECL(decl, Type, ClassName) \
- XN_DECLARE_DEFAULT_VALUE_TRANSLATOR_DECL(decl, Type, XN_DEFAULT_TRANSLATOR_NAME(ClassName)) \
- XN_DECLARE_THREAD_SAFE_QUEUE_WITH_TRANSLATOR_DECL(decl, Type, ClassName, XN_DEFAULT_TRANSLATOR_NAME(ClassName))
-
-/**
-* Declares a thread safe queue of type @a Type, named @a ClassName, that uses the default translator.
-*/
-#define XN_DECLARE_THREAD_SAFE_QUEUE(Type, ClassName) \
- XN_DECLARE_THREAD_SAFE_QUEUE_DECL(, Type, ClassName)
-
-#endif //__XN_THREAD_SAFE_QUEUE_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h
deleted file mode 100644
index 40eb04e6..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h
+++ /dev/null
@@ -1,1188 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_TYPES_H__
-#define __XN_TYPES_H__
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnStatus.h>
-#include <XnOS.h>
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-/** The maximum length of names of objects in OpenNI **/
-#define XN_MAX_NAME_LENGTH 80
-
-/** The maximum length of a creation info string **/
-#define XN_MAX_CREATION_INFO_LENGTH 255
-
-/** The maxumim length of a license key **/
-#define XN_MAX_LICENSE_LENGTH 255
-
-/** The maximum time to wait for node new data with the xnWaitXXXUpdateXXX functions **/
-#define XN_NODE_WAIT_FOR_DATA_TIMEOUT 2000
-
-/** OpenNI vendor ID, used by nodes supplied by OpenNI itself. **/
-#define XN_VENDOR_OPEN_NI "OpenNI"
-
-/** The name of the OpenNI recording format. **/
-#define XN_FORMAT_NAME_ONI "oni"
-
-/** The name of the OpenNI XML script format. **/
-#define XN_SCRIPT_FORMAT_XML "xml"
-
-/** represents playback speed which does not consider file timestamps. **/
-#define XN_PLAYBACK_SPEED_FASTEST 0.0
-
-/** represents a value for automatic control for nodes supporting it, as part of the @ref general_int. **/
-#define XN_AUTO_CONTROL XN_MIN_INT32
-
-//---------------------------------------------------------------------------
-// Forward Declarations
-//---------------------------------------------------------------------------
-struct XnInternalNodeData;
-
-//---------------------------------------------------------------------------
-// Types
-//---------------------------------------------------------------------------
-
-#if XN_PLATFORM != XN_PLATFORM_ARC
-#pragma pack (push, 1)
-#endif
-
-/**
- * The context of an OpenNI library.
- */
-typedef struct XnContext XnContext;
-
-/**
- * A handle to a production node in the OpenNI context. A value of NULL represents an invalid handle.
- */
-typedef struct XnInternalNodeData* XnNodeHandle;
-
-/**
- * A handle to a lock. A value of NULL represents an invalid handle.
- */
-typedef XnUInt32 XnLockHandle;
-
-/**
- * Type of the production node.
- */
-typedef XnInt32 XnProductionNodeType;
-
-/**
- * Predefined types of production nodes.
- */
-typedef enum XnPredefinedProductionNodeType
-{
- /** An invalid node type **/
- XN_NODE_TYPE_INVALID = -1,
-
- /** A device node **/
- XN_NODE_TYPE_DEVICE = 1,
-
- /** A depth generator **/
- XN_NODE_TYPE_DEPTH = 2,
-
- /** An image generator **/
- XN_NODE_TYPE_IMAGE = 3,
-
- /** An audio generator **/
- XN_NODE_TYPE_AUDIO = 4,
-
- /** An IR generator **/
- XN_NODE_TYPE_IR = 5,
-
- /** A user generator **/
- XN_NODE_TYPE_USER = 6,
-
- /** A recorder **/
- XN_NODE_TYPE_RECORDER = 7,
-
- /** A player **/
- XN_NODE_TYPE_PLAYER = 8,
-
- /** A gesture generator **/
- XN_NODE_TYPE_GESTURE = 9,
-
- /** A scene analyzer **/
- XN_NODE_TYPE_SCENE = 10,
-
- /** A hands generator **/
- XN_NODE_TYPE_HANDS = 11,
-
- /** A Codec **/
- XN_NODE_TYPE_CODEC = 12,
-
- /** Abstract types **/
- XN_NODE_TYPE_PRODUCTION_NODE = 13,
- XN_NODE_TYPE_GENERATOR = 14,
- XN_NODE_TYPE_MAP_GENERATOR = 15,
- XN_NODE_TYPE_SCRIPT = 16,
-
- XN_NODE_TYPE_FIRST_EXTENSION,
-
-} XnPredefinedProductionNodeType;
-
-/**
- * A Version.
- */
-typedef struct XnVersion
-{
- XnUInt8 nMajor;
- XnUInt8 nMinor;
- XnUInt16 nMaintenance;
- XnUInt32 nBuild;
-} XnVersion;
-
-/**
- * An exported generator description.
- */
-typedef struct XnProductionNodeDescription
-{
- /** Type of the production node. */
- XnProductionNodeType Type;
- /** Vendor name */
- XnChar strVendor[XN_MAX_NAME_LENGTH];
- /** Generator name. Should be unique under Type and Vendor. */
- XnChar strName[XN_MAX_NAME_LENGTH];
- /** Current version */
- XnVersion Version;
-} XnProductionNodeDescription;
-
-/**
- * Information about a single production node.
- */
-typedef struct XnNodeInfo XnNodeInfo;
-
-/**
- * A single node in a node info list.
- */
-typedef struct XnNodeInfoListNode XnNodeInfoListNode;
-
-/**
- * A (linked) list of production node info objects.
- */
-typedef struct XnNodeInfoList XnNodeInfoList;
-
-/**
- * An iterator in a linked list of production node info objects.
- */
-typedef struct XnNodeInfoListIterator
-{
- XnNodeInfoListNode* pCurrent;
-} XnNodeInfoListIterator;
-
-typedef struct XnNodeQuery XnNodeQuery;
-
-/**
- * A license key.
- */
-typedef struct XnLicense
-{
- /** Vendor name **/
- XnChar strVendor[XN_MAX_NAME_LENGTH];
- /** License key **/
- XnChar strKey[XN_MAX_LICENSE_LENGTH];
-} XnLicense;
-
-/**
- * @ingroup enum_errors
- * An object that holds errors during an enumeration process.
- */
-typedef struct XnEnumerationErrors XnEnumerationErrors;
-
-/**
- * A handle to an instance of a generator.
- **/
-typedef void* XnModuleNodeHandle;
-
-/**
- * Prototype for state change callback function.
- *
- * @param hNode [in] A handle to the node that raised the event.
- * @param pCookie [in] A user-provided cookie that was given when registering to the event.
- **/
-typedef void (XN_CALLBACK_TYPE* XnStateChangedHandler)(XnNodeHandle hNode, void* pCookie);
-
-/**
- * Prototype for error state change callback function.
- *
- * @param errorState [in] The new error state. A value of XN_STATUS_OK means there is no longer an error.
- * @param pCookie [in] A user-provided cookie that was given when registering to the event.
- **/
-typedef void (XN_CALLBACK_TYPE* XnErrorStateChangedHandler)(XnStatus errorState, void* pCookie);
-
-/**
- * Prototype for freeing data callbacks.
- *
- * @param pData [in] The data to be freed.
- **/
-typedef void (XN_CALLBACK_TYPE* XnFreeHandler)(const void* pData);
-
-typedef void (XN_CALLBACK_TYPE* XnContextShuttingDownHandler)(XnContext* pContext, void* pCookie);
-
-/**
-* Prototype for the 'Node Creation' event handler.
-*
-* @param [in] pContext The context raising the event.
-* @param [in] hCreatedNode A handle to the newly created node.
-* @param [in] pCookie A user-provided cookie that was given when registering to the event.
-*
-* @remark The passed handle (@c hCreatedNode) is not referenced. If your handler keeps this handle for later use,
-* it must call @ref xnProductionNodeAddRef().
-*/
-typedef void (XN_CALLBACK_TYPE* XnNodeCreationHandler)(XnContext* pContext, XnNodeHandle hCreatedNode, void* pCookie);
-
-/**
-* Prototype for the 'Node Destruction' event handler.
-*
-* @param [in] pContext The context raising the event.
-* @param [in] strDestroyedNodeName The name of the destroyed node.
-* @param [in] pCookie A user-provided cookie that was given when registering to the event.
-*/
-typedef void (XN_CALLBACK_TYPE* XnNodeDestructionHandler)(XnContext* pContext, const XnChar* strDestroyedNodeName, void* pCookie);
-
-/** Handle to a registered callback function. **/
-typedef void* XnCallbackHandle;
-
-typedef struct XnModuleExportedProductionNodeInterface XnModuleExportedProductionNodeInterface; // Forward Declaration
-
-//---------------------------------------------------------------------------
-// 3D Vision Types
-//---------------------------------------------------------------------------
-/** Defines the depth values type (16-bit values). **/
-typedef XnUInt16 XnDepthPixel;
-
-/** Defines the value of a no-sample depth pixel. */
-#define XN_DEPTH_NO_SAMPLE_VALUE ((XnDepthPixel)0)
-
-/** Defines the image RGB24 pixel type. **/
-typedef struct XnRGB24Pixel
-{
- XnUInt8 nRed;
- XnUInt8 nGreen;
- XnUInt8 nBlue;
-} XnRGB24Pixel;
-
-/** Defines the image YUV422 double-pixel type. **/
-typedef struct XnYUV422DoublePixel
-{
- XnUInt8 nU;
- XnUInt8 nY1;
- XnUInt8 nV;
- XnUInt8 nY2;
-} XnYUV422DoublePixel;
-
-/** Defines the image Grayscale8 pixel type. **/
-typedef XnUInt8 XnGrayscale8Pixel;
-
-/** Defines the image Grayscale16 pixel type. **/
-typedef XnUInt16 XnGrayscale16Pixel;
-
-/** Defines the IR values type (16-bit grayscale). **/
-typedef XnGrayscale16Pixel XnIRPixel;
-
-/** Defines the label type */
-typedef XnUInt16 XnLabel;
-
-//---------------------------------------------------------------------------
-// Generators Capabilities
-//---------------------------------------------------------------------------
-#define XN_CAPABILITY_EXTENDED_SERIALIZATION "ExtendedSerialization"
-#define XN_CAPABILITY_MIRROR "Mirror"
-#define XN_CAPABILITY_ALTERNATIVE_VIEW_POINT "AlternativeViewPoint"
-#define XN_CAPABILITY_CROPPING "Cropping"
-#define XN_CAPABILITY_USER_POSITION "UserPosition"
-#define XN_CAPABILITY_SKELETON "User::Skeleton"
-#define XN_CAPABILITY_POSE_DETECTION "User::PoseDetection"
-#define XN_CAPABILITY_LOCK_AWARE "LockAware"
-#define XN_CAPABILITY_ERROR_STATE "ErrorState"
-#define XN_CAPABILITY_FRAME_SYNC "FrameSync"
-#define XN_CAPABILITY_DEVICE_IDENTIFICATION "DeviceIdentification"
-#define XN_CAPABILITY_BRIGHTNESS "Brightness"
-#define XN_CAPABILITY_CONTRAST "Contrast"
-#define XN_CAPABILITY_HUE "Hue"
-#define XN_CAPABILITY_SATURATION "Saturation"
-#define XN_CAPABILITY_SHARPNESS "Sharpness"
-#define XN_CAPABILITY_GAMMA "Gamma"
-#define XN_CAPABILITY_COLOR_TEMPERATURE "ColorTemperature"
-#define XN_CAPABILITY_BACKLIGHT_COMPENSATION "BacklightCompensation"
-#define XN_CAPABILITY_GAIN "Gain"
-#define XN_CAPABILITY_PAN "Pan"
-#define XN_CAPABILITY_TILT "Tilt"
-#define XN_CAPABILITY_ROLL "Roll"
-#define XN_CAPABILITY_ZOOM "Zoom"
-#define XN_CAPABILITY_EXPOSURE "Exposure"
-#define XN_CAPABILITY_IRIS "Iris"
-#define XN_CAPABILITY_FOCUS "Focus"
-#define XN_CAPABILITY_LOW_LIGHT_COMPENSATION "LowLightCompensation"
-#define XN_CAPABILITY_ANTI_FLICKER "AntiFlicker"
-#define XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE "Hands::HandTouchingFOVEdge"
-
-// Backwards compatibility - typo was fixed
-#define XN_CAPABILITY_ANTI_FILCKER XN_CAPABILITY_ANTI_FLICKER
-
-// deprecated pragma is only supported in Visual Studio
-#if (XN_PLATFORM == XN_PLATFORM_WIN32)
-#pragma deprecated("XN_CAPABILITY_ANTI_FILCKER")
-#endif
-
-//---------------------------------------------------------------------------
-// Generators API Structs
-//---------------------------------------------------------------------------
-
-#define XN_QQVGA_X_RES 160
-#define XN_QQVGA_Y_RES 120
-
-#define XN_CGA_X_RES 320
-#define XN_CGA_Y_RES 200
-
-#define XN_QVGA_X_RES 320
-#define XN_QVGA_Y_RES 240
-
-#define XN_VGA_X_RES 640
-#define XN_VGA_Y_RES 480
-
-#define XN_SVGA_X_RES 800
-#define XN_SVGA_Y_RES 600
-
-#define XN_XGA_X_RES 1024
-#define XN_XGA_Y_RES 768
-
-#define XN_720P_X_RES 1280
-#define XN_720P_Y_RES 720
-
-#define XN_SXGA_X_RES 1280
-#define XN_SXGA_Y_RES 1024
-
-#define XN_UXGA_X_RES 1600
-#define XN_UXGA_Y_RES 1200
-
-#define XN_1080P_X_RES 1920
-#define XN_1080P_Y_RES 1080
-
-#define XN_QCIF_X_RES 176
-#define XN_QCIF_Y_RES 144
-
-#define XN_240P_X_RES 423
-#define XN_240P_Y_RES 240
-
-#define XN_CIF_X_RES 352
-#define XN_CIF_Y_RES 288
-
-#define XN_WVGA_X_RES 640
-#define XN_WVGA_Y_RES 360
-
-#define XN_480P_X_RES 864
-#define XN_480P_Y_RES 480
-
-#define XN_576P_X_RES 1024
-#define XN_576P_Y_RES 576
-
-#define XN_DV_X_RES 960
-#define XN_DV_Y_RES 720
-
-typedef enum XnResolution
-{
- XN_RES_CUSTOM = 0,
- XN_RES_QQVGA = 1,
- XN_RES_CGA = 2,
- XN_RES_QVGA = 3,
- XN_RES_VGA = 4,
- XN_RES_SVGA = 5,
- XN_RES_XGA = 6,
- XN_RES_720P = 7,
- XN_RES_SXGA = 8,
- XN_RES_UXGA = 9,
- XN_RES_1080P = 10,
- XN_RES_QCIF = 11,
- XN_RES_240P = 12,
- XN_RES_CIF = 13,
- XN_RES_WVGA = 14,
- XN_RES_480P = 15,
- XN_RES_576P = 16,
- XN_RES_DV = 17,
-} XnResolution;
-
-/**
- * The output mode of a map generator.
- */
-typedef struct XnMapOutputMode
-{
- /** Number of elements in the X-axis. */
- XnUInt32 nXRes;
- /** Number of elements in the Y-axis. */
- XnUInt32 nYRes;
- /** Number of frames per second. */
- XnUInt32 nFPS;
-} XnMapOutputMode;
-
-typedef enum XnSampleRate
-{
- XN_SAMPLE_RATE_8K = 8000,
- XN_SAMPLE_RATE_11K = 11025,
- XN_SAMPLE_RATE_12K = 12000,
- XN_SAMPLE_RATE_16K = 16000,
- XN_SAMPLE_RATE_22K = 22050,
- XN_SAMPLE_RATE_24K = 24000,
- XN_SAMPLE_RATE_32K = 32000,
- XN_SAMPLE_RATE_44K = 44100,
- XN_SAMPLE_RATE_48K = 48000,
-} XnSampleRate;
-
-typedef struct XnWaveOutputMode
-{
- XnUInt32 nSampleRate;
- XnUInt16 nBitsPerSample;
- XnUInt8 nChannels;
-} XnWaveOutputMode;
-
-/**
- * Representation of a vector in 3D space
- */
-typedef struct XnVector3D
-{
- XnFloat X;
- XnFloat Y;
- XnFloat Z;
-} XnVector3D;
-
-typedef XnVector3D XnPoint3D;
-
-/**
- * Representation of an axis-aligned box in 3D space
- */
-typedef struct XnBoundingBox3D
-{
- XnPoint3D LeftBottomNear;
- XnPoint3D RightTopFar;
-} XnBoundingBox3D;
-
-/**
- * Cropping configuration
- */
-typedef struct XnCropping
-{
- /** TRUE if cropping is turned on, FALSE otherwise. */
- XnBool bEnabled;
- /** Offset in the X-axis, in pixels. */
- XnUInt16 nXOffset;
- /** Offset in the Y-axis, in pixels. */
- XnUInt16 nYOffset;
- /** Number of pixels in the X-axis. */
- XnUInt16 nXSize;
- /** Number of pixels in the Y-axis. */
- XnUInt16 nYSize;
-} XnCropping;
-
-/**
- * Field-Of-View
- */
-typedef struct XnFieldOfView
-{
- /** Horizontal Field Of View, in radians. */
- XnDouble fHFOV;
- /** Vertical Field Of View, in radians. */
- XnDouble fVFOV;
-} XnFieldOfView;
-
-typedef enum XnPixelFormat
-{
- XN_PIXEL_FORMAT_RGB24 = 1,
- XN_PIXEL_FORMAT_YUV422 = 2,
- XN_PIXEL_FORMAT_GRAYSCALE_8_BIT = 3,
- XN_PIXEL_FORMAT_GRAYSCALE_16_BIT = 4,
- XN_PIXEL_FORMAT_MJPEG = 5,
-} XnPixelFormat;
-
-typedef struct XnSupportedPixelFormats
-{
- XnBool m_bRGB24 : 1;
- XnBool m_bYUV422 : 1;
- XnBool m_bGrayscale8Bit : 1;
- XnBool m_bGrayscale16Bit : 1;
- XnBool m_bMJPEG : 1;
- XnUInt m_nPadding : 3;
- XnUInt m_nReserved : 24;
-} XnSupportedPixelFormats;
-
-typedef enum XnPlayerSeekOrigin
-{
- XN_PLAYER_SEEK_SET = 0,
- XN_PLAYER_SEEK_CUR = 1,
- XN_PLAYER_SEEK_END = 2,
-} XnPlayerSeekOrigin;
-
-typedef enum XnPowerLineFrequency
-{
- XN_POWER_LINE_FREQUENCY_OFF = 0,
- XN_POWER_LINE_FREQUENCY_50_HZ = 50,
- XN_POWER_LINE_FREQUENCY_60_HZ = 60,
-} XnPowerLineFrequency;
-
-// User
-typedef XnUInt32 XnUserID;
-typedef XnFloat XnConfidence;
-
-/** A 3x3 matrix of floating point values **/
-typedef struct XnMatrix3X3
-{
- /** The elements of the matrix. **/
- XnFloat elements[9];
-} XnMatrix3X3;
-
-/**
-* A representation of a 3D plane.
-* A plane is described by a point on it and a normal
-*/
-typedef struct XnPlane3D
-{
- /** The normal of the plane. **/
- XnVector3D vNormal;
-
- /** A point on the plane. **/
- XnPoint3D ptPoint;
-} XnPlane3D;
-
-/**
-* Position of a specific joint. A joint position is described by its actual position
-* and the confidence we have in that position.
-*/
-typedef struct XnSkeletonJointPosition
-{
- /** The actual position in real world coordinations */
- XnVector3D position;
-
- /** The confidence in the position */
- XnConfidence fConfidence;
-} XnSkeletonJointPosition;
-
-/**
- * Orientation of a specific joint. A joint orientation is described by its actual rotation
- * and the confidence we have in that rotation
- * The first column is the X orientation, where the value increases from left to right.
- * The second column is the Y orientation, where the value increases from bottom to top.
- * The third column is the Z orientation, where the value increases from near to far.
- */
-typedef struct XnSkeletonJointOrientation
-{
- /** The actual orientation */
- XnMatrix3X3 orientation;
- /** The confidence in the orientation */
- XnConfidence fConfidence;
-} XnSkeletonJointOrientation;
-
-/**
-* Transformation of a specific joint is its full description: both its position and orientation.
-*/
-typedef struct XnSkeletonJointTransformation
-{
- /** The position of the joint */
- XnSkeletonJointPosition position;
- /** The orientation of the joint */
- XnSkeletonJointOrientation orientation;
-} XnSkeletonJointTransformation;
-
-/**
-* A full list of available joints.
-*/
-typedef enum XnSkeletonJoint
-{
- XN_SKEL_HEAD = 1,
- XN_SKEL_NECK = 2,
- XN_SKEL_TORSO = 3,
- XN_SKEL_WAIST = 4,
-
- XN_SKEL_LEFT_COLLAR = 5,
- XN_SKEL_LEFT_SHOULDER = 6,
- XN_SKEL_LEFT_ELBOW = 7,
- XN_SKEL_LEFT_WRIST = 8,
- XN_SKEL_LEFT_HAND = 9,
- XN_SKEL_LEFT_FINGERTIP =10,
-
- XN_SKEL_RIGHT_COLLAR =11,
- XN_SKEL_RIGHT_SHOULDER =12,
- XN_SKEL_RIGHT_ELBOW =13,
- XN_SKEL_RIGHT_WRIST =14,
- XN_SKEL_RIGHT_HAND =15,
- XN_SKEL_RIGHT_FINGERTIP =16,
-
- XN_SKEL_LEFT_HIP =17,
- XN_SKEL_LEFT_KNEE =18,
- XN_SKEL_LEFT_ANKLE =19,
- XN_SKEL_LEFT_FOOT =20,
-
- XN_SKEL_RIGHT_HIP =21,
- XN_SKEL_RIGHT_KNEE =22,
- XN_SKEL_RIGHT_ANKLE =23,
- XN_SKEL_RIGHT_FOOT =24
-} XnSkeletonJoint;
-
-/** A configuration of joints to be used by skeleton (see @ref xnSetSkeletonProfile) **/
-typedef enum XnSkeletonProfile
-{
- /** No joints at all **/
- XN_SKEL_PROFILE_NONE = 1,
-
- /** All joints **/
- XN_SKEL_PROFILE_ALL = 2,
-
- /** All the joints in the upper body (torso and upwards) **/
- XN_SKEL_PROFILE_UPPER = 3,
-
- /** All the joints in the lower body (torso and downwards) **/
- XN_SKEL_PROFILE_LOWER = 4,
-
- /** The head and the hands **/
- XN_SKEL_PROFILE_HEAD_HANDS = 5,
-} XnSkeletonProfile;
-
-/** Possible statuses for pose detection */
-typedef enum XnPoseDetectionStatus
-{
- XN_POSE_DETECTION_STATUS_OK = 0,
- XN_POSE_DETECTION_STATUS_NO_USER = 1,
- XN_POSE_DETECTION_STATUS_TOP_FOV = 2,
- XN_POSE_DETECTION_STATUS_SIDE_FOV = 3,
- XN_POSE_DETECTION_STATUS_ERROR = 4,
- XN_POSE_DETECTION_STATUS_NO_TRACKING = 5
-} XnPoseDetectionStatus;
-
-
-/** Possible pose detection states */
-typedef enum XnPoseDetectionState
-{
- XN_POSE_DETECTION_STATE_IN_POSE =0,
- XN_POSE_DETECTION_STATE_OUT_OF_POSE =1,
- XN_POSE_DETECTION_STATE_UNDEFINED =2
-} XnPoseDetectionState;
-/** Possible statuses for calibration */
-typedef enum XnCalibrationStatus
-{
- XN_CALIBRATION_STATUS_OK = 0,
- XN_CALIBRATION_STATUS_NO_USER = 1,
- XN_CALIBRATION_STATUS_ARM = 2,
- XN_CALIBRATION_STATUS_LEG = 3,
- XN_CALIBRATION_STATUS_HEAD = 4,
- XN_CALIBRATION_STATUS_TORSO = 5,
- XN_CALIBRATION_STATUS_TOP_FOV = 6,
- XN_CALIBRATION_STATUS_SIDE_FOV = 7,
- XN_CALIBRATION_STATUS_POSE = 8,
- XN_CALIBRATION_STATUS_MANUAL_ABORT = 9,
- XN_CALIBRATION_STATUS_MANUAL_RESET = 10,
- XN_CALIBRATION_STATUS_TIMEOUT_FAIL = 11
-} XnCalibrationStatus;
-
-typedef enum XnDirection
-{
- XN_DIRECTION_ILLEGAL = 0,
- XN_DIRECTION_LEFT = 1,
- XN_DIRECTION_RIGHT = 2,
- XN_DIRECTION_UP = 3,
- XN_DIRECTION_DOWN = 4,
- XN_DIRECTION_FORWARD = 5,
- XN_DIRECTION_BACKWARD = 6,
-} XnDirection;
-
-// User
-/**
- * Callback for a general user-related event. It is used for either creation or destruction of users.
- *
- * @param hNode [in] A handle to the user generator that raised this event.
- * @param user [in] The id of the user that is relevant to this event.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnUserHandler)(XnNodeHandle hNode, XnUserID user, void* pCookie);
-
-// Hands
-/**
- * Callback for the creation of a new hand.
- *
- * @param hNode [in] A handle to the hands generator that raised this event.
- * @param user [in] The id of the new hand.
- * @param pPosition [in] The position in which the hand was created.
- * @param fTime [in] Timestamp, in seconds.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnHandCreate)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-
-/**
- * Callback for a new position of an already-existing hand.
- *
- * @param hNode [in] A handle to the hands generator that raised this event.
- * @param user [in] The id of the hand that moved.
- * @param pPosition [in] The new position of the relevant hand.
- * @param fTime [in] Timestamp, in seconds.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnHandUpdate)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
-
-/**
- * Callback for the disappearance of a hand.
- *
- * @param hNode [in] A handle to the hands generator that raised this event.
- * @param user [in] The id of the hand that disappeared.
- * @param fTime [in] Timestamp, in seconds.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnHandDestroy)(XnNodeHandle hNode, XnUserID user, XnFloat fTime, void* pCookie);
-
-/**
- * Callback for when a hand reaches the edge of the FOV
- *
- * @param hNode [in] A handle to the hand generator that raised this event.
- * @param user [in] The id of the hand that reached FOV
- * @param pPosition [in] The current position of the hand
- * @param fTime [in] Timestamp, in seconds
- * @param eDir [in] The direction of the edge that is being reached
- * @param pCookie [in] A user-provided cookie that was given when reigstering to this event
- */
-typedef void (XN_CALLBACK_TYPE* XnHandTouchingFOVEdge)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, XnDirection eDir, void* pCookie);
-// Gesture Module
-/**
- * Callback for the recognition of a gesture
- *
- * @param hNode [in] A handle to the gesture generator that raised this event.
- * @param strGesture [in] The gesture that was recognized.
- * @param pIDPosition [in] The position in which the gesture was identified.
- * @param pEndPosition [in] The position of the hand that performed the gesture at the end of the gesture.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnGestureRecognized)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pIDPosition, const XnPoint3D* pEndPosition, void* pCookie);
-/**
- * Callback for indication that a certain gesture is in progress
- *
- * @param hNode [in] A handle to the gesture generator that raised this event.
- * @param strGesture [in] The gesture that is on its way to being recognized.
- * @param pPosition [in] The current position of the hand that is performing the gesture.
- * @param fProgress [in] The percentage of the gesture that was already performed.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnGestureProgress)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, XnFloat fProgress, void* pCookie);
-
-typedef void (XN_CALLBACK_TYPE* XnGestureIntermediateStageCompleted)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnGestureReadyForNextIntermediateStage)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
-
-// Skeleton
-/**
- * Callback for indication that a specific user's skeleton is now starting the calibration process
- *
- * @param hNode [in] A handle to the skeleton capability that raised this event.
- * @param user [in] The id of the user that's being calibrated.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnCalibrationStart)(XnNodeHandle hNode, XnUserID user, void* pCookie);
-/**
- * Callback for indication that a specific user's skeleton has now completed the calibration process
- *
- * @param hNode [in] A handle to the skeleton capability that raised this event.
- * @param user [in] The id of the user for which calibration was attempted.
- * @param bSuccess [in] An indication of whether or not the calibration attempt succeeded.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnCalibrationEnd)(XnNodeHandle hNode, XnUserID user, XnBool bSuccess, void* pCookie);
-
-typedef void (XN_CALLBACK_TYPE* XnCalibrationInProgress)(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-typedef void (XN_CALLBACK_TYPE* XnCalibrationComplete)(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
-
-// Pose Detection
-/**
- * Callback for indication that a specific user has entered a pose, or left it.
- *
- * @param hNode [in] A handle to the pose capability that raised this event.
- * @param strPose [in] The pose that is relevant to the callback.
- * @param user [in] The id of the user that entered the pose or left it.
- * @param pCookie [in] A user-provided cookie that was given when registering to this event.
- */
-typedef void (XN_CALLBACK_TYPE* XnPoseDetectionCallback)(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie);
-
-typedef void (XN_CALLBACK_TYPE* XnPoseDetectionInProgress)(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, XnPoseDetectionStatus poseDetectionError, void* pCookie);
-
-//---------------------------------------------------------------------------
-// Recorder Types
-//---------------------------------------------------------------------------
-
-/**
- * @ingroup recorder
- */
-
-/** Defines the type of medium used for recording. See @ref xnAddNodeToRecording. */
-typedef enum XnRecordMedium
-{
- /** Recording medium is a file **/
- XN_RECORD_MEDIUM_FILE = 0,
-} XnRecordMedium;
-
-/** An ID of a codec. See @ref xnCreateCodec. **/
-typedef XnUInt32 XnCodecID;
-
-/** Define a Codec ID by 4 characters, e.g. XN_CODEC_ID('J','P','E','G') **/
-#define XN_CODEC_ID(c1, c2, c3, c4) (XnCodecID)((c4 << 24) | (c3 << 16) | (c2 << 8) | c1)
-
-/**
- * An interface used for communication between OpenNI and a recorder module. This interface is used by a recorder
- * module to send recorded data to OpenNI, which then knows how to store them according to one of the values of
- * @ref XnRecordMedium.
- **/
-typedef struct XnRecorderOutputStreamInterface
-{
- /**
- * Opens the stream for writing.
- *
- * @param pCookie [in] A token that was received with this interface.
- */
- XnStatus (XN_CALLBACK_TYPE* Open)(void* pCookie);
-
- /**
- * Writes data to the stream
- *
- * @param pCookie [in] A token that was received with this interface.
- * @param strNodeName [in] Optional. Specifies the node that initiated the write action.
- * @param pData [in] A pointer to the data to write.
- * @param nSize [in] Number of bytes to be written.
- */
- XnStatus (XN_CALLBACK_TYPE* Write)(void* pCookie, const XnChar* strNodeName,
- const void* pData, XnUInt32 nSize);
-
- /**
- * Sets the stream's pointer to the specified position.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param seekType [in] Specifies how to seek - according to current position, end or beginning.
- * @param nOffset [in] Specifies how many bytes to move
- */
- XnStatus (XN_CALLBACK_TYPE* Seek)(void* pCookie, XnOSSeekType seekType, const XnInt32 nOffset);
-
- /**
- * Tells the current position in the stream.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param pPos [out] The position of the stream.
- *
- * @returns (XnUInt32)-1 on error.
- */
- XnUInt32 (XN_CALLBACK_TYPE* Tell)(void* pCookie);
-
- /**
- * Closes the stream.
- *
- * @param pCookie [in] A token that was received with this interface.
- */
- void (XN_CALLBACK_TYPE* Close)(void* pCookie);
-
- /**
- * Sets the stream's pointer to the specified position. (64bit version, for large files)
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param seekType [in] Specifies how to seek - according to current position, end or beginning.
- * @param nOffset [in] Specifies how many bytes to move
- */
- XnStatus (XN_CALLBACK_TYPE* Seek64)(void* pCookie, XnOSSeekType seekType, const XnInt64 nOffset);
-
- /**
- * Tells the current position in the stream. (64bit version, for large files)
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param pPos [out] The position of the stream.
- *
- * @returns (XnUInt64)-1 on error.
- */
- XnUInt64 (XN_CALLBACK_TYPE* Tell64)(void* pCookie);
-
-} XnRecorderOutputStreamInterface;
-
-/**
- * An interface used for communication between OpenNI and a player module. This interface is used by a player
- * module to receive recorded data from OpenNI, which knows where to get them according to one of the values of
- * @ref XnRecordMedium.
- **/
-typedef struct XnPlayerInputStreamInterface
-{
- /**
- * Opens the stream for reading.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- */
- XnStatus (XN_CALLBACK_TYPE* Open)(void* pCookie);
-
- /**
- * Reads data from the stream. May read less data than asked, if the stream is near its end. This is not
- * considered an error.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param pBuffer [out] A pointer to the buffer to read into.
- * @param nSize [in] Number of bytes to read.
- * @param pnBytesRead [out] Optional. Number of bytes actually read.
- */
- XnStatus (XN_CALLBACK_TYPE* Read)(void* pCookie, void* pBuffer, XnUInt32 nSize, XnUInt32* pnBytesRead);
-
- /**
- * Sets the stream's pointer to the specified position.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param seekType [in] Specifies how to seek - according to current position, end or beginning.
- * @param nOffset [in] Specifies how many bytes to move
- */
- XnStatus (XN_CALLBACK_TYPE* Seek)(void* pCookie, XnOSSeekType seekType, const XnInt32 nOffset);
-
- /**
- * Tells the current stream position
- *
- * @param pCookie [in] A cookie that was received with this interface.
- *
- * @returns (XnUInt32)-1 if there was an error in the stream.
- */
- XnUInt32 (XN_CALLBACK_TYPE* Tell)(void* pCookie);
-
- /**
- * Closes the stream.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- */
- void (XN_CALLBACK_TYPE* Close)(void* pCookie);
-
- /**
- * Sets the stream's pointer to the specified position. (64bit version, for large files)
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param seekType [in] Specifies how to seek - according to current position, end or beginning.
- * @param nOffset [in] Specifies how many bytes to move
- */
- XnStatus (XN_CALLBACK_TYPE* Seek64)(void* pCookie, XnOSSeekType seekType, const XnInt64 nOffset);
-
- /**
- * Tells the current position in the stream. (64bit version, for large files)
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param pPos [out] The position of the stream.
- *
- * @returns (XnUInt64)-1 on error.
- */
- XnUInt64 (XN_CALLBACK_TYPE* Tell64)(void* pCookie);
-
-} XnPlayerInputStreamInterface;
-
-/**
- * An interface that is used for notifications about node events.
- **/
-typedef struct XnNodeNotifications
-{
- /**
- * Notifies the object that a production node was added
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The instance name of the added node.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeAdded)
- (void* pCookie, const XnChar* strNodeName, XnProductionNodeType type,
- XnCodecID compression);
-
- /**
- * Notifies the object that a production node has been removed
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The instance name of the removed node.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeRemoved)
- (void* pCookie, const XnChar* strNodeName);
-
- /**
- * Notifies the object that an integer type property has changed.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose property changed.
- * @param strPropName [in] The name of the property that changed.
- * @param nValue [in] The new value of the property.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeIntPropChanged)
- (void* pCookie, const XnChar* strNodeName,
- const XnChar* strPropName, XnUInt64 nValue);
-
- /**
- * Notifies the object that a real type property has changed.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose property changed.
- * @param strPropName [in] The name of the property that changed.
- * @param dValue [in] The new value of the property.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeRealPropChanged)
- (void* pCookie, const XnChar* strNodeName,
- const XnChar* strPropName, XnDouble dValue);
-
- /**
- * Notifies the object that a string type property has changed.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose property changed.
- * @param strPropName [in] The name of the property that changed.
- * @param strValue [in] The new value of the property.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeStringPropChanged)
- (void* pCookie, const XnChar* strNodeName,
- const XnChar* strPropName, const XnChar* strValue);
-
- /**
- * Notifies the object that a general type property has changed.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose property changed.
- * @param strPropName [in] The name of the property that changed.
- * @param nBufferSize [in] The size of the buffer that holds the new value.
- * @param pBuffer [in] The buffer that holds the new value of the property.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeGeneralPropChanged)
- (void* pCookie, const XnChar* strNodeName,
- const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer);
-
- /**
- * Notifies the object that a node has finished sending all the initial 'property changed' notifications.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose state is ready.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeStateReady)
- (void* pCookie, const XnChar* strNodeName);
-
- /**
- * Notifies the object that it has received new data.
- *
- * @param pCookie [in] A cookie that was received with this interface.
- * @param strNodeName [in] The name of the node whose property changed.
- * @param strName [in] The name of the property that changed.
- * @param nBufferSize [in] The size of the buffer that holds the new value.
- * @param pBuffer [in] The buffer that holds the new value of the property.
- */
- XnStatus (XN_CALLBACK_TYPE* OnNodeNewData)
- (void* pCookie, const XnChar* strNodeName,
- XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize);
-
-} XnNodeNotifications;
-
-/** A pair of 32-bit unsigned values. **/
-typedef struct XnUInt32XYPair
-{
- XnUInt32 X;
- XnUInt32 Y;
-} XnUInt32XYPair;
-
-/** Holds information about a general frame of data. **/
-typedef struct XnOutputMetaData
-{
- /** Represents the time in which the data was received. **/
- XnUInt64 nTimestamp;
-
- /** The frame ID, or frame number, of this frame. **/
- XnUInt32 nFrameID;
-
- /** The size of the data. **/
- XnUInt32 nDataSize;
-
- /** Specifies whether the generator updated this data on the last call to one of the XnWaitXXXUpdateXXX() functions. **/
- XnBool bIsNew;
-
-} XnOutputMetaData;
-
-/** Holds information about a frame of data that has a map format. **/
-typedef struct XnMapMetaData
-{
- /** A pointer to general information about this frame. **/
- XnOutputMetaData* pOutput;
-
- /** The resolution of this frame, including any cropping that was set. **/
- XnUInt32XYPair Res;
-
- /** The offset of the cropped region within this frame. Set to (0,0) if no cropping was done. **/
- XnUInt32XYPair Offset;
-
- /** The full resolution of this frame, disregarding cropping. **/
- XnUInt32XYPair FullRes;
-
- /** The pixel format of this frame. **/
- XnPixelFormat PixelFormat;
-
- /** The number of frames per second that was set when this frame was received. **/
- XnUInt32 nFPS;
-} XnMapMetaData;
-
-/** Holds information about a frame of depth. **/
-typedef struct XnDepthMetaData
-{
- /** A pointer to the map meta data of this frame. **/
- XnMapMetaData* pMap;
-
- /** A pointer to the depth data of this frame. **/
- const XnDepthPixel* pData;
-
- /** The value of the Z resolution of this frame - the maximum depth a pixel can have. **/
- XnDepthPixel nZRes;
-} XnDepthMetaData;
-
-/** Holds information about an image frame. **/
-typedef struct XnImageMetaData
-{
- /** A pointer to the map meta data of this frame **/
- XnMapMetaData* pMap;
-
- /** A pointer to the image data of this frame **/
- const XnUInt8* pData;
-} XnImageMetaData;
-
-/** Holds information about an IR frame. **/
-typedef struct XnIRMetaData
-{
- /** A pointer to the map meta data of this frame **/
- XnMapMetaData* pMap;
-
- /** A pointer to the IR data of this frame **/
- const XnIRPixel* pData;
-} XnIRMetaData;
-
-typedef struct XnAudioMetaData
-{
- /** A pointer to general information about this chunk of audio. **/
- XnOutputMetaData* pOutput;
-
- /** The wave output mode of this cunk of audio. **/
- XnWaveOutputMode Wave;
-
- /** A pointer to audio data of this cunk. **/
- const XnUInt8* pData;
-} XnAudioMetaData;
-
-typedef struct XnSceneMetaData
-{
- /** A pointer to the map meta data of this frame. **/
- XnMapMetaData* pMap;
-
- /** A pointer to the scene data of this frame. **/
- const XnLabel* pData;
-} XnSceneMetaData;
-
-#if XN_PLATFORM != XN_PLATFORM_ARC
-#pragma pack (pop)
-#endif
-
-#endif //__XN_TYPES_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSB.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSB.h
deleted file mode 100644
index f7d09805..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSB.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_USB_H_
-#define _XN_USB_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnOS.h"
-
-//---------------------------------------------------------------------------
-// Structures & Enums
-//---------------------------------------------------------------------------
-typedef enum {
- XN_USB_DEVICE_LOW_SPEED = 0,
- XN_USB_DEVICE_FULL_SPEED,
- XN_USB_DEVICE_HIGH_SPEED,
-} XnUSBDeviceSpeed;
-
-typedef enum {
- XN_USB_EP_BULK = 0,
- XN_USB_EP_ISOCHRONOUS,
- XN_USB_EP_INTERRUPT,
-} XnUSBEndPointType;
-
-typedef enum {
- XN_USB_DIRECTION_IN = 0,
- XN_USB_DIRECTION_OUT,
-} XnUSBDirectionType;
-
-typedef enum {
- XN_USB_CONTROL_TYPE_STANDARD = 0,
- XN_USB_CONTROL_TYPE_CLASS,
- XN_USB_CONTROL_TYPE_VENDOR,
-} XnUSBControlType;
-
-typedef enum {
- XN_USB_EVENT_DEVICE_CONNECT = 0,
- XN_USB_EVENT_DEVICE_DISCONNECT,
-} XnUSBEventType;
-
-struct XnUSBDeviceHandle;
-struct XnUSBEndPointHandle;
-
-typedef XnChar XnUSBConnectionString[XN_FILE_MAX_PATH];
-
-typedef XnUSBDeviceHandle* XN_USB_DEV_HANDLE;
-typedef XnUSBEndPointHandle* XN_USB_EP_HANDLE;
-
-typedef XnBool (XN_CALLBACK_TYPE* XnUSBReadCallbackFunctionPtr)(XnUChar* pBuffer, XnUInt32 nBufferSize, void* pCallbackData);
-typedef XnBool (XN_CALLBACK_TYPE* XnUSBEventCallbackFunctionPtr)(XnUSBEventType USBEventType, XnChar* cpDevPath, void* pCallbackData);
-
-typedef struct XnUSBEventArgs
-{
- const XnChar* strDevicePath;
- XnUSBEventType eventType;
-} XnUSBEventArgs;
-
-typedef void (XN_CALLBACK_TYPE* XnUSBDeviceCallbackFunctionPtr)(XnUSBEventArgs* pArgs, void* pCookie);
-
-//---------------------------------------------------------------------------
-// Exported Function Declaration
-//---------------------------------------------------------------------------
-XN_C_API XnStatus XN_C_DECL xnUSBInit();
-XN_C_API XnStatus XN_C_DECL xnUSBShutdown();
-
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnUSBEnumerateDevices() instead") XN_C_DECL xnUSBIsDevicePresent(XnUInt16 nVendorID, XnUInt16 nProductID, void* pExtraParam, XnBool* pbDevicePresent);
-
-XN_C_API XnStatus XN_C_DECL xnUSBEnumerateDevices(XnUInt16 nVendorID, XnUInt16 nProductID, const XnUSBConnectionString** pastrDevicePaths, XnUInt32* pnCount);
-XN_C_API void XN_C_DECL xnUSBFreeDevicesList(const XnUSBConnectionString* astrDevicePaths);
-
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnUSBOpenDeviceByPath() instead") XN_C_DECL xnUSBOpenDevice(XnUInt16 nVendorID, XnUInt16 nProductID, void* pExtraParam, void* pExtraParam2, XN_USB_DEV_HANDLE* pDevHandlePtr);
-XN_C_API XnStatus XN_C_DECL xnUSBOpenDeviceByPath(const XnUSBConnectionString strDevicePath, XN_USB_DEV_HANDLE* pDevHandlePtr);
-XN_C_API XnStatus XN_C_DECL xnUSBCloseDevice(XN_USB_DEV_HANDLE pDevHandle);
-
-XN_C_API XnStatus XN_C_DECL xnUSBGetDeviceSpeed(XN_USB_DEV_HANDLE pDevHandle, XnUSBDeviceSpeed* pDevSpeed);
-
-XN_C_API XnStatus XN_C_DECL xnUSBSetConfig(XN_USB_DEV_HANDLE pDevHandle, XnUInt8 nConfig);
-XN_C_API XnStatus XN_C_DECL xnUSBGetConfig(XN_USB_DEV_HANDLE pDevHandle, XnUInt8* pnConfig);
-
-XN_C_API XnStatus XN_C_DECL xnUSBSetInterface(XN_USB_DEV_HANDLE pDevHandle, XnUInt8 nInterface, XnUInt8 nAltInterface);
-XN_C_API XnStatus XN_C_DECL xnUSBGetInterface(XN_USB_DEV_HANDLE pDevHandle, XnUInt8* pnInterface, XnUInt8* pnAltInterface);
-
-XN_C_API XnStatus XN_C_DECL xnUSBOpenEndPoint(XN_USB_DEV_HANDLE pDevHandle, XnUInt16 nEndPointID, XnUSBEndPointType nEPType, XnUSBDirectionType nDirType, XN_USB_EP_HANDLE* pEPHandlePtr);
-XN_C_API XnStatus XN_C_DECL xnUSBCloseEndPoint(XN_USB_EP_HANDLE pEPHandle);
-XN_C_API XnStatus XN_C_DECL xnUSBGetEndPointMaxPacketSize(XN_USB_EP_HANDLE pEPHandle, XnUInt32* pnMaxPacketSize);
-
-XN_C_API XnStatus XN_C_DECL xnUSBAbortEndPoint(XN_USB_EP_HANDLE pEPHandle);
-XN_C_API XnStatus XN_C_DECL xnUSBFlushEndPoint(XN_USB_EP_HANDLE pEPHandle);
-XN_C_API XnStatus XN_C_DECL xnUSBResetEndPoint(XN_USB_EP_HANDLE pEPHandle);
-
-XN_C_API XnStatus XN_C_DECL xnUSBSendControl(XN_USB_DEV_HANDLE pDevHandle, XnUSBControlType nType, XnUInt8 nRequest, XnUInt16 nValue, XnUInt16 nIndex, XnUChar* pBuffer, XnUInt32 nBufferSize, XnUInt32 nTimeOut);
-XN_C_API XnStatus XN_C_DECL xnUSBReceiveControl(XN_USB_DEV_HANDLE pDevHandle, XnUSBControlType nType, XnUInt8 nRequest, XnUInt16 nValue, XnUInt16 nIndex, XnUChar* pBuffer, XnUInt32 nBufferSize, XnUInt32* pnBytesReceived, XnUInt32 nTimeOut);
-
-XN_C_API XnStatus XN_C_DECL xnUSBReadEndPoint(XN_USB_EP_HANDLE pEPHandle, XnUChar* pBuffer, XnUInt32 nBufferSize, XnUInt32* pnBytesReceived, XnUInt32 nTimeOut);
-XN_C_API XnStatus XN_C_DECL xnUSBWriteEndPoint(XN_USB_EP_HANDLE pEPHandle, XnUChar* pBuffer, XnUInt32 nBufferSize, XnUInt32 nTimeOut);
-
-XN_C_API XnStatus XN_C_DECL xnUSBQueueReadEndPoint(XN_USB_EP_HANDLE pEPHandle, XnUChar* pBuffer, XnUInt32 nBufferSize, XnUInt32 nTimeOut);
-XN_C_API XnStatus XN_C_DECL xnUSBFinishReadEndPoint(XN_USB_EP_HANDLE pEPHandle, XnUInt32* pnBytesReceived, XnUInt32 nTimeOut);
-
-XN_C_API XnStatus XN_C_DECL xnUSBInitReadThread(XN_USB_EP_HANDLE pEPHandle, XnUInt32 nBufferSize, XnUInt32 nNumBuffers, XnUInt32 nTimeOut, XnUSBReadCallbackFunctionPtr pCallbackFunction, void* pCallbackData);
-XN_C_API XnStatus XN_C_DECL xnUSBShutdownReadThread(XN_USB_EP_HANDLE pEPHandle);
-
-XN_C_API XnStatus XN_API_DEPRECATED("Use xnUSBRegisterToConnectivityEvents() instead") XN_C_DECL xnUSBSetCallbackHandler(XnUInt16 nVendorID, XnUInt16 nProductID, void* pExtraParam, XnUSBEventCallbackFunctionPtr pCallbackFunction, void* pCallbackData);
-
-XN_C_API XnStatus XN_C_DECL xnUSBRegisterToConnectivityEvents(XnUInt16 nVendorID, XnUInt16 nProductID, XnUSBDeviceCallbackFunctionPtr pFunc, void* pCookie, XnRegistrationHandle* phRegistration);
-XN_C_API void XN_C_DECL xnUSBUnregisterFromConnectivityEvents(XnRegistrationHandle hRegistration);
-
-#endif //_XN_USB_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSBDevice.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSBDevice.h
deleted file mode 100644
index 4113d248..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUSBDevice.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_USB_DEVICE_H_
-#define _XN_USB_DEVICE_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-#include "XnStatus.h"
-
-#if (XN_PLATFORM == XN_PLATFORM_WIN32)
-
- #include <Win32/usb100.h>
- typedef USB_ENDPOINT_DESCRIPTOR XnUSBEndpointDescriptor;
- typedef USB_INTERFACE_DESCRIPTOR XnUSBInterfaceDescriptor;
- typedef USB_CONFIGURATION_DESCRIPTOR XnUSBConfigDescriptor;
- typedef USB_DEVICE_DESCRIPTOR XnUSBDeviceDescriptor;
-
- #define USB_DT_CONFIG_SIZE 0
- #define USB_DT_CONFIG 0
- #define USB_CONFIG_ATT_ONE 0
- #define USB_DT_ENDPOINT_SIZE 0
- #define USB_DT_ENDPOINT 0
- #define USB_ENDPOINT_XFER_BULK 0
- #define USB_DT_INTERFACE_SIZE 0
- #define USB_DT_INTERFACE 0
- #define USB_CLASS_VENDOR_SPEC 0
- #define USB_DT_DEVICE_SIZE 0
- #define USB_DT_DEVICE 0
-
-#elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM)
- #include <linux/usb/ch9.h>
- typedef struct usb_endpoint_descriptor XnUSBEndpointDescriptor;
- typedef struct usb_interface_descriptor XnUSBInterfaceDescriptor;
- typedef struct usb_config_descriptor XnUSBConfigDescriptor;
- typedef struct usb_device_descriptor XnUSBDeviceDescriptor;
-#else
- #error "Unsupported Platform!"
-#endif
-
-//---------------------------------------------------------------------------
-// Structures & Enums
-//---------------------------------------------------------------------------
-typedef enum XnUSBDeviceConnectionState
-{
- XN_USB_DEVICE_DISCONNECTED,
- XN_USB_DEVICE_CONNECTED,
- XN_USB_DEVICE_SUSPENDED,
-} XnUSBDeviceConnectionState;
-
-typedef struct XnUSBStringDescriptor
-{
- XnUInt8 nID;
- const XnChar* strString;
-} XnUSBStringDescriptor;
-
-typedef struct XnUSBInterfaceDescriptorHolder
-{
- XnUSBInterfaceDescriptor descriptor;
- XnUSBEndpointDescriptor** aEndpoints;
-} XnUSBInterfaceDescriptorHolder;
-
-typedef struct XnUSBConfigDescriptorHolder
-{
- XnUSBConfigDescriptor descriptor;
- XnUSBInterfaceDescriptorHolder** aInterfaces;
-} XnUSBConfigDescriptorHolder;
-
-typedef struct XnUSBDeviceDescriptorHolder
-{
- XnUSBDeviceDescriptor descriptor;
- XnUSBConfigDescriptorHolder** aConfigurations;
- XnUSBStringDescriptor* aStrings;
- XnUInt8 nStrings;
-} XnUSBDeviceDescriptorHolder;
-
-struct XnUSBDevice;
-typedef struct XnUSBDevice XnUSBDevice;
-
-typedef void (*XnUSBDeviceNewControlRequestCallback)(XnUSBDevice* pDevice, void* pCookie);
-typedef void (*XnUSBDeviceConnectivityChangedCallback)(XnUSBDevice* pDevice, XnUSBDeviceConnectionState state, void* pCookie);
-
-//---------------------------------------------------------------------------
-// API
-//---------------------------------------------------------------------------
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceInit(const XnUSBDeviceDescriptorHolder* pDeviceDescriptor, XnUInt32 nControlMessageMaxSize, XnUSBDevice** ppDevice);
-XN_C_API void XN_C_DECL xnUSBDeviceShutdown(XnUSBDevice* pDevice);
-XN_C_API XnBool XN_C_DECL xnUSBDeviceIsControlRequestPending(XnUSBDevice* pDevice);
-
-//pnRequestSize is max size on input, actual size on output
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceReceiveControlRequest(XnUSBDevice* pDevice, XnUChar* pBuffer, XnUInt32* pnRequestSize);
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceSendControlReply(XnUSBDevice* pDevice, const XnUChar* pBuffer, XnUInt32 nReplySize);
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceSetNewControlRequestCallback(XnUSBDevice* pDevice, XnUSBDeviceNewControlRequestCallback pFunc, void* pCookie);
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceSetConnectivityChangedCallback(XnUSBDevice* pDevice, XnUSBDeviceConnectivityChangedCallback pFunc, void* pCookie);
-XN_C_API XnStatus XN_C_DECL xnUSBDeviceWriteEndpoint(XnUSBDevice* pDevice, XnUInt8 nAddress, const XnUChar* pData, XnUInt32 nDataSize);
-
-#endif
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUtils.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUtils.h
deleted file mode 100644
index 00b1222b..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnUtils.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef __XN_UTILS_H__
-#define __XN_UTILS_H__
-
-/**
- * @ingroup cref
- * @defgroup utils Utilities
- * This page details some utility functions.
- * @{
- */
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <XnTypes.h>
-#include <XnModuleInterface.h>
-
-//---------------------------------------------------------------------------
-// Functions
-//---------------------------------------------------------------------------
-
-/**
- * @name General
- * @{
- */
-
-/**
- * Gets current OpenNI version
- *
- * @param pVersion [out] Current DLL version
- */
-XN_C_API XnStatus XN_C_DECL xnGetVersion(XnVersion* pVersion);
-
-/// @}
-
-/**
- * @name ProductionNodeType Utils
- * @{
- */
-
-/**
- * Gets a string representation of the production node type.
- *
- * @param Type [in] The type of the production node.
- */
-XN_C_API const XnChar* XN_C_DECL xnProductionNodeTypeToString(XnProductionNodeType Type);
-
-/**
- * Gets a type from its string representation.
- *
- * @param strType [in] The string representation of the type.
- * @param pType [out] The type of the production node.
- */
-XN_C_API XnStatus XN_C_DECL xnProductionNodeTypeFromString(const XnChar* strType, XnProductionNodeType* pType);
-
-/**
- * @brief Checks if a certain production node type is a generator or not
- *
- * @param type [in] The type to check
- */
-XN_C_API XnBool XN_C_DECL xnIsTypeGenerator(XnProductionNodeType type);
-
-/**
- * @brief Checks if a certain production node type is a derived of another type
- *
- * @param type [in] The type to check
- * @param base [in] The base type to check against
- */
-XN_C_API XnBool XN_C_DECL xnIsTypeDerivedFrom(XnProductionNodeType type, XnProductionNodeType base);
-
-/// @}
-
-/**
- * @name PixelFormat Utils
- * @{
- */
-
-/**
- * Get the name of the pixel format.
- *
- * @param format [in] Pixel Format
- */
-XN_C_API const XnChar* XN_C_DECL xnPixelFormatToString(XnPixelFormat format);
-
-/**
- * Gets pixel format by its name.
- *
- * @param strName [in] Name of the pixel format.
- * @param pFormat [out] Pixel format.
- */
-XN_C_API XnStatus XN_C_DECL xnPixelFormatFromString(const XnChar* strName, XnPixelFormat* pFormat);
-
-/**
- * Gets the bytes per pixel of a pixel format.
- *
- * @param format [in] The pixel format.
- */
-XN_C_API XnUInt32 XN_C_DECL xnGetBytesPerPixelForPixelFormat(XnPixelFormat format);
-
-/// @}
-
-/**
- * @name Resolution Utilities
- * @{
- */
-
-/**
- * Gets the number of pixels in a row for given resolution.
- *
- * @param resolution [in] The resolution to translate.
- */
-XN_C_API XnUInt32 XN_C_DECL xnResolutionGetXRes(XnResolution resolution);
-
-/**
- * Gets the number of pixels in a column for given resolution.
- *
- * @param resolution [in] The resolution to translate.
- */
-XN_C_API XnUInt32 XN_C_DECL xnResolutionGetYRes(XnResolution resolution);
-
-/**
- * Gets the resolution from the number of pixels in every row and column.
- *
- * @param xRes [in] Number of pixels in a row.
- * @param yRes [in] Number of pixels in a column.
- */
-XN_C_API XnResolution XN_C_DECL xnResolutionGetFromXYRes(XnUInt32 xRes, XnUInt32 yRes);
-
-/**
- * Gets resolution by its name. If resolution is unknown, XN_RESOLUTION_CUSTOM is returned.
- *
- * @param strName [in] Name of the resolution.
- */
-XN_C_API XnResolution XN_C_DECL xnResolutionGetFromName(const XnChar* strName);
-
-/**
- * Get the name of the resolution.
- *
- * @param resolution [in] Resolution.
- */
-XN_C_API const XnChar* XN_C_DECL xnResolutionGetName(XnResolution resolution);
-
-/// @}
-
-/**
- * @name XnVersion Utilities
- * @{
- */
-
-/**
- * Compares two versions.
- *
- * @param pVersion1 [in] First version.
- * @param pVersion2 [in] Second version.
- *
- * @returns <0 if first is smaller than second, 0 if same, >0 if first is greater than second.
- */
-XN_C_API XnInt32 XN_C_DECL xnVersionCompare(const XnVersion* pVersion1, const XnVersion* pVersion2);
-
-XN_C_API XnStatus XN_C_DECL xnVersionToString(const XnVersion* pVersion, XnChar* csResult, XnUInt32 nSize);
-
-/// @}
-
-/**
- * @name XnProductionNodeDescription Utilities
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnProductionNodeDescriptionToString(const XnProductionNodeDescription* pDescription, XnChar* csResult, XnUInt32 nSize);
-
-/// @}
-
-/**
- * @name C Style Constructors
- * @{
- */
-
-XN_C_API XnPoint3D XN_C_DECL xnCreatePoint3D(XnFloat x, XnFloat y, XnFloat z);
-XN_C_API XnPlane3D XN_C_DECL xnCreatePlane3D(XnPoint3D ptPoint, XnVector3D vNormal);
-
-/// @}
-
-/**
- * @name Modules Registry Management
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnRegisterModule(const XnChar* strModule, const XnChar* strConfigDir);
-XN_C_API XnStatus XN_C_DECL xnUnregisterModule(const XnChar* strModule);
-XN_C_API XnStatus XN_C_DECL xnPrintRegisteredModules();
-
-/// @}
-
-/**
- * @name Global Licenses Registry Management
- * @{
- */
-
-XN_C_API XnStatus XN_C_DECL xnRegisterGlobalLicense(XnLicense* pLicense);
-XN_C_API XnStatus XN_C_DECL xnUnregisterGlobalLicense(XnLicense* pLicense);
-XN_C_API XnStatus XN_C_DECL xnPrintRegisteredLicenses();
-
-/// @}
-
-/**
- * @name MetaData Objects Management
- * @{
- */
-
-/**
- * Allocates and returns an @ref XnOutputMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeOutputMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnOutputMetaData* XN_C_DECL xnAllocateOutputMetaData();
-/**
- * Frees a previously allocated @ref XnOutputMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeOutputMetaData(const XnOutputMetaData* pMetaData);
-/**
- * @brief Shallow-Copies an Output Meta Data object.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyOutputMetaData(XnOutputMetaData* pDestination, const XnOutputMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnMapMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeMapMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnMapMetaData* XN_C_DECL xnAllocateMapMetaData();
-/**
- * Frees a previously allocated @ref XnMapMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeMapMetaData(const XnMapMetaData* pMetaData);
-/**
- * @brief Shallow-Copies a Map Meta Data object.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyMapMetaData(XnMapMetaData* pDestination, const XnMapMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnDepthMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeDepthMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnDepthMetaData* XN_C_DECL xnAllocateDepthMetaData();
-/**
- * Frees a previously allocated @ref XnDepthMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeDepthMetaData(const XnDepthMetaData* pMetaData);
-/**
- * @brief Shallow-Copies a Depth Meta Data object. Note that the data buffer is not copied, and that both
- * object will point to the same buffer.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyDepthMetaData(XnDepthMetaData* pDestination, const XnDepthMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnImageMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeImageMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnImageMetaData* XN_C_DECL xnAllocateImageMetaData();
-/**
- * Frees a previously allocated @ref XnImageMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeImageMetaData(const XnImageMetaData* pMetaData);
-/**
- * @brief Shallow-Copies an Image Meta Data object. Note that the data buffer is not copied, and that both
- * object will point to the same buffer.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyImageMetaData(XnImageMetaData* pDestination, const XnImageMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnIRMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeIRMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnIRMetaData* XN_C_DECL xnAllocateIRMetaData();
-/**
- * Frees a previously allocated @ref XnIRMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeIRMetaData(const XnIRMetaData* pMetaData);
-/**
- * @brief Shallow-Copies an IR Meta Data object. Note that the data buffer is not copied, and that both
- * object will point to the same buffer.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyIRMetaData(XnIRMetaData* pDestination, const XnIRMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnAudioMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeAudioMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnAudioMetaData* XN_C_DECL xnAllocateAudioMetaData();
-/**
- * Frees a previously allocated @ref XnAudioMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeAudioMetaData(const XnAudioMetaData* pMetaData);
-/**
- * @brief Shallow-Copies an Audio Meta Data object. Note that the data buffer is not copied, and that both
- * object will point to the same buffer.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopyAudioMetaData(XnAudioMetaData* pDestination, const XnAudioMetaData* pSource);
-
-/**
- * Allocates and returns an @ref XnSceneMetaData object. When no longer needed, this object should be freed
- * by calling @ref xnFreeSceneMetaData().
- * @returns NULL if allocation failed.
- */
-XN_C_API XnSceneMetaData* XN_C_DECL xnAllocateSceneMetaData();
-/**
- * Frees a previously allocated @ref XnSceneMetaData object.
- *
- * @param pMetaData [in] object to be freed.
- */
-XN_C_API void XN_C_DECL xnFreeSceneMetaData(const XnSceneMetaData* pMetaData);
-/**
- * @brief Shallow-Copies a Scene Meta Data object. Note that the data buffer is not copied, and that both
- * object will point to the same buffer.
- *
- * @param pDestination [in] Destination object.
- * @param pSource [in] Source object.
- */
-XN_C_API XnStatus XN_C_DECL xnCopySceneMetaData(XnSceneMetaData* pDestination, const XnSceneMetaData* pSource);
-
-/// @}
-
-/**
- * @name Functions for Modules Implementors
- * @{
- */
-
-/**
- * A helper function for production nodes implementers. Enumerates needed child nodes (assuming there
- * is only one needed input), and populates a list with production trees over that input.
- *
- * @param pContext [in] OpenNI Context.
- * @param pList [in] The list to be populated.
- * @param pDescription [in] The description of the enumerated node.
- * @param strCreationInfo [in] [Optional] Additional creation info.
- * @param InputType [in] The type of the input required by this production node.
- * @param pErrors [in] The errors object passed to Enumerate method.
- * @param pQuery [in] [Optional] A filter to be used for finding the appropriate input.
- */
-XN_C_API XnStatus XN_C_DECL xnAutoEnumerateOverSingleInput(XnContext* pContext, XnNodeInfoList* pList, XnProductionNodeDescription* pDescription, const XnChar* strCreationInfo, XnProductionNodeType InputType, XnEnumerationErrors* pErrors, XnNodeQuery* pQuery);
-
-/**
- * Registers an extension node with OpenNI. An extension node is a node of type not defined by OpenNI.
- *
- * @param strTypeName [in] Name of this new node type.
- * @param baseType [in] Type of the direct base for this extension.
- * @param pTypeID [out] The new ID registered with OpenNI.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterExtensionNode(const XnChar* strTypeName, XnProductionNodeType baseType, XnProductionNodeType* pTypeID);
-
-/**
- * Gets the module node handle of a node. This is useful for extension implementors.
- *
- * @param hNode [in] The node to get its module node handle.
- */
-XN_C_API XnModuleNodeHandle XN_C_DECL xnGetModuleNodeHandle(XnNodeHandle hNode);
-
-#if !XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS
-/**
- * Registers a module to OpenNI in environments where dynamic library loading is not supported.
- *
- * @param pInterface [in] The module interface.
- * @param strConfigDir [in] The module configuration directory.
- * @param strName [in] Name of this module.
- */
-XN_C_API XnStatus XN_C_DECL xnRegisterModuleWithOpenNI(XnOpenNIModuleInterface* pInterface, const XnChar* strConfigDir, const XnChar* strName);
-#endif
-
-/// @}
-
-/** @} */
-
-#endif // __XN_UTILS_H__
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnVersion.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnVersion.h
deleted file mode 100644
index 1e7f903c..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnVersion.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_VERSION_H_
-#define _XN_VERSION_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include "XnPlatform.h"
-
-//---------------------------------------------------------------------------
-// Defines
-//---------------------------------------------------------------------------
-/** OpenNI major version. */
-#define XN_MAJOR_VERSION 1
-/** OpenNI minor version. */
-#define XN_MINOR_VERSION 5
-/** OpenNI maintenance version. */
-#define XN_MAINTENANCE_VERSION 4
-/** OpenNI build version. */
-#define XN_BUILD_VERSION 0
-
-/** OpenNI version (in brief string format): "Major.Minor.Maintenance (Build)" */
-#define XN_BRIEF_VERSION_STRING \
- XN_STRINGIFY(XN_MAJOR_VERSION) "." \
- XN_STRINGIFY(XN_MINOR_VERSION) "." \
- XN_STRINGIFY(XN_MAINTENANCE_VERSION) \
- " (Build " XN_STRINGIFY(XN_BUILD_VERSION) ")"
-
-/** OpenNI version (in numeric format): (OpenNI major version * 100000000 + OpenNI minor version * 1000000 + OpenNI maintenance version * 10000 + OpenNI build version). */
-#define XN_VERSION (XN_MAJOR_VERSION*100000000 + XN_MINOR_VERSION*1000000 + XN_MAINTENANCE_VERSION*10000 + XN_BUILD_VERSION)
-
-/** OpenNI version (in string format): "Major.Minor.Maintenance.Build-Platform (MMM DD YYYY HH:MM:SS)". */
-#define XN_VERSION_STRING \
- XN_BRIEF_VERSION_STRING "-" \
- XN_PLATFORM_STRING " (" XN_TIMESTAMP ")"
-
-#endif //_XN_VERSION_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnOSLinux-x86.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnOSLinux-x86.h
deleted file mode 100644
index 0cbd12fc..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnOSLinux-x86.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_OSLINUX_X86_H_
-#define _XN_OSLINUX_X86_H_
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <sys/types.h>
-#include <stdarg.h>
-#include <time.h>
-#include <pthread.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** A generic handle type. */
-typedef void* XN_HANDLE;
-
-/** A file handle type. */
-typedef XnInt XN_FILE_HANDLE;
-
-/** The value of an invalid file handle. */
-#define XN_INVALID_FILE_HANDLE -1
-
-/** A string that specifies the current directory. */
-#define XN_FILE_LOCAL_DIR "./"
-
-/** The file directory separator. */
-#define XN_FILE_DIR_SEP "/"
-
-/** The file extension separator. */
-#define XN_FILE_EXT_SEP "."
-
-/** The file "all" wildcard. */
-#define XN_FILE_ALL_WILDCARD "*"
-
-/** The newline separation string. */
-#define XN_NEW_LINE_SEP "\n"
-
-//---------------------------------------------------------------------------
-// INI Files
-//---------------------------------------------------------------------------
-/** A string that specifies the extension of INI files. */
-#define XN_INI_FILE_EXT "ini"
-
-/** The maximum allowed INI string length (in bytes). */
-// Note: This must always be big enough to contain a 32-bit number!
-#define XN_INI_MAX_LEN 256
-
-//---------------------------------------------------------------------------
-// Shared Libraries
-//---------------------------------------------------------------------------
-/** A shared library handle type. */
-typedef void* XN_LIB_HANDLE;
-
-/** A string that specifies the prefix of shared library files. */
-#define XN_SHARED_LIBRARY_PREFIX "lib"
-
-/** A string that specifies the postfix of shared library files. */
-#define XN_SHARED_LIBRARY_POSTFIX ".so"
-
-//---------------------------------------------------------------------------
-// Threads
-//---------------------------------------------------------------------------
-/** A Xiron thread type. */
-typedef pthread_t* XN_THREAD_HANDLE;
-
-/** A Xiron thread ID. */
-typedef pthread_t XN_THREAD_ID;
-
-/** A Xiron process ID. */
-typedef pid_t XN_PROCESS_ID;
-
-/** The thread entry point function prototype. */
-typedef void* (*XN_THREAD_PROC_PROTO)(void* arg);
-
-/** The thread entry point function definition. */
-#define XN_THREAD_PROC void*
-
-/** The thread return function. */
-#define XN_THREAD_PROC_RETURN(ret) return((void*)ret)
-
-/** The thread passable data pointer type. */
-typedef void* XN_THREAD_PARAM;
-
-//---------------------------------------------------------------------------
-// Time Outs
-//---------------------------------------------------------------------------
-/** The mutex lock infinite timeout. */
-#define XN_WAIT_INFINITE 0xFFFFFFFF
-
-//---------------------------------------------------------------------------
-// Mutex
-//---------------------------------------------------------------------------
-/** A Xiron mutex type. */
-struct XnMutex;
-typedef struct XnMutex* XN_MUTEX_HANDLE;
-
-//---------------------------------------------------------------------------
-// Critical Sections
-//---------------------------------------------------------------------------
-/** A Xiron critical sections type. */
-typedef XN_MUTEX_HANDLE XN_CRITICAL_SECTION_HANDLE;
-
-//---------------------------------------------------------------------------
-// Events
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnEvent;
-typedef struct _XnEvent _XnEvent, *XN_EVENT_HANDLE ;
-
-//---------------------------------------------------------------------------
-// Semaphores
-//---------------------------------------------------------------------------
-/** A Xiron event type. */
-struct _XnSemaphore;
-typedef struct _XnSemaphore *XN_SEMAPHORE_HANDLE;
-
-//---------------------------------------------------------------------------
-// Timer
-//---------------------------------------------------------------------------
-/** The Xiron OS timer structure. */
-typedef struct XnOSTimer
-{
- struct timespec tStartTime;
- XnBool bHighRes;
-} XnOSTimer;
-
-//---------------------------------------------------------------------------
-// Network
-//---------------------------------------------------------------------------
-/** The network host name and port separator. */
-#define XN_NETWORK_HOST_PORT_SEP ":"
-
-//---------------------------------------------------------------------------
-// Swaps
-//---------------------------------------------------------------------------
-#define XN_PREPARE_VAR16_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR32_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR64_IN_BUFFER(var) (var)
-#define XN_PREPARE_VAR_FLOAT_IN_BUFFER(var) (var)
-
-#endif //_XN_OSLINUX_X86_H_
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnPlatformLinux-x86.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnPlatformLinux-x86.h
deleted file mode 100644
index 250e74c2..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/mingw-win32/XnPlatformLinux-x86.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/****************************************************************************
-* *
-* OpenNI 1.x Alpha *
-* Copyright (C) 2011 PrimeSense Ltd. *
-* *
-* This file is part of OpenNI. *
-* *
-* OpenNI is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Lesser General Public License as published *
-* by the Free Software Foundation, either version 3 of the License, or *
-* (at your option) any later version. *
-* *
-* OpenNI is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Lesser General Public License for more details. *
-* *
-* You should have received a copy of the GNU Lesser General Public License *
-* along with OpenNI. If not, see <http://www.gnu.org/licenses/>. *
-* *
-****************************************************************************/
-#ifndef _XN_PLATFORM_LINUX_X86_H_
-#define _XN_PLATFORM_LINUX_X86_H_
-
-//---------------------------------------------------------------------------
-// Prerequisites
-//---------------------------------------------------------------------------
-
-//---------------------------------------------------------------------------
-// Includes
-//---------------------------------------------------------------------------
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <limits.h>
-
-//---------------------------------------------------------------------------
-// Platform Basic Definition
-//---------------------------------------------------------------------------
-#define XN_PLATFORM XN_PLATFORM_LINUX_X86
-#define XN_PLATFORM_STRING "Linux-x86"
-
-//---------------------------------------------------------------------------
-// Platform Capabilities
-//---------------------------------------------------------------------------
-#define XN_PLATFORM_ENDIAN_TYPE XN_PLATFORM_IS_LITTLE_ENDIAN
-#define XN_PLATFORM_VAARGS_TYPE XN_PLATFORM_USE_GCC_VAARGS_STYLE
-#define XN_PLATFORM_SUPPORTS_DYNAMIC_LIBS 1
-
-//---------------------------------------------------------------------------
-// Basic Types
-//---------------------------------------------------------------------------
-/** Boolean TRUE/FALSE type. */
-typedef unsigned int XnBool;
-
-/** Signed character for strings. */
-typedef char XnChar;
-/** Unsigned character for strings. */
-typedef unsigned char XnUChar;
-
-/** Signed wide character for strings. */
-typedef wchar_t XnWChar;
-
-/** 8-bit signed integer. */
-typedef signed char XnInt8;
-/** 8-bit unsigned integer. */
-typedef unsigned char XnUInt8;
-
-/** 16-bit signed integer. */
-typedef short XnInt16;
-/** 16-bit unsigned integer. */
-typedef unsigned short XnUInt16;
-
-/** 32-bit signed integer. */
-typedef int XnInt32;
-/** 32-bit unsigned integer. */
-typedef unsigned int XnUInt32;
-
-/** 64-bit signed integer. */
-typedef long long XnInt64;
-/** 64-bit unsigned integer. */
-typedef unsigned long long XnUInt64;
-
-/** natural signed integer. */
-typedef int XnInt;
-/** natural unsigned integer. */
-typedef unsigned int XnUInt;
-
-/** Float (32bit) */
-typedef float XnFloat;
-/** Double (64bit) */
-typedef double XnDouble;
-
-/** Far procedures type (for shared libraries functions). */
-typedef void (*XnFarProc)(void *);
-
-/** Size type. */
-typedef size_t XnSizeT;
-
-/** Max unsigned 8-bit value */
-#define XN_MAX_UINT8 UCHAR_MAX
-/** Max unsigned 16-bit value */
-#define XN_MAX_UINT16 USHRT_MAX
-/** Max unsigned 32-bit value */
-#define XN_MAX_UINT32 UINT_MAX
-/** Max unsigned 64-bit value */
-#define XN_MAX_UINT64 ULLONG_MAX
-
-/** Min signed 8-bit value */
-#define XN_MIN_INT8 SCHAR_MIN
-/** Min signed 16-bit value */
-#define XN_MIN_INT16 SHRT_MIN
-/** Min signed 32-bit value */
-#define XN_MIN_INT32 INT_MIN
-/** Min signed 64-bit value */
-#define XN_MIN_INT64 LLONG_MIN
-
-/** Max signed 8-bit value */
-#define XN_MAX_INT8 SCHAR_MAX
-/** Max signed 16-bit value */
-#define XN_MAX_INT16 SHRT_MAX
-/** Max signed 32-bit value */
-#define XN_MAX_INT32 INT_MAX
-/** Max signed 64-bit value */
-#define XN_MAX_INT64 LLONG_MAX
-
-//---------------------------------------------------------------------------
-// Memory
-//---------------------------------------------------------------------------
-/** The default memory alignment. */
-#define XN_DEFAULT_MEM_ALIGN 16
-
-/** The thread static declarator (using TLS). */
-#define XN_THREAD_STATIC __thread
-
-//---------------------------------------------------------------------------
-// Files
-//---------------------------------------------------------------------------
-/** The maximum allowed file path size (in bytes). */
-#define XN_FILE_MAX_PATH 256
-
-//---------------------------------------------------------------------------
-// Call back
-//---------------------------------------------------------------------------
-/** The std call type. */
-#define XN_STDCALL __stdcall
-
-/** The call back calling convention. */
-// DAN - Changed callback type for gcc-windows (mingw) compiles to include the stdcall decoration:
-#define XN_CALLBACK_TYPE XN_STDCALL
-
-/** The C and C++ calling convension. */
-#define XN_C_DECL
-
-//---------------------------------------------------------------------------
-// Macros
-//---------------------------------------------------------------------------
-/** Returns the date and time at compile time. */
-#define XN_TIMESTAMP __DATE__ " " __TIME__
-
-/** Converts n into a pre-processor string. */
-#define XN_STRINGIFY(n) XN_STRINGIFY_HELPER(n)
-#define XN_STRINGIFY_HELPER(n) #n
-
-/** Asserts an expression, only on Debug build. */
-#define XN_ASSERT(x)
-
-//---------------------------------------------------------------------------
-// API Export/Import Macros
-//---------------------------------------------------------------------------
-/** Indicates an exported shared library function. */
-#define XN_API_EXPORT __attribute__ ((visibility("default")))
-
-/** Indicates an imported shared library function. */
-#define XN_API_IMPORT
-
-/** Indicates a deprecated function */
-#define XN_API_DEPRECATED(msg) __attribute__((warning("This function is deprecated: " msg)))
-
-#define XN_DEPRECATED_WARNING_IDS
-#define XN_HIDES_PARENT_METHOD_WARNING_ID
-#define XN_CONDITION_IS_CONST_WARNING_ID
-#define XN_INHERITS_VIA_DOMINANCE_WARNING_ID
-#define XN_UNALIGNED_ADDRESS_WARNING_ID
-#define XN_STRUCT_PADDED_WARNING_ID
-
-#define XN_PRAGMA_START_DISABLED_WARNING_SECTION(warnings)
-#define XN_PRAGMA_STOP_DISABLED_WARNING_SECTION
-
-/** Declares a global shared library export function. */
-#define XN_API_EXPORT_INIT()
-
-#endif //_XN_PLATFORM_LINUX_X86_H_
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.cpp b/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.cpp
deleted file mode 100644
index 5de4a8a6..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- QtKinectWrapper - Qt Kinect Wrapper Class
- Copyright (C) 2011-2013:
- Daniel Roggen, droggen@gmail.com
-
- All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "QKinectWrapper.h"
-#include <qmath.h>
-#include <QDebug>
-
-#if defined(_MSC_VER)
-#define isnan(x) _isnan(x)
-#endif
-
-namespace QKinect
-{
-
-/******************************************************************************
-*******************************************************************************
-* QKinectWrapper QKinectWrapper QKinectWrapper QKinectWrapper QKinectWrapper
-*******************************************************************************
-******************************************************************************/
-
-
-/******************************************************************************
-* PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC PUBLIC
-******************************************************************************/
-
-
-/**
- \brief Constructor - does nothing with the kinect driver but inits some internal vars
-**/
-QKinectWrapper::QKinectWrapper()
-{
- // Register types used in signal/slot mechanism
- qRegisterMetaType<QKinect::KinectStatus>( "QKinect::KinectStatus" );
-
- status = QKinect::Idle;
-}
-
-/**
- \brief Destructor - calls stop - which terminates the kinect-dedicated reading thread - blocks until terminated.
-**/
-QKinectWrapper::~QKinectWrapper()
-{
- stop();
-}
-void QKinectWrapper::start()
-{
- t_requeststop = false;
- status = QKinect::Idle;
- QThread::start();
-}
-
-/**
- \brief Request the the kinect-dedicated reading thread to terminate, and thus
- release all kinect handles.
- Sets requeststop, which makes the main reading loop terminate (thread ended) at
- some later time. Blocks until terminated.
-**/
-void QKinectWrapper::stop()
-{
- t_requeststop=true;
-
- wait();
-}
-
-/**
- \brief Return the latest depth image
- Call this afer a dataNotification signal
-**/
-QImage QKinectWrapper::getDepth()
-{
- QMutexLocker locker(&mutex);
- return imageDepth;
-}
-
-/**
- \brief Returns if running
- Runing comprises initializing and reading data (not running is idle or error)
- We query the thread state to get this.
-**/
-bool QKinectWrapper::isRunning()
-{
- if (QThread::isRunning())
- return true;
- return false;
-
-}
-
-/**
- \brief Returns if stopped
- Runing comprises initializing and reading data (not running is idle or error)
- We query the thread state to get this.
-**/
-bool QKinectWrapper::isStopped()
-{
- if (QThread::isRunning())
- return false;
- return true;
-
-}
-
-/******************************************************************************
-* PRIVATE/PROTECTED PRIVATE/PROTECTED PRIVATE/PROTECTED PRIVATE/PROTECTED
-******************************************************************************/
-
-
-/**
- \brief Starts the kinect-dedicated reading thread.
- Does the following:
- 1. Notify the start of the initialization and initialize
- 2. Notify the initialization outcomes (error, or running if initialization was successful)
- 3. If successful, does a continous:
- 3.1. Wait/update kinect data
- 3.2. Protected by a mutex, generate the images and data structures, made available to the user
- 3.3. Check if a stop has been requested
- 4. Stop the kinect reading and release resources, notify.
-
- The variable accessed outside of this thread are protected by mutexes. This includes:
- - The status
- - The QImages for depth, camera
- - The bodies
- - etc.
-**/
-void QKinectWrapper::run()
-{
- mutex.lock();
- status = QKinect::Initializing;
- emit statusNotification(status);
- mutex.unlock();
-
- bool ok = initialize();
-
- if (!ok) {
- mutex.lock();
- status = QKinect::ErrorStop;
- emit statusNotification(status);
- mutex.unlock();
- return;
- }
-
- mutex.lock();
- status = QKinect::OkRun;
- emit statusNotification(status);
- mutex.unlock();
-
- while (!t_requeststop) {
- (void)g_Context.WaitAndUpdateAll();
- // Prepare the data to export outside of the thread
- mutex.lock();
- xn::DepthMetaData depthMD;
- g_DepthGenerator.GetMetaData(depthMD);
- imageDepth = createDepthImage();
- emit dataNotification();
- mutex.unlock();
- }
- g_Context.Release();
-
- mutex.lock();
- status = QKinect::Idle;
- emit statusNotification(status);
- mutex.unlock();
-}
-
-/**
- \brief Setups and initializes the kinect/openni
- Returns false if any step fails.
-**/
-bool QKinectWrapper::initialize()
-{
- XnStatus nRetVal = XN_STATUS_OK;
- XnMapOutputMode outputMode;
-
- // Initialize the context
- nRetVal = g_Context.Init();
- if (nRetVal != XN_STATUS_OK) {
- mutex.lock();
- qCritical() << QString("Context creation failed: %1").arg(xnGetStatusString(nRetVal));
- mutex.unlock();
- return false;
- }
-
- // Create a depth generator
- nRetVal = g_DepthGenerator.Create(g_Context);
- if (nRetVal != XN_STATUS_OK) {
- mutex.lock();
- qCritical() << QString("Depth generator creation failed: %1").arg(xnGetStatusString(nRetVal));
- mutex.unlock();
- return false;
- }
-
-// XnUInt32 nCount = g_DepthGenerator.GetSupportedMapOutputModesCount();
-// qDebug() << nCount;
-// XnMapOutputMode *aModes = new XnMapOutputMode[nCount];
-// g_DepthGenerator.GetSupportedMapOutputModes(aModes, nCount);
-
-// for (int i = 0; i < nCount; i++)
-// qDebug() << aModes[i].nFPS << aModes[i].nXRes << aModes[i].nYRes;
-
- outputMode.nXRes = 640;
- outputMode.nYRes = 480;
- outputMode.nFPS = 30;
- nRetVal = g_DepthGenerator.SetMapOutputMode(outputMode);
- if (nRetVal != XN_STATUS_OK) {
- mutex.lock();
- qCritical() << QString("Depth generator SetMapOutputMode failed: %1").arg(xnGetStatusString(nRetVal));
- mutex.unlock();
- return false;
- }
-
- // Start producting data
- nRetVal = g_Context.StartGeneratingAll();
-
- return true;
-}
-
-/**
- \brief Creates a QImage comprising the depth map
-**/
-QImage QKinectWrapper::createDepthImage()
-{
- // Here must mutex / run also access the data
- xn::SceneMetaData smd;
- xn::DepthMetaData dmd;
- g_DepthGenerator.GetMetaData(dmd);
-
- XnUInt16 g_nXRes = dmd.XRes();
- XnUInt16 g_nYRes = dmd.YRes();
-
- QImage image(g_nXRes, g_nYRes, QImage::Format_RGB32);
-
- const XnDepthPixel* pDepth = dmd.Data();
- const XnLabel* pLabels = smd.Data();
-
- for (unsigned nY = 0; nY < g_nYRes; nY++) {
- uchar *imageptr = image.scanLine(nY);
-
- for (unsigned nX = 0; nX < g_nXRes; nX++) {
- unsigned depth = *pDepth;
-
- if (depth > m_maxDist)
- depth = m_maxDist;
- if (depth)
- depth = ((m_maxDist - depth) * m_depthComp / m_maxDist);
-
- // depth: 255: closest
- // depth: 0: furtherst (m_maxDist distance)
- imageptr[0] = depth;
- imageptr[1] = depth;
- imageptr[2] = depth;
- imageptr[3] = 0xff;
- pDepth++;
- imageptr += 4;
- pLabels++;
- }
- }
-
- return image;
-}
-
-// Adjust depth distance
-void QKinectWrapper::setMaxDist(unsigned int dist)
-{
- m_maxDist = dist;
- m_depthComp = 255;
- if (m_maxDist < 10000)
- m_depthComp = 255.0 * qSqrt(qSqrt(qSqrt(10000.0 / qreal(m_maxDist)))); // compensate for the adjusted depth scale
-}
-} // End namespace
-
-
-
-
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.h b/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.h
deleted file mode 100644
index 3f380508..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/QKinectWrapper.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- QtKinectWrapper - Qt Kinect Wrapper Class
- Copyright (C) 2011-2013:
- Daniel Roggen, droggen@gmail.com
-
- All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-/*
- Requirements:
-
- The QKinectWrapper class requires the following to be installed (versions are those tested and known to work):
- Windows:
- OpenNI-Win32-1.5.4.0-Dev.msi
- SensorKinect093-Bin-Win32-v5.1.2.1.msi (Note: this is PrimeSense Sensor KinectMod 5.1.2.1)
- NITE-Win32-1.5.2.21-Dev.msi
-
- Other: not checked
-
- Basics:
- QKinectWrapper provides Qt-friendly wrapper to get body skeleton, as well as camera image and depth map from a Kinect.
- It provides around the logic to 1) initialize the kinect, 2) continuously read the Kinect sensor, including depth map, image frame, and skeleton, 3) perform the necessary calibration, 4) shutdown.
- In principle up to 15 bodies are supported (limited by the Kinect driver)
- QKinectWrapper creates a dedicated thread to read the data of the Kinect. The application is shielded from any thread nastiness:
- - Safe functions are available to get the data from the kinect (taking care of mutexing as required). This includes functions to read image, depth map, and get the body skeleton.
- - Signals are used to indicate to the application a change of state in QKinectWrapper (e.g. initialize, running, error, stop), and the availability of new data (i.e. a new frame/depth/skeleton from the camera)
-
- Howto:
- 1) Instanciate QKinectWrapper
- 2) Connect the 'dataNotification' and 'statusNotification' signals to your application
- 3) Optionally, set some visualization parameters (e.g. setPen)
- 4) Call 'start'
- 5) In the data notification slot, get the data from the kinect with methods getImage, getDepth, getJoints
- 6) When done, call stop
- Use the statusNotification to get notified of initialization error or change of status of the kinect reader thread
-*/
-
-#ifndef __QKINECTWRAPPER_H
-#define __QKINECTWRAPPER_H
-
-#include <QWidget>
-#include <QPainter>
-#include <QThread>
-#include <QMutex>
-#include <XnOpenNI.h>
-
-#ifndef Q_MOC_RUN // Fixes a MOC issue with Qt5 (Qt4.x ok) that fails to properly expand some macros. We skip the include in the MOC pass.
-#include <XnCppWrapper.h>
-#endif // Q_MOC_RUN
-
-namespace QKinect
-{
-/**
- \brief Status of the body tracking
- **/
-enum KinectStatus
-{
- Idle = 0,
- Initializing = 1,
- OkRun = 2,
- ErrorStop = 3
-};
-
-class QKinectWrapper : public QThread
-{
- Q_OBJECT
-public:
- QKinectWrapper();
- virtual ~QKinectWrapper();
- void run();
-
- void start();
- void stop();
-
- bool isRunning();
- bool isStopped();
-
- QImage getDepth();
-
- void setMaxDist(unsigned int dist);
-
-private:
- // <-- Data to export outside of the thread
- QImage imageDepth;
- // --> End data to export outside of the thread
-
- unsigned int m_maxDist;
- qreal m_depthComp;
- bool t_requeststop;
- QMutex mutex;
- volatile KinectStatus status; // 0: pre-init. 1: init. 2: ok-run. 3:error-stop
- xn::Context g_Context;
- xn::DepthGenerator g_DepthGenerator;
-
- QImage createDepthImage();
-
- bool initialize();
-
-Q_SIGNALS:
- void dataNotification();
- void statusNotification(QKinect::KinectStatus);
-};
-
-} // End namespace
-
-// Register types used in signal/slot mechanism
-Q_DECLARE_METATYPE(QKinect::KinectStatus);
-
-#endif // __QKINECTWRAPPER_H
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/config.pro b/tests/manual/kinectsurface/QtKinectWrapper/config.pro
deleted file mode 100644
index 99ef60c1..00000000
--- a/tests/manual/kinectsurface/QtKinectWrapper/config.pro
+++ /dev/null
@@ -1,60 +0,0 @@
-# Include the configuration file below in the Qt .pro file, and modify the path accordingly.
-
-# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# ##############################################################################
-# ##############################################################################
-# Kinect: START OF CONFIGURATION BELOW ->
-#
-# Copy these lines at the end of your the project file of your application (.pro )
-# Check the lines indicated "Modify below" and adapt the path to:
-# 1) QtKinectWrapper sources (i.e. where the QKinectWrapper.* files lie),
-# 2) OpenNI path
-# 3) Make sure the OpenNI, PrimeSense NITE, PrimeSense Kinect Sensor are all in your path
-#
-# -------------------------------- Modify below --------------------------------
-
-# Set QTKINECTWRAPPER_SOURCE_PATH to point to the directory containing the QtKinectWrapper classes
-QTKINECTWRAPPER_SOURCE_PATH = ../../QtKinectWrapper
-
-# Set OPENNI_LIBRARY_PATH to point to the directory where openNI is installed. Assumption: the import libraries are in $$OPENNI_LIBRARY_PATH/lib
-# Multiple path can be specified (e.g. to handle x86 / x64 differences)
-# Quotation marks with spaces
-win32 {
-OPENNI_LIBRARY_PATH = "C:/Program Files (x86)/OpenNI"
-OPENNI_LIBRARY_PATH += "C:/Program Files/OpenNI"
-}
-
-# ------------------------------ Copy as-is below ------------------------------
-# ##############################################################################
-# ##############################################################################
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# ##############################################################################
-# Do not modify: default settings
-# ##############################################################################
-# Path for Qt wrapper
-INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH
-# Sources for Qt wrapper
-SOURCES += $$QTKINECTWRAPPER_SOURCE_PATH/QKinectWrapper.cpp
-HEADERS += $$QTKINECTWRAPPER_SOURCE_PATH/QKinectWrapper.h
-
-
-
-win32 {
- # Set the path to the patched openni/include
- INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH/OpenNI/Include
- # Set the path to the Qt wrapper
- INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH
-
- # Iterate through
- for(l, OPENNI_LIBRARY_PATH):LIBS+=-L$$l/lib
- #LIBS += -L$$OPENNI_LIBRARY_PATH/lib
- LIBS += -lopenNI
-}
-
-# ##############################################################################
-# ##############################################################################
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/tests/manual/kinectsurface/kinectsurface.pro b/tests/manual/kinectsurface/kinectsurface.pro
deleted file mode 100644
index c66ae901..00000000
--- a/tests/manual/kinectsurface/kinectsurface.pro
+++ /dev/null
@@ -1,71 +0,0 @@
-!include( ../tests.pri ) {
- error( "Couldn't find the tests.pri file!" )
-}
-
-SOURCES += main.cpp \
- surfacedata.cpp
-HEADERS += \
- surfacedata.h
-
-QT += widgets
-
-INSTALLS += target
-
-# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# ##############################################################################
-# ##############################################################################
-# Kinect: START OF CONFIGURATION BELOW ->
-#
-# Copy these lines at the end of your the project file of your application (.pro )
-# Check the lines indicated "Modify below" and adapt the path to:
-# 1) QtKinectWrapper sources (i.e. where the QKinectWrapper.* files lie),
-# 2) OpenNI path
-# 3) Make sure the OpenNI, PrimeSense NITE, PrimeSense Kinect Sensor are all in your path
-#
-# -------------------------------- Modify below --------------------------------
-
-# Set QTKINECTWRAPPER_SOURCE_PATH to point to the directory containing the QtKinectWrapper classes
-QTKINECTWRAPPER_SOURCE_PATH = QtKinectWrapper
-
-# Set OPENNI_LIBRARY_PATH to point to the directory where openNI is installed. Assumption: the import libraries are in $$OPENNI_LIBRARY_PATH/lib
-# Multiple path can be specified (e.g. to handle x86 / x64 differences)
-# Quotation marks with spaces
-win32 {
-OPENNI_LIBRARY_PATH = "C:/Program Files (x86)/OpenNI"
-OPENNI_LIBRARY_PATH += "C:/Program Files/OpenNI"
-}
-
-# ------------------------------ Copy as-is below ------------------------------
-# ##############################################################################
-# ##############################################################################
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# ##############################################################################
-# Do not modify: default settings
-# ##############################################################################
-# Path for Qt wrapper
-INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH
-# Sources for Qt wrapper
-SOURCES += $$QTKINECTWRAPPER_SOURCE_PATH/QKinectWrapper.cpp
-HEADERS += $$QTKINECTWRAPPER_SOURCE_PATH/QKinectWrapper.h
-
-
-
-win32 {
- # Set the path to the patched openni/include
- INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH/OpenNI/Include
- # Set the path to the Qt wrapper
- INCLUDEPATH += $$QTKINECTWRAPPER_SOURCE_PATH
-
- # Iterate through
- for(l, OPENNI_LIBRARY_PATH):LIBS+=-L$$l/lib
- #LIBS += -L$$OPENNI_LIBRARY_PATH/lib
- LIBS += -lopenNI
-}
-
-# ##############################################################################
-# ##############################################################################
-# QtKinectWrapper QtKinectWrapper QtKinectWrapper QtKinectWrapper
-# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/tests/manual/kinectsurface/main.cpp b/tests/manual/kinectsurface/main.cpp
deleted file mode 100644
index 96e362c4..00000000
--- a/tests/manual/kinectsurface/main.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "surfacedata.h"
-
-#include <QApplication>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QLabel>
-#include <QComboBox>
-#include <QSlider>
-#include <QTextEdit>
-#include <QScreen>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
-
- Q3DSurface *surface = new Q3DSurface();
- Q3DScatter *scatter = new Q3DScatter();
- Q3DBars *bars = new Q3DBars();
-
- QSize screenSize = surface->screen()->size();
-
- QWidget *containerSurface = QWidget::createWindowContainer(surface);
- containerSurface->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- containerSurface->setMaximumSize(screenSize);
- containerSurface->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- containerSurface->setFocusPolicy(Qt::StrongFocus);
-
- QWidget *containerScatter = QWidget::createWindowContainer(scatter);
- containerScatter->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- containerScatter->setMaximumSize(screenSize);
- containerScatter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- containerScatter->setFocusPolicy(Qt::StrongFocus);
- containerScatter->setVisible(false);
-
- QWidget *containerBars = QWidget::createWindowContainer(bars);
- containerBars->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- containerBars->setMaximumSize(screenSize);
- containerBars->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- containerBars->setFocusPolicy(Qt::StrongFocus);
- containerBars->setVisible(false);
-
- widget->setWindowTitle(QStringLiteral("Visualization from Kinect depth data"));
-
- hLayout->addWidget(containerSurface, 1);
- hLayout->addWidget(containerScatter, 1);
- hLayout->addWidget(containerBars, 1);
- hLayout->addLayout(vLayout);
-
- QPushButton *startButton = new QPushButton(widget);
- startButton->setFont(QFont("Arial", 30));
- startButton->setText(QStringLiteral("Start Kinect"));
-
- QPushButton *stopButton = new QPushButton(widget);
- stopButton->setFont(QFont("Arial", 30));
- stopButton->setText(QStringLiteral("Stop Kinect"));
-
- QLabel *resolutionLabel = new QLabel(QStringLiteral("Change resolution"));
- resolutionLabel->setFont(QFont("Arial", 15));
-
- QComboBox *resolutionBox = new QComboBox(widget);
- resolutionBox->setFont(QFont("Arial", 30));
- resolutionBox->addItem(QStringLiteral("Low"));
- resolutionBox->addItem(QStringLiteral("Medium"));
- resolutionBox->addItem(QStringLiteral("High"));
- resolutionBox->addItem(QStringLiteral("Max")); // Comment this out if demo machine is low-perf
- resolutionBox->setCurrentIndex(0);
-
- QLabel *modeLabel = new QLabel(QStringLiteral("Change visualization type"));
- modeLabel->setFont(QFont("Arial", 15));
-
- QComboBox *modeBox = new QComboBox(widget);
- modeBox->setFont(QFont("Arial", 30));
- modeBox->addItem(QStringLiteral("Surface Plot"));
- modeBox->addItem(QStringLiteral("Scatter Chart"));
- modeBox->addItem(QStringLiteral("Bar Chart"));
- modeBox->setCurrentIndex(0);
-
- QLabel *distanceLabel = new QLabel(QStringLiteral("Adjust far distance"));
- distanceLabel->setFont(QFont("Arial", 15));
-
- QSlider *distanceSlider = new QSlider(Qt::Horizontal, widget);
- distanceSlider->setMinimumHeight(60);
- distanceSlider->setTickInterval(10);
- distanceSlider->setTickPosition(QSlider::TicksBelow);
- distanceSlider->setMinimum(10);
- distanceSlider->setValue(50);
- distanceSlider->setMaximum(200);
-
- QLabel *gradientLabel = new QLabel(QStringLiteral("Change color scheme"));
- gradientLabel->setFont(QFont("Arial", 15));
-
- QLinearGradient gradientOne(0, 0, 200, 1);
- gradientOne.setColorAt(0.0, Qt::black);
- gradientOne.setColorAt(0.33, Qt::blue);
- gradientOne.setColorAt(0.67, Qt::red);
- gradientOne.setColorAt(1.0, Qt::yellow);
-
- QPixmap pm(200, 60);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(gradientOne));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(0, 0, 200, 60);
-
- QPushButton *gradientOneButton = new QPushButton(widget);
- gradientOneButton->setIcon(QIcon(pm));
- gradientOneButton->setIconSize(QSize(200, 60));
- gradientOneButton->setToolTip(QStringLiteral("Colors: Thermal Imitation"));
-
- QLinearGradient gradientTwo(0, 0, 200, 1);
- gradientTwo.setColorAt(0.0, Qt::white);
- gradientTwo.setColorAt(0.8, Qt::red);
- gradientTwo.setColorAt(1.0, Qt::green);
-
- pmp.setBrush(QBrush(gradientTwo));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(0, 0, 200, 60);
-
- QPushButton *gradientTwoButton = new QPushButton(widget);
- gradientTwoButton->setIcon(QIcon(pm));
- gradientTwoButton->setIconSize(QSize(200, 60));
- gradientTwoButton->setToolTip(QStringLiteral("Colors: Highlight Foreground"));
-
- QTextEdit *status = new QTextEdit(QStringLiteral("<b>Ready</b><br>"), widget);
- status->setReadOnly(true);
-
- vLayout->addWidget(startButton);
- vLayout->addWidget(stopButton);
- vLayout->addWidget(resolutionLabel);
- vLayout->addWidget(resolutionBox);
- vLayout->addWidget(modeLabel);
- vLayout->addWidget(modeBox);
- vLayout->addWidget(distanceLabel);
- vLayout->addWidget(distanceSlider);
- vLayout->addWidget(gradientLabel);
- vLayout->addWidget(gradientOneButton);
- vLayout->addWidget(gradientTwoButton);
- vLayout->addWidget(status, 1, Qt::AlignBottom);
-
- widget->show();
-
- SurfaceData datagen(surface, scatter, bars, status);
- ContainerChanger changer(containerSurface, containerScatter, containerBars,
- gradientOneButton, gradientTwoButton);
-
- QObject::connect(startButton, &QPushButton::clicked, &datagen, &SurfaceData::start);
- QObject::connect(stopButton, &QPushButton::clicked, &datagen, &SurfaceData::stop);
- QObject::connect(distanceSlider, &QSlider::valueChanged, &datagen, &SurfaceData::setDistance);
- QObject::connect(resolutionBox, SIGNAL(activated(int)), &datagen, SLOT(setResolution(int)));
- QObject::connect(modeBox, SIGNAL(activated(int)), &changer, SLOT(changeContainer(int)));
- QObject::connect(modeBox, SIGNAL(activated(int)), &datagen, SLOT(changeMode(int)));
- QObject::connect(status, &QTextEdit::textChanged, &datagen, &SurfaceData::scrollDown);
- QObject::connect(gradientOneButton, &QPushButton::clicked, &datagen,
- &SurfaceData::useGradientOne);
- QObject::connect(gradientTwoButton, &QPushButton::clicked, &datagen,
- &SurfaceData::useGradientTwo);
-
- datagen.setDistance(distanceSlider->value());
-
- return app.exec();
-}
diff --git a/tests/manual/kinectsurface/surfacedata.cpp b/tests/manual/kinectsurface/surfacedata.cpp
deleted file mode 100644
index 89f696c4..00000000
--- a/tests/manual/kinectsurface/surfacedata.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "surfacedata.h"
-#include "QKinectWrapper.h"
-#include <QtDataVisualization/QValue3DAxis>
-#include <QtDataVisualization/Q3DCamera>
-#include <QtDataVisualization/QBar3DSeries>
-#include <QtDataVisualization/QScatter3DSeries>
-#include <QtDataVisualization/QSurface3DSeries>
-#include <QtDataVisualization/Q3DTheme>
-#include <QScrollBar>
-#include <QSize>
-#include <QImage>
-
-using namespace QtDataVisualization;
-
-//#define LOW_END_DEVICE // Uncomment for devices with limited processing/grpahics power
-
-#ifdef LOW_END_DEVICE
-const QSize lowRes = QSize(160, 120);
-const QSize medRes = QSize(192, 144);
-const QSize hiRes = QSize(256, 192);
-const QSize maxRes = QSize(320, 240);
-#else
-const QSize lowRes = QSize(320, 240);
-const QSize medRes = QSize(384, 288);
-const QSize hiRes = QSize(512, 384);
-const QSize maxRes = QSize(640, 480);
-#endif
-
-SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars,
- QTextEdit *statusArea) :
- m_thermalTheme(new Q3DTheme(Q3DTheme::ThemeIsabelle)),
- m_highlightTheme(new Q3DTheme(Q3DTheme::ThemeQt)),
- m_surface(surface),
- m_scatter(scatter),
- m_bars(bars),
- m_statusArea(statusArea),
- m_resize(true),
- m_resolution(lowRes),
- m_resolutionLevel(0),
- m_mode(Surface)
-{
- // Initialize themes for surface
- m_thermalTheme->setGridEnabled(false);
- m_thermalTheme->setBackgroundEnabled(false);
- m_thermalTheme->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- QLinearGradient thermalGradient;
- thermalGradient.setColorAt(0.0, Qt::black);
- thermalGradient.setColorAt(0.33, Qt::blue);
- thermalGradient.setColorAt(0.67, Qt::red);
- thermalGradient.setColorAt(1.0, Qt::yellow);
- QList<QLinearGradient> thermalGradients;
- thermalGradients.append(thermalGradient);
- m_thermalTheme->setBaseGradients(thermalGradients);
-
- m_highlightTheme->setGridEnabled(false);
- m_highlightTheme->setBackgroundEnabled(false);
- m_highlightTheme->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- QLinearGradient highlightGradient;
- highlightGradient.setColorAt(0.0, Qt::white);
- highlightGradient.setColorAt(0.8, Qt::red);
- highlightGradient.setColorAt(1.0, Qt::green);
- QList<QLinearGradient> highlightGradients;
- highlightGradients.append(highlightGradient);
- m_highlightTheme->setBaseGradients(highlightGradients);
-
- // Initialize surface
- m_surface->setActiveTheme(m_thermalTheme);
- QLinearGradient gradient;
- gradient.setColorAt(0.0, Qt::black);
- gradient.setColorAt(0.33, Qt::blue);
- gradient.setColorAt(0.67, Qt::red);
- gradient.setColorAt(1.0, Qt::yellow);
- m_surface->setSelectionMode(QAbstract3DGraph::SelectionNone);
- m_surface->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
- m_surface->scene()->activeCamera()->setCameraPosition(0.0, 90.0, 150.0);
- m_surface->axisY()->setMax(255);
- QSurface3DSeries *series1 = new QSurface3DSeries(new QHeightMapSurfaceDataProxy());
- series1->setFlatShadingEnabled(true);
- series1->setDrawMode(QSurface3DSeries::DrawSurface);
- m_surface->addSeries(series1);
-
- // Initialize scatter
- m_scatter->activeTheme()->setType(Q3DTheme::ThemeStoneMoss);
- m_scatter->setSelectionMode(QAbstract3DGraph::SelectionNone);
- m_scatter->activeTheme()->setGridEnabled(false);
- m_scatter->setShadowQuality(QAbstract3DGraph::ShadowQualityLow);
- m_scatter->scene()->activeCamera()->setCameraPosition(0.0, 60.0, 150.0);
- QScatter3DSeries *series2 = new QScatter3DSeries;
-#ifdef LOW_END_DEVICE
- series2->setMesh(QAbstract3DSeries::MeshPoint);
-#else
- m_scatter->activeTheme()->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- series2->setMesh(QAbstract3DSeries::MeshMinimal);
-#endif
- m_scatter->addSeries(series2);
- m_scatter->axisY()->setMin(-128);
- m_scatter->axisY()->setMax(128);
- m_scatter->axisX()->setMin(-m_resolution.width() / 2);
- m_scatter->axisX()->setMax(m_resolution.width() / 2);
- m_scatter->axisZ()->setMin(-m_resolution.height() / 2);
- m_scatter->axisZ()->setMax(m_resolution.height() / 2);
-
- // Initialize bars
- m_bars->activeTheme()->setType(Q3DTheme::ThemeArmyBlue);
- QLinearGradient bargradient;
- bargradient.setColorAt(0.48, Qt::white);
- bargradient.setColorAt(0.481, Qt::red);
- bargradient.setColorAt(0.52, Qt::red);
- bargradient.setColorAt(0.521, Qt::black);
- QList<QLinearGradient> bargradients;
- bargradients.append(bargradient);
- m_bars->activeTheme()->setBaseGradients(bargradients);
- m_bars->activeTheme()->setColorStyle(Q3DTheme::ColorStyleRangeGradient);
- m_bars->setSelectionMode(QAbstract3DGraph::SelectionNone);
- m_bars->activeTheme()->setGridEnabled(false);
- m_bars->activeTheme()->setBackgroundEnabled(false);
-#ifdef LOW_END_DEVICE
- m_bars->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
-#else
- m_bars->setShadowQuality(QAbstract3DGraph::ShadowQualityLow);
-#endif
- m_bars->setBarSpacing(QSizeF(0.0, 0.0));
- m_bars->scene()->activeCamera()->setCameraPosition(0.0, 65.0, 130.0);
- QBar3DSeries *series3 = new QBar3DSeries;
- series3->setMesh(QAbstract3DSeries::MeshBar);
- m_bars->addSeries(series3);
- m_bars->valueAxis()->setMax(255);
-
- // Hide scroll bar
- m_statusArea->verticalScrollBar()->setVisible(false);
-
- // Connect Kinect signals
- connect(&m_kinect, &QKinect::QKinectWrapper::dataNotification, this, &SurfaceData::updateData);
- connect(&m_kinect, &QKinect::QKinectWrapper::statusNotification, this,
- &SurfaceData::updateStatus);
-}
-
-SurfaceData::~SurfaceData()
-{
- delete m_bars;
- delete m_surface;
- delete m_scatter;
-}
-
-void SurfaceData::updateData()
-{
- QImage depthMap = m_kinect.getDepth();
- if (m_resize) // Resize for better performance
- depthMap = depthMap.scaled(m_resolution);
- if (m_mode != Surface) {
- setData(depthMap);
- } else {
- static_cast<QHeightMapSurfaceDataProxy *>(m_surface->seriesList().at(0)->dataProxy())->setValueRanges(
- 0, depthMap.width(), 0, depthMap.height());
- static_cast<QHeightMapSurfaceDataProxy *>(m_surface->seriesList().at(0)->dataProxy())->setHeightMap(
- depthMap);
- }
-}
-
-void SurfaceData::updateStatus(QKinect::KinectStatus status)
-{
- switch (status) {
- case QKinect::Idle: {
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Stopped"));
- m_statusArea->append(QStringLiteral("<br><b>Ready</b><br>"));
- break;
- }
- case QKinect::Initializing: {
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Initializing"));
- break;
- }
- case QKinect::OkRun: {
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Running"));
- m_statusArea->append(QString(QStringLiteral("<i> - resolution: %1 x %2</i>")).arg(
- m_resolution.width()).arg(m_resolution.height()));
- break;
- }
- default: {
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Error"));
- break;
- }
- };
-}
-
-void SurfaceData::start()
-{
- if (m_kinect.isStopped())
- m_kinect.start();
- else
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Already running"));
-}
-
-void SurfaceData::stop()
-{
- if (m_kinect.isRunning())
- m_kinect.stop();
- else
- m_statusArea->append(QStringLiteral("<b>Kinect:</b> Already stopped"));
-}
-
-void SurfaceData::setDistance(int distance)
-{
- m_kinect.setMaxDist((unsigned int)(distance * 100));
-}
-
-void SurfaceData::setResolution(int selection)
-{
- m_resolutionLevel = selection;
- switch (selection) {
- case 0: {
- m_resize = true;
- m_resolution = lowRes;
- break;
- }
- case 1: {
- m_resize = true;
- m_resolution = medRes;
- break;
- }
- case 2: {
- m_resize = true;
- m_resolution = hiRes;
- break;
- }
- case 3: {
- m_resize = false;
- m_resolution = maxRes;
- break;
- }
- };
- if (m_mode == Scatter) {
- m_resize = true;
- m_resolution /= 4;
- m_scatter->axisX()->setMin(-m_resolution.width() / 2);
- m_scatter->axisX()->setMax(m_resolution.width() / 2);
- m_scatter->axisZ()->setMin(-m_resolution.height() / 2);
- m_scatter->axisZ()->setMax(m_resolution.height() / 2);
- m_scatterDataArray = new QScatterDataArray;
- m_scatterDataArray->resize(m_resolution.width() * m_resolution.height());
- } else if (m_mode == MeshBars) {
- m_resize = true;
- m_resolution /= 4;
- m_barDataArray = new QBarDataArray;
- m_barDataArray->reserve(m_resolution.height());
- for (int i = 0; i < m_resolution.height(); i++) {
- QBarDataRow *newProxyRow = new QBarDataRow(m_resolution.width());
- m_barDataArray->append(newProxyRow);
- }
- }
-
- m_statusArea->append(QString(QStringLiteral("<b>Resolution:</b> %1 x %2")).arg(
- m_resolution.width()).arg(m_resolution.height()));
- if (m_kinect.isStopped())
- m_statusArea->append(QStringLiteral("<i> - change takes effect once Kinect is running</i>"));
-}
-
-void SurfaceData::scrollDown()
-{
- QScrollBar *scrollbar = m_statusArea->verticalScrollBar();
- scrollbar->setValue(scrollbar->maximum());
-}
-
-void SurfaceData::useGradientOne()
-{
- m_surface->setActiveTheme(m_thermalTheme);
- m_statusArea->append(QStringLiteral("<b>Colors:</b> Thermal image imitation"));
-}
-
-void SurfaceData::useGradientTwo()
-{
- m_surface->setActiveTheme(m_highlightTheme);
- m_statusArea->append(QStringLiteral("<b>Colors:</b> Highlight foreground"));
-}
-
-void SurfaceData::setData(const QImage &image)
-{
- QImage heightImage = image;
-
- uchar *bits = heightImage.bits();
-
- int imageHeight = heightImage.height();
- int imageWidth = heightImage.width();
- int bitCount = imageWidth * 4 * (imageHeight - 1);
- int widthBits = imageWidth * 4;
-
- if (m_mode == Scatter) {
- QScatterDataItem *ptrToDataArray = &m_scatterDataArray->first();
-
- int limitsX = imageWidth / 2;
- int limitsZ = imageHeight / 2;
- qreal height = 0;
- int count = 0;
-
- for (int i = -limitsZ; i < limitsZ; i++, bitCount -= widthBits) {
- for (int j = -limitsX; j < limitsX; j++) {
- height = qreal(bits[bitCount + ((j + limitsX) * 4)]) - 128.0;
- if (height > -128) {
- ptrToDataArray->setPosition(QVector3D(qreal(j), height, qreal(i)));
- ptrToDataArray++;
- count++;
- }
- }
- }
-
- QScatterDataArray *dataArray = new QScatterDataArray(m_scatterDataArray->mid(0, count));
- m_scatter->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- } else {
- QBarDataArray *dataArray = m_barDataArray;
- for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) {
- QBarDataRow &newRow = *dataArray->at(i);
- for (int j = 0; j < imageWidth; j++)
- newRow[j] = qreal(bits[bitCount + (j * 4)]);
- }
-
- m_bars->seriesList().at(0)->dataProxy()->resetArray(dataArray);
- }
-}
-
-void SurfaceData::changeMode(int mode)
-{
- m_mode = VisualizationMode(mode);
- switch (m_mode) {
- case Surface: {
- m_statusArea->append(QStringLiteral("<b>Visualization Type:</b> Surface"));
- break;
- }
- case Scatter: {
- m_statusArea->append(QStringLiteral("<b>Visualization Type:</b> Scatter"));
- break;
- }
- default: {
- m_statusArea->append(QStringLiteral("<b>Visualization Type:</b> Bars"));
- break;
- }
- }
- // Reset resolution after mode change
- setResolution(m_resolutionLevel);
-}
-
-ContainerChanger::ContainerChanger(QWidget *surface, QWidget *scatter, QWidget *bars,
- QWidget *buttonOne, QWidget *buttonTwo)
- : m_surface(surface),
- m_scatter(scatter),
- m_bars(bars),
- m_button1(buttonOne),
- m_button2(buttonTwo)
-{
-}
-
-ContainerChanger::~ContainerChanger()
-{
-}
-
-void ContainerChanger::changeContainer(int container)
-{
- switch (container) {
- case 0: {
- m_scatter->setVisible(false);
- m_bars->setVisible(false);
- m_surface->setVisible(true);
- m_button1->setEnabled(true);
- m_button2->setEnabled(true);
- break;
- }
- case 1: {
- m_surface->setVisible(false);
- m_bars->setVisible(false);
- m_scatter->setVisible(true);
- m_button1->setEnabled(false);
- m_button2->setEnabled(false);
- break;
- }
- case 2: {
- m_surface->setVisible(false);
- m_scatter->setVisible(false);
- m_bars->setVisible(true);
- m_button1->setEnabled(false);
- m_button2->setEnabled(false);
- break;
- }
- }
-}
diff --git a/tests/manual/kinectsurface/surfacedata.h b/tests/manual/kinectsurface/surfacedata.h
deleted file mode 100644
index 07e1a23b..00000000
--- a/tests/manual/kinectsurface/surfacedata.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef SURFACEDATA_H
-#define SURFACEDATA_H
-
-#define NOMINMAX
-
-#include "QKinectWrapper.h"
-#include <QtDataVisualization/Q3DScatter>
-#include <QtDataVisualization/Q3DBars>
-#include <QtDataVisualization/Q3DSurface>
-#include <QtDataVisualization/QScatterDataProxy>
-#include <QtDataVisualization/QBarDataProxy>
-#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
-#include <QTextEdit>
-
-using namespace QtDataVisualization;
-
-class SurfaceData : public QObject
-{
- Q_OBJECT
-
-public:
- explicit SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars,
- QTextEdit *statusLabel);
- ~SurfaceData();
-
- void start();
- void stop();
-
- void updateData();
- void updateStatus(QKinect::KinectStatus status);
-
- void setDistance(int distance);
- void scrollDown();
- void setData(const QImage &image);
- void useGradientOne();
- void useGradientTwo();
-
-public:
- enum VisualizationMode {
- Surface = 0,
- Scatter,
- MeshBars
- };
-
-public Q_SLOTS:
- void setResolution(int selection);
- void changeMode(int mode);
-
-private:
- Q3DTheme *m_thermalTheme;
- Q3DTheme *m_highlightTheme;
- Q3DSurface *m_surface;
- Q3DScatter *m_scatter;
- Q3DBars *m_bars;
- QTextEdit *m_statusArea;
- bool m_resize;
- QSize m_resolution;
- int m_resolutionLevel;
- VisualizationMode m_mode;
- QScatterDataArray *m_scatterDataArray;
- QBarDataArray *m_barDataArray;
- QKinect::QKinectWrapper m_kinect;
-};
-
-class ContainerChanger : public QObject
-{
- Q_OBJECT
-
-public:
- explicit ContainerChanger(QWidget *surface, QWidget *scatter, QWidget *bars,
- QWidget *buttonOne, QWidget *buttonTwo);
- ~ContainerChanger();
-
-public Q_SLOTS:
- void changeContainer(int container);
-
-private:
- QWidget *m_surface;
- QWidget *m_scatter;
- QWidget *m_bars;
- QWidget *m_button1;
- QWidget *m_button2;
-};
-
-#endif
diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro
index 0a31e9e5..8259eedf 100644
--- a/tests/manual/manual.pro
+++ b/tests/manual/manual.pro
@@ -1,9 +1,7 @@
TEMPLATE = subdirs
qtHaveModule(quick) {
- SUBDIRS += qmlcamera \
- qmldynamicdata \
- qmlmultiwindow \
+ SUBDIRS += qmldynamicdata \
qmlmultitest \
qmlvolume \
qmlperf
@@ -23,8 +21,4 @@ qtHaveModule(quick) {
minimalscatter \
minimalsurface
- # Requires Kinect drivers
- #SUBDIRS += kinectsurface
}
-
-qtHaveModule(multimedia):!android:!static:!winrt: SUBDIRS += spectrum
diff --git a/tests/manual/qmlcamera/main.cpp b/tests/manual/qmlcamera/main.cpp
deleted file mode 100644
index 856d5a47..00000000
--- a/tests/manual/qmlcamera/main.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
-
- viewer.setSource(QUrl("qrc:/qml/qmlcamera/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/tests/manual/qmlcamera/qml/qmlcamera/Axes.qml b/tests/manual/qmlcamera/qml/qmlcamera/Axes.qml
deleted file mode 100644
index ec7933e5..00000000
--- a/tests/manual/qmlcamera/qml/qmlcamera/Axes.qml
+++ /dev/null
@@ -1,49 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-import QtDataVisualization 1.0
-
-Item {
- property alias column: columnAxis
- property alias expenses: expensesAxis
- property alias income: incomeAxis
-
- // For row labels we can use row labels from data proxy, so default axis
- // suffices for rows.
-
- // Custom labels for columns, since the data contains abbreviated month names.
- CategoryAxis3D {
- id: columnAxis
- labels: ["January", "February", "March", "April", "May", "June",
- "July", "August", "September", "October", "November", "December"]
- }
- ValueAxis3D {
- id: incomeAxis
- labelFormat: "%.2f M\u20AC"
- title: "Monthly income"
- }
- ValueAxis3D {
- id: expensesAxis
- labelFormat: "-%.2f M\u20AC"
- title: "Monthly expenses"
- }
-}
diff --git a/tests/manual/qmlcamera/qml/qmlcamera/ControlSurface.qml b/tests/manual/qmlcamera/qml/qmlcamera/ControlSurface.qml
deleted file mode 100644
index 25553776..00000000
--- a/tests/manual/qmlcamera/qml/qmlcamera/ControlSurface.qml
+++ /dev/null
@@ -1,56 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.0
-
-Rectangle {
- id: controlRect
- color: "#000000"
- property real xValue : 0
- property real yValue : 0
- property real minXValue : 0
- property real minYValue : 0
- property real maxXValue : 0
- property real maxYValue : 0
-
- property real halfWidth: width / 2.0;
- property real halfHeight: height / 2.0;
-
- Rectangle {
- id: pointer
- color: "#FFFFFF"
- width: 5
- height: 5
- }
-
- MouseArea {
- id: inputArea
- anchors.fill: parent
- onPositionChanged: {
- pointer.x = Math.min(Math.max(0, mouse.x), controlRect.width - pointer.width );
- pointer.y = Math.min(Math.max(0, mouse.y), controlRect.height - pointer.height);
- var mixX = (mouse.x / controlRect.width);
- var mixY = (mouse.y / controlRect.width);
- controlRect.xValue = minXValue*(1-mixX) + maxXValue*mixX;
- controlRect.yValue = minYValue*(1-mixY) + maxYValue*mixY;
- }
- }
-}
diff --git a/tests/manual/qmlcamera/qml/qmlcamera/Data.qml b/tests/manual/qmlcamera/qml/qmlcamera/Data.qml
deleted file mode 100644
index 08764615..00000000
--- a/tests/manual/qmlcamera/qml/qmlcamera/Data.qml
+++ /dev/null
@@ -1,144 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-import QtDataVisualization 1.1
-
-Item {
- property alias model: dataModel
- property alias proxy: modelProxy
- property alias series: barSeries
-
- ItemModelBarDataProxy {
- id: modelProxy
- itemModel: dataModel
- rowRole: "year"
- columnRole: "month"
- valueRole: "expenses"
- rotationRole: "angle"
- valueRolePattern: /@*(\d*)t*/
- rotationRolePattern: /jjj/
- valueRoleReplace: "\\1"
- rotationRoleReplace: "1"
- }
-
- Bar3DSeries {
- id: barSeries
- dataProxy: modelProxy
- itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel"
-
- onMeshAngleChanged: console.log("angle changed:", angle)
- }
-
- ListModel {
- id: dataModel
- ListElement{ year: "2006"; month: "Jan"; expenses: "@@4ttt"; angle: "jjj1"; income: "5" }
- ListElement{ year: "2006"; month: "Feb"; expenses: "@@5ttt"; angle: "jjj2"; income: "6" }
- ListElement{ year: "2006"; month: "Mar"; expenses: "@@7ttt"; angle: "jjj3"; income: "4" }
- ListElement{ year: "2006"; month: "Apr"; expenses: "@@3ttt"; angle: "jjj4"; income: "2" }
- ListElement{ year: "2006"; month: "May"; expenses: "@@4ttt"; angle: "jjj5"; income: "1" }
- ListElement{ year: "2006"; month: "Jun"; expenses: "@@2ttt"; angle: "jjj6"; income: "2" }
- ListElement{ year: "2006"; month: "Jul"; expenses: "@@1ttt"; angle: "jjj7"; income: "3" }
- ListElement{ year: "2006"; month: "Aug"; expenses: "@@5ttt"; angle: "jjj8"; income: "1" }
- ListElement{ year: "2006"; month: "Sep"; expenses: "@@2ttt"; angle: "jjj9"; income: "3" }
- ListElement{ year: "2006"; month: "Oct"; expenses: "@@5ttt"; angle: "jjj10"; income: "2" }
- ListElement{ year: "2006"; month: "Nov"; expenses: "@@8ttt"; angle: "jjj11"; income: "5" }
- ListElement{ year: "2006"; month: "Dec"; expenses: "@@3ttt"; angle: "jjj12"; income: "3" }
-
- ListElement{ year: "2007"; month: "Jan"; expenses: "@@3ttt"; angle: "jjj13"; income: "1" }
- ListElement{ year: "2007"; month: "Feb"; expenses: "@@4ttt"; angle: "jjj14"; income: "2" }
- ListElement{ year: "2007"; month: "Mar"; expenses: "@@12ttt"; angle: "jjj15"; income: "4" }
- ListElement{ year: "2007"; month: "Apr"; expenses: "@@13ttt"; angle: "jjj16"; income: "6" }
- ListElement{ year: "2007"; month: "May"; expenses: "@@14ttt"; angle: "jjj17"; income: "11" }
- ListElement{ year: "2007"; month: "Jun"; expenses: "@@7ttt"; angle: "jjj18"; income: "7" }
- ListElement{ year: "2007"; month: "Jul"; expenses: "@@6ttt"; angle: "jjj19"; income: "4" }
- ListElement{ year: "2007"; month: "Aug"; expenses: "@@4ttt"; angle: "jjj20"; income: "15" }
- ListElement{ year: "2007"; month: "Sep"; expenses: "@@2ttt"; angle: "jjj21"; income: "18" }
- ListElement{ year: "2007"; month: "Oct"; expenses: "@@29ttt"; angle: "jjj22"; income: "25" }
- ListElement{ year: "2007"; month: "Nov"; expenses: "@@23ttt"; angle: "jjj23"; income: "29" }
- ListElement{ year: "2007"; month: "Dec"; expenses: "@@5ttt"; angle: "jjj24"; income: "9" }
-
- ListElement{ year: "2008"; month: "Jan"; expenses: "@@3"; income: "8" }
- ListElement{ year: "2008"; month: "Feb"; expenses: "@@8"; income: "14" }
- ListElement{ year: "2008"; month: "Mar"; expenses: "@@10"; income: "20" }
- ListElement{ year: "2008"; month: "Apr"; expenses: "@@12"; income: "24" }
- ListElement{ year: "2008"; month: "May"; expenses: "@@10"; income: "19" }
- ListElement{ year: "2008"; month: "Jun"; expenses: "@@5"; income: "8" }
- ListElement{ year: "2008"; month: "Jul"; expenses: "@@1"; income: "4" }
- ListElement{ year: "2008"; month: "Aug"; expenses: "@@7"; income: "12" }
- ListElement{ year: "2008"; month: "Sep"; expenses: "@@4"; income: "16" }
- ListElement{ year: "2008"; month: "Oct"; expenses: "@@22"; income: "33" }
- ListElement{ year: "2008"; month: "Nov"; expenses: "@@16"; income: "25" }
- ListElement{ year: "2008"; month: "Dec"; expenses: "@@2"; income: "7" }
-
- ListElement{ year: "2009"; month: "Jan"; expenses: "@@4ttt"; angle: "jjj37"; income: "5" }
- ListElement{ year: "2009"; month: "Feb"; expenses: "@@4ttt"; angle: "jjj38"; income: "7" }
- ListElement{ year: "2009"; month: "Mar"; expenses: "@@11ttt"; angle: "jjj39"; income: "14" }
- ListElement{ year: "2009"; month: "Apr"; expenses: "@@16ttt"; angle: "jjj40"; income: "22" }
- ListElement{ year: "2009"; month: "May"; expenses: "@@3ttt"; angle: "jjj41"; income: "5" }
- ListElement{ year: "2009"; month: "Jun"; expenses: "@@4ttt"; angle: "jjj42"; income: "8" }
- ListElement{ year: "2009"; month: "Jul"; expenses: "@@7ttt"; angle: "jjj43"; income: "9" }
- ListElement{ year: "2009"; month: "Aug"; expenses: "@@9ttt"; angle: "jjj44"; income: "13" }
- ListElement{ year: "2009"; month: "Sep"; expenses: "@@1ttt"; angle: "jjj45"; income: "6" }
- ListElement{ year: "2009"; month: "Oct"; expenses: "@@14ttt"; angle: "jjj46"; income: "25" }
- ListElement{ year: "2009"; month: "Nov"; expenses: "@@19ttt"; angle: "jjj47"; income: "29" }
- ListElement{ year: "2009"; month: "Dec"; expenses: "@@5ttt"; angle: "jjj48"; income: "7" }
-
- ListElement{ year: "2010"; month: "Jan"; expenses: "@@14ttt"; angle: "jjj49"; income: "22" }
- ListElement{ year: "2010"; month: "Feb"; expenses: "@@5ttt"; angle: "jjj50"; income: "7" }
- ListElement{ year: "2010"; month: "Mar"; expenses: "@@1ttt"; angle: "jjj51"; income: "9" }
- ListElement{ year: "2010"; month: "Apr"; expenses: "@@1ttt"; angle: "jjj52"; income: "12" }
- ListElement{ year: "2010"; month: "May"; expenses: "@@5ttt"; angle: "jjj53"; income: "9" }
- ListElement{ year: "2010"; month: "Jun"; expenses: "@@5ttt"; angle: "jjj54"; income: "8" }
- ListElement{ year: "2010"; month: "Jul"; expenses: "@@3ttt"; angle: "jjj55"; income: "7" }
- ListElement{ year: "2010"; month: "Aug"; expenses: "@@1ttt"; angle: "jjj56"; income: "5" }
- ListElement{ year: "2010"; month: "Sep"; expenses: "@@2ttt"; angle: "jjj57"; income: "4" }
- ListElement{ year: "2010"; month: "Oct"; expenses: "@@10ttt"; angle: "jjj58"; income: "13" }
- ListElement{ year: "2010"; month: "Nov"; expenses: "@@12ttt"; angle: "jjj59"; income: "17" }
- ListElement{ year: "2010"; month: "Dec"; expenses: "@@6ttt"; angle: "jjj60"; income: "9" }
-
- ListElement{ year: "2011"; month: "Jan"; expenses: "@@2ttt"; angle: "jjj61"; income: "6" }
- ListElement{ year: "2011"; month: "Feb"; expenses: "@@4ttt"; angle: "jjj62"; income: "8" }
- ListElement{ year: "2011"; month: "Mar"; expenses: "@@7ttt"; angle: "jjj63"; income: "12" }
- ListElement{ year: "2011"; month: "Apr"; expenses: "@@9ttt"; angle: "jjj64"; income: "15" }
- ListElement{ year: "2011"; month: "May"; expenses: "@@7ttt"; angle: "jjj65"; income: "19" }
- ListElement{ year: "2011"; month: "Jun"; expenses: "@@9ttt"; angle: "jjj66"; income: "18" }
- ListElement{ year: "2011"; month: "Jul"; expenses: "@@13ttt"; angle: "jjj67"; income: "17" }
- ListElement{ year: "2011"; month: "Aug"; expenses: "@@5ttt"; angle: "jjj68"; income: "9" }
- ListElement{ year: "2011"; month: "Sep"; expenses: "@@3ttt"; angle: "jjj69"; income: "8" }
- ListElement{ year: "2011"; month: "Oct"; expenses: "@@13ttt"; angle: "jjj70"; income: "15" }
- ListElement{ year: "2011"; month: "Nov"; expenses: "@@8ttt"; angle: "jjj71"; income: "17" }
- ListElement{ year: "2011"; month: "Dec"; expenses: "@@7ttt"; angle: "jjj72"; income: "10" }
-
- ListElement{ year: "2012"; month: "Jan"; expenses: "@@12ttt"; angle: "jjj73"; income: "16" }
- ListElement{ year: "2012"; month: "Feb"; expenses: "@@24ttt"; angle: "jjj74"; income: "28" }
- ListElement{ year: "2012"; month: "Mar"; expenses: "@@27ttt"; angle: "jjj75"; income: "22" }
- ListElement{ year: "2012"; month: "Apr"; expenses: "@@29ttt"; angle: "jjj76"; income: "25" }
- ListElement{ year: "2012"; month: "May"; expenses: "@@27ttt"; angle: "jjj77"; income: "29" }
- ListElement{ year: "2012"; month: "Jun"; expenses: "@@19ttt"; angle: "jjj78"; income: "18" }
- ListElement{ year: "2012"; month: "Jul"; expenses: "@@13ttt"; angle: "jjj79"; income: "17" }
- ListElement{ year: "2012"; month: "Aug"; expenses: "@@15ttt"; angle: "jjj80"; income: "19" }
- ListElement{ year: "2012"; month: "Sep"; expenses: "@@3ttt"; angle: "jjj81"; income: "8" }
- ListElement{ year: "2012"; month: "Oct"; expenses: "@@3ttt"; angle: "jjj82"; income: "6" }
- ListElement{ year: "2012"; month: "Nov"; expenses: "@@4ttt"; angle: "jjj83"; income: "8" }
- ListElement{ year: "2012"; month: "Dec"; expenses: "@@5ttt"; angle: "jjj84"; income: "9" }
- }
-}
diff --git a/tests/manual/qmlcamera/qml/qmlcamera/main.qml b/tests/manual/qmlcamera/qml/qmlcamera/main.qml
deleted file mode 100644
index 7a697a16..00000000
--- a/tests/manual/qmlcamera/qml/qmlcamera/main.qml
+++ /dev/null
@@ -1,238 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtDataVisualization 1.2
-import "."
-
-Rectangle {
- id: mainview
- width: 1280
- height: 1024
- visible: true
-
- Data {
- id: chartData
- }
-
- Axes {
- id: chartAxes
- }
-
- Camera3D {
- id: customCamera
- wrapXRotation: false
- xRotation: camControlArea.xValue
- yRotation: camControlArea.yValue
- zoomLevel: zoomSlider.value
- target: Qt.vector3d(0.5, 0.5, 0.5)
- }
-
- Item {
- id: dataView
- width: parent.width - camControlArea.width
- height: parent.height
- anchors.right: parent.right;
-
- Bars3D {
- id: testChart
- width: dataView.width
- height: dataView.height
- shadowQuality: Bars3D.ShadowQualityMedium
- selectionMode: Bars3D.SelectionItem
- theme: Theme3D {
- type: Theme3D.ThemeDigia
- font.pointSize: 35
- labelBackgroundEnabled: true
- }
- seriesList: [chartData.series]
- barThickness: 0.5
- barSpacing: Qt.size(0.5, 0.5)
- barSpacingRelative: false
-
- columnAxis: chartAxes.column
- valueAxis: chartAxes.expenses
-
- scene.activeCamera: customCamera
- inputHandler: null
-
- customItemList: [shuttleItem, labelItem]
- orthoProjection: true
-
- floorLevel: 10
- }
-
- Custom3DItem {
- id: shuttleItem
- meshFile: ":/items/shuttle.obj"
- textureFile: ":/items/shuttle.png"
- position: Qt.vector3d(2.0,29.0,2.0)
- scaling: Qt.vector3d(0.2,0.2,0.2)
- }
-
- Custom3DLabel {
- id: labelItem
- facingCamera: true
- positionAbsolute: true
- position: Qt.vector3d(-1.0,1.5,-1.0)
- scaling: Qt.vector3d(1.0,1.0,1.0)
- text: "Qt Shuttle"
- }
-
- MouseArea {
- id: inputArea
- anchors.fill: parent
- acceptedButtons: Qt.LeftButton | Qt.RightButton
- property bool selectionOn: false
-
- onPressed: {
- if (mouse.button == Qt.LeftButton) {
- selectionOn = true;
- testChart.scene.selectionQueryPosition = Qt.point(mouse.x, mouse.y);
- }
- }
-
- onReleased: {
- if (mouse.button == Qt.LeftButton)
- selectionOn = false;
- }
-
- onPositionChanged: {
- if (selectionOn) {
- testChart.scene.selectionQueryPosition = Qt.point(mouse.x, mouse.y);
- }
- }
- }
- }
-
- ControlSurface {
- id: camControlArea
- x: 0
- y: 0
- width: 298
- height: 298
- minXValue: -180
- minYValue: 0
- maxXValue: 180
- maxYValue: 90
- }
-
- Slider {
- id: zoomSlider
- width: camControlArea.width
- anchors.top: camControlArea.bottom
- value: 100
- minimumValue: 10
- maximumValue: 300
- }
-
- Button {
- id: mappingToggle
- anchors.bottom: parent.bottom
- width: camControlArea.width
- text: "Show Income"
- onClicked: {
- if (chartData.proxy.valueRole === "expenses") {
- chartData.proxy.valueRole = "income"
- text = "Show Expenses"
- testChart.valueAxis = chartAxes.income
- } else {
- chartData.proxy.valueRole = "expenses"
- text = "Show Income"
- testChart.valueAxis = chartAxes.expenses
- }
- }
- }
-
- Button {
- id: angleAdjust
- anchors.bottom: mappingToggle.top
- width: camControlArea.width
- text: "Adjust angle"
- property real currentAngle: 0
- onClicked: {
- currentAngle += 5
- chartData.series.meshAngle = currentAngle
- shuttleItem.setRotationAxisAndAngle(Qt.vector3d(0.0, 1.0, 1.0), currentAngle)
- console.log("label pos:", labelItem.position)
- labelItem.position.x += 0.1
- labelItem.position.z += 0.1
- customCamera.target.x -= 0.1
- customCamera.target.z -= 0.1
- }
- }
-
- Button {
- id: dataToggle
- anchors.bottom: angleAdjust.top
- width: camControlArea.width
- text: "Show 2010 - 2012"
- onClicked: {
- if (testChart.rowAxis.max !== 6) {
- text = "Show 2010 - 2012"
- chartData.proxy.autoRowCategories = true
- } else {
- text = "Show all years"
- // Explicitly defining row categories, since we do not want to show data for
- // all years in the model, just for the selected ones.
- chartData.proxy.autoRowCategories = false
- chartData.proxy.rowCategories = ["2010", "2011", "2012"]
- }
- }
- }
-
- Button {
- id: shuttleAdd
- anchors.bottom: dataToggle.top
- width: camControlArea.width
- text: "Remove Shuttle"
- property bool addObject: false
- onClicked: {
- if (addObject === true) {
- shuttleItem.textureFile = ":/items/shuttle.png"
- testChart.addCustomItem(shuttleItem)
- text = "Remove Shuttle"
- addObject = false
- } else {
- testChart.releaseCustomItem(shuttleItem)
- text = "Add Shuttle"
- addObject = true
- }
- }
- }
-
- Button {
- id: reflectionToggle
- anchors.bottom: shuttleAdd.top
- width: camControlArea.width
- text: "Show reflections"
- onClicked: {
- if (testChart.reflection === true) {
- text = "Show reflections"
- testChart.reflection = false
- } else {
- text = "Hide reflections"
- testChart.reflection = true
- }
- }
- }
-}
diff --git a/tests/manual/qmlcamera/qmlcamera.pro b/tests/manual/qmlcamera/qmlcamera.pro
deleted file mode 100644
index 098d7a85..00000000
--- a/tests/manual/qmlcamera/qmlcamera.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-!include( ../tests.pri ) {
- error( "Couldn't find the tests.pri file!" )
-}
-
-SOURCES += main.cpp
-
-RESOURCES += qmlcamera.qrc
-
-OTHER_FILES += qml/qmlcamera/*
-
diff --git a/tests/manual/qmlcamera/qmlcamera.qrc b/tests/manual/qmlcamera/qmlcamera.qrc
deleted file mode 100644
index 3612fa9f..00000000
--- a/tests/manual/qmlcamera/qmlcamera.qrc
+++ /dev/null
@@ -1,12 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlcamera/Axes.qml</file>
- <file>qml/qmlcamera/ControlSurface.qml</file>
- <file>qml/qmlcamera/Data.qml</file>
- <file>qml/qmlcamera/main.qml</file>
- </qresource>
- <qresource prefix="/items">
- <file>shuttle.obj</file>
- <file>shuttle.png</file>
- </qresource>
-</RCC>
diff --git a/tests/manual/qmlcamera/shuttle.obj b/tests/manual/qmlcamera/shuttle.obj
deleted file mode 100644
index e872228d..00000000
--- a/tests/manual/qmlcamera/shuttle.obj
+++ /dev/null
@@ -1,6349 +0,0 @@
-# Blender v2.66 (sub 0) OBJ File: ''
-# www.blender.org
-v -0.290924 -0.416888 -3.733797
-v -0.033253 -0.399965 -3.916942
-v 0.098892 -0.335648 -4.014968
-v 0.110144 -0.419894 -4.016005
-v -0.014627 -0.351984 -3.919619
-v -0.003375 -0.436229 -3.920655
-v 0.077510 -0.338845 -3.987319
-v 0.088762 -0.423090 -3.988356
-v 0.268419 -0.311615 -4.127978
-v 0.279672 -0.395861 -4.129015
-v -0.216945 -0.357152 -3.636585
-v -0.442480 -0.421494 -3.440589
-v 0.040557 -0.350366 -3.819523
-v -0.366883 -0.356351 -3.352865
-v -0.059636 -0.414591 -3.440213
-v 0.195164 -0.388461 -3.624492
-v -0.508658 -0.419445 -3.066802
-v -0.205255 -0.426666 -3.173799
-v -0.446409 -0.327120 -2.985436
-v -0.301084 -0.444031 -2.817294
-v 0.151449 -0.262081 -3.165398
-v 0.405315 -0.264481 -3.348743
-v 0.818570 -0.244023 -3.649532
-v 0.829822 -0.328268 -3.650568
-v 0.438945 -0.298561 -3.337861
-v 0.450197 -0.382806 -3.338897
-v 0.010751 -0.257630 -2.926187
-v 0.476024 -0.294278 -3.283418
-v 0.487276 -0.378524 -3.284455
-v 0.893196 -0.234640 -3.602006
-v 0.904448 -0.318886 -3.603042
-v -0.575146 -0.405155 -2.358083
-v -0.526846 -0.291701 -2.296914
-v -0.123567 -0.205514 -2.586394
-v -0.401501 -0.443667 -2.166967
-v 0.438519 -0.375468 -2.805563
-v 0.688118 -0.342410 -2.991890
-v 0.304996 -0.393955 -2.597466
-v -0.651696 -0.393273 -1.762192
-v -0.615966 -0.265853 -1.716287
-v -0.263638 -0.153966 -1.992210
-v 0.143186 -0.430595 -2.279088
-v -0.512839 -0.438185 -1.613670
-v -0.710028 -0.388098 -1.448538
-v -0.679965 -0.261349 -1.410043
-v -0.813314 -0.388657 -1.206769
-v 0.751287 -0.156495 -2.401505
-v 0.998622 -0.165467 -2.585768
-v -0.031714 -0.447371 -1.755604
-v -0.583894 -0.434779 -1.325088
-v -0.408965 -0.117462 -1.482493
-v -0.790573 -0.268054 -1.169135
-v 0.625851 -0.150158 -2.234187
-v -1.051885 -0.397310 -0.885646
-v -1.031232 -0.284379 -0.851625
-v -0.707410 -0.437077 -1.088477
-v -1.334166 -0.408930 -0.570468
-v 0.404917 -0.087146 -1.938298
-v -0.498689 -0.116097 -1.212783
-v -1.314745 -0.307881 -0.538558
-v -0.959224 -0.446984 -0.774490
-v 1.798825 0.967755 -3.015114
-v 2.046406 0.986555 -3.209870
-v 1.795686 1.006585 -3.015357
-v 2.043267 1.025386 -3.210112
-v 1.806945 0.929656 -3.008470
-v 2.054526 0.948456 -3.203225
-v 1.797665 1.044451 -3.009186
-v 2.045245 1.063251 -3.203941
-v -0.218636 -0.452499 -1.294639
-v -0.644958 -0.132219 -0.977335
-v 1.804675 1.079696 -2.996872
-v 2.052256 1.098496 -3.191627
-v -1.248682 -0.457011 -0.466167
-v 1.840314 0.837931 -2.974904
-v 2.087895 0.856731 -3.169660
-v 1.646588 -0.144702 -2.733368
-v 1.657840 -0.228948 -2.734405
-v 1.737599 -0.131659 -2.805524
-v 1.748852 -0.215905 -2.806561
-v 1.819258 1.148577 -2.971684
-v 1.033279 0.836881 -2.319959
-v 1.031777 0.970096 -2.298396
-v 1.060381 0.758531 -2.296534
-v -0.899523 -0.158764 -0.676483
-v 0.945538 0.814187 -2.200939
-v 0.170080 -0.031614 -1.496071
-v 1.043881 1.032762 -2.270612
-v 0.966443 0.743790 -2.180778
-v 0.952423 0.936921 -2.181507
-v 1.858652 1.239977 -2.912781
-v -0.317238 -0.452926 -1.060344
-v -1.192492 -0.196285 -0.374663
-v 1.856681 0.583228 -2.822182
-v 2.018811 -0.094129 -2.886386
-v 0.967854 0.995533 -2.156932
-v 1.272977 -0.200327 -2.268122
-v 1.284228 -0.284573 -2.269158
-v 1.076506 1.117039 -2.211863
-v -0.484562 -0.458987 -0.834904
-v 1.848687 0.788896 -2.757349
-v 2.078178 -0.164712 -2.848704
-v 1.967059 0.229003 -2.794663
-v 1.967832 0.643840 -2.831535
-v 2.215413 0.662641 -3.026290
-v 0.936685 0.816251 -2.042840
-v 2.039912 0.250063 -2.839813
-v 1.003257 1.074974 -2.104949
-v 1.164321 0.598239 -2.181823
-v 0.950019 0.768391 -2.028775
-v 0.943810 0.900014 -2.031005
-v 2.521226 0.390336 -3.213021
-v 1.936351 1.129229 -2.824698
-v 2.183932 1.148030 -3.019454
-v 2.568967 0.404915 -3.250601
-v 1.055366 0.603082 -2.081103
-v 0.869869 0.465058 -1.923758
-v 0.936491 -0.173930 -1.917023
-v 2.705161 0.067033 -3.318110
-v 2.096944 0.264363 -2.850901
-v 1.957182 0.386704 -2.747152
-v 2.029313 0.077472 -2.774992
-v 0.955724 0.940103 -2.015164
-v 1.928438 1.372002 -2.811322
-v -0.765050 -0.471609 -0.536370
-v 2.030367 0.402476 -2.793896
-v 2.100080 0.103611 -2.820803
-v 2.514476 0.522913 -3.173254
-v 2.574949 0.263657 -3.196595
-v 2.562289 0.536088 -3.211256
-v 2.622122 0.279579 -3.234349
-v 2.598488 0.409527 -3.214962
-v -0.064938 0.006053 -1.100592
-v 2.088244 0.403277 -2.809050
-v 2.151782 0.130884 -2.833575
-v 2.199769 1.159790 -2.964559
-v 2.193588 1.233527 -2.965299
-v 2.221596 1.161935 -2.979915
-v 2.215481 1.234891 -2.980646
-v 2.136538 0.271664 -2.829406
-v 1.137830 1.220917 -2.137315
-v 0.872108 0.654248 -1.875077
-v 0.961190 -0.247342 -1.861737
-v 2.739614 0.051854 -3.275776
-v -2.850674 0.163164 1.082772
-v -2.774223 -0.444295 1.078949
-v -2.508742 -0.433973 0.871016
-v -2.566129 0.205717 0.857016
-v 0.982043 0.994775 -1.981001
-v -1.069794 -0.481435 -0.242789
-v 2.592936 0.518564 -3.182256
-v 2.642673 0.305340 -3.201453
-v -2.926099 0.145051 1.155134
-v -2.869277 -0.451273 1.165592
-v 1.009718 0.673075 -1.961110
-v 2.235091 1.170649 -2.961918
-v 1.045386 1.162465 -2.033586
-v 2.230007 1.231294 -2.962527
-v 2.325998 0.322675 -2.951759
-v 1.972627 1.185781 -2.753756
-v 2.129131 0.389939 -2.793774
-v 2.183229 0.158016 -2.814654
-v 2.227766 1.099078 -2.934829
-v 1.117407 -0.306283 -1.939579
-v 1.981589 1.144577 -2.746340
-v 1.973910 1.228192 -2.748031
-v 2.249297 1.101867 -2.950499
-v 2.210880 1.300532 -2.936848
-v 1.886303 0.951739 -2.651532
-v 2.165588 -0.207364 -2.762840
-v 1.360371 -0.269775 -2.128519
-v 2.232590 1.301186 -2.952497
-v 2.160973 0.274542 -2.798066
-v 0.937019 0.410104 -1.852872
-v 0.960798 0.265444 -1.858128
-v 2.041237 1.191461 -2.784518
-v 2.048705 1.157124 -2.778339
-v 2.042305 1.226803 -2.779748
-v 2.258118 1.120717 -2.937466
-v 2.320933 0.422137 -2.921925
-v 2.366302 0.227636 -2.939436
-v 1.976683 1.431691 -2.744228
-v 2.244230 1.286403 -2.939127
-v -3.086442 -0.474834 1.379359
-v 1.999431 1.110853 -2.726914
-v 1.985242 1.265353 -2.730038
-v -3.023720 -0.458462 1.334241
-v -3.024019 0.109883 1.282283
-v -2.844489 0.344693 1.122684
-v -2.737176 -0.511595 1.117650
-v -2.469550 -0.506414 0.908517
-v -2.551327 0.395732 0.889431
-v 1.000046 -0.329019 -1.811242
-v 2.154800 0.373104 -2.768372
-v 2.199881 0.179835 -2.785773
-v -2.914064 0.322285 1.189905
-v -2.834171 -0.518740 1.204847
-v 1.179604 1.267508 -2.087104
-v 2.051748 1.257770 -2.764754
-v 2.063573 1.129020 -2.762150
-v 2.080589 1.195258 -2.775463
-v -0.196284 0.002337 -0.889996
-v 1.013546 1.060481 -1.927888
-v -3.072142 -0.445996 1.396327
-v 2.603875 0.637948 -3.126857
-v 2.707508 0.193661 -3.166857
-v 2.085482 1.172761 -2.771414
-v 2.081289 1.218414 -2.772337
-v 1.075555 1.201415 -1.986324
-v 2.002330 0.508317 -2.645192
-v 2.127263 -0.027287 -2.693413
-v 2.556508 0.625865 -3.087951
-v 2.661251 0.176820 -3.128379
-v 2.074001 0.520013 -2.695353
-v 2.194747 0.002364 -2.741958
-v 1.000951 0.830916 -1.880131
-v 2.095224 1.154349 -2.760807
-v 2.087476 1.238703 -2.762513
-v 2.023438 1.089743 -2.698434
-v 2.004898 1.291606 -2.702516
-v -3.122983 -0.461461 1.459483
-v -3.158215 -0.041663 1.448402
-v -2.497997 0.004146 0.929450
-v -2.509563 0.149734 0.925099
-v 1.003036 0.858653 -1.877204
-v 2.270079 1.067661 -2.884072
-v 1.005703 0.814744 -1.874867
-v 2.291162 1.070783 -2.900280
-v 2.128013 0.510403 -2.719236
-v 2.238064 0.038604 -2.761713
-v 2.068128 1.279648 -2.741818
-v 2.083579 1.111428 -2.738417
-v 2.247011 1.342852 -2.886831
-v 2.268338 1.343057 -2.903010
-v -2.993610 -0.524459 1.373357
-v -2.994892 0.277606 1.300703
-v 2.627505 0.603237 -3.112099
-v 2.713651 0.233920 -3.145348
-v 2.292918 1.094878 -2.895721
-v 1.006938 0.871768 -1.872413
-v 2.105035 1.197866 -2.757530
-v 2.093582 1.187722 -2.747088
-v 2.092232 1.203828 -2.747250
-v 2.273946 1.321208 -2.897990
-v 0.912103 0.803812 -1.788658
-v 1.019079 -0.292614 -1.771378
-v 2.804159 0.046327 -3.194257
-v 2.107537 1.186366 -2.755460
-v 2.105394 1.209702 -2.755932
-v 2.245164 0.292374 -2.778011
-v 0.747334 -0.381459 -1.545246
-v 2.108331 1.142823 -2.745258
-v 2.098208 1.253036 -2.747486
-v 2.099697 1.174463 -2.740594
-v 2.096009 1.218463 -2.741035
-v 2.112516 1.176954 -2.750038
-v 2.108556 1.220074 -2.750911
-v 1.015678 0.889476 -1.861661
-v 2.162992 0.481149 -2.717304
-v 2.256692 0.079446 -2.753470
-v 1.035607 1.090416 -1.893256
-v 2.119216 1.171063 -2.742090
-v 2.114042 1.227400 -2.743229
-v -3.036469 -0.488219 1.432582
-v 1.026486 0.781917 -1.851175
-v 2.241119 0.356951 -2.758555
-v 2.270656 0.230325 -2.769956
-v -0.400720 -0.022989 -0.663568
-v 2.108939 1.167601 -2.729508
-v 2.352467 0.499374 -2.857929
-v 2.431048 0.162488 -2.888259
-v 2.103901 1.227706 -2.730110
-v 2.078094 0.869479 -2.669583
-v 2.325675 0.888279 -2.864338
-v 2.049954 1.084459 -2.665236
-v 2.029886 1.302955 -2.669655
-v 2.105674 1.107026 -2.710752
-v 2.088951 1.289105 -2.714434
-v 2.107442 1.198835 -2.720560
-v 2.122808 1.139938 -2.727132
-v 2.111851 1.259233 -2.729544
-v 2.126617 1.169588 -2.732825
-v 2.121016 1.230568 -2.734058
-v 2.126010 1.200245 -2.735167
-v 2.126854 1.200309 -2.735831
-v -3.255541 -0.463337 1.614298
-v -3.256979 -0.068785 1.579187
-v -3.090151 -0.525402 1.492390
-v -3.140838 0.071873 1.477060
-v 2.183017 0.449113 -2.704647
-v 2.261101 0.114361 -2.734786
-v 1.025626 0.910940 -1.843900
-v 2.118830 1.168976 -2.716800
-v 2.113792 1.229081 -2.717403
-v 2.133590 1.172756 -2.723654
-v 2.128416 1.229093 -2.724793
-v -2.405642 -0.551479 0.981773
-v -2.505313 0.545503 0.958747
-v 1.032741 0.920593 -1.832253
-v 2.139077 1.180082 -2.715972
-v 2.135116 1.223202 -2.716844
-v 2.126722 1.178219 -2.705876
-v 2.123034 1.222219 -2.706317
-v 2.136451 1.146135 -2.709190
-v 2.126328 1.256348 -2.711419
-v 2.142239 1.190453 -2.710951
-v 2.140096 1.213790 -2.711423
-v 2.330166 1.100055 -2.847870
-v 2.130499 1.192853 -2.699662
-v 2.129149 1.208959 -2.699824
-v 2.142597 1.202290 -2.709353
-v 2.311194 1.326385 -2.850139
-v -0.678415 -0.058034 -0.389918
-v 2.126498 1.116483 -2.683367
-v 2.111047 1.284703 -2.686769
-v 2.335972 1.077011 -2.842714
-v 2.315368 1.073955 -2.825890
-v 2.297923 0.301154 -2.738834
-v 2.313149 1.349285 -2.845444
-v -3.224716 -0.523658 1.644234
-v -3.228977 0.037748 1.596002
-v 2.259607 0.406750 -2.716804
-v 2.310765 0.187427 -2.736550
-v 2.292301 1.349146 -2.828649
-v 1.051190 0.836263 -1.810548
-v 2.074942 1.095809 -2.632374
-v 2.056402 1.297672 -2.636457
-v 1.051411 0.836718 -1.810222
-v 1.051764 0.833314 -1.810103
-v 2.147183 1.160469 -2.694164
-v 2.139435 1.244822 -2.695870
-v 1.051937 0.833724 -1.809843
-v 1.051832 0.835286 -1.809826
-v 1.052011 0.834070 -1.809716
-v 1.052027 0.833906 -1.809712
-v 1.051999 0.834825 -1.809658
-v 1.051961 0.835391 -1.809651
-v 1.052122 0.834297 -1.809553
-v 2.289008 0.296555 -2.724424
-v 1.946327 1.084103 -2.529010
-v 2.264997 -0.237532 -2.656099
-v -3.146048 -0.468059 1.586396
-v 2.295856 0.334163 -2.728890
-v 2.310954 0.269436 -2.734717
-v 2.287534 0.325511 -2.715739
-v 2.300741 0.268886 -2.720837
-v 2.153370 1.180757 -2.684340
-v 2.149177 1.226410 -2.685263
-v -2.995660 -0.411552 1.480706
-v 1.055648 0.923143 -1.800017
-v 2.154070 1.203913 -2.681214
-v -0.987628 -0.106173 -0.106669
-v -3.134648 -0.466717 1.601017
-v 2.142878 1.138361 -2.660432
-v 2.131053 1.267111 -2.663036
-v 2.305306 0.359619 -2.707547
-v 2.331457 0.247507 -2.717641
-v 2.296714 0.347997 -2.697108
-v 2.319591 0.249920 -2.705938
-v 2.094598 1.122062 -2.604852
-v 2.080408 1.276562 -2.607976
-v 0.470274 -0.415629 -1.195124
-v 2.682583 0.683203 -3.020018
-v 2.802250 0.170184 -3.066206
-v 2.692932 0.640855 -3.023288
-v 2.792405 0.214405 -3.061682
-v 2.636060 0.671604 -2.979968
-v 2.757006 0.153092 -3.026651
-v 2.359883 1.134861 -2.806733
-v 2.152321 1.169328 -2.645438
-v 2.145921 1.239007 -2.646847
-v 2.345995 1.300547 -2.808394
-v 2.153390 1.204670 -2.640668
-v 2.412149 0.533689 -2.776916
-v 2.502886 0.144687 -2.811939
-v 0.970224 0.925229 -1.686331
-v 1.091354 -0.325301 -1.665935
-v 2.881699 0.045075 -3.095805
-v 2.371721 1.118882 -2.793227
-v 2.351501 1.116275 -2.775872
-v -3.112347 -0.464090 1.629621
-v 2.105930 1.159222 -2.586859
-v 2.098250 1.242837 -2.588550
-v 2.355013 1.318201 -2.795225
-v 2.334614 1.317729 -2.777893
-v 2.314089 0.357987 -2.673523
-v 2.340505 0.244738 -2.683719
-v 1.104303 1.101391 -1.798523
-v 2.090404 0.561258 -2.516102
-v 2.159124 0.571179 -2.570591
-v 2.234664 -0.057203 -2.571783
-v 2.205596 0.557038 -2.605525
-v 2.229047 0.520855 -2.620486
-v 2.238063 0.482200 -2.623966
-v 2.298549 -0.026551 -2.624406
-v 2.332671 0.012252 -2.654572
-v 2.295672 0.428428 -2.663943
-v 2.328226 0.095662 -2.658767
-v 2.337243 0.057009 -2.662247
-v 2.319328 0.300003 -2.670594
-v 2.323741 0.370700 -2.680527
-v 2.354745 0.175176 -2.686744
-v 2.343450 0.307384 -2.690079
-v 2.353938 0.241245 -2.692182
-v 1.085896 0.905799 -1.761274
-v 2.107213 1.201633 -2.581135
-v 1.172914 1.208536 -1.853034
-v -3.524472 -0.463065 1.962955
-v -3.542270 -0.167984 1.949735
-v 2.374104 1.189970 -2.783334
-v 2.369021 1.250615 -2.783942
-v 1.303689 1.278820 -1.940955
-v -2.749923 0.604098 1.287890
-v -2.601352 -0.583194 1.281085
-v -2.331104 -0.584296 1.070484
-v -2.444929 0.666788 1.044342
-v 2.335002 0.352805 -2.651304
-v 2.357880 0.254727 -2.660134
-v -2.812832 0.575628 1.346300
-v -2.702155 -0.590712 1.367115
-v 2.388829 1.185178 -2.765078
-v 2.382714 1.258133 -2.765809
-v 2.346222 0.364438 -2.655067
-v 2.372374 0.252327 -2.665161
-v 2.368793 1.183281 -2.747422
-v 2.362612 1.257019 -2.748161
-v -3.502416 -0.514638 1.987533
-v -3.528153 -0.092777 1.968860
-v -2.930290 -0.491180 1.547024
-v 2.066685 0.851305 -2.470213
-v -3.080119 -0.460294 1.670958
-v 2.353852 0.333838 -2.636405
-v 2.367060 0.277213 -2.641503
-v 2.140192 0.869385 -2.515599
-v -2.873451 -0.595312 1.528083
-v -2.875654 0.517249 1.427634
-v 2.123721 1.449962 -2.555544
-v 2.366726 0.342510 -2.637991
-v 2.381824 0.277783 -2.643818
-v 2.365586 0.306170 -2.632818
-v 0.180044 -0.433739 -0.860263
-v 2.390810 0.196854 -2.633883
-v 2.339653 0.416178 -2.614137
-v 2.379757 0.310792 -2.633873
-v -2.972414 -0.594417 1.632153
-v -3.043199 0.236465 1.611041
-v 2.197619 0.881876 -2.526829
-v 1.155619 0.140929 -1.644002
-v 2.061041 1.010198 -2.426111
-v 2.124709 0.698580 -2.447134
-v 2.629037 1.066507 -2.869623
-v 2.771686 0.621339 -2.939622
-v 2.857832 0.252023 -2.972872
-v 2.676305 1.087418 -2.904726
-v 2.483987 0.515887 -2.700598
-v 2.562568 0.179001 -2.730927
-v 2.134736 1.022953 -2.472975
-v 2.196270 0.721780 -2.493294
-v -3.115630 -0.588979 1.772415
-v -3.122642 0.192029 1.706162
-v 2.305190 0.463503 -2.547947
-v 2.383274 0.128751 -2.578085
-v 2.026136 1.180204 -2.395136
-v 2.372061 -0.253901 -2.533144
-v 0.043832 -0.439397 -0.700086
-v -2.331525 -0.123197 1.132486
-v 2.610039 1.166097 -2.837585
-v 2.673477 0.969915 -2.869029
-v 2.777325 0.659725 -2.919367
-v 2.880958 0.215439 -2.959367
-v 2.657509 1.185952 -2.873027
-v 2.720273 0.991850 -2.904138
-v 2.379762 0.373280 -2.580731
-v 2.409298 0.246654 -2.592131
-v 2.731814 0.647876 -2.878239
-v 2.836558 0.198831 -2.918667
-v -3.039373 -0.455495 1.723220
-v 2.192646 1.021841 -2.487980
-v 2.248729 0.747345 -2.506499
-v 2.309599 0.498417 -2.529263
-v 2.403300 0.096714 -2.565429
-v 2.237351 0.888547 -2.505383
-v -0.183302 -0.450597 -0.489896
-v 2.405254 0.311230 -2.572676
-v 1.043932 1.013192 -1.572568
-v 1.174857 -0.343976 -1.550015
-v 2.968846 0.048153 -2.984724
-v 2.704206 1.090705 -2.868940
-v 1.193313 1.053879 -1.685613
-v 2.300203 0.530684 -2.498384
-v 2.410253 0.058885 -2.540860
-v -2.870028 -0.379944 1.617982
-v -0.502937 -0.466927 -0.212460
-v 2.262925 0.542265 -2.453038
-v 2.383671 0.024616 -2.499642
-v 2.688581 1.172611 -2.842590
-v 2.740755 1.011263 -2.868450
-v 2.233117 1.007717 -2.472307
-v 2.280868 0.774003 -2.488075
-v -2.681424 0.688036 1.389168
-v -2.372814 0.754289 1.142473
-v -2.249194 -0.603433 1.170773
-v 2.433319 0.963376 -2.621027
-v -2.742923 0.657642 1.444079
-v 2.197806 0.531341 -2.394472
-v 2.322739 -0.004263 -2.442693
-v -3.420844 -0.571247 2.087621
-v -3.456852 0.016609 2.061712
-v 2.261785 0.891425 -2.474043
-v -0.828435 -0.477984 0.061043
-v 2.548733 0.450740 -2.649420
-v 2.594102 0.256238 -2.666930
-v 2.619376 1.253520 -2.777794
-v 2.736592 0.891025 -2.835893
-v 2.666746 1.272449 -2.813868
-v 2.782720 0.913795 -2.871353
-v -2.802757 0.594778 1.513184
-v 2.842664 0.549920 -2.883518
-v 2.892401 0.336695 -2.902714
-v 2.419066 1.038090 -2.596991
-v 2.466659 0.890910 -2.620581
-v 2.366409 0.398028 -2.496960
-v 2.411491 0.204759 -2.514360
-v -3.768498 -0.285858 2.351028
-v -3.754395 -0.436849 2.353898
-v -2.979417 0.290761 1.695520
-v 2.258257 0.990733 -2.446479
-v 2.298049 0.795972 -2.459619
-v -3.744207 -0.468465 2.368351
-v -3.763825 -0.250991 2.363676
-v -2.991889 -0.449902 1.784124
-v 2.589037 0.355701 -2.637096
-v -3.058914 0.242857 1.779885
-v 2.405318 0.303321 -2.484666
-v 2.886850 0.445733 -2.870009
-v 2.109286 1.132686 -2.326646
-v 2.219562 0.592947 -2.363060
-v 2.696261 1.244513 -2.793414
-v 2.792664 0.946380 -2.841198
-v 1.301631 1.132067 -1.690738
-v 2.383062 0.419848 -2.468079
-v 2.437160 0.187925 -2.488959
-v 2.181364 1.141334 -2.376844
-v 2.287943 0.619687 -2.412037
-v 2.862712 0.573808 -2.851874
-v 2.922544 0.317299 -2.874968
-v 2.818116 0.561038 -2.810024
-v 2.878590 0.301782 -2.833364
-v 2.426071 1.103677 -2.552133
-v 2.514010 0.831724 -2.595722
-v 2.235144 1.129736 -2.400364
-v 2.332283 0.654296 -2.432440
-v 2.346390 0.907367 -2.454136
-v -3.411176 0.052851 2.120724
-v 2.429752 0.306199 -2.453326
-v 2.269301 1.099582 -2.397708
-v 2.352008 0.694778 -2.425019
-v 2.386485 0.438404 -2.426523
-v 2.450023 0.166012 -2.451047
-v 2.915866 0.448472 -2.835623
-v 2.344078 0.972432 -2.436077
-v 2.370150 0.844828 -2.444686
-v 2.871840 0.434359 -2.793598
-v -2.786263 -0.483209 1.702896
-v 1.459973 1.193063 -1.759240
-v -3.703011 -0.503725 2.422886
-v -3.730082 -0.199896 2.416091
-v 2.655625 1.315469 -2.699349
-v 2.808775 0.841848 -2.775261
-v 2.702611 1.333742 -2.736255
-v 2.854139 0.865139 -2.811362
-v 2.288410 1.067288 -2.384314
-v 2.357333 0.729951 -2.407073
-v 2.357592 0.441017 -2.374193
-v 2.427305 0.142152 -2.401100
-v 1.807099 1.188967 -2.008747
-v -3.783568 -0.334437 2.490638
-v -3.776477 -0.407414 2.491810
-v 2.122243 1.235844 -2.255761
-v 2.482100 -0.255753 -2.399353
-v 2.726073 1.295463 -2.728897
-v 2.852031 0.905933 -2.791331
-v 2.295756 0.426582 -2.312892
-v 2.367887 0.117350 -2.340733
-v -2.939741 -0.443760 1.851008
-v -3.781106 -0.318610 2.496646
-v -3.771103 -0.424172 2.498541
-v 2.441322 0.304925 -2.409196
-v 2.453266 1.150154 -2.493283
-v 2.568163 0.794829 -2.550234
-v 1.130007 1.063856 -1.452342
-v 1.265938 -0.347821 -1.428686
-v 3.061789 0.055427 -2.865868
-v -2.602579 0.736106 1.497157
-v -2.292120 0.804178 1.248855
-v -2.434953 -0.604050 1.489534
-v -2.163494 -0.608053 1.278256
-v -2.664054 0.704644 1.549387
-v -2.539160 -0.611934 1.572914
-v 2.399283 0.915534 -2.415008
-v -3.707198 -0.182800 2.448233
-v 2.363834 1.022590 -2.395347
-v 2.408991 0.801573 -2.410258
-v -2.722515 -0.616791 1.721958
-v -2.725142 0.639161 1.608672
-v -2.829179 -0.615824 1.810674
-v -2.909245 0.322942 1.786891
-v 2.392228 0.914706 -2.400276
-v 2.398101 0.948794 -2.405777
-v 2.411428 0.883567 -2.410178
-v -2.983486 -0.609514 1.936485
-v -2.991769 0.272910 1.861910
-v 2.388079 0.936458 -2.393279
-v 2.401934 0.893610 -2.400146
-v 1.266405 1.148829 -1.537915
-v 1.276485 1.330618 -1.562468
-v 1.301959 1.399716 -1.588675
-v 1.829089 1.191557 -1.980541
-v 2.385908 3.043540 -2.584738
-v 2.432531 3.084452 -2.624845
-v 2.484531 3.138930 -2.670390
-v 2.555058 3.180480 -2.729192
-v 2.587869 1.699016 -2.618729
-v 2.897153 3.208163 -2.998451
-v 2.950947 3.055532 -3.026375
-v 2.946595 3.189529 -3.035288
-v 2.959600 3.134547 -3.040378
-v 2.417759 0.294566 -2.355182
-v -3.764574 -0.295328 2.521762
-v -3.750702 -0.443027 2.524510
-v 2.358011 0.275051 -2.293223
-v -3.320640 -0.590025 2.214050
-v -3.361390 0.074490 2.184798
-v 2.390117 0.955552 -2.380219
-v 2.415719 0.876379 -2.392909
-v 2.408200 0.974432 -2.384957
-v 2.431282 0.861455 -2.392579
-v -3.753472 -0.287501 2.537197
-v 2.398036 0.969083 -2.363085
-v 2.431485 0.865638 -2.379665
-v -3.651074 -0.516133 2.490283
-v -3.681587 -0.172421 2.482510
-v 2.311849 1.347830 -2.326247
-v -3.741101 -0.282712 2.553676
-v -3.725441 -0.449869 2.556817
-v 2.175858 1.240742 -2.187508
-v 1.176857 1.068079 -1.392566
-v 1.312589 -0.342230 -1.368881
-v -2.560177 0.739860 1.551322
-v -2.121265 -0.602981 1.332435
-v -2.249778 0.807875 1.303072
-v -2.622366 0.708349 1.602724
-v -2.686267 0.642614 1.658664
-v -2.872984 0.326449 1.833357
-v -2.958486 0.276123 1.904730
-v -3.335886 0.076990 2.217503
-v -3.668144 -0.171074 2.499706
-v -3.734634 -0.282056 2.561952
-v -3.734566 -0.369723 2.570150
-v -2.150712 -0.249451 1.324240
-v 1.267079 0.010084 -1.364303
-v 1.704978 -0.191159 -1.687236
-v 2.198494 1.185947 -2.198470
-v 2.267581 1.192809 -2.252964
-v 2.325830 0.562710 -2.240516
-v 2.313725 1.176653 -2.287457
-v 2.336207 1.139528 -2.301576
-v 2.434129 0.098705 -2.282343
-v 2.390649 0.590464 -2.293602
-v 2.344165 1.100576 -2.304204
-v 2.425891 0.627661 -2.324495
-v 2.423750 0.711053 -2.330483
-v 2.431708 0.672101 -2.333111
-v 2.400364 1.044399 -2.342861
-v 2.410625 0.974989 -2.344487
-v 2.420496 0.915260 -2.346699
-v 2.426872 0.985581 -2.358127
-v 2.452506 0.789191 -2.360079
-v 2.446831 0.863022 -2.362433
-v 2.444856 0.921557 -2.366269
-v 2.453526 0.855127 -2.366929
-v 2.496511 1.170443 -2.429398
-v 2.620876 0.785842 -2.491042
-v 2.713268 1.342514 -2.614195
-v 2.759644 1.360499 -2.652004
-v 2.773482 1.317705 -2.658864
-v 2.879037 0.829869 -2.696361
-v 2.909818 0.896081 -2.726441
-v 2.923656 0.853286 -2.733300
-v 2.434469 0.098745 -2.281906
-v -2.120000 -0.602832 1.334057
-v 1.313986 -0.342065 -1.367090
-v 2.435135 0.098824 -2.281052
-v 2.435757 0.098897 -2.280254
-v 2.436307 0.098962 -2.279548
-v 2.436763 0.099016 -2.278964
-v 2.436999 0.099043 -2.278662
-v -2.885212 -0.437337 1.920949
-v -2.717870 -0.356682 1.785125
-v -3.728000 -0.281169 2.570479
-v -3.712341 -0.448326 2.573620
-v -0.735546 -0.053125 0.219066
-v -0.406216 0.000394 -0.041418
-v -0.100273 0.040739 -0.281944
-v 0.172417 0.073341 -0.495491
-v 2.335518 1.350617 -2.295889
-v 0.354290 0.083209 -0.634777
-v -3.623852 -0.512926 2.525198
-v -3.654365 -0.169215 2.517424
-v 2.425971 0.972373 -2.327255
-v 2.459421 0.868929 -2.343834
-v 0.696977 0.054076 -0.892441
-v 2.948120 3.214165 -2.933081
-v 2.606057 3.186486 -2.663780
-v 2.997989 3.195582 -2.969370
-v 2.536222 3.145018 -2.604090
-v 3.012064 3.140727 -2.973088
-v 2.485188 3.090654 -2.557307
-v 1.046458 0.007453 -1.152257
-v -3.714744 -0.282939 2.586870
-v 2.439279 3.049827 -2.516283
-v 3.004908 3.061887 -2.957164
-v 2.449116 0.979252 -2.332477
-v 2.472199 0.866275 -2.340099
-v 1.368491 -0.052711 -1.393705
-v 1.717894 -0.070445 -1.662515
-v 1.478573 -0.058668 -1.476762
-v 2.441737 0.961632 -2.314012
-v 2.467338 0.882459 -2.326701
-v -3.309670 0.080582 2.251135
-v -3.268919 -0.583933 2.280387
-v 2.410137 0.281190 -2.226363
-v -3.701911 -0.287948 2.602134
-v -3.688039 -0.435647 2.604882
-v 2.482991 0.302250 -2.271514
-v 2.455522 0.944402 -2.306774
-v 2.469378 0.901553 -2.313642
-v -2.915858 -0.601549 2.023225
-v -2.924141 0.280876 1.948650
-v 2.468971 0.957141 -2.314878
-v 2.482299 0.891914 -2.319279
-v 2.465229 0.923305 -2.306645
-v -2.755682 -0.607167 1.904943
-v -2.835748 0.331599 1.881160
-v -2.646201 0.648459 1.709923
-v -2.643573 -0.607493 1.823210
-v 2.443879 1.032018 -2.292681
-v 2.489036 0.811001 -2.307592
-v -3.626724 -0.173321 2.551450
-v 2.481117 0.925173 -2.310048
-v -2.579668 0.714584 1.657621
-v -2.454774 -0.601995 1.681149
-v -2.516832 0.746206 1.607137
-v -2.349206 -0.593950 1.599513
-v -2.206373 0.814278 1.358835
-v -2.077747 -0.597953 1.388236
-v 2.667233 1.708364 -2.516935
-v 1.224686 1.075007 -1.330905
-v 1.360617 -0.336670 -1.307250
-v 3.156468 0.066579 -2.744432
-v 2.549224 1.161456 -2.370206
-v 2.664121 0.806131 -2.427157
-v 2.540023 0.316550 -2.282602
-v 1.385180 1.409518 -1.481935
-v -3.679715 -0.306668 2.626691
-v -3.669712 -0.412230 2.628586
-v 1.360989 1.340571 -1.454082
-v 2.400261 0.438891 -2.178853
-v 2.472391 0.129659 -2.206693
-v 2.831269 1.307854 -2.593973
-v 2.957226 0.918323 -2.656406
-v 2.230447 1.248588 -2.116977
-v 2.590304 -0.243009 -2.260568
-v 1.354370 1.159190 -1.425091
-v 1.917054 1.201918 -1.867717
-v -3.673127 -0.321429 2.632291
-v -3.666035 -0.394406 2.633464
-v -2.830682 -0.430915 1.990889
-v 2.473447 0.454663 -2.225597
-v 2.543159 0.155798 -2.252504
-v 2.410583 1.081677 -2.227614
-v 2.479506 0.744341 -2.250373
-v 3.001074 0.449623 -2.628313
-v 2.829160 1.348647 -2.573941
-v 2.980689 0.880044 -2.649048
-v 2.783530 1.330534 -2.535297
-v 2.936681 0.856913 -2.611208
-v 3.051332 0.464469 -2.662340
-v -3.572802 -0.488389 2.589894
-v -3.599872 -0.184558 2.583099
-v 1.591093 1.208507 -1.591064
-v 2.482720 0.988763 -2.258252
-v 2.508792 0.861158 -2.266861
-v 2.531323 0.455464 -2.240752
-v 2.594861 0.183071 -2.265276
-v 2.415908 1.116850 -2.209669
-v 2.498616 0.712046 -2.236978
-v 2.579618 0.323851 -2.261107
-v -2.645182 -0.466535 1.885712
-v 1.939045 1.204508 -1.839511
-v -3.258276 0.070860 2.316835
-v 2.506480 0.926224 -2.248802
-v 2.992383 0.581606 -2.586979
-v 3.052857 0.322350 -2.610320
-v 2.407334 1.150018 -2.179512
-v 2.504473 0.674577 -2.211588
-v 3.042733 0.595054 -2.621444
-v 3.102565 0.338545 -2.644537
-v 2.603378 1.124561 -2.324717
-v 2.691316 0.852608 -2.368305
-v 3.078396 0.468329 -2.624718
-v 2.370287 1.163586 -2.134528
-v 2.476867 0.641940 -2.169721
-v 2.572210 0.442126 -2.225475
-v 2.626308 0.210203 -2.246356
-v 1.491168 1.154391 -1.447635
-v 2.890636 1.267406 -2.544106
-v 2.987040 0.969274 -2.591890
-v 2.788228 0.379194 -2.381967
-v 2.304762 1.155709 -2.075926
-v 2.415038 0.615971 -2.112340
-v 2.604052 0.326729 -2.229767
-v -2.858987 0.266405 2.036315
-v -3.533523 -0.443650 2.638577
-v -3.553141 -0.226176 2.633901
-v 2.469866 1.015657 -2.175067
-v 2.509659 0.820896 -2.188207
-v -2.762138 0.316353 1.974206
-v -2.778535 -0.424773 2.057773
-v 3.071249 0.576878 -2.590723
-v 3.120985 0.363654 -2.609920
-v 2.781708 0.478212 -2.350957
-v 2.827077 0.283710 -2.368468
-v -3.539008 -0.258828 2.645375
-v -3.524905 -0.409819 2.648245
-v 2.597879 0.425291 -2.200073
-v 2.642961 0.232022 -2.217474
-v 2.650729 1.065375 -2.299858
-v 2.698322 0.918196 -2.323448
-v -2.569382 0.622266 1.812512
-v 2.900579 1.299991 -2.513951
-v 3.016554 0.941337 -2.571435
-v 2.855713 1.281357 -2.474664
-v 2.972929 0.918862 -2.532765
-v 2.506130 0.920204 -2.160643
-v -3.173446 -0.542107 2.404937
-v -3.209453 0.045748 2.379028
-v 2.445409 0.560504 -2.076893
-v 2.570342 0.024900 -2.125114
-v -2.493455 0.687025 1.764050
-v 2.684069 0.992910 -2.299412
-v -2.427931 0.717893 1.714301
-v -2.119321 0.784146 1.467606
-v -1.995701 -0.573576 1.495906
-v 2.487048 1.037626 -2.146613
-v 2.534799 0.803912 -2.162379
-v 2.942544 1.202524 -2.516853
-v 2.994718 1.041175 -2.542714
-v 2.517081 0.572200 -2.127054
-v 2.637826 0.054551 -2.173658
-v 2.571093 0.562590 -2.150938
-v 2.681143 0.090791 -2.193414
-v 1.466306 1.086034 -1.335468
-v 2.979094 1.123082 -2.516365
-v -0.568604 -0.447372 0.394570
-v 1.323830 1.046159 -1.213567
-v 1.454755 -0.311009 -1.191014
-v 3.248744 0.081120 -2.625723
-v 2.688243 0.344561 -2.209711
-v -2.593169 -0.347277 1.974947
-v 3.029114 0.682935 -2.497393
-v 3.133857 0.233890 -2.537821
-v 2.530565 0.923082 -2.129303
-v -0.224107 -0.434065 0.145862
-v 3.079074 0.695309 -2.532807
-v 3.182707 0.251022 -2.572807
-v 2.606071 0.533336 -2.149005
-v 2.699770 0.131633 -2.185170
-v 2.490887 1.056969 -2.105453
-v 2.546971 0.782472 -2.123972
-v 2.684199 0.409138 -2.190257
-v 2.713735 0.282512 -2.201657
-v 2.963027 1.221936 -2.481166
-v 3.025790 1.027834 -2.512276
-v 2.918829 1.202466 -2.441528
-v 2.982266 1.006286 -2.472972
-v -2.731051 -0.419180 2.118678
-v 2.346020 1.217882 -1.984849
-v 2.691945 -0.216224 -2.122858
-v 2.626097 0.501300 -2.136348
-v 2.704180 0.166548 -2.166486
-v 2.809263 0.554231 -2.283747
-v 2.887846 0.217345 -2.314077
-v -2.799153 0.230131 2.121073
-v -2.792140 -0.550877 2.187326
-v 0.122037 -0.414552 -0.095656
-v 3.101457 0.660216 -2.517043
-v 3.187603 0.290900 -2.550293
-v 2.461960 1.061494 -2.053272
-v 2.523494 0.760321 -2.073591
-v 3.006995 1.126368 -2.480578
-v 2.963268 1.105875 -2.440934
-v 2.399616 1.050076 -1.991851
-v 2.463283 0.738458 -2.012874
-v 2.541997 0.922437 -2.085123
-v -2.620849 -0.553009 2.083075
-v -2.691633 0.277873 2.061963
-v 0.380138 -0.399580 -0.262083
-v 2.741003 0.353341 -2.170536
-v 2.702686 0.458937 -2.148505
-v 2.753845 0.239614 -2.168251
-v 2.735783 0.349782 -2.158101
-v 2.738935 0.386350 -2.160591
-v 2.754033 0.321623 -2.166418
-v 2.501059 1.494406 -2.071566
-v -2.498046 0.561724 1.911958
-v -2.495843 -0.550836 2.012409
-v 2.518039 0.913888 -2.030968
-v 2.733885 0.378609 -2.149074
-v 2.747093 0.321983 -2.154171
-v 2.457638 0.897352 -1.968773
-v -2.690304 -0.414381 2.170940
-v -3.127855 -0.045628 2.482288
-v -3.102117 -0.467490 2.500962
-v 2.770798 1.227046 -2.232150
-v 2.748385 0.411806 -2.139249
-v 2.774536 0.299695 -2.149342
-v 2.764617 1.300784 -2.232889
-v 2.792626 1.229192 -2.247504
-v -2.409183 0.623172 1.864025
-v -2.298506 -0.543169 1.884841
-v 2.786510 1.302148 -2.248235
-v 2.741907 0.400740 -2.129507
-v 2.764784 0.302663 -2.138337
-v -2.529794 -0.443952 2.062569
-v -2.339763 0.652407 1.813967
-v -2.191192 -0.534884 1.807161
-v -1.920944 -0.535987 1.596561
-v -2.034769 0.715099 1.570418
-v -1.970078 -0.080625 1.596081
-v 1.720073 1.327862 -1.406896
-v 0.572047 -0.387414 -0.352526
-v 2.806120 1.237906 -2.229508
-v 2.801037 1.298551 -2.230116
-v -3.088440 -0.411708 2.522214
-v -3.106239 -0.116627 2.508994
-v 1.609069 1.259907 -1.293617
-v 2.543657 1.253039 -2.021345
-v 1.525799 0.957611 -1.197050
-v 2.757700 0.410246 -2.104644
-v 2.784117 0.296996 -2.114841
-v 2.533483 0.613445 -1.947803
-v 2.602202 0.623366 -2.002292
-v 2.677744 -0.005017 -2.003484
-v 2.648675 0.609224 -2.037226
-v 2.672127 0.573042 -2.052187
-v 2.681143 0.534388 -2.055668
-v 2.741627 0.025636 -2.056106
-v 2.775750 0.064439 -2.086273
-v 2.738751 0.480616 -2.095645
-v 2.771306 0.147849 -2.090468
-v 2.780322 0.109196 -2.093948
-v 2.762407 0.352190 -2.102295
-v 2.766821 0.422887 -2.112228
-v 2.797824 0.227363 -2.118445
-v 2.786530 0.359571 -2.121780
-v 2.797017 0.293432 -2.123883
-v 1.548968 1.153765 -1.228190
-v 2.798795 1.166335 -2.202419
-v 2.552618 1.211834 -2.013930
-v 2.544939 1.295449 -2.015621
-v 2.863513 0.586883 -2.198347
-v 2.954250 0.197881 -2.233369
-v 2.820327 1.169125 -2.218088
-v 2.781909 1.367789 -2.204438
-v 2.803619 1.368443 -2.220086
-v 1.423109 0.978571 -1.105456
-v 1.544240 -0.271959 -1.085059
-v 3.334585 0.098417 -2.514929
-v 1.554716 0.187936 -1.132116
-v 2.612265 1.258718 -2.052108
-v 3.101424 0.726458 -2.383560
-v 3.222370 0.207946 -2.430242
-v -2.658075 -0.410585 2.212276
-v 3.150617 0.738370 -2.420182
-v 3.270283 0.225352 -2.466369
-v 3.160928 0.696012 -2.423422
-v 3.260400 0.269561 -2.461816
-v 2.619734 1.224381 -2.045928
-v 2.613334 1.294060 -2.047338
-v 2.829147 1.187974 -2.205056
-v 2.815259 1.353660 -2.206717
-v 2.570461 1.178110 -1.994503
-v 2.556271 1.332609 -1.997628
-v 2.777033 0.404579 -2.081148
-v 2.799910 0.306502 -2.089978
-v 2.789302 0.416625 -2.086768
-v 2.815452 0.304514 -2.096862
-v 2.634603 1.196277 -2.029740
-v 2.622778 1.325027 -2.032343
-v 2.651619 1.262515 -2.043053
-v 1.554142 0.981857 -1.160642
-v 2.656512 1.240018 -2.039004
-v 2.652319 1.285671 -2.039927
-v -2.635774 -0.407958 2.240880
-v 2.794724 0.385259 -2.065313
-v 2.807933 0.328634 -2.070411
-v 2.809805 0.394697 -2.069692
-v 2.824903 0.329970 -2.075520
-v 2.806035 0.357461 -2.061383
-v -2.489068 -0.351828 2.132329
-v 2.463909 1.145066 -1.865152
-v 2.782581 -0.176570 -1.992240
-v 1.570340 0.895334 -1.144881
-v 1.570297 0.896443 -1.144827
-v 1.570363 0.895879 -1.144798
-v 1.570504 0.894974 -1.144707
-v 1.570489 0.895138 -1.144709
-v 1.570444 0.896371 -1.144649
-v 1.570624 0.894816 -1.144569
-v 2.666254 1.221606 -2.028398
-v 2.658506 1.305960 -2.030103
-v 1.570869 0.894455 -1.144293
-v 1.570594 0.897869 -1.144312
-v 2.594467 1.157000 -1.966023
-v 2.575927 1.358863 -1.970106
-v 1.570894 0.897475 -1.143969
-v 2.833890 0.249041 -2.065584
-v 2.782731 0.468365 -2.045837
-v -2.701300 -0.462008 2.315575
-v -2.705561 0.099398 2.267342
-v 2.841108 1.134918 -2.151662
-v -0.479044 -0.046272 0.545593
-v 2.862191 1.138039 -2.167869
-v 2.822836 0.362979 -2.065575
-v 2.654608 1.178685 -2.006007
-v 2.639158 1.346905 -2.009409
-v -2.624374 -0.406615 2.255502
-v 2.818040 1.410109 -2.154421
-v 2.839368 1.410315 -2.170599
-v 2.863947 1.162135 -2.163311
-v 2.676065 1.265123 -2.025119
-v 2.664612 1.254980 -2.014677
-v 2.663261 1.271085 -2.014839
-v 0.971816 -0.356390 -0.546463
-v 2.844975 1.388465 -2.165580
-v 2.678566 1.253623 -2.023050
-v 2.676423 1.276959 -2.023522
-v 2.679361 1.210080 -2.012848
-v 2.669238 1.320294 -2.015076
-v 2.670727 1.241720 -2.008183
-v 2.667038 1.285720 -2.008625
-v 2.683546 1.244211 -2.017628
-v 2.679586 1.287331 -2.018500
-v 1.579791 0.985026 -1.130600
-v -1.956412 0.610154 1.662774
-v -1.856740 -0.486828 1.685802
-v 2.690246 1.238319 -2.009680
-v 2.685071 1.294657 -2.010819
-v 2.679968 1.234858 -1.997098
-v 2.674930 1.294963 -1.997700
-v -0.132362 0.006287 0.310615
-v 1.590120 0.977428 -1.119874
-v 2.748270 0.515690 -1.979648
-v 2.826352 0.180938 -2.009786
-v -2.571993 0.138873 2.206668
-v -2.521306 -0.458402 2.221998
-v -2.685403 -0.396185 2.345565
-v -2.686840 -0.001633 2.310453
-v 2.620983 1.151716 -1.932826
-v 2.600915 1.370211 -1.937245
-v 2.676704 1.174282 -1.978342
-v 2.659981 1.356362 -1.982024
-v 2.678470 1.266092 -1.988150
-v 2.693838 1.207195 -1.994723
-v 2.682881 1.326489 -1.997135
-v 2.697646 1.236845 -2.000415
-v 2.692045 1.297825 -2.001648
-v 2.697040 1.267502 -2.002758
-v 2.651196 0.936979 -1.934514
-v 2.898778 0.955779 -2.129270
-v 2.929918 0.567420 -2.117638
-v 3.008498 0.230534 -2.147968
-v 2.689859 1.236233 -1.984390
-v 2.684821 1.296338 -1.984993
-v 2.822841 0.425467 -2.012432
-v 2.852378 0.298841 -2.023833
-v 1.608781 0.850501 -1.104316
-v 2.704620 1.240012 -1.991243
-v 2.699446 1.296350 -1.992383
-v 1.624309 1.159754 -1.138181
-v 2.752678 0.550604 -1.960964
-v 2.846378 0.148901 -1.997130
-v 1.606690 0.959087 -1.103622
-v 2.710106 1.247339 -1.983562
-v 2.706145 1.290459 -1.984434
-v 2.697752 1.245476 -1.973465
-v 2.694063 1.289476 -1.973907
-v 2.707481 1.213392 -1.976781
-v 2.697358 1.323606 -1.979010
-v -2.445962 -0.418610 2.191836
-v 3.233725 0.674674 -2.334944
-v 3.319870 0.305357 -2.368193
-v 2.848333 0.363417 -2.004377
-v 2.713269 1.257710 -1.978540
-v 2.711125 1.281046 -1.979012
-v 1.518181 0.875199 -1.011295
-v 1.625158 -0.221229 -0.994015
-v 3.410238 0.117713 -2.416893
-v 2.901195 1.167312 -2.115460
-v 2.701529 1.260111 -1.967251
-v 2.700178 1.276216 -1.967413
-v 2.713626 1.269547 -1.976943
-v 1.616466 0.943560 -1.090626
-v 2.882224 1.393643 -2.117728
-v -2.383910 0.349570 2.084356
-v -2.382627 -0.452496 2.157011
-v 2.697528 1.183740 -1.950957
-v 2.682078 1.351960 -1.954359
-v 2.907001 1.144267 -2.110304
-v 2.886398 1.141212 -2.093480
-v 2.743282 0.582871 -1.930085
-v 2.853333 0.111072 -1.972562
-v 1.623579 0.887518 -1.082372
-v 0.198902 0.047648 0.105888
-v 1.621282 0.931471 -1.084234
-v 2.884178 1.416542 -2.113034
-v 2.863331 1.416404 -2.096239
-v -2.503361 -0.388481 2.254219
-v -2.538594 0.031317 2.243138
-v -1.878374 0.077127 1.724185
-v -1.889940 0.222714 1.719833
-v 2.645971 1.163066 -1.899965
-v 2.627431 1.364929 -1.904047
-v 2.718213 1.227726 -1.961754
-v 2.710466 1.312080 -1.963460
-v 1.626047 0.904541 -1.078374
-v 3.189935 0.700514 -2.275981
-v 3.294679 0.251469 -2.316409
-v 3.238191 0.712702 -2.313742
-v 3.341825 0.268415 -2.353742
-v 2.706004 0.594452 -1.884739
-v 2.826750 0.076803 -1.931343
-v 2.640884 0.583528 -1.826173
-v 2.765818 0.047924 -1.874394
-v 1.714162 1.276631 -1.167239
-v 2.724400 1.248014 -1.951930
-v 2.720207 1.293667 -1.952853
-v 1.654904 1.136021 -1.105274
-v 2.725100 1.271170 -1.948805
-v 2.713907 1.205618 -1.928023
-v 2.702083 1.334368 -1.930626
-v 1.831320 1.344269 -1.251206
-v -2.260945 0.399211 2.027604
-v -2.181051 -0.441814 2.042546
-v 2.809488 0.450216 -1.928661
-v 2.854570 0.256946 -1.946061
-v -2.423567 -0.369548 2.230060
-v -2.180836 0.422861 1.973894
-v -2.073524 -0.433428 1.968859
-v -1.805897 -0.428247 1.759726
-v -1.887675 0.473899 1.740641
-v -2.358199 -0.380076 2.187846
-v -2.358499 0.188271 2.135889
-v 2.990686 0.501054 -2.063247
-v 3.036054 0.306554 -2.080758
-v 2.665627 1.189319 -1.872442
-v 2.651437 1.343818 -1.875567
-v 2.648270 1.510792 -1.882843
-v 2.930912 1.202118 -2.074323
-v 2.723351 1.236585 -1.913028
-v 2.716951 1.306264 -1.914438
-v 2.917024 1.367804 -2.075984
-v 1.384653 -0.306314 -0.725204
-v 2.724420 1.271928 -1.908258
-v 1.621186 0.490687 -0.975352
-v 1.644965 0.346027 -0.980608
-v 0.465380 0.080433 -0.036070
-v 2.848397 0.355508 -1.916368
-v -2.408185 -0.394890 2.251162
-v 2.942750 1.186138 -2.060817
-v 2.578963 1.033323 -1.763117
-v 2.858250 -0.125781 -1.874424
-v 2.922529 1.183532 -2.043463
-v 2.676959 1.226479 -1.854450
-v 2.669279 1.310094 -1.856141
-v 2.926042 1.385458 -2.062815
-v 2.826142 0.472035 -1.899780
-v 2.880239 0.240111 -1.920660
-v 2.905643 1.384987 -2.045482
-v 3.029535 0.405571 -2.049749
-v 3.300344 0.601920 -2.275317
-v 3.350079 0.388695 -2.294513
-v 2.678242 1.268890 -1.848725
-v 2.945134 1.257227 -2.050923
-v 1.755731 1.246131 -1.122488
-v 1.720327 0.756772 -1.049674
-v 2.940050 1.317871 -2.051532
-v -2.214680 0.228844 2.067608
-v -2.157859 -0.367480 2.078067
-v 1.704158 1.079827 -1.054807
-v -2.127781 0.248308 2.009962
-v -2.051331 -0.359151 2.006140
-v -1.843236 0.290860 1.784206
-v -1.785848 -0.348829 1.798208
-v 1.604892 0.740558 -0.935201
-v 1.693974 -0.161033 -0.921860
-v 3.472397 0.138163 -2.335899
-v 1.873536 1.307570 -1.193691
-v 2.872832 0.358386 -1.885027
-v 2.959859 1.252435 -2.032667
-v 2.953743 1.325390 -2.033399
-v 3.342932 0.497244 -2.260519
-v 2.939822 1.250538 -2.015012
-v 2.829564 0.490591 -1.858224
-v 2.893102 0.218199 -1.882748
-v 2.933641 1.324275 -2.015751
-v 1.701154 -0.246228 -0.905127
-v -0.334995 -0.394882 0.699940
-v 3.318333 0.625178 -2.242012
-v 3.378166 0.368670 -2.265106
-v 3.270936 0.612055 -2.203483
-v 3.331410 0.352798 -2.226824
-v 2.870384 0.194339 -1.832802
-v 2.800672 0.493204 -1.805894
-v 2.706330 1.463624 -1.813588
-v 1.735438 1.031940 -1.015094
-v 2.096574 -0.183066 -1.184359
-v 2.738836 0.478769 -1.744593
-v 2.810966 0.169537 -1.772433
-v 1.857375 -0.219119 -0.990222
-v 2.884402 0.357112 -1.840897
-v 3.369567 0.499255 -2.224210
-v 0.704277 0.096803 -0.109143
-v 3.322719 0.484781 -2.185490
-v 1.668063 0.559071 -0.899985
-v 1.734685 -0.079917 -0.893249
-v 3.503355 0.161047 -2.294336
-v 1.853604 0.697100 -1.057274
-v 0.023839 -0.378671 0.476160
-v 2.742703 1.224204 -1.790460
-v 2.990285 1.243004 -1.985215
-v 1.751320 0.995124 -0.995284
-v 1.762367 0.864072 -0.986848
-v 1.978204 0.694100 -1.137927
-v 1.821889 1.171394 -1.054962
-v 2.860838 0.346753 -1.786883
-v 1.768391 0.914212 -0.976082
-v 2.800102 0.741867 -1.764054
-v 3.047683 0.760667 -1.958810
-v 2.801089 0.327237 -1.724923
-v 2.686153 0.887537 -1.683203
-v 2.915644 -0.066074 -1.774558
-v 1.939461 1.218681 -1.105028
-v 0.380965 -0.356962 0.277840
-v 2.157984 -0.096145 -1.130609
-v 2.171539 -0.180007 -1.133476
-v 1.870303 1.101825 -0.999439
-v 2.768902 0.690672 -1.652155
-v 2.931033 0.013315 -1.716360
-v 2.798614 1.350688 -1.707175
-v 1.895380 1.047986 -0.972059
-v -0.263286 -0.086843 0.817096
-v 1.915261 0.855545 -0.963812
-v 1.995518 1.144847 -1.050030
-v 1.923295 0.929349 -0.946858
-v 0.639411 -0.340042 0.173318
-v 2.048910 0.874962 -1.028633
-v 2.024876 1.087065 -1.024636
-v 0.098227 -0.041243 0.603403
-v 1.153992 0.084424 -0.229250
-v 2.057853 0.957558 -1.005829
-v 2.853774 1.270425 -1.644800
-v 2.691514 -0.001160 -1.386453
-v 2.705070 -0.085024 -1.389320
-v 2.781930 0.015918 -1.458515
-v 2.795485 -0.067945 -1.461382
-v 2.889620 0.961520 -1.629051
-v 3.137201 0.980321 -1.823807
-v 2.880562 1.206416 -1.616926
-v 3.128144 1.225217 -1.811681
-v 2.893827 1.173559 -1.603234
-v 3.141408 1.192360 -1.797990
-v -0.165990 -0.329480 0.922774
-v 2.905606 1.059058 -1.599313
-v 3.153188 1.077859 -1.794069
-v 2.902644 1.136966 -1.595558
-v 3.150226 1.155766 -1.790314
-v 2.906628 1.098234 -1.594232
-v 3.154210 1.117035 -1.788988
-v 0.450756 -0.003152 0.428413
-v 0.893967 -0.321301 0.137348
-v 0.203261 -0.310043 0.717218
-v -0.125580 -0.167821 0.986626
-v 0.712336 0.026704 0.345760
-v -0.090811 -0.262476 1.024542
-v 1.652963 0.059929 -0.335038
-v 0.245682 -0.133976 0.786321
-v 0.568430 -0.286725 0.550539
-v 0.283133 -0.240046 0.827356
-v 2.000346 0.011962 -0.463845
-v 0.611741 -0.102875 0.629863
-v 0.998399 0.048451 0.327453
-v 0.827128 -0.268380 0.491359
-v 1.390944 -0.279641 0.074489
-v 2.438757 0.004155 -0.738633
-v 0.652016 -0.215986 0.675288
-v 2.198852 0.014020 -0.544254
-v 0.870584 -0.078559 0.583979
-v 0.910831 -0.196982 0.637049
-v 1.127571 -0.244822 0.495289
-v 1.185795 -0.053488 0.599517
-v 1.535993 0.058149 0.320863
-v 1.947252 -0.218027 0.037437
-v 1.232465 -0.171199 0.659405
-v 2.293159 -0.159573 -0.040558
-v 2.769338 -0.097283 -0.322594
-v 1.695832 -0.196471 0.528473
-v 2.530709 -0.129037 -0.121828
-v 2.157723 0.063260 0.342121
-v 1.776927 -0.020207 0.662777
-v 1.833764 -0.121263 0.736990
-v 3.351091 0.073201 -0.443243
-v 3.364646 -0.010661 -0.446110
-v 2.948324 -0.003291 -0.110055
-v 2.961879 -0.087154 -0.112922
-v 2.992015 0.002089 -0.060870
-v 3.005570 -0.081773 -0.063737
-v 2.525032 0.038738 0.306061
-v 3.379430 0.074900 -0.358922
-v 3.392986 -0.008964 -0.361790
-v 3.036570 0.045434 0.026135
-v 2.796513 0.049478 0.227779
-v 2.357571 -0.130808 0.595337
-v 2.473462 0.016867 0.762129
-v 2.725617 -0.081249 0.592239
-v 2.544662 -0.059737 0.852031
-v 3.261550 -0.027300 0.308389
-v 3.022995 -0.051504 0.513873
-v 2.851826 0.022984 0.782891
-v 3.407963 0.046255 0.499554
-v 2.923753 -0.024800 0.883847
-v 3.168214 0.041578 0.705848
-v 3.711371 0.106264 0.292980
-v 3.724926 0.022401 0.290113
-v 3.531985 0.072015 0.446671
-v 3.545540 -0.011849 0.443804
-v 3.445588 0.055512 0.520889
-v 3.459143 -0.028351 0.518022
-v 3.563503 0.077601 0.432271
-v 3.577058 -0.006262 0.429404
-v 3.488101 0.014784 0.599486
-v 3.249111 0.000073 0.806963
-vt 0.592295 0.226200
-vt 0.597451 0.733993
-vt 0.582117 0.735152
-vt 0.578489 0.226600
-vt 0.583926 0.737917
-vt 0.580317 0.227579
-vt 0.553525 0.740642
-vt 0.440791 0.740508
-vt 0.450875 0.228401
-vt 0.552974 0.228523
-vt 0.390668 0.737686
-vt 0.405291 0.227370
-vt 0.388859 0.734922
-vt 0.403463 0.226391
-vt 0.371983 0.733724
-vt 0.388098 0.225956
-vt 0.619772 0.907170
-vt 0.592331 0.999817
-vt 0.601330 0.999666
-vt 0.610146 0.909999
-vt 0.574598 0.999907
-vt 0.590330 0.911915
-vt 0.553091 0.999969
-vt 0.566105 0.913419
-vt 0.528748 1.000000
-vt 0.538531 0.914447
-vt 0.502634 1.000000
-vt 0.478247 0.914918
-vt 0.475889 0.999968
-vt 0.508812 0.914955
-vt 0.449684 0.999906
-vt 0.448173 0.914340
-vt 0.425163 0.999816
-vt 0.419902 0.913245
-vt 0.403398 0.999703
-vt 0.394672 0.911681
-vt 0.385339 0.999570
-vt 0.373584 0.909717
-vt 0.375862 0.999397
-vt 0.362094 0.906863
-vt 0.605465 0.740602
-vt 0.597205 0.739049
-vt 0.491046 0.731144
-vt 0.490016 0.901745
-vt 0.489949 0.901745
-vt 0.579978 0.737974
-vt 0.489821 0.901745
-vt 0.558870 0.737116
-vt 0.489665 0.901745
-vt 0.534804 0.736510
-vt 0.489489 0.901745
-vt 0.508831 0.736184
-vt 0.489301 0.901744
-vt 0.482087 0.736152
-vt 0.489205 0.901744
-vt 0.455740 0.736416
-vt 0.430942 0.736963
-vt 0.408777 0.737770
-vt 0.390214 0.738801
-vt 0.379997 0.740333
-vt 0.353656 0.886514
-vt 0.378904 0.730193
-vt 0.361705 0.880889
-vt 0.395023 0.727499
-vt 0.380234 0.876591
-vt 0.415254 0.725377
-vt 0.403440 0.873201
-vt 0.438713 0.723920
-vt 0.430309 0.870869
-vt 0.464376 0.723192
-vt 0.459668 0.869695
-vt 0.477566 0.723232
-vt 0.474742 0.869751
-vt 0.491120 0.723224
-vt 0.490232 0.869731
-vt 0.517777 0.724015
-vt 0.520667 0.870977
-vt 0.543181 0.725530
-vt 0.549643 0.873375
-vt 0.566223 0.727704
-vt 0.575892 0.876824
-vt 0.585895 0.730440
-vt 0.598267 0.881171
-vt 0.611334 0.886821
-vt 0.514919 0.001808
-vt 0.498936 0.000000
-vt 0.513858 0.001846
-vt 0.529721 0.013570
-vt 0.531965 0.013618
-vt 0.556734 0.062512
-vt 0.561107 0.062168
-vt 0.573935 0.111992
-vt 0.579743 0.111218
-vt 0.580242 0.134938
-vt 0.586574 0.134186
-vt 0.586077 0.152110
-vt 0.592909 0.152041
-vt 0.591813 0.178477
-vt 0.599157 0.177963
-vt 0.593139 0.193428
-vt 0.600618 0.192699
-vt 0.592908 0.232476
-vt 0.600324 0.231459
-vt 0.496437 0.231529
-vt 0.508654 0.001888
-vt 0.518859 0.013502
-vt 0.535963 0.062914
-vt 0.546664 0.112914
-vt 0.550579 0.135830
-vt 0.554180 0.152166
-vt 0.557666 0.179076
-vt 0.558422 0.194288
-vt 0.558268 0.233688
-vt 0.501777 0.001902
-vt 0.504546 0.013460
-vt 0.508707 0.063079
-vt 0.510973 0.113312
-vt 0.511780 0.136212
-vt 0.512489 0.152160
-vt 0.513077 0.179318
-vt 0.513104 0.194651
-vt 0.512986 0.234213
-vt 0.498076 0.001898
-vt 0.496856 0.013450
-vt 0.494097 0.063062
-vt 0.491870 0.113289
-vt 0.491019 0.136187
-vt 0.490190 0.152133
-vt 0.489240 0.179289
-vt 0.488883 0.194622
-vt 0.488765 0.234184
-vt 0.490954 0.001867
-vt 0.482078 0.013458
-vt 0.466079 0.062831
-vt 0.455287 0.112805
-vt 0.451272 0.135711
-vt 0.447516 0.152039
-vt 0.443646 0.178940
-vt 0.442563 0.194150
-vt 0.442409 0.233550
-vt 0.485218 0.001812
-vt 0.470208 0.013499
-vt 0.443661 0.062377
-vt 0.426084 0.111816
-vt 0.419558 0.134746
-vt 0.413491 0.151904
-vt 0.407324 0.178257
-vt 0.405675 0.193204
-vt 0.405444 0.232252
-vt 0.483722 0.001771
-vt 0.467140 0.013541
-vt 0.437940 0.062021
-vt 0.418694 0.111026
-vt 0.411548 0.133977
-vt 0.404917 0.151817
-vt 0.398200 0.177723
-vt 0.396421 0.192455
-vt 0.396126 0.231215
-vt 0.482807 0.001091
-vt 0.465246 0.012218
-vt 0.434231 0.060860
-vt 0.413722 0.112734
-vt 0.406278 0.130880
-vt 0.397753 0.154535
-vt 0.390718 0.172336
-vt 0.388811 0.184259
-vt 0.483894 0.000866
-vt 0.467479 0.011696
-vt 0.438359 0.060674
-vt 0.419010 0.113922
-vt 0.412060 0.130257
-vt 0.403381 0.155615
-vt 0.396772 0.170695
-vt 0.394947 0.181718
-vt 0.394122 0.224712
-vt 0.489100 0.000562
-vt 0.478265 0.010987
-vt 0.458692 0.060437
-vt 0.445446 0.115578
-vt 0.440842 0.129428
-vt 0.433493 0.157124
-vt 0.429012 0.168469
-vt 0.427688 0.178256
-vt 0.426709 0.223032
-vt 0.492401 0.000471
-vt 0.485112 0.010775
-vt 0.471652 0.060373
-vt 0.462347 0.116094
-vt 0.459225 0.129185
-vt 0.452993 0.157597
-vt 0.449873 0.167802
-vt 0.448880 0.177211
-vt 0.447853 0.222532
-vt 0.495979 0.000427
-vt 0.492542 0.010672
-vt 0.485745 0.060349
-vt 0.480752 0.116370
-vt 0.479235 0.129074
-vt 0.474359 0.157853
-vt 0.472721 0.167476
-vt 0.472093 0.176692
-vt 0.471042 0.222291
-vt 0.497803 0.000430
-vt 0.496333 0.010680
-vt 0.492949 0.060359
-vt 0.490171 0.116373
-vt 0.489471 0.129091
-vt 0.485358 0.157859
-vt 0.484479 0.167501
-vt 0.484040 0.176724
-vt 0.482990 0.222314
-vt 0.499680 0.000431
-vt 0.500232 0.010681
-vt 0.500355 0.060366
-vt 0.499854 0.116392
-vt 0.499996 0.129099
-vt 0.496658 0.157879
-vt 0.496558 0.167505
-vt 0.496314 0.176721
-vt 0.495264 0.222320
-vt 0.503340 0.000484
-vt 0.507844 0.010802
-vt 0.514842 0.060424
-vt 0.518821 0.116161
-vt 0.520601 0.129259
-vt 0.518915 0.157676
-vt 0.520341 0.167887
-vt 0.520484 0.177297
-vt 0.519458 0.222618
-vt 0.506801 0.000583
-vt 0.515045 0.011031
-vt 0.528575 0.060520
-vt 0.536823 0.115687
-vt 0.540149 0.129546
-vt 0.540157 0.157251
-vt 0.543032 0.168605
-vt 0.543547 0.178394
-vt 0.542568 0.223170
-vt 0.512534 0.000900
-vt 0.526992 0.011767
-vt 0.551432 0.060809
-vt 0.566860 0.114099
-vt 0.572744 0.130449
-vt 0.575967 0.155821
-vt 0.581260 0.170915
-vt 0.582411 0.181941
-vt 0.581586 0.224936
-vt 0.514004 0.001128
-vt 0.530070 0.012295
-vt 0.557398 0.061007
-vt 0.574770 0.112926
-vt 0.581304 0.131089
-vt 0.585745 0.154759
-vt 0.591675 0.172575
-vt 0.593008 0.184503
-vt 0.500194 0.123038
-vt 0.538682 0.145632
-vt 0.499355 0.147686
-vt 0.567425 0.437987
-vt 0.495309 0.437689
-vt 0.572058 0.485965
-vt 0.494594 0.485885
-vt 0.579203 0.530428
-vt 0.494130 0.530571
-vt 0.588071 0.564595
-vt 0.493832 0.570346
-vt 0.603460 0.591429
-vt 0.494064 0.596672
-vt 0.634825 0.640783
-vt 0.495158 0.646017
-vt 0.673396 0.693624
-vt 0.496679 0.696159
-vt 0.692678 0.734348
-vt 0.497801 0.742533
-vt 0.702762 0.758051
-vt 0.498113 0.758399
-vt 0.701606 0.793564
-vt 0.498079 0.793255
-vt 0.493311 0.794017
-vt 0.530328 0.123074
-vt 0.571363 0.144013
-vt 0.627653 0.438535
-vt 0.636786 0.486372
-vt 0.650275 0.530678
-vt 0.666763 0.560227
-vt 0.694688 0.587480
-vt 0.750987 0.636789
-vt 0.820060 0.691789
-vt 0.854194 0.727752
-vt 0.872335 0.757923
-vt 0.870198 0.793953
-vt 0.555251 0.123104
-vt 0.591748 0.143109
-vt 0.665577 0.439237
-vt 0.677585 0.487036
-vt 0.695058 0.531278
-vt 0.716302 0.557996
-vt 0.751975 0.585509
-vt 0.823559 0.634725
-vt 0.911312 0.690971
-vt 0.954422 0.723886
-vt 0.977512 0.758039
-vt 0.974704 0.794354
-vt 0.570653 0.123123
-vt 0.596282 0.143062
-vt 0.674482 0.439878
-vt 0.687203 0.487720
-vt 0.705580 0.531920
-vt 0.727870 0.558106
-vt 0.765162 0.585722
-vt 0.839794 0.634825
-vt 0.931229 0.691232
-vt 0.975934 0.723388
-vt 1.000000 0.758335
-vt 0.996949 0.794648
-vt 0.404437 0.142964
-vt 0.426515 0.122951
-vt 0.573874 0.123126
-vt 0.323231 0.439478
-vt 0.310002 0.487319
-vt 0.291306 0.531610
-vt 0.269108 0.558029
-vt 0.232259 0.585436
-vt 0.158605 0.634392
-vt 0.068392 0.690386
-vt 0.024123 0.722737
-vt 0.000000 0.757160
-vt 0.002277 0.793454
-vt 0.408288 0.143022
-vt 0.329678 0.438833
-vt 0.316870 0.486617
-vt 0.298892 0.530832
-vt 0.277591 0.557845
-vt 0.242362 0.585244
-vt 0.172141 0.634290
-vt 0.086185 0.690163
-vt 0.044209 0.723323
-vt 0.021216 0.756939
-vt 0.023503 0.793219
-vt 0.429735 0.122954
-vt 0.428009 0.143973
-vt 0.365185 0.438218
-vt 0.354927 0.486047
-vt 0.340715 0.530335
-vt 0.323958 0.560190
-vt 0.296482 0.587348
-vt 0.241975 0.636524
-vt 0.175315 0.691197
-vt 0.142962 0.727426
-vt 0.125096 0.757073
-vt 0.126941 0.793066
-vt 0.445138 0.122973
-vt 0.460221 0.145670
-vt 0.423771 0.437812
-vt 0.417791 0.485792
-vt 0.409775 0.530252
-vt 0.400446 0.564744
-vt 0.385513 0.591511
-vt 0.356231 0.640793
-vt 0.320514 0.693380
-vt 0.303405 0.734406
-vt 0.293784 0.757604
-vt 0.294807 0.793079
-vt 0.470061 0.123002
-vt 0.584118 0.143846
-vt 0.652512 0.440323
-vt 0.663585 0.488333
-vt 0.679561 0.533226
-vt 0.698964 0.560878
-vt 0.731472 0.587869
-vt 0.796494 0.637100
-vt 0.876085 0.692426
-vt 0.914822 0.726015
-vt 0.935707 0.758515
-vt 0.932883 0.794633
-vt 0.564354 0.123115
-vt 0.557453 0.145374
-vt 0.603941 0.440767
-vt 0.611404 0.489119
-vt 0.622180 0.535513
-vt 0.635332 0.566338
-vt 0.657480 0.591977
-vt 0.701732 0.641506
-vt 0.755840 0.694578
-vt 0.781940 0.731416
-vt 0.796061 0.758682
-vt 0.793893 0.794463
-vt 0.543740 0.123090
-vt 0.520898 0.147383
-vt 0.537164 0.441133
-vt 0.539680 0.489942
-vt 0.543358 0.538385
-vt 0.547975 0.573543
-vt 0.555980 0.597337
-vt 0.571895 0.647283
-vt 0.591287 0.697315
-vt 0.600266 0.738659
-vt 0.605208 0.758809
-vt 0.604010 0.794167
-vt 0.515597 0.123057
-vt 0.480790 0.147467
-vt 0.463733 0.441064
-vt 0.460823 0.489897
-vt 0.456750 0.538466
-vt 0.452065 0.573899
-vt 0.444570 0.597554
-vt 0.429485 0.647493
-vt 0.410904 0.697284
-vt 0.401280 0.738907
-vt 0.396151 0.758578
-vt 0.396067 0.793912
-vt 0.484791 0.123020
-vt 0.444068 0.145371
-vt 0.396343 0.440538
-vt 0.388469 0.488901
-vt 0.377334 0.535405
-vt 0.364191 0.566484
-vt 0.342521 0.591951
-vt 0.299133 0.641406
-vt 0.245883 0.694154
-vt 0.219396 0.731230
-vt 0.205038 0.757996
-vt 0.206019 0.793754
-vt 0.456648 0.122986
-vt 0.417060 0.143778
-vt 0.346645 0.439977
-vt 0.335120 0.487990
-vt 0.318813 0.532980
-vt 0.299476 0.560871
-vt 0.267422 0.587665
-vt 0.203316 0.636772
-vt 0.124729 0.691714
-vt 0.085988 0.725511
-vt 0.064911 0.757495
-vt 0.066727 0.793592
-vt 0.436035 0.122962
-vt 0.495260 0.736170
-vt 0.500696 0.234197
-vt 0.536496 0.234045
-vt 0.577350 0.233157
-vt 0.495655 0.736171
-vt 0.501053 0.234197
-vt 0.464891 0.233960
-vt 0.422300 0.232972
-vt 0.408534 0.223769
-vt 0.563583 0.223955
-vt 0.367604 0.795692
-vt 0.344548 0.863566
-vt 0.343493 0.862334
-vt 0.368659 0.796923
-vt 0.344327 0.876900
-vt 0.343272 0.875668
-vt 0.145143 0.856433
-vt 0.144088 0.855201
-vt 0.144487 0.796170
-vt 0.143432 0.794939
-vt 0.132013 0.795411
-vt 0.130679 0.853014
-vt 0.129623 0.851782
-vt 0.133068 0.796642
-vt 0.006462 0.836828
-vt 0.005407 0.835597
-vt 0.003936 0.813497
-vt 0.002882 0.812266
-vt 0.005457 0.809612
-vt 0.004402 0.808380
-vt 0.004946 0.796489
-vt 0.003891 0.795258
-vt 0.854563 0.797672
-vt 0.853823 0.852194
-vt 0.854872 0.853763
-vt 0.853514 0.796103
-vt 0.978631 0.836386
-vt 0.979680 0.837955
-vt 0.982018 0.813180
-vt 0.983067 0.814749
-vt 0.980641 0.809310
-vt 0.981690 0.810879
-vt 0.981636 0.796256
-vt 0.982685 0.797825
-vt 0.618972 0.797391
-vt 0.639573 0.862183
-vt 0.640622 0.863752
-vt 0.617923 0.795822
-vt 0.639302 0.875450
-vt 0.640350 0.877019
-vt 0.839233 0.855561
-vt 0.840281 0.857130
-vt 0.842114 0.795606
-vt 0.843162 0.797175
-vt 0.341429 0.892018
-vt 0.354422 0.771751
-vt 0.371180 0.771906
-vt 0.361304 0.757630
-vt 0.375583 0.756290
-vt 0.376061 0.747099
-vt 0.386704 0.746114
-vt 0.396022 0.741918
-vt 0.399519 0.741536
-vt 0.406939 0.741656
-vt 0.407021 0.741651
-vt 0.362783 0.891001
-vt 0.382518 0.772090
-vt 0.385281 0.755640
-vt 0.393806 0.745632
-vt 0.401875 0.741347
-vt 0.407053 0.741648
-vt 0.377126 0.890562
-vt 0.415783 0.773053
-vt 0.413937 0.755087
-vt 0.414119 0.745184
-vt 0.408737 0.741153
-vt 0.407022 0.741639
-vt 0.418673 0.890604
-vt 0.457357 0.774594
-vt 0.449912 0.755475
-vt 0.439090 0.745395
-vt 0.417274 0.741201
-vt 0.406885 0.741627
-vt 0.367889 0.778452
-vt 0.364200 0.897177
-vt 0.470167 0.891713
-vt 0.370122 0.761446
-vt 0.381736 0.748731
-vt 0.398612 0.742335
-vt 0.406817 0.741630
-vt 0.341083 0.776828
-vt 0.346977 0.760159
-vt 0.366096 0.747919
-vt 0.393148 0.742062
-vt 0.406985 0.741639
-vt 0.330950 0.895375
-vt 0.334983 0.775889
-vt 0.341985 0.759566
-vt 0.362746 0.747620
-vt 0.391920 0.741975
-vt 0.407026 0.741643
-vt 0.322792 0.894560
-vt 0.337783 0.774019
-vt 0.345386 0.758625
-vt 0.365129 0.747299
-vt 0.392543 0.741914
-vt 0.407019 0.741650
-vt 0.324143 0.893295
-vt 0.342886 0.773061
-vt 0.350401 0.758202
-vt 0.368571 0.747202
-vt 0.393616 0.741910
-vt 0.406994 0.741653
-vt 0.329152 0.892735
-vt 0.606943 0.892335
-vt 0.578997 0.772154
-vt 0.598183 0.772042
-vt 0.576236 0.756530
-vt 0.592545 0.757906
-vt 0.567870 0.746331
-vt 0.580039 0.747342
-vt 0.558973 0.741727
-vt 0.562967 0.742117
-vt 0.553477 0.741826
-vt 0.553572 0.741831
-vt 0.582516 0.891263
-vt 0.566609 0.772310
-vt 0.565670 0.755855
-vt 0.560098 0.745830
-vt 0.556401 0.741531
-vt 0.553436 0.741823
-vt 0.566831 0.890789
-vt 0.533400 0.773194
-vt 0.537139 0.755234
-vt 0.539725 0.745333
-vt 0.549548 0.741322
-vt 0.553438 0.741813
-vt 0.525261 0.890731
-vt 0.494395 0.774638
-vt 0.503451 0.755539
-vt 0.516203 0.745487
-vt 0.541534 0.741350
-vt 0.553540 0.741802
-vt 0.599293 0.897457
-vt 0.597789 0.778726
-vt 0.476853 0.891721
-vt 0.595602 0.761715
-vt 0.582464 0.748970
-vt 0.563094 0.742531
-vt 0.553620 0.741805
-vt 0.620315 0.777161
-vt 0.614992 0.760479
-vt 0.595561 0.748192
-vt 0.567681 0.742270
-vt 0.553478 0.741814
-vt 0.627351 0.895729
-vt 0.624397 0.776234
-vt 0.618175 0.759896
-vt 0.597681 0.747900
-vt 0.568493 0.742185
-vt 0.553449 0.741818
-vt 0.633134 0.894930
-vt 0.618307 0.774354
-vt 0.611745 0.758943
-vt 0.593228 0.747572
-vt 0.567181 0.742122
-vt 0.553475 0.741825
-vt 0.628051 0.893657
-vt 0.611697 0.773381
-vt 0.605318 0.758506
-vt 0.588819 0.747464
-vt 0.565791 0.742115
-vt 0.553508 0.741827
-vt 0.621374 0.893083
-vt 0.467142 0.741480
-vt 0.460043 0.823727
-vt 0.466255 0.823734
-vt 0.491990 0.741510
-vt 0.491102 0.823764
-vt 0.497314 0.823771
-vt 0.459387 0.936839
-vt 0.481806 0.936865
-vt 0.442062 0.996371
-vt 0.457305 0.996390
-vt 0.441061 0.998017
-vt 0.455880 0.998035
-vt 0.440376 0.996388
-vt 0.454893 0.996405
-vt 0.440171 0.989270
-vt 0.454568 0.989287
-vt 0.440732 0.939254
-vt 0.455138 0.939271
-vt 0.441300 0.928768
-vt 0.455901 0.928785
-vt 0.442019 0.920921
-vt 0.456893 0.920939
-vt 0.442564 0.913924
-vt 0.457640 0.913942
-vt 0.463957 0.747884
-vt 0.487465 0.747912
-vt 0.464844 0.743833
-vt 0.488714 0.743862
-vt 0.549439 0.921434
-vt 0.548851 0.918488
-vt 0.544157 0.921323
-vt 0.551271 0.945406
-vt 0.533127 0.945025
-vt 0.552776 0.983628
-vt 0.528590 0.983120
-vt 0.552915 0.990499
-vt 0.528985 0.989997
-vt 0.552488 0.989209
-vt 0.532597 0.988792
-vt 0.540100 0.920799
-vt 0.519194 0.943227
-vt 0.510019 0.980723
-vt 0.510611 0.987626
-vt 0.517323 0.986820
-vt 0.538358 0.920003
-vt 0.513207 0.940494
-vt 0.502039 0.977080
-vt 0.502715 0.984021
-vt 0.510760 0.983824
-vt 0.539395 0.919149
-vt 0.516770 0.937557
-vt 0.506788 0.973165
-vt 0.507415 0.980148
-vt 0.514666 0.980605
-vt 0.542934 0.918463
-vt 0.528929 0.935204
-vt 0.522994 0.970029
-vt 0.523449 0.977045
-vt 0.527995 0.978025
-vt 0.548028 0.918132
-vt 0.546424 0.934066
-vt 0.546314 0.968512
-vt 0.546522 0.975543
-vt 0.547174 0.976777
-vt 0.553310 0.918243
-vt 0.564569 0.934446
-vt 0.570500 0.969019
-vt 0.570451 0.976045
-vt 0.567066 0.977194
-vt 0.557366 0.918766
-vt 0.578501 0.936245
-vt 0.589071 0.971416
-vt 0.588825 0.978417
-vt 0.582340 0.979166
-vt 0.559110 0.919562
-vt 0.584488 0.938978
-vt 0.597051 0.975059
-vt 0.596721 0.982022
-vt 0.588903 0.982162
-vt 0.558072 0.920417
-vt 0.580925 0.941915
-vt 0.592302 0.978974
-vt 0.592022 0.985895
-vt 0.584996 0.985382
-vt 0.554533 0.921102
-vt 0.568767 0.944267
-vt 0.576096 0.982110
-vt 0.575988 0.988998
-vt 0.571668 0.987961
-vt 0.424145 0.921277
-vt 0.423693 0.918338
-vt 0.418870 0.920933
-vt 0.423822 0.945229
-vt 0.405702 0.944048
-vt 0.421388 0.983437
-vt 0.397235 0.981863
-vt 0.420772 0.990308
-vt 0.396875 0.988751
-vt 0.420346 0.989024
-vt 0.400481 0.987729
-vt 0.414819 0.920239
-vt 0.391787 0.941664
-vt 0.378687 0.978685
-vt 0.378524 0.985607
-vt 0.385227 0.985116
-vt 0.413078 0.919381
-vt 0.385807 0.938716
-vt 0.370716 0.974756
-vt 0.370638 0.981719
-vt 0.378671 0.981884
-vt 0.414113 0.918588
-vt 0.389363 0.935994
-vt 0.375457 0.971128
-vt 0.375328 0.978129
-vt 0.382570 0.978900
-vt 0.417648 0.918074
-vt 0.401504 0.934227
-vt 0.391639 0.968773
-vt 0.391339 0.975799
-vt 0.395879 0.976963
-vt 0.422734 0.917975
-vt 0.418975 0.933889
-vt 0.414927 0.968321
-vt 0.414380 0.975353
-vt 0.415032 0.976592
-vt 0.428009 0.918319
-vt 0.437095 0.935070
-vt 0.439080 0.969896
-vt 0.438277 0.976910
-vt 0.434897 0.977887
-vt 0.432060 0.919013
-vt 0.451010 0.937454
-vt 0.457627 0.973073
-vt 0.456628 0.980054
-vt 0.450151 0.980500
-vt 0.433801 0.919872
-vt 0.456990 0.940402
-vt 0.465599 0.977003
-vt 0.464515 0.983942
-vt 0.456707 0.983732
-vt 0.432766 0.920664
-vt 0.453434 0.943124
-vt 0.460858 0.980631
-vt 0.459824 0.987532
-vt 0.452808 0.986716
-vt 0.429231 0.921178
-vt 0.441293 0.944891
-vt 0.444676 0.982987
-vt 0.443813 0.989862
-vt 0.439499 0.988653
-vt 0.489178 0.904955
-vt 0.478920 0.903724
-vt 0.488659 0.905860
-vt 0.513457 0.924223
-vt 0.511674 0.927332
-vt 0.523738 0.959386
-vt 0.521362 0.963531
-vt 0.522949 0.966121
-vt 0.520598 0.970220
-vt 0.515067 0.966111
-vt 0.513113 0.969519
-vt 0.486649 0.906626
-vt 0.504771 0.929961
-vt 0.512160 0.967035
-vt 0.511494 0.973688
-vt 0.505545 0.972402
-vt 0.483455 0.907135
-vt 0.493798 0.931710
-vt 0.497535 0.969367
-vt 0.497023 0.975995
-vt 0.493517 0.974319
-vt 0.479562 0.907310
-vt 0.480427 0.932313
-vt 0.479712 0.970170
-vt 0.479389 0.976790
-vt 0.478859 0.974980
-vt 0.475564 0.907126
-vt 0.466693 0.931678
-vt 0.461405 0.969323
-vt 0.461277 0.975952
-vt 0.463802 0.974284
-vt 0.472068 0.906608
-vt 0.454687 0.929901
-vt 0.445402 0.966955
-vt 0.445442 0.973609
-vt 0.450640 0.972336
-vt 0.469608 0.905838
-vt 0.446236 0.927254
-vt 0.434137 0.963426
-vt 0.434297 0.970118
-vt 0.441375 0.969434
-vt 0.468558 0.904931
-vt 0.442627 0.924138
-vt 0.429327 0.959274
-vt 0.429538 0.966009
-vt 0.437419 0.966018
-vt 0.469077 0.904026
-vt 0.444410 0.921030
-vt 0.431703 0.955130
-vt 0.431889 0.961909
-vt 0.439374 0.962610
-vt 0.471086 0.903260
-vt 0.451313 0.918400
-vt 0.440904 0.951625
-vt 0.440993 0.958442
-vt 0.446941 0.959728
-vt 0.474281 0.902751
-vt 0.462285 0.916651
-vt 0.455530 0.949294
-vt 0.455463 0.956135
-vt 0.458970 0.957810
-vt 0.478174 0.902575
-vt 0.475656 0.916048
-vt 0.473353 0.948490
-vt 0.473097 0.955340
-vt 0.473628 0.957150
-vt 0.482172 0.902760
-vt 0.489391 0.916684
-vt 0.491660 0.949337
-vt 0.491210 0.956177
-vt 0.488685 0.957846
-vt 0.485667 0.903278
-vt 0.501397 0.918460
-vt 0.507663 0.951705
-vt 0.507044 0.958521
-vt 0.501847 0.959794
-vt 0.488128 0.904048
-vt 0.509848 0.921108
-vt 0.518928 0.955234
-vt 0.518190 0.962012
-vt 0.511111 0.962696
-vt 0.490402 0.906636
-vt 0.478826 0.907307
-vt 0.488446 0.905821
-vt 0.501508 0.904625
-vt 0.497682 0.903031
-vt 0.513572 0.898392
-vt 0.507734 0.895959
-vt 0.520474 0.898400
-vt 0.513468 0.895480
-vt 0.527756 0.896328
-vt 0.519527 0.892898
-vt 0.532641 0.890349
-vt 0.523612 0.886586
-vt 0.534751 0.880504
-vt 0.525409 0.876611
-vt 0.483918 0.905221
-vt 0.488823 0.901856
-vt 0.494212 0.894166
-vt 0.497242 0.893329
-vt 0.500470 0.890372
-vt 0.502703 0.883814
-vt 0.503775 0.873743
-vt 0.478030 0.904996
-vt 0.477305 0.901416
-vt 0.476632 0.893495
-vt 0.476145 0.892524
-vt 0.475691 0.889426
-vt 0.475516 0.882776
-vt 0.475646 0.872669
-vt 0.472360 0.905207
-vt 0.466213 0.901829
-vt 0.459702 0.894125
-vt 0.455830 0.893280
-vt 0.451831 0.890314
-vt 0.449337 0.883750
-vt 0.448558 0.873677
-vt 0.468427 0.905797
-vt 0.458520 0.902984
-vt 0.447960 0.895887
-vt 0.441739 0.895394
-vt 0.435282 0.892798
-vt 0.431179 0.886476
-vt 0.429771 0.876497
-vt 0.467286 0.906609
-vt 0.456287 0.904571
-vt 0.444552 0.898310
-vt 0.437650 0.898301
-vt 0.430478 0.896212
-vt 0.425909 0.890222
-vt 0.424318 0.880373
-vt 0.469241 0.907423
-vt 0.460112 0.906165
-vt 0.450390 0.900743
-vt 0.444656 0.901221
-vt 0.438707 0.899641
-vt 0.434938 0.893984
-vt 0.433660 0.884266
-vt 0.473770 0.908024
-vt 0.468971 0.907340
-vt 0.463912 0.902535
-vt 0.460882 0.903372
-vt 0.457764 0.902168
-vt 0.455847 0.896756
-vt 0.455294 0.887134
-vt 0.479658 0.908248
-vt 0.480490 0.907779
-vt 0.481492 0.903207
-vt 0.481979 0.904178
-vt 0.482542 0.903114
-vt 0.483033 0.897794
-vt 0.483423 0.888208
-vt 0.485328 0.908037
-vt 0.491581 0.907367
-vt 0.498422 0.902577
-vt 0.502294 0.903422
-vt 0.506403 0.902226
-vt 0.509212 0.896820
-vt 0.510510 0.887200
-vt 0.489260 0.907447
-vt 0.499275 0.906212
-vt 0.510164 0.900814
-vt 0.516385 0.901307
-vt 0.522952 0.899742
-vt 0.527370 0.894095
-vt 0.529298 0.884380
-vt 0.435164 0.921226
-vt 0.423586 0.921892
-vt 0.433212 0.920281
-vt 0.446278 0.919232
-vt 0.442459 0.917382
-vt 0.458366 0.913050
-vt 0.452538 0.910227
-vt 0.465268 0.913058
-vt 0.458275 0.909671
-vt 0.472557 0.911003
-vt 0.464343 0.907025
-vt 0.477464 0.905073
-vt 0.468453 0.900708
-vt 0.479612 0.895309
-vt 0.470288 0.890792
-vt 0.428687 0.919585
-vt 0.433606 0.916021
-vt 0.439025 0.908150
-vt 0.442059 0.907178
-vt 0.445298 0.904097
-vt 0.447556 0.897496
-vt 0.448667 0.887469
-vt 0.422799 0.919325
-vt 0.422089 0.915513
-vt 0.421447 0.907374
-vt 0.420965 0.906248
-vt 0.420524 0.903004
-vt 0.420375 0.896296
-vt 0.420542 0.886228
-vt 0.417129 0.919572
-vt 0.410995 0.915994
-vt 0.404515 0.908109
-vt 0.400647 0.907129
-vt 0.396659 0.904039
-vt 0.394191 0.897432
-vt 0.393450 0.887403
-vt 0.413194 0.920257
-vt 0.403297 0.917335
-vt 0.392764 0.910156
-vt 0.386546 0.909585
-vt 0.380099 0.906924
-vt 0.376020 0.900598
-vt 0.374650 0.890678
-vt 0.412048 0.921199
-vt 0.401056 0.919178
-vt 0.389345 0.912967
-vt 0.382443 0.912959
-vt 0.375279 0.910887
-vt 0.370733 0.904945
-vt 0.369179 0.895177
-vt 0.414000 0.922144
-vt 0.404875 0.921027
-vt 0.395173 0.915790
-vt 0.389436 0.916346
-vt 0.383493 0.914865
-vt 0.379745 0.909310
-vt 0.378503 0.899693
-vt 0.418526 0.922840
-vt 0.413728 0.922388
-vt 0.408686 0.917867
-vt 0.405652 0.918839
-vt 0.402538 0.917793
-vt 0.400641 0.912523
-vt 0.400124 0.903017
-vt 0.424413 0.923099
-vt 0.425245 0.922896
-vt 0.426264 0.918643
-vt 0.426745 0.919770
-vt 0.427312 0.918886
-vt 0.427823 0.913722
-vt 0.428249 0.904258
-vt 0.430084 0.922854
-vt 0.436339 0.922415
-vt 0.443196 0.917909
-vt 0.447065 0.918889
-vt 0.451177 0.917851
-vt 0.454007 0.912586
-vt 0.455341 0.903083
-vt 0.434019 0.922168
-vt 0.444037 0.921074
-vt 0.454947 0.915862
-vt 0.461165 0.916432
-vt 0.467738 0.914966
-vt 0.472177 0.909421
-vt 0.474141 0.899807
-vt 0.560322 0.921376
-vt 0.548743 0.922041
-vt 0.558370 0.920430
-vt 0.571436 0.919381
-vt 0.567617 0.917532
-vt 0.583524 0.913199
-vt 0.577696 0.910376
-vt 0.590426 0.913208
-vt 0.583432 0.909820
-vt 0.597715 0.911152
-vt 0.589501 0.907174
-vt 0.602622 0.905222
-vt 0.593610 0.900857
-vt 0.604770 0.895458
-vt 0.595446 0.890942
-vt 0.553844 0.919735
-vt 0.558764 0.916170
-vt 0.564183 0.908299
-vt 0.567217 0.907327
-vt 0.570456 0.904246
-vt 0.572714 0.897645
-vt 0.573824 0.887618
-vt 0.547957 0.919475
-vt 0.547247 0.915662
-vt 0.546605 0.907524
-vt 0.546123 0.906397
-vt 0.545682 0.903153
-vt 0.545532 0.896446
-vt 0.545700 0.886378
-vt 0.542286 0.919721
-vt 0.536153 0.916144
-vt 0.529672 0.908258
-vt 0.525804 0.907278
-vt 0.521817 0.904188
-vt 0.519348 0.897581
-vt 0.518608 0.887552
-vt 0.538351 0.920406
-vt 0.528455 0.917485
-vt 0.517922 0.910305
-vt 0.511704 0.909735
-vt 0.505256 0.907073
-vt 0.501178 0.900747
-vt 0.499808 0.890828
-vt 0.537206 0.921348
-vt 0.526215 0.919327
-vt 0.514503 0.913117
-vt 0.507601 0.913109
-vt 0.500437 0.911036
-vt 0.495891 0.905095
-vt 0.494337 0.895326
-vt 0.539158 0.922293
-vt 0.530033 0.921176
-vt 0.520331 0.915940
-vt 0.514594 0.916496
-vt 0.508651 0.915014
-vt 0.504902 0.909460
-vt 0.503661 0.899843
-vt 0.543684 0.922989
-vt 0.538886 0.922537
-vt 0.533844 0.918017
-vt 0.530810 0.918989
-vt 0.527696 0.917942
-vt 0.525799 0.912672
-vt 0.525282 0.903166
-vt 0.549571 0.923249
-vt 0.550403 0.923045
-vt 0.551422 0.918792
-vt 0.551903 0.919919
-vt 0.552470 0.919035
-vt 0.552980 0.913871
-vt 0.553407 0.904407
-vt 0.555241 0.923003
-vt 0.561497 0.922564
-vt 0.568354 0.918058
-vt 0.572222 0.919038
-vt 0.576335 0.918000
-vt 0.579165 0.912735
-vt 0.580499 0.903232
-vt 0.559177 0.922317
-vt 0.569195 0.921223
-vt 0.580104 0.916011
-vt 0.586323 0.916581
-vt 0.592896 0.915115
-vt 0.597334 0.909570
-vt 0.599299 0.899957
-vt 0.559044 0.903560
-vt 0.555560 0.904061
-vt 0.557240 0.903502
-vt 0.562383 0.902441
-vt 0.558853 0.902327
-vt 0.565998 0.899330
-vt 0.560611 0.899155
-vt 0.568167 0.890833
-vt 0.561703 0.890623
-vt 0.555180 0.903480
-vt 0.554825 0.902283
-vt 0.554462 0.899089
-vt 0.554324 0.890544
-vt 0.553180 0.903497
-vt 0.550910 0.902317
-vt 0.548487 0.899141
-vt 0.547155 0.890606
-vt 0.551541 0.903552
-vt 0.547705 0.902423
-vt 0.543596 0.899303
-vt 0.541285 0.890801
-vt 0.550515 0.903635
-vt 0.545699 0.902586
-vt 0.540533 0.899551
-vt 0.537609 0.891098
-vt 0.550258 0.903734
-vt 0.545195 0.902780
-vt 0.539764 0.899847
-vt 0.536687 0.891453
-vt 0.550808 0.903834
-vt 0.546272 0.902975
-vt 0.541408 0.900146
-vt 0.538658 0.891812
-vt 0.552082 0.903920
-vt 0.548764 0.903143
-vt 0.545212 0.900402
-vt 0.543224 0.892119
-vt 0.553886 0.903978
-vt 0.552293 0.903257
-vt 0.550598 0.900576
-vt 0.549688 0.892329
-vt 0.555946 0.904000
-vt 0.556322 0.903301
-vt 0.556747 0.900643
-vt 0.557066 0.892408
-vt 0.557947 0.903983
-vt 0.560237 0.903267
-vt 0.562722 0.900591
-vt 0.564236 0.892346
-vt 0.559585 0.903929
-vt 0.563441 0.903161
-vt 0.567613 0.900428
-vt 0.570106 0.892151
-vt 0.560611 0.903845
-vt 0.565448 0.902998
-vt 0.570676 0.900181
-vt 0.573781 0.891854
-vt 0.560868 0.903746
-vt 0.565951 0.902804
-vt 0.571445 0.899885
-vt 0.574704 0.891499
-vt 0.560318 0.903646
-vt 0.564875 0.902609
-vt 0.569802 0.899586
-vt 0.572732 0.891140
-vt 0.397743 0.903368
-vt 0.394259 0.903868
-vt 0.395939 0.903310
-vt 0.401082 0.902248
-vt 0.397553 0.902134
-vt 0.404697 0.899137
-vt 0.399311 0.898963
-vt 0.406867 0.890641
-vt 0.400403 0.890431
-vt 0.393880 0.903288
-vt 0.393524 0.902090
-vt 0.393162 0.898897
-vt 0.393024 0.890351
-vt 0.391879 0.903305
-vt 0.389610 0.902124
-vt 0.387187 0.898948
-vt 0.385854 0.890414
-vt 0.390241 0.903359
-vt 0.386405 0.902231
-vt 0.382296 0.899111
-vt 0.379985 0.890608
-vt 0.389215 0.903442
-vt 0.384398 0.902393
-vt 0.379233 0.899359
-vt 0.376309 0.890906
-vt 0.388958 0.903541
-vt 0.383895 0.902587
-vt 0.378464 0.899655
-vt 0.375387 0.891261
-vt 0.389508 0.903641
-vt 0.384971 0.902783
-vt 0.380107 0.899953
-vt 0.377358 0.891619
-vt 0.390782 0.903727
-vt 0.387464 0.902951
-vt 0.383912 0.900209
-vt 0.381923 0.891927
-vt 0.392586 0.903786
-vt 0.390993 0.903065
-vt 0.389298 0.900384
-vt 0.388387 0.892136
-vt 0.394645 0.903808
-vt 0.395022 0.903108
-vt 0.395447 0.900450
-vt 0.395766 0.892216
-vt 0.396646 0.903790
-vt 0.398936 0.903074
-vt 0.401422 0.900398
-vt 0.402936 0.892153
-vt 0.398285 0.903736
-vt 0.402141 0.902968
-vt 0.406313 0.900236
-vt 0.408806 0.891959
-vt 0.399310 0.903653
-vt 0.404148 0.902806
-vt 0.409376 0.899988
-vt 0.412481 0.891661
-vt 0.399568 0.903554
-vt 0.404651 0.902612
-vt 0.410145 0.899692
-vt 0.413404 0.891306
-vt 0.399017 0.903454
-vt 0.403575 0.902416
-vt 0.408502 0.899393
-vt 0.411432 0.890948
-vt 0.560050 0.895619
-vt 0.598903 0.933649
-vt 0.559659 0.931810
-vt 0.626960 0.931921
-vt 0.632743 0.931121
-vt 0.633550 0.930793
-vt 0.633940 0.894602
-vt 0.632944 0.930462
-vt 0.633334 0.894271
-vt 0.630952 0.930143
-vt 0.631342 0.893951
-vt 0.627661 0.929849
-vt 0.589170 0.929516
-vt 0.589561 0.893325
-vt 0.398164 0.895426
-vt 0.363809 0.933369
-vt 0.397773 0.931617
-vt 0.330560 0.931567
-vt 0.322401 0.930751
-vt 0.321016 0.894228
-vt 0.320625 0.930420
-vt 0.320649 0.893898
-vt 0.320258 0.930089
-vt 0.321706 0.893582
-vt 0.321316 0.929773
-vt 0.323752 0.929486
-vt 0.361788 0.893053
-vt 0.361398 0.929244
-vt 0.559656 0.902097
-vt 0.555589 0.901346
-vt 0.557317 0.902165
-vt 0.573965 0.927557
-vt 0.563255 0.927865
-vt 0.573734 0.930613
-vt 0.563137 0.930918
-vt 0.570621 0.930463
-vt 0.561812 0.930717
-vt 0.554520 0.902163
-vt 0.550449 0.927858
-vt 0.550467 0.930911
-vt 0.551280 0.930711
-vt 0.552015 0.902093
-vt 0.538979 0.927538
-vt 0.539119 0.930594
-vt 0.541846 0.930447
-vt 0.550473 0.901973
-vt 0.531919 0.926990
-vt 0.532133 0.930052
-vt 0.536040 0.929997
-vt 0.550307 0.901836
-vt 0.531159 0.926362
-vt 0.531382 0.929430
-vt 0.535415 0.929480
-vt 0.551562 0.901718
-vt 0.536905 0.925821
-vt 0.537067 0.928895
-vt 0.540141 0.929035
-vt 0.553901 0.901651
-vt 0.547615 0.925513
-vt 0.547664 0.928591
-vt 0.548949 0.928782
-vt 0.556698 0.901652
-vt 0.560422 0.925520
-vt 0.560334 0.928598
-vt 0.559482 0.928788
-vt 0.559203 0.901723
-vt 0.571891 0.925841
-vt 0.571682 0.928915
-vt 0.568915 0.929052
-vt 0.560745 0.901842
-vt 0.578951 0.926388
-vt 0.578668 0.929457
-vt 0.574722 0.929502
-vt 0.560911 0.901979
-vt 0.579711 0.927017
-vt 0.579419 0.930079
-vt 0.575346 0.930019
-vt 0.398356 0.901905
-vt 0.394289 0.901154
-vt 0.396017 0.901972
-vt 0.412665 0.927365
-vt 0.401954 0.927673
-vt 0.412434 0.930421
-vt 0.401837 0.930726
-vt 0.409321 0.930271
-vt 0.400512 0.930524
-vt 0.394258 0.903992
-vt 0.393220 0.901971
-vt 0.389148 0.927666
-vt 0.389167 0.930719
-vt 0.389979 0.930518
-vt 0.390714 0.901901
-vt 0.377679 0.927345
-vt 0.377819 0.930402
-vt 0.380546 0.930255
-vt 0.389172 0.901781
-vt 0.370618 0.926798
-vt 0.370833 0.929860
-vt 0.374739 0.929804
-vt 0.389006 0.901644
-vt 0.369859 0.926169
-vt 0.370082 0.929238
-vt 0.374115 0.929287
-vt 0.390261 0.901526
-vt 0.375605 0.925629
-vt 0.375767 0.928703
-vt 0.378840 0.928843
-vt 0.392601 0.901458
-vt 0.386315 0.925321
-vt 0.386364 0.928398
-vt 0.387649 0.928590
-vt 0.395398 0.901460
-vt 0.399121 0.925328
-vt 0.399034 0.928406
-vt 0.398181 0.928596
-vt 0.397903 0.901530
-vt 0.410591 0.925648
-vt 0.410382 0.928723
-vt 0.407615 0.928859
-vt 0.399445 0.901650
-vt 0.417651 0.926196
-vt 0.417368 0.929265
-vt 0.413422 0.929310
-vt 0.399611 0.901787
-vt 0.418410 0.926824
-vt 0.418119 0.929886
-vt 0.414046 0.929826
-vn 0.011353 0.401349 0.915830
-vn 0.382275 0.411969 -0.827082
-vn -0.579608 0.385968 -0.717673
-vn -0.581500 0.379101 -0.719810
-vn -0.578936 0.391400 -0.715262
-vn -0.587512 0.353526 -0.727866
-vn -0.281625 0.919126 -0.275399
-vn 0.057253 0.984527 0.165563
-vn 0.071383 0.980926 0.180639
-vn -0.296457 0.908780 -0.293558
-vn 0.474380 0.596789 0.647114
-vn 0.491165 0.565630 0.662404
-vn 0.513932 0.515061 0.685965
-vn 0.517106 0.508774 0.688223
-vn 0.275857 0.401013 -0.873531
-vn -0.191260 0.288827 -0.938047
-vn -0.394971 -0.383221 0.834925
-vn 0.387310 -0.917112 0.094089
-vn 0.623280 0.340129 0.704123
-vn 0.167821 -0.764855 0.621906
-vn 0.346049 -0.937437 -0.037507
-vn 0.028108 -0.899045 0.436933
-vn 0.351848 -0.931425 -0.092898
-vn -0.021699 -0.935636 0.352214
-vn 0.354595 -0.925047 -0.135960
-vn -0.066134 -0.957091 0.282022
-vn 0.350780 -0.921049 -0.169012
-vn 0.518418 -0.764580 -0.382855
-vn 0.338420 -0.920835 -0.193701
-vn 0.202460 -0.979156 -0.015046
-vn 0.316080 -0.924802 -0.211646
-vn 0.010743 -0.996918 -0.077364
-vn 0.282449 -0.932432 -0.225257
-vn -0.263527 -0.963652 0.043672
-vn 0.235603 -0.942106 -0.238563
-vn -0.338664 -0.940489 -0.026948
-vn 0.130589 -0.939299 -0.317209
-vn -0.497787 -0.838588 -0.221198
-vn -0.419324 0.243233 -0.874599
-vn -0.876553 -0.425245 0.225349
-vn 0.628407 0.047426 -0.776421
-vn 0.780297 -0.115146 -0.614673
-vn 0.783563 0.069918 -0.617328
-vn -0.748405 -0.260353 0.609973
-vn -0.749504 -0.261116 0.608264
-vn 0.753014 -0.055422 -0.655629
-vn -0.749474 -0.261025 0.608386
-vn 0.758538 -0.024628 -0.651143
-vn -0.749535 -0.261055 0.608264
-vn 0.767571 -0.000092 -0.640919
-vn -0.749565 -0.261055 0.608234
-vn 0.611438 -0.665090 -0.428663
-vn -0.751213 -0.254250 0.609088
-vn 0.407697 -0.867550 -0.284768
-vn -0.752129 -0.255257 0.607532
-vn 0.356670 -0.868801 -0.343394
-vn 0.296243 -0.863887 -0.407300
-vn 0.220618 -0.847133 -0.483383
-vn 0.021393 -0.758263 -0.651570
-vn -0.141331 -0.391461 -0.909268
-vn -0.187475 -0.241737 0.952055
-vn 0.837397 0.084780 -0.539933
-vn -0.023103 -0.413434 0.910215
-vn 0.824702 0.075686 -0.560442
-vn -0.095370 -0.585253 0.805200
-vn 0.812677 0.068239 -0.578692
-vn -0.154118 -0.691580 0.705618
-vn 0.800623 0.065004 -0.595599
-vn -0.233772 -0.776574 0.584979
-vn 0.788965 0.064425 -0.611011
-vn -0.333689 -0.831782 0.443556
-vn 0.785150 0.052644 -0.617023
-vn -0.415937 -0.817103 0.399091
-vn 0.779382 0.063265 -0.623310
-vn -0.437086 -0.843745 0.311441
-vn 0.767327 0.061159 -0.638295
-vn -0.553789 -0.813898 0.175604
-vn 0.753685 0.061495 -0.654317
-vn -0.658071 -0.750481 0.060671
-vn 0.738456 0.065859 -0.671041
-vn -0.748985 -0.661794 -0.031587
-vn 0.720969 0.071505 -0.689230
-vn -0.847560 -0.510117 -0.146214
-vn -0.934355 -0.298257 -0.194861
-vn -0.388806 -0.092868 0.916593
-vn -0.783807 -0.067476 0.617298
-vn -0.417402 -0.324046 0.848964
-vn 0.045289 -0.536576 0.842616
-vn 0.101627 -0.139500 0.984985
-vn 0.268532 -0.648549 0.712180
-vn 0.342967 -0.179662 0.921964
-vn 0.327982 -0.690237 0.644917
-vn 0.425520 -0.197241 0.883145
-vn 0.333811 -0.702963 0.627979
-vn 0.428297 -0.209754 0.878933
-vn 0.353496 -0.704642 0.615192
-vn 0.454268 -0.208472 0.866115
-vn 0.400616 -0.719047 0.567858
-vn 0.518052 -0.221412 0.826167
-vn 0.455519 -0.674062 0.581439
-vn 0.540757 -0.377819 0.751518
-vn -0.056063 -0.389721 0.919187
-vn -0.071047 -0.408887 0.909787
-vn -0.799554 -0.060579 0.597491
-vn -0.499863 -0.502060 0.705710
-vn -0.068178 -0.820673 0.567278
-vn 0.131443 -0.908658 0.396252
-vn 0.175726 -0.927091 0.331004
-vn 0.185553 -0.931791 0.311930
-vn 0.202643 -0.933988 0.294198
-vn 0.229926 -0.937773 0.260079
-vn 0.249245 -0.927580 0.278268
-vn -0.605335 -0.408643 0.683035
-vn -0.580706 -0.562334 0.588610
-vn -0.185675 -0.914670 0.358959
-vn 0.015992 -0.980255 0.196997
-vn 0.065188 -0.986755 0.148350
-vn 0.079196 -0.987762 0.134129
-vn 0.098361 -0.988250 0.116916
-vn 0.122410 -0.988006 0.093783
-vn 0.182073 -0.973327 0.139500
-vn -0.653920 -0.466628 0.595477
-vn -0.661611 -0.570849 0.486160
-vn -0.310678 -0.929106 0.200537
-vn -0.097995 -0.993866 0.051149
-vn -0.037843 -0.999146 0.014679
-vn -0.021607 -0.999725 0.005341
-vn 0.000305 -0.999939 -0.008972
-vn 0.045381 -0.998901 0.010651
-vn 0.056917 0.996734 0.057009
-vn -0.761834 -0.063967 0.644581
-vn -0.760979 -0.529954 0.374187
-vn -0.492935 -0.869564 0.028474
-vn -0.268410 -0.956328 -0.115513
-vn -0.190405 -0.971160 -0.143376
-vn -0.172277 -0.974181 -0.145756
-vn -0.149602 -0.976074 -0.157720
-vn -0.080416 -0.988525 -0.127750
-vn 0.157567 0.963073 0.218177
-vn -0.774438 -0.080844 0.627430
-vn -0.895108 -0.376080 0.239387
-vn -0.758873 -0.626179 -0.178747
-vn -0.565905 -0.744591 -0.353954
-vn -0.478896 -0.784600 -0.393689
-vn -0.462539 -0.795160 -0.392071
-vn -0.446303 -0.797143 -0.406629
-vn -0.383801 -0.811182 -0.441176
-vn -0.569842 -0.402722 -0.716269
-vn -0.867214 -0.482040 -0.124546
-vn -0.972625 -0.160802 0.167699
-vn -0.913907 -0.254952 -0.315836
-vn -0.789666 -0.307993 -0.530595
-vn -0.731681 -0.333262 -0.594592
-vn -0.719108 -0.343425 -0.604053
-vn -0.711142 -0.341990 -0.614215
-vn -0.645924 -0.361064 -0.672597
-vn -0.589465 -0.359386 -0.723411
-vn -0.558916 -0.355724 -0.749016
-vn -0.984649 -0.017029 0.173559
-vn -0.950407 0.063387 -0.304422
-vn -0.841395 0.103824 -0.530290
-vn -0.806238 0.117710 -0.579699
-vn -0.796869 0.065188 -0.600574
-vn -0.815058 0.082797 -0.573412
-vn -0.747459 0.052217 -0.662221
-vn -0.662618 0.054933 -0.746910
-vn -0.946440 0.184942 0.264534
-vn -0.901151 0.405866 -0.152165
-vn -0.791284 0.484329 -0.373119
-vn -0.758507 0.497940 -0.420301
-vn -0.832942 0.412763 -0.368511
-vn -0.853053 0.386303 -0.350780
-vn -0.759667 0.372906 -0.532762
-vn -0.660024 0.386639 -0.644063
-vn -0.246498 0.354472 -0.901975
-vn -0.869778 0.307108 0.386151
-vn -0.768059 0.638356 0.050264
-vn -0.649892 0.745659 -0.146855
-vn -0.625477 0.757378 -0.187414
-vn -0.755150 0.653676 -0.049348
-vn -0.807489 0.588000 -0.046693
-vn -0.708548 0.652181 -0.269387
-vn -0.584002 0.694327 -0.420484
-vn -0.127415 0.687521 -0.714866
-vn -0.815638 0.347392 0.462600
-vn -0.668355 0.719535 0.188513
-vn -0.535874 0.844081 0.017426
-vn -0.510453 0.859676 -0.017945
-vn -0.661184 0.738060 0.134465
-vn -0.726676 0.668844 0.156682
-vn -0.613208 0.788659 -0.044343
-vn -0.469069 0.859127 -0.204505
-vn -0.005982 0.836024 -0.548601
-vn -0.769311 0.368267 0.521989
-vn -0.581652 0.755638 0.301035
-vn -0.433180 0.887845 0.155126
-vn -0.404614 0.905606 0.127018
-vn -0.570086 0.773553 0.276742
-vn -0.631184 0.706412 0.320200
-vn -0.491775 0.855464 0.162236
-vn -0.328074 0.944578 0.010163
-vn 0.136052 0.927732 -0.347453
-vn -0.751610 0.359294 0.553117
-vn -0.543962 0.760521 0.354472
-vn -0.385083 0.896725 0.218116
-vn -0.352306 0.916196 0.190802
-vn -0.517808 0.788629 0.331462
-vn -0.585437 0.710044 0.391247
-vn -0.428938 0.866573 0.255043
-vn -0.254402 0.960753 0.110477
-vn 0.239692 0.931913 -0.272164
-vn -0.726463 0.373699 0.576678
-vn -0.501083 0.765160 0.404187
-vn -0.335337 0.899319 0.280557
-vn -0.301431 0.917936 0.257851
-vn -0.474563 0.785058 0.398083
-vn -0.523942 0.719474 0.455824
-vn -0.352763 0.870785 0.342387
-vn -0.173925 0.962493 0.208197
-vn -0.035707 0.993988 0.103244
-vn -0.678487 0.364696 0.637684
-vn -0.410749 0.749992 0.518418
-vn -0.224158 0.880764 0.417066
-vn -0.182409 0.898740 0.398663
-vn -0.354961 0.774987 0.522843
-vn -0.385052 0.709708 0.589892
-vn -0.180914 0.837123 0.516190
-vn -0.016968 0.917447 0.397443
-vn -0.462996 0.684591 0.562975
-vn -0.612934 0.339244 0.713553
-vn -0.294046 0.693960 0.657216
-vn -0.084872 0.811884 0.577593
-vn -0.034639 0.826319 0.562120
-vn -0.180486 0.720573 0.669454
-vn -0.199011 0.655660 0.728324
-vn 0.022217 0.734397 0.678335
-vn 0.145665 0.812983 0.563738
-vn -0.714560 0.223823 0.662770
-vn -0.504288 0.240455 0.829341
-vn -0.113254 0.500290 0.858394
-vn 0.119724 0.592853 0.796319
-vn 0.180761 0.608966 0.772301
-vn 0.118778 0.528459 0.840571
-vn 0.082675 0.500137 0.861965
-vn 0.284463 0.498032 0.819147
-vn 0.422620 0.516312 0.744835
-vn 0.035096 0.318186 0.947356
-vn -0.410077 0.052370 0.910520
-vn 0.049562 0.183081 0.981842
-vn 0.291269 0.239875 0.926054
-vn 0.358043 0.252937 0.898770
-vn 0.362987 0.210150 0.907773
-vn 0.343822 0.221992 0.912381
-vn 0.442213 0.193243 0.875820
-vn 0.550554 0.199133 0.810663
-vn -0.318186 0.933988 0.162420
-vn -0.200354 0.971496 0.126591
-vn -0.223548 0.970855 0.086062
-vn -0.066347 0.990966 0.116398
-vn -0.139744 0.989990 0.019105
-vn -0.061495 0.991150 0.117496
-vn -0.134465 0.990814 0.013977
-vn -0.061037 0.991882 0.111362
-vn -0.123630 0.992309 0.003357
-vn -0.057009 0.994201 0.090915
-vn -0.100101 0.994812 -0.016938
-vn -0.012268 0.998962 0.043367
-vn -0.037477 0.996979 -0.067965
-vn 0.029817 0.999237 -0.024323
-vn 0.018677 0.993408 -0.112918
-vn 0.065371 0.994415 -0.082797
-vn 0.053926 0.989196 -0.136113
-vn 0.033235 0.996521 -0.076144
-vn 0.028626 0.992889 -0.115299
-vn -0.016511 0.998688 -0.048128
-vn -0.013733 0.996429 -0.083041
-vn 0.529496 0.712210 -0.460829
-vn 0.523026 0.708579 -0.473617
-vn 0.789056 -0.011536 -0.614185
-vn -0.302988 0.938353 0.166265
-vn -0.265389 0.938994 0.218726
-vn 0.008972 0.974334 0.224860
-vn 0.017914 0.971709 0.235389
-vn 0.009888 0.967406 0.252937
-vn -0.025452 0.968108 0.249153
-vn -0.026399 0.977172 0.210669
-vn -0.000336 0.993500 0.113742
-vn 0.030061 0.999298 0.021210
-vn 0.023957 0.999512 -0.018830
-vn -0.017853 0.999817 0.001221
-vn 0.536332 0.721305 -0.438215
-vn -0.298685 0.932981 0.200690
-vn -0.114658 -0.798791 -0.590564
-vn -0.370708 -0.526780 -0.764885
-vn -0.291025 -0.616688 -0.731407
-vn -0.143254 -0.625172 -0.767205
-vn 0.027223 -0.640553 -0.767418
-vn 0.111332 -0.662038 -0.741111
-vn 0.135563 -0.740410 -0.658315
-vn 0.095309 -0.862575 -0.496811
-vn 0.031892 -0.950316 -0.309610
-vn -0.117801 -0.895688 -0.428724
-vn 0.703726 0.085910 -0.705222
-vn 0.140812 -0.988342 -0.057833
-vn -0.176916 0.112217 -0.977783
-vn -0.463820 -0.000244 -0.885922
-vn -0.396466 0.495773 -0.772637
-vn -0.251259 0.629933 -0.734855
-vn -0.082247 0.613941 -0.785028
-vn 0.062685 0.432813 -0.899289
-vn 0.114200 0.360729 -0.925626
-vn 0.067263 0.509629 -0.857723
-vn -0.147404 0.666036 -0.731162
-vn -0.333659 0.761101 -0.556200
-vn -0.153478 0.913327 -0.377148
-vn -0.370403 -0.745903 -0.553514
-vn -0.117374 0.990661 0.069308
-vn -0.045228 -0.997101 0.061098
-vn -0.457808 -0.775109 -0.435408
-vn -0.716849 -0.364360 -0.594409
-vn -0.842647 0.257424 -0.472915
-vn -0.742363 -0.635609 -0.211829
-vn -0.978973 -0.126621 -0.159734
-vn -0.920560 0.370373 -0.124027
-vn -0.685263 -0.714591 -0.140477
-vn -0.822535 0.452986 -0.343791
-vn -0.424726 0.841395 -0.334086
-vn 0.104862 -0.938810 0.328043
-vn -0.146855 0.961974 -0.230232
-vn -0.592578 0.640126 -0.488907
-vn -0.615009 0.631336 -0.472365
-vn -0.672750 0.632954 -0.383038
-vn -0.732994 0.635304 -0.243019
-vn -0.733726 0.657796 -0.169988
-vn -0.650349 0.747856 -0.133000
-vn -0.509659 0.849849 -0.133976
-vn -0.374187 0.917051 -0.137638
-vn -0.261879 0.943449 -0.203101
-vn -0.750603 0.280526 0.598193
-vn -0.264351 0.961669 0.072787
-vn -0.292032 0.955870 -0.031159
-vn -0.329691 0.920103 -0.211402
-vn -0.339793 0.915555 -0.215125
-vn -0.354900 0.915159 -0.190985
-vn -0.364147 0.919675 -0.146916
-vn -0.327921 0.934049 -0.141392
-vn -0.236305 0.962859 -0.130497
-vn -0.132908 0.981079 -0.140751
-vn -0.095737 0.987732 -0.123142
-vn -0.095767 0.990448 -0.099002
-vn 0.488937 0.717917 -0.495499
-vn -0.306192 0.943205 0.128666
-vn -0.249184 0.966887 0.054659
-vn -0.214362 0.973754 -0.076144
-vn -0.213904 0.973327 -0.082614
-vn -0.208258 0.974456 -0.083956
-vn -0.190619 0.978057 -0.083712
-vn -0.134281 0.983673 -0.119694
-vn -0.065127 0.987915 -0.140446
-vn -0.005676 0.987548 -0.157170
-vn -0.010773 0.991577 -0.128971
-vn -0.047334 0.995025 -0.087466
-vn 0.511277 0.710990 -0.482742
-vn -0.317698 0.934355 0.161168
-vn 0.115726 -0.988556 0.096622
-vn 0.137333 -0.978088 0.156377
-vn 0.149754 -0.969787 0.192450
-vn 0.113804 -0.975402 0.188665
-vn 0.085177 -0.975860 0.201056
-vn 0.090030 -0.983673 0.155797
-vn 0.118778 -0.991150 0.058962
-vn 0.183233 -0.982940 -0.013886
-vn 0.138249 -0.988586 0.059420
-vn 0.134892 -0.989990 0.041383
-vn 0.729453 -0.456862 -0.509049
-vn -0.047090 -0.987243 0.151891
-vn 0.017121 -0.989441 0.143895
-vn 0.119480 -0.983428 0.136174
-vn 0.126865 -0.983886 0.125919
-vn 0.118809 -0.985748 0.119053
-vn 0.100009 -0.988037 0.117252
-vn 0.092471 -0.989349 0.112217
-vn 0.103183 -0.991180 0.082858
-vn 0.137211 -0.989776 0.038453
-vn 0.148564 -0.988800 0.012665
-vn 0.133518 -0.990966 0.011872
-vn 0.619343 -0.669668 -0.409772
-vn -0.082308 -0.983306 0.162206
-vn -0.013428 -0.993072 0.116581
-vn 0.076205 -0.994476 0.071780
-vn 0.089877 -0.994110 0.060427
-vn 0.092868 -0.994140 0.054903
-vn 0.089145 -0.994568 0.053194
-vn 0.092318 -0.994537 0.048616
-vn 0.110874 -0.993408 0.028413
-vn 0.147404 -0.989044 -0.005463
-vn 0.164617 -0.986053 -0.024293
-vn 0.148503 -0.988769 -0.015656
-vn 0.615223 -0.670400 -0.414716
-vn -0.095187 -0.981842 0.163976
-vn -0.030366 -0.994903 0.096072
-vn 0.037080 -0.999023 0.022736
-vn 0.052431 -0.998535 0.012757
-vn 0.059267 -0.998169 0.011414
-vn 0.060518 -0.998016 0.015534
-vn 0.066469 -0.997681 0.014222
-vn 0.091372 -0.995788 0.001312
-vn 0.133305 -0.990692 -0.027131
-vn 0.154118 -0.987274 -0.039003
-vn 0.143284 -0.989319 -0.026276
-vn 0.612751 -0.670492 -0.418226
-vn -0.094028 -0.983001 0.157659
-vn -0.057375 -0.996307 0.063570
-vn -0.016144 -0.999237 -0.034730
-vn -0.002991 -0.999207 -0.039277
-vn 0.003479 -0.999542 -0.030030
-vn 0.002014 -0.999908 -0.012177
-vn 0.004822 -0.999969 -0.002655
-vn 0.037202 -0.999268 -0.006897
-vn 0.092563 -0.995239 -0.029878
-vn 0.117161 -0.992523 -0.033509
-vn 0.112613 -0.993439 -0.018281
-vn 0.609699 -0.669759 -0.423841
-vn -0.078555 -0.987610 0.135685
-vn -0.137303 -0.990387 -0.015900
-vn -0.142460 -0.977447 -0.155675
-vn -0.135044 -0.979888 -0.146733
-vn -0.135533 -0.984924 -0.107364
-vn -0.147191 -0.987518 -0.055879
-vn -0.153020 -0.987945 -0.022248
-vn -0.097934 -0.995117 -0.011658
-vn -0.015992 -0.999634 -0.021455
-vn 0.047945 -0.998474 -0.026307
-vn 0.066897 -0.997559 -0.018983
-vn 0.600665 -0.671346 -0.434065
-vn -0.027772 -0.995697 0.088137
-vn 0.090670 -0.995666 0.019135
-vn 0.090579 -0.995697 0.019044
-vn 0.188879 -0.970733 0.148198
-vn 0.334513 -0.875454 0.348735
-vn 0.092196 -0.995514 0.021088
-vn 0.092257 -0.995483 0.021180
-vn -0.010163 -0.994171 -0.107089
-vn -0.175970 -0.935575 -0.306040
-vn -0.539750 0.570238 -0.619221
-vn 0.411664 0.682363 0.604022
-vn -0.004852 -0.012940 0.999878
-vn 0.696249 0.084201 0.712821
-vn -0.004883 -0.012940 0.999878
-vn 0.990326 0.131718 0.043519
-vn 0.050478 0.019013 -0.998535
-vn -0.983367 -0.129765 -0.126957
-vn -0.108615 -0.026734 0.993713
-vn 0.991089 0.132176 0.014832
-vn 0.062136 0.020569 -0.997833
-vn -0.673421 -0.080905 -0.734764
-vn -0.673421 -0.080905 -0.734794
-vn -0.689810 -0.083254 -0.719169
-vn -0.689810 -0.083285 -0.719169
-vn -0.981964 -0.129429 -0.137730
-vn -0.979644 -0.153935 -0.128636
-vn 0.215613 0.068148 -0.974090
-vn 0.972839 0.151250 0.175115
-vn 0.549547 0.060335 0.833247
-vn 0.530747 0.056856 0.845607
-vn -0.095462 -0.049409 0.994201
-vn -0.961516 -0.147496 -0.231666
-vn -0.523148 -0.055483 -0.850398
-vn 0.187872 0.063875 -0.980102
-vn 0.970794 0.150517 0.186682
-vn -0.106113 -0.051088 0.993011
-vn -0.567309 0.638081 -0.520554
-vn -0.672536 0.613269 -0.414167
-vn -0.600604 0.726829 -0.333079
-vn -0.865627 0.485733 -0.121220
-vn -0.821436 0.567125 -0.059572
-vn -0.932096 0.276009 0.234443
-vn -0.919126 0.294443 0.261635
-vn -0.874447 0.076205 0.479049
-vn -0.883908 0.053224 0.464583
-vn -0.603076 0.791742 0.096896
-vn -0.825739 -0.022523 0.563585
-vn -0.512680 0.740440 -0.434584
-vn -0.416974 0.906156 -0.070406
-vn -0.663503 0.732475 0.152409
-vn -0.827845 0.397473 0.395764
-vn -0.848079 0.094943 0.521256
-vn -0.826167 -0.037660 0.562120
-vn -0.333415 0.927396 -0.169500
-vn -0.134648 0.947172 0.290994
-vn -0.400525 0.795190 0.455214
-vn -0.672384 0.449507 0.588031
-vn -0.789911 0.101962 0.604633
-vn -0.920225 -0.098300 0.378765
-vn -0.052156 0.977294 0.205359
-vn 0.416059 0.251076 0.873959
-vn 0.175665 0.154698 0.972198
-vn -0.109897 -0.090121 0.989837
-vn -0.221870 -0.384716 0.895932
-vn 0.825556 -0.543962 0.150029
-vn 0.010590 -0.999908 0.005737
-vn 0.058046 -0.998260 -0.008972
-vn 0.495163 0.283273 0.821284
-vn -0.225318 -0.960570 0.162877
-vn -0.348491 -0.769860 0.534623
-vn -0.290658 -0.581988 0.759453
-vn 0.808496 -0.539659 0.234657
-vn -0.564837 -0.555742 -0.609973
-vn -0.793847 -0.511612 -0.328593
-vn -0.928495 -0.333506 0.163152
-vn -0.862911 -0.147649 0.483230
-vn 0.801141 0.079134 -0.593188
-vn -0.487472 -0.583026 -0.649922
-vn -0.719382 -0.151708 -0.677816
-vn -0.918424 -0.140019 -0.369945
-vn -0.987701 -0.086550 0.129978
-vn -0.884121 -0.044404 0.465102
-vn 0.804407 0.067415 -0.590197
-vn -0.601794 -0.283303 -0.746666
-vn -0.756035 0.248848 -0.605335
-vn -0.935301 0.212775 -0.282632
-vn -0.976867 0.133824 0.166753
-vn -0.877590 0.049898 0.476791
-vn 0.810999 0.054262 -0.582507
-vn -0.590533 0.500595 -0.632954
-vn -0.717277 0.486373 -0.498917
-vn -0.895657 0.404645 -0.184393
-vn -0.943510 0.251595 0.215583
-vn -0.863338 0.100070 0.494583
-vn 0.816828 0.033052 -0.575884
-vn -0.622181 0.495407 -0.606128
-vn 0.305063 0.740837 0.598376
-vn 0.108097 0.810297 0.575915
-vn 0.178533 0.713523 0.677450
-vn -0.196326 0.640767 0.742180
-vn -0.140599 0.571123 0.808710
-vn -0.506272 0.343059 0.791162
-vn -0.481643 0.329081 0.812220
-vn -0.671957 0.078188 0.736412
-vn -0.685629 0.098453 0.721244
-vn -0.746391 -0.013153 0.665365
-vn -0.312754 0.825800 0.469253
-vn 0.226600 0.827509 0.513627
-vn -0.115696 0.941649 0.316019
-vn -0.376385 0.766289 0.520676
-vn -0.622211 0.421674 0.659536
-vn -0.721458 0.109836 0.683645
-vn -0.743767 -0.027955 0.667837
-vn -0.001251 0.966521 0.256508
-vn -0.398022 0.916166 -0.046754
-vn -0.608875 0.770653 0.187964
-vn -0.773766 0.437574 0.458022
-vn -0.788141 0.102176 0.606922
-vn -0.584918 -0.058779 0.808954
-vn -0.297617 0.948363 -0.109470
-vn -0.762291 0.112308 -0.637410
-vn -0.908078 0.027039 -0.417859
-vn -0.974181 -0.191931 -0.118686
-vn -0.885250 -0.462874 0.045076
-vn 0.108097 -0.628437 -0.770287
-vn 0.111484 -0.991974 0.059542
-vn 0.085665 -0.991058 0.102023
-vn -0.694693 0.143132 -0.704886
-vn -0.127873 -0.949065 0.287851
-vn -0.533952 -0.791681 0.296762
-vn -0.753136 -0.636464 0.166173
-vn -0.002838 -0.644154 -0.764885
-vn 0.497726 -0.430586 0.752861
-vn 0.165593 -0.398602 0.902036
-vn -0.357982 -0.266305 0.894925
-vn -0.666982 -0.124607 0.734550
-vn 0.763817 0.074709 -0.641072
-vn 0.557848 -0.459914 0.690817
-vn 0.489090 -0.009369 0.872158
-vn 0.141697 -0.015137 0.989776
-vn -0.362529 -0.012940 0.931852
-vn -0.663869 -0.018494 0.747581
-vn 0.762780 0.062502 -0.643605
-vn 0.596301 -0.142186 0.790033
-vn 0.374584 0.382000 0.844813
-vn 0.022004 0.325541 0.945250
-vn -0.414838 0.200018 0.887631
-vn -0.681906 0.072970 0.727775
-vn 0.758141 0.048006 -0.650288
-vn 0.419935 0.619617 0.663076
-vn 0.260475 0.601550 0.755150
-vn -0.079928 0.500717 0.861873
-vn -0.464095 0.308054 0.830470
-vn -0.699973 0.119327 0.704093
-vn 0.755120 0.025727 -0.655049
-vn 0.386670 0.614246 0.687857
-vn -0.797174 -0.603107 -0.026521
-vn -0.244301 -0.755242 -0.608173
-vn 0.250954 -0.962004 -0.107303
-vn -0.112033 -0.515458 0.849513
-vn 0.600024 -0.644642 0.473647
-vn 0.108371 -0.565691 -0.817438
-vn 0.871578 -0.463698 0.159001
-vn 0.153172 -0.253609 -0.955077
-vn 0.984649 -0.136814 0.108341
-vn 0.192694 -0.028748 -0.980804
-vn 0.995270 0.083193 0.049776
-vn 0.059358 0.501267 -0.863247
-vn 0.796503 0.598743 0.084140
-vn -0.371776 0.692984 -0.617664
-vn 0.433210 0.798486 0.417951
-vn -0.580859 0.677633 -0.450972
-vn 0.224006 0.783013 0.580218
-vn -0.743370 0.583178 -0.327494
-vn 0.075320 0.691855 0.718070
-vn -0.787133 0.522355 -0.327952
-vn 0.071963 0.637623 0.766930
-vn -0.818659 0.513230 -0.257607
-vn -0.003662 0.622639 0.782464
-vn -0.911527 0.376415 -0.165441
-vn -0.102359 0.487228 0.867244
-vn -0.980560 0.178625 -0.081088
-vn -0.182897 0.289376 0.939573
-vn -0.523942 -0.729637 0.439375
-vn -0.776849 -0.229896 0.586200
-vn -0.699820 -0.676443 0.229469
-vn -0.117740 -0.979553 0.162999
-vn -0.408979 -0.893521 -0.185186
-vn 0.164525 -0.985473 -0.041627
-vn -0.152776 -0.891842 -0.425672
-vn 0.689962 -0.561754 -0.456435
-vn 0.454360 -0.492691 -0.742149
-vn 0.777703 0.233924 -0.583453
-vn -0.864254 -0.495743 0.085330
-vn -0.681845 -0.595752 -0.424390
-vn -0.450972 -0.565142 -0.690786
-vn 0.231727 -0.250313 -0.940001
-vn -0.972015 -0.229987 0.047243
-vn -0.859523 -0.156987 -0.486312
-vn -0.646535 -0.082919 -0.758324
-vn 0.085025 0.109104 -0.990356
-vn -0.990478 0.048311 0.128666
-vn -0.887539 0.300302 -0.349345
-vn -0.679220 0.417493 -0.603565
-vn 0.060488 0.482131 -0.873989
-vn -0.915403 0.260872 0.306497
-vn -0.761162 0.646199 -0.054811
-vn -0.543809 0.792535 -0.275918
-vn 0.161473 0.760338 -0.629109
-vn -0.769860 0.352367 0.532090
-vn -0.521287 0.792932 0.315378
-vn -0.284402 0.949736 0.130772
-vn 0.353923 0.876370 -0.326548
-vn -0.592029 0.299966 0.747978
-vn -0.230628 0.706900 0.668630
-vn 0.032563 0.856044 0.515854
-vn 0.588946 0.807154 -0.040101
-vn -0.427168 0.113987 0.896939
-vn 0.038881 0.404797 0.913541
-vn 0.329691 0.528428 0.782311
-vn 0.810205 0.564165 0.158971
-vn 0.777703 0.233955 -0.583422
-vn -0.320933 -0.157964 0.933805
-vn 0.213782 -0.038301 0.976104
-vn 0.524552 0.045381 0.850154
-vn 0.956145 0.204260 0.209815
-vn -0.304483 -0.437086 0.846278
-vn 0.242317 -0.495590 0.834040
-vn 0.557573 -0.454939 0.694327
-vn 0.981292 -0.168584 0.092654
-vn -0.379955 -0.644246 0.663717
-vn 0.119327 -0.837092 0.533830
-vn 0.423261 -0.829066 0.365337
-vn 0.881680 -0.446150 -0.153417
-vn -0.488205 -0.725425 0.485153
-vn -0.733879 -0.224799 0.640980
-vn -0.678182 -0.676565 0.286843
-vn -0.099948 -0.977447 0.185858
-vn -0.414655 -0.898648 -0.143132
-vn 0.167852 -0.985076 -0.037324
-vn -0.175298 -0.899380 -0.400403
-vn 0.661214 -0.565142 -0.493301
-vn 0.406384 -0.501968 -0.763451
-vn 0.734886 0.228889 -0.638356
-vn -0.853175 -0.499100 0.151402
-vn -0.705008 -0.606250 -0.367931
-vn -0.492904 -0.578600 -0.649770
-vn 0.169286 -0.264016 -0.949522
-vn -0.965056 -0.234626 0.116550
-vn -0.889401 -0.169530 -0.424482
-vn -0.695791 -0.098636 -0.711417
-vn 0.017121 0.093722 -0.995422
-vn -0.979827 0.044832 0.194708
-vn -0.911100 0.289743 -0.293100
-vn -0.721244 0.404004 -0.562609
-vn -0.001923 0.468429 -0.883480
-vn 0.734916 0.228889 -0.638356
-vn -0.894284 0.260659 0.363689
-vn -0.767388 0.641011 -0.013215
-vn -0.566454 0.784967 -0.250771
-vn 0.113529 0.751061 -0.650380
-vn -0.734428 0.356548 0.577441
-vn -0.504013 0.794977 0.337565
-vn -0.281198 0.950102 0.134922
-vn 0.325205 0.873012 -0.363384
-vn -0.542070 0.308603 0.781579
-vn -0.189550 0.716208 0.671590
-vn 0.061708 0.864345 0.499069
-vn 0.579547 0.809656 -0.092471
-vn 0.734886 0.228858 -0.638356
-vn -0.366283 0.125919 0.921934
-vn 0.097873 0.419568 0.902402
-vn 0.378338 0.542711 0.749840
-vn 0.815332 0.571123 0.094913
-vn -0.255989 -0.144780 0.955748
-vn 0.279550 -0.021516 0.959868
-vn 0.580523 0.061892 0.811853
-vn 0.966765 0.212897 0.141392
-vn -0.243629 -0.425153 0.871670
-vn 0.301462 -0.480850 0.823328
-vn 0.606250 -0.440687 0.661977
-vn 0.986419 -0.161626 0.028596
-vn -0.329936 -0.635670 0.697867
-vn 0.160710 -0.827784 0.537492
-vn 0.452467 -0.820734 0.348704
-vn 0.872219 -0.443617 -0.205817
-vn -0.279611 -0.239448 0.929746
-vn -0.728965 -0.331675 0.598804
-vn -0.241798 -0.437696 0.865963
-vn 0.251595 -0.073305 0.965026
-vn 0.314890 -0.405164 0.858272
-vn 0.554064 0.045930 0.831172
-vn 0.623554 -0.318369 0.713981
-vn 0.945769 0.279214 0.165960
-vn 0.996704 0.012146 0.080050
-vn 0.728965 0.331675 -0.598804
-vn 0.728965 0.331675 -0.598773
-vn -0.260384 -0.611774 0.746940
-vn 0.283761 -0.696493 0.659017
-vn 0.589404 -0.638203 0.495224
-vn 0.971679 -0.222236 -0.080233
-vn -0.332560 -0.735099 0.590747
-vn 0.162969 -0.902921 0.397626
-vn 0.456801 -0.864834 0.208258
-vn 0.874447 -0.388348 -0.290597
-vn -0.447310 -0.788965 0.421186
-vn -0.029084 -0.993042 0.113865
-vn 0.245918 -0.963744 -0.103214
-vn 0.719901 -0.460891 -0.518937
-vn -0.587207 -0.765099 0.264107
-vn -0.263222 -0.953124 -0.149022
-vn -0.011078 -0.919919 -0.391858
-vn 0.531480 -0.428755 -0.730522
-vn 0.728965 0.331706 -0.598804
-vn -0.730918 -0.667196 0.143406
-vn -0.503769 -0.789239 -0.351085
-vn -0.275155 -0.740013 -0.613666
-vn 0.337901 -0.296884 -0.893094
-vn -0.856594 -0.510117 0.077425
-vn -0.714072 -0.526353 -0.461501
-vn -0.506058 -0.451430 -0.734886
-vn 0.168676 -0.085330 -0.981964
-vn -0.945067 -0.317820 0.076235
-vn -0.862178 -0.204505 -0.463485
-vn -0.668630 -0.098056 -0.737083
-vn 0.049501 0.173650 -0.983551
-vn -0.982879 -0.119541 0.140019
-vn -0.925474 0.127354 -0.356700
-vn -0.738121 0.266243 -0.619861
-vn -0.001404 0.440687 -0.897641
-vn -0.964293 0.054506 0.259072
-vn -0.894345 0.418653 -0.157476
-vn -0.703970 0.586077 -0.401135
-vn 0.023591 0.675130 -0.737297
-vn 0.728935 0.331706 -0.598804
-vn -0.892117 0.177862 0.415265
-vn -0.773553 0.625111 0.103916
-vn -0.571368 0.812708 -0.114170
-vn 0.120792 0.841243 -0.526933
-vn -0.777367 0.231697 0.584796
-vn -0.581469 0.715232 0.387677
-vn -0.360485 0.911618 0.197333
-vn 0.275369 0.913755 -0.298593
-vn -0.637471 0.207831 0.741874
-vn -0.347331 0.675314 0.650594
-vn -0.103458 0.867794 0.485977
-vn 0.463790 0.881649 -0.087039
-vn -0.493759 0.109928 0.862606
-vn -0.106815 0.511429 0.852626
-vn 0.160588 0.687887 0.707785
-vn 0.657338 0.749779 0.075533
-vn -0.368084 -0.047121 0.928587
-vn 0.103488 0.248543 0.963042
-vn 0.391491 0.399304 0.829005
-vn 0.826594 0.538224 0.164373
-vn 0.869930 0.207892 -0.447157
-vn 0.764183 0.197546 -0.613941
-vn 0.834101 0.302194 -0.461409
-vn 0.965789 0.207770 -0.155034
-vn 0.877438 0.440321 -0.190191
-vn 0.906308 0.209906 -0.366710
-vn 0.854885 0.345256 -0.387158
-vn 0.889004 0.209113 -0.407300
-vn 0.845332 0.324046 -0.424696
-vn 0.972869 0.189856 0.131993
-vn 0.842891 0.532029 0.080264
-vn 0.805780 0.125584 0.578692
-vn 0.631306 0.584796 0.509323
-vn 0.701254 0.095614 0.706442
-vn 0.520554 0.571215 0.634571
-vn 0.775536 0.367412 -0.513291
-vn 0.733024 0.601154 -0.318217
-vn 0.770806 0.438887 -0.461684
-vn 0.773949 0.403546 -0.487960
-vn 0.630360 0.768731 -0.108066
-vn 0.346110 0.902432 0.256508
-vn 0.225166 0.900174 0.372753
-vn 0.709952 0.386090 -0.588977
-vn 0.571215 0.647175 -0.504776
-vn 0.676626 0.465712 -0.570299
-vn 0.693960 0.426313 -0.580187
-vn 0.392254 0.836482 -0.382641
-vn 0.026582 0.993347 -0.111942
-vn -0.105747 0.994324 -0.008850
-vn 0.654866 0.353191 -0.668111
-vn 0.435377 0.566088 -0.699942
-vn 0.597552 0.418500 -0.683920
-vn 0.626820 0.386212 -0.676656
-vn 0.192389 0.717124 -0.669820
-vn -0.241646 0.833186 -0.497330
-vn -0.383557 0.828486 -0.408002
-vn 0.625080 0.277566 -0.729514
-vn 0.361919 0.379589 -0.851405
-vn 0.554796 0.309915 -0.772057
-vn 0.590503 0.294046 -0.751518
-vn 0.084262 0.442701 -0.892666
-vn -0.386700 0.464888 -0.796411
-vn -0.533799 0.447035 -0.717765
-vn 0.628559 0.179479 -0.756737
-vn 0.370525 0.137669 -0.918546
-vn 0.559801 0.169073 -0.811151
-vn 0.594775 0.174444 -0.784722
-vn 0.096927 0.086673 -0.991485
-vn -0.369732 -0.012848 -0.929014
-vn -0.516221 -0.047761 -0.855098
-vn 0.664388 0.085177 -0.742485
-vn 0.458876 -0.094852 -0.883389
-vn 0.611225 0.033723 -0.790704
-vn 0.638417 0.059511 -0.767357
-vn 0.226936 -0.255470 -0.939787
-vn -0.195257 -0.472060 -0.859645
-vn -0.335521 -0.523392 -0.783227
-vn 0.722953 0.019959 -0.690573
-vn 0.603290 -0.255684 -0.755394
-vn 0.695303 -0.059877 -0.716178
-vn 0.709830 -0.019990 -0.704062
-vn 0.439467 -0.492141 -0.751396
-vn 0.089908 -0.789697 -0.606830
-vn -0.040132 -0.852351 -0.521409
-vn 0.788568 0.001282 -0.614917
-vn 0.765099 -0.301706 -0.568804
-vn 0.789483 -0.086673 -0.607562
-vn 0.789788 -0.042726 -0.611835
-vn 0.677572 -0.559893 -0.476852
-vn 0.409467 -0.880612 -0.238350
-vn 0.290780 -0.946501 -0.139775
-vn 0.843623 0.034150 -0.535783
-vn 0.900937 -0.220618 -0.373638
-vn 0.868557 -0.039460 -0.493973
-vn 0.856929 -0.002655 -0.515366
-vn 0.877438 -0.440565 -0.189642
-vn 0.677694 -0.720481 0.147008
-vn 0.568590 -0.780633 0.259346
-vn 0.873409 0.109806 -0.474380
-vn 0.974395 -0.034120 -0.222205
-vn 0.911313 0.069063 -0.405805
-vn 0.893246 0.089511 -0.440504
-vn 0.985534 -0.166112 0.033174
-vn 0.822748 -0.352153 0.446089
-vn 0.718833 -0.399182 0.569109
-vn 0.862636 0.241218 -0.444533
-vn 0.756767 0.231544 -0.611286
-vn 0.824213 0.334788 -0.456679
-vn 0.959288 0.237495 -0.152715
-vn 0.864498 0.468215 -0.182653
-vn 0.899197 0.242531 -0.364147
-vn 0.844020 0.376812 -0.381573
-vn 0.881771 0.242103 -0.404706
-vn 0.834925 0.356151 -0.419507
-vn 0.967681 0.213660 0.133854
-vn 0.828181 0.553178 0.089785
-vn 0.803674 0.135289 0.579455
-vn 0.616474 0.590899 0.520310
-vn 0.700339 0.099704 0.706778
-vn 0.506485 0.571612 0.645497
-vn 0.763726 0.399457 -0.507035
-vn 0.715354 0.627735 -0.306864
-vn 0.757195 0.469680 -0.453902
-vn 0.761193 0.435011 -0.480911
-vn 0.608722 0.787896 -0.092959
-vn 0.321940 0.905911 0.275033
-vn 0.201453 0.897855 0.391461
-vn 0.697409 0.417951 -0.582141
-vn 0.551836 0.673269 -0.492080
-vn 0.662008 0.496200 -0.561693
-vn 0.680380 0.457503 -0.572466
-vn 0.368084 0.854915 -0.365490
-vn -0.000977 0.995849 -0.090670
-vn -0.133000 0.991028 0.012665
-vn 0.643055 0.385266 -0.661824
-vn 0.417737 0.592669 -0.688620
-vn 0.583941 0.449263 -0.676107
-vn 0.614093 0.417676 -0.669637
-vn 0.170751 0.736290 -0.654714
-vn -0.265786 0.836665 -0.478835
-vn -0.407270 0.826136 -0.389294
-vn 0.615162 0.310160 -0.724784
-vn 0.348979 0.407514 -0.843867
-vn 0.543901 0.341472 -0.766472
-vn 0.580096 0.326151 -0.746361
-vn 0.069582 0.463820 -0.883175
-vn -0.401532 0.470992 -0.785394
-vn -0.547868 0.447432 -0.706809
-vn 0.621265 0.212806 -0.754112
-vn 0.364025 0.167394 -0.916196
-vn 0.552660 0.201697 -0.808588
-vn 0.587542 0.207465 -0.782128
-vn 0.091739 0.110477 -0.989624
-vn -0.371838 -0.003143 -0.928251
-vn -0.517106 -0.043641 -0.854762
-vn 0.659688 0.119236 -0.741966
-vn 0.458815 -0.063295 -0.886258
-vn 0.607837 0.067385 -0.791162
-vn 0.634388 0.093417 -0.767327
-vn 0.231208 -0.229011 -0.945555
-vn -0.184667 -0.458785 -0.869106
-vn -0.323252 -0.515549 -0.793512
-vn 0.720176 0.054567 -0.691610
-vn 0.607959 -0.222816 -0.762047
-vn 0.694662 -0.025422 -0.718863
-vn 0.708121 0.014557 -0.705924
-vn 0.450667 -0.463729 -0.762749
-vn 0.109836 -0.773766 -0.623829
-vn -0.018220 -0.841792 -0.539476
-vn 0.786493 0.036073 -0.616504
-vn 0.771477 -0.268349 -0.576830
-vn 0.789850 -0.051943 -0.611042
-vn 0.788934 -0.007935 -0.614368
-vn 0.691305 -0.530747 -0.490249
-vn 0.432783 -0.863735 -0.258095
-vn 0.316233 -0.934965 -0.160680
-vn 0.840877 0.068789 -0.536790
-vn 0.905576 -0.187750 -0.380291
-vn 0.867916 -0.005036 -0.496628
-vn 0.855251 0.031892 -0.517228
-vn 0.888638 -0.412152 -0.200995
-vn 0.697592 -0.704550 0.130039
-vn 0.590503 -0.770074 0.241279
-vn 0.868740 0.143864 -0.473861
-vn 0.974334 -0.002594 -0.225043
-vn 0.907956 0.102756 -0.406262
-vn 0.889218 0.123417 -0.440474
-vn 0.989807 -0.139653 0.027406
-vn 0.833369 -0.338878 0.436598
-vn 0.731101 -0.391369 0.558794
-vn 0.862636 0.241218 -0.444502
-vn 0.899197 0.242500 -0.364147
-vn 0.506485 0.571612 0.645527
-vn 0.763726 0.399487 -0.507035
-vn 0.757195 0.469680 -0.453871
-vn 0.697439 0.417951 -0.582141
-vn -0.133000 0.991028 0.012696
-vn 0.583911 0.449263 -0.676107
-vn 0.348979 0.407483 -0.843867
-vn 0.543931 0.341472 -0.766472
-vn -0.401532 0.470992 -0.785424
-vn 0.091708 0.110477 -0.989624
-vn 0.659719 0.119236 -0.741966
-vn 0.694662 -0.025452 -0.718863
-vn 0.109836 -0.773797 -0.623829
-vn 0.786493 0.036103 -0.616504
-vn 0.771477 -0.268349 -0.576861
-vn 0.840877 0.068789 -0.536821
-vn 0.855220 0.031892 -0.517228
-vn 0.907956 0.102725 -0.406262
-vn 0.731101 -0.391369 0.558824
-vn 0.841060 0.204260 -0.500870
-vn 0.784539 0.059572 -0.617145
-vn 0.798791 0.241432 -0.550981
-vn 0.865413 0.414045 -0.282052
-vn 0.760613 0.506211 -0.406415
-vn 0.723441 0.675710 0.141453
-vn 0.536637 0.839961 -0.080142
-vn 0.548235 0.746971 0.376080
-vn 0.335978 0.933622 0.124271
-vn 0.752129 0.250740 -0.609424
-vn 0.644826 0.529283 -0.551347
-vn 0.330332 0.881069 -0.338450
-vn 0.101566 0.980316 -0.169195
-vn 0.708152 0.230750 -0.667257
-vn 0.535752 0.479720 -0.694845
-vn 0.135899 0.792749 -0.594165
-vn -0.119327 0.879971 -0.459731
-vn 0.673544 0.184545 -0.715720
-vn 0.449904 0.365093 -0.814997
-vn -0.017029 0.588488 -0.808313
-vn -0.293130 0.647877 -0.703055
-vn 0.653584 0.119144 -0.747368
-vn 0.400433 0.202857 -0.893582
-vn -0.105197 0.299326 -0.948302
-vn -0.393292 0.319315 -0.862148
-vn 0.651326 0.044496 -0.757439
-vn 0.394848 0.017670 -0.918546
-vn -0.115177 -0.030641 -0.992859
-vn -0.404645 -0.055605 -0.912748
-vn 0.667104 -0.028016 -0.744407
-vn 0.433973 -0.162206 -0.886196
-vn -0.045442 -0.351268 -0.935148
-vn -0.325419 -0.419904 -0.847194
-vn 0.698508 -0.087374 -0.710196
-vn 0.511856 -0.309458 -0.801355
-vn 0.093356 -0.613666 -0.783990
-vn -0.167669 -0.718070 -0.675436
-vn 0.740776 -0.124516 -0.660085
-vn 0.616688 -0.401624 -0.677023
-vn 0.280160 -0.777917 -0.562395
-vn 0.044557 -0.904721 -0.423658
-vn 0.787439 -0.133824 -0.601642
-vn 0.732444 -0.424696 -0.532060
-vn 0.486465 -0.819056 -0.304086
-vn 0.278970 -0.951415 -0.130131
-vn 0.831416 -0.113834 -0.543809
-vn 0.841578 -0.375134 -0.388592
-vn 0.680929 -0.730735 -0.048372
-vn 0.499893 -0.851070 0.160375
-vn 0.866024 -0.067629 -0.495376
-vn 0.927396 -0.260506 -0.268410
-vn 0.833857 -0.526444 0.165746
-vn 0.673696 -0.618976 0.403699
-vn 0.885983 -0.002228 -0.463698
-vn 0.976867 -0.098239 -0.189856
-vn 0.922025 -0.237312 0.305765
-vn 0.773888 -0.290414 0.562761
-vn 0.888241 0.072390 -0.453627
-vn 0.982452 0.086886 -0.164861
-vn 0.932005 0.092654 0.350291
-vn 0.785211 0.084506 0.613392
-vn 0.872463 0.144902 -0.466659
-vn 0.943327 0.266793 -0.197241
-vn 0.862270 0.413282 0.292611
-vn 0.705985 0.448805 0.547838
-vn 0.841060 0.204291 -0.500870
-vn 0.784570 0.059572 -0.617145
-vn 0.760613 0.506211 -0.406384
-vn 0.723441 0.675680 0.141423
-vn 0.336009 0.933622 0.124271
-vn 0.535722 0.479720 -0.694845
-vn 0.135899 0.792749 -0.594134
-vn -0.016999 0.588488 -0.808313
-vn -0.293100 0.647877 -0.703055
-vn 0.400433 0.202857 -0.893551
-vn 0.651326 0.044496 -0.757469
-vn 0.394818 0.017670 -0.918577
-vn -0.045442 -0.351238 -0.935148
-vn 0.093387 -0.613666 -0.783990
-vn 0.280160 -0.777947 -0.562395
-vn 0.486496 -0.819056 -0.304056
-vn 0.279000 -0.951415 -0.130131
-vn 0.841578 -0.375134 -0.388562
-vn 0.499924 -0.851070 0.160375
-vn 0.866024 -0.067629 -0.495346
-vn 0.976867 -0.098270 -0.189856
-vn 0.922056 -0.237281 0.305765
-vn 0.982452 0.086886 -0.164830
-vn 0.932035 0.092685 0.350291
-vn 0.785241 0.084506 0.613392
-vn 0.872463 0.144932 -0.466659
-vn 0.943327 0.266793 -0.197211
-vn 0.862300 0.413282 0.292611
-vn 0.705985 0.448805 0.547807
-vn -0.602557 -0.161321 -0.781579
-vn 0.115879 -0.991913 0.051546
-vn 0.569872 -0.461409 0.679922
-vn 0.613330 -0.220466 0.758415
-vn 0.618824 -0.013581 0.785363
-vn 0.597156 0.195227 0.777978
-vn 0.547441 0.400739 0.734611
-vn 0.291025 0.843501 0.451399
-vn -0.326334 0.885983 -0.329356
-vn 0.618976 -0.017457 0.785180
-vn 0.066836 -0.997681 -0.011322
-vn -0.473830 -0.584338 -0.658773
-vn -0.560137 -0.358684 -0.746696
-vn -0.603107 -0.157506 -0.781915
-vn -0.619861 0.051881 -0.782983
-vn -0.608539 0.264595 -0.748070
-vn -0.438063 0.757622 -0.483779
-vn 0.158361 0.943083 0.292367
-vn -0.298898 -0.455184 0.838710
-vn -0.785272 -0.055574 0.616627
-vn -0.454390 -0.633290 0.626423
-vn 0.329417 -0.651906 0.682974
-vn 0.086978 -0.932493 0.350475
-vn 0.897397 -0.441145 0.003815
-vn 0.716025 -0.653005 -0.246620
-vn -0.653432 -0.658773 0.372845
-vn -0.224281 -0.973388 -0.046602
-vn 0.481399 -0.685232 -0.546495
-vn -0.843684 -0.517258 0.143559
-vn -0.521531 -0.751701 -0.403577
-vn 0.255623 -0.517869 -0.816340
-vn -0.969604 -0.244484 0.005127
-vn -0.717399 -0.325297 -0.616016
-vn 0.106540 -0.194739 -0.975036
-vn -0.996765 0.080172 -0.004120
-vn -0.758629 0.180090 -0.626087
-vn 0.074801 0.186163 -0.979644
-vn -0.922208 0.369335 0.114292
-vn -0.642232 0.628254 -0.439070
-vn 0.161504 0.522233 -0.837336
-vn -0.766472 0.551256 0.329508
-vn -0.400708 0.910184 -0.104678
-vn 0.342265 0.734306 -0.586200
-vn -0.566881 0.576373 0.588549
-vn -0.091281 0.950774 0.296030
-vn 0.575640 0.766411 -0.284951
-vn 0.784570 0.059542 -0.617145
-vn -0.376293 0.430647 0.820307
-vn 0.205054 0.727439 0.654775
-vn 0.800806 0.598712 -0.014435
-vn -0.250587 0.154088 0.955718
-vn 0.401807 0.299661 0.865291
-vn 0.950530 0.275399 0.143498
-vn -0.224036 -0.170202 0.959593
-vn 0.444899 -0.205390 0.871700
-vn 0.983520 -0.105411 0.146764
-vn -0.298898 -0.455153 0.838710
-vn -0.454360 -0.633290 0.626453
-vn 0.897427 -0.441115 0.003815
-vn 0.716056 -0.653005 -0.246651
-vn 0.478042 0.346324 -0.807154
-vn 0.590289 0.472304 -0.654561
-vn 0.786279 0.049104 -0.615894
-vn -0.653401 -0.658773 0.372845
-vn 0.732505 0.487350 -0.475265
-vn 0.866543 0.386975 -0.315104
-vn 0.106510 -0.194739 -0.975036
-vn 0.956420 0.196387 -0.216041
-vn -0.996765 0.080203 -0.004120
-vn -0.758660 0.180090 -0.626057
-vn 0.074770 0.186193 -0.979644
-vn 0.977935 -0.034547 -0.205969
-vn -0.922208 0.369366 0.114322
-vn 0.161473 0.522233 -0.837367
-vn 0.925565 -0.243690 -0.289712
-vn -0.766472 0.551256 0.329539
-vn 0.342235 0.734306 -0.586200
-vn 0.813379 -0.373730 -0.445723
-vn -0.566851 0.576373 0.588549
-vn 0.671163 -0.388348 -0.631397
-vn -0.376263 0.430647 0.820307
-vn 0.205023 0.727439 0.654775
-vn 0.800806 0.598743 -0.014435
-vn 0.537034 -0.283303 -0.794519
-vn 0.950530 0.275369 0.143498
-vn 0.447127 -0.088626 -0.890042
-vn 0.444899 -0.205390 0.871670
-vn 0.983520 -0.105411 0.146733
-vn 0.425611 0.141789 -0.893704
-s 1
-f 1204/1/1 1236/2/2 1176/3/3
-f 1132/4/4 1176/3/3 1177/5/5
-f 1131/6/6 1177/5/5 980/7/7
-f 980/7/7 448/8/8 466/9/9
-f 940/10/10 980/7/7 466/9/9
-f 466/9/9 448/8/8 175/11/11
-f 223/12/12 175/11/11 174/13/13
-f 224/14/14 174/13/13 117/15/15
-f 1204/1/1 1176/3/3 1132/4/4
-f 1132/4/4 1177/5/5 1131/6/6
-f 1131/6/6 980/7/7 940/10/10
-f 466/9/9 175/11/11 223/12/12
-f 223/12/12 174/13/13 224/14/14
-f 224/14/14 117/15/15 148/16/16
-f 1260/17/17 1208/18/18 1238/19/19
-f 1253/20/20 1109/21/21 1208/18/18
-f 1183/22/22 979/23/23 1109/21/21
-f 1013/24/24 868/25/25 979/23/23
-f 889/26/26 760/27/27 868/25/25
-f 760/27/27 580/28/28 593/29/29
-f 773/30/30 580/28/28 760/27/27
-f 580/28/28 487/31/31 593/29/29
-f 464/32/32 378/33/33 487/31/31
-f 341/34/34 247/35/35 378/33/33
-f 170/36/36 144/37/37 247/35/35
-f 102/38/38 119/39/39 144/37/37
-f 119/39/39 1260/17/17 1238/19/19
-f 95/40/40 1260/17/17 119/39/39
-f 1260/17/17 1253/20/20 1208/18/18
-f 1253/20/20 1183/22/22 1109/21/21
-f 1183/22/22 1013/24/24 979/23/23
-f 1013/24/24 889/26/26 868/25/25
-f 889/26/26 773/30/30 760/27/27
-f 580/28/28 464/32/32 487/31/31
-f 464/32/32 341/34/34 378/33/33
-f 341/34/34 170/36/36 247/35/35
-f 170/36/36 102/38/38 144/37/37
-f 102/38/38 95/40/40 119/39/39
-f 1237/41/41 1207/42/42 661/43/43
-f 1237/41/41 1253/20/20 1260/17/17
-f 697/44/44 696/45/45 1253/20/20
-f 1260/17/17 697/44/44 1253/20/20
-f 1207/42/42 1108/46/46 661/43/43
-f 1207/42/42 1183/22/22 1253/20/20
-f 696/45/45 695/47/47 1183/22/22
-f 1253/20/20 696/45/45 1183/22/22
-f 1108/46/46 978/48/48 661/43/43
-f 1108/46/46 1013/24/24 1183/22/22
-f 695/47/47 694/49/49 1013/24/24
-f 1183/22/22 695/47/47 1013/24/24
-f 978/48/48 867/50/50 661/43/43
-f 978/48/48 889/26/26 1013/24/24
-f 694/49/49 693/51/51 889/26/26
-f 1013/24/24 694/49/49 889/26/26
-f 867/50/50 759/52/52 661/43/43
-f 867/50/50 773/30/30 889/26/26
-f 693/51/51 690/53/53 773/30/30
-f 889/26/26 693/51/51 773/30/30
-f 759/52/52 592/54/54 661/43/43
-f 773/30/30 592/54/54 580/28/28
-f 759/52/52 592/54/54 773/30/30
-f 690/53/53 668/55/55 580/28/28
-f 773/30/30 580/28/28 690/53/53
-f 592/54/54 486/56/56 661/43/43
-f 592/54/54 464/32/32 580/28/28
-f 580/28/28 464/32/32 668/55/55
-f 486/56/56 377/57/57 661/43/43
-f 486/56/56 341/34/34 464/32/32
-f 464/32/32 668/55/55 341/34/34
-f 377/57/57 246/58/58 661/43/43
-f 377/57/57 170/36/36 341/34/34
-f 341/34/34 668/55/55 170/36/36
-f 246/58/58 143/59/59 661/43/43
-f 246/58/58 102/38/38 170/36/36
-f 170/36/36 668/55/55 102/38/38
-f 143/59/59 118/60/60 661/43/43
-f 143/59/59 95/40/40 102/38/38
-f 102/38/38 668/55/55 95/40/40
-f 118/60/60 117/15/15 661/43/43
-f 118/60/60 95/40/40 94/61/61
-f 95/40/40 668/55/55 94/61/61
-f 117/15/15 142/62/62 661/43/43
-f 117/15/15 94/61/61 101/63/63
-f 94/61/61 668/55/55 101/63/63
-f 142/62/62 245/64/64 661/43/43
-f 142/62/62 101/63/63 169/65/65
-f 101/63/63 668/55/55 169/65/65
-f 245/64/64 376/66/66 661/43/43
-f 245/64/64 169/65/65 340/67/67
-f 169/65/65 668/55/55 340/67/67
-f 376/66/66 485/68/68 661/43/43
-f 376/66/66 340/67/67 463/69/69
-f 340/67/67 668/55/55 463/69/69
-f 485/68/68 591/70/70 661/43/43
-f 485/68/68 463/69/69 579/71/71
-f 463/69/69 668/55/55 579/71/71
-f 591/70/70 647/72/72 661/43/43
-f 591/70/70 579/71/71 646/73/73
-f 579/71/71 668/55/55 646/73/73
-f 647/72/72 758/74/74 661/43/43
-f 647/72/72 646/73/73 772/75/75
-f 668/55/55 690/53/53 772/75/75
-f 646/73/73 668/55/55 772/75/75
-f 758/74/74 866/76/76 661/43/43
-f 758/74/74 772/75/75 888/77/77
-f 690/53/53 693/51/51 888/77/77
-f 772/75/75 690/53/53 888/77/77
-f 866/76/76 977/78/78 661/43/43
-f 866/76/76 888/77/77 1012/79/79
-f 693/51/51 694/49/49 1012/79/79
-f 888/77/77 693/51/51 1012/79/79
-f 977/78/78 1107/80/80 661/43/43
-f 977/78/78 1012/79/79 1182/81/81
-f 694/49/49 695/47/47 1182/81/81
-f 1012/79/79 694/49/49 1182/81/81
-f 1107/80/80 1206/82/82 661/43/43
-f 1107/80/80 1182/81/81 1252/83/83
-f 695/47/47 696/45/45 1252/83/83
-f 1182/81/81 695/47/47 1252/83/83
-f 1206/82/82 1236/2/2 661/43/43
-f 1206/82/82 1252/83/83 1259/84/84
-f 696/45/45 697/44/44 1259/84/84
-f 1252/83/83 696/45/45 1259/84/84
-f 1236/2/2 1237/41/41 661/43/43
-f 1236/2/2 1259/84/84 1260/17/17
-f 1259/84/84 697/44/44 1260/17/17
-f 1237/41/41 1253/20/20 1207/42/42
-f 1207/42/42 1183/22/22 1108/46/46
-f 1108/46/46 1013/24/24 978/48/48
-f 978/48/48 889/26/26 867/50/50
-f 867/50/50 773/30/30 759/52/52
-f 592/54/54 486/56/56 464/32/32
-f 486/56/56 377/57/57 341/34/34
-f 377/57/57 246/58/58 170/36/36
-f 246/58/58 143/59/59 102/38/38
-f 143/59/59 118/60/60 95/40/40
-f 118/60/60 117/15/15 94/61/61
-f 117/15/15 101/63/63 142/62/62
-f 142/62/62 169/65/65 245/64/64
-f 245/64/64 340/67/67 376/66/66
-f 376/66/66 463/69/69 485/68/68
-f 485/68/68 579/71/71 591/70/70
-f 591/70/70 646/73/73 647/72/72
-f 647/72/72 772/75/75 758/74/74
-f 758/74/74 888/77/77 866/76/76
-f 866/76/76 1012/79/79 977/78/78
-f 977/78/78 1182/81/81 1107/80/80
-f 1107/80/80 1252/83/83 1206/82/82
-f 1206/82/82 1259/84/84 1236/2/2
-f 1236/2/2 1260/17/17 1237/41/41
-f 777/85/85 659/86/86 766/87/87
-f 777/85/85 824/88/88 835/89/89
-f 835/89/89 924/90/90 945/91/91
-f 945/91/91 1030/92/92 1068/93/93
-f 1068/93/93 1067/94/94 1129/95/95
-f 1129/95/95 1117/96/96 1163/97/97
-f 1163/97/97 1155/98/98 1200/99/99
-f 1200/99/99 1160/100/100 1203/101/101
-f 1203/101/101 1161/102/102 1205/103/103
-f 1205/103/103 660/104/104 1161/102/102
-f 766/87/87 659/86/86 734/105/105
-f 766/87/87 789/106/106 824/88/88
-f 824/88/88 846/107/107 924/90/90
-f 924/90/90 895/108/108 1030/92/92
-f 1030/92/92 906/109/109 1067/94/94
-f 1067/94/94 917/110/110 1117/96/96
-f 1117/96/96 931/111/111 1155/98/98
-f 1155/98/98 937/112/112 1160/100/100
-f 1160/100/100 1161/102/102 938/113/113
-f 1161/102/102 660/104/104 938/113/113
-f 734/105/105 659/86/86 701/114/114
-f 734/105/105 708/115/115 789/106/106
-f 789/106/106 731/116/116 846/107/107
-f 846/107/107 738/117/117 895/108/108
-f 895/108/108 743/118/118 906/109/109
-f 906/109/109 746/119/119 917/110/110
-f 917/110/110 752/120/120 931/111/111
-f 931/111/111 754/121/121 937/112/112
-f 937/112/112 938/113/113 756/122/122
-f 938/113/113 660/104/104 756/122/122
-f 701/114/114 659/86/86 645/123/123
-f 708/115/115 645/123/123 641/124/124
-f 701/114/114 645/123/123 708/115/115
-f 731/116/116 641/124/124 632/125/125
-f 708/115/115 641/124/124 731/116/116
-f 738/117/117 632/125/125 611/126/126
-f 731/116/116 632/125/125 738/117/117
-f 743/118/118 611/126/126 606/127/127
-f 738/117/117 611/126/126 743/118/118
-f 746/119/119 606/127/127 604/128/128
-f 743/118/118 606/127/127 746/119/119
-f 752/120/120 604/128/128 599/129/129
-f 746/119/119 604/128/128 752/120/120
-f 754/121/121 599/129/129 596/130/130
-f 752/120/120 599/129/129 754/121/121
-f 756/122/122 597/131/131 596/130/130
-f 754/121/121 756/122/122 596/130/130
-f 756/122/122 660/104/104 597/131/131
-f 645/123/123 659/86/86 630/132/132
-f 645/123/123 566/133/133 641/124/124
-f 641/124/124 507/134/134 632/125/125
-f 632/125/125 459/135/135 611/126/126
-f 611/126/126 445/136/136 606/127/127
-f 606/127/127 435/137/137 604/128/128
-f 604/128/128 420/138/138 599/129/129
-f 599/129/129 596/130/130 414/139/139
-f 596/130/130 597/131/131 415/140/140
-f 597/131/131 660/104/104 415/140/140
-f 630/132/132 659/86/86 587/141/141
-f 630/132/132 529/142/142 566/133/133
-f 566/133/133 427/143/143 507/134/134
-f 507/134/134 320/144/144 459/135/135
-f 459/135/135 288/145/145 445/136/136
-f 445/136/136 235/146/146 435/137/137
-f 435/137/137 197/147/147 420/138/138
-f 420/138/138 414/139/139 190/148/148
-f 414/139/139 415/140/140 191/149/149
-f 415/140/140 660/104/104 191/149/149
-f 587/141/141 659/86/86 578/150/150
-f 587/141/141 525/151/151 529/142/142
-f 529/142/142 408/152/152 427/143/143
-f 427/143/143 286/153/153 320/144/144
-f 320/144/144 221/154/154 288/145/145
-f 288/145/145 187/155/155 235/146/146
-f 235/146/146 154/156/156 197/147/147
-f 197/147/147 146/157/157 190/148/148
-f 190/148/148 147/158/158 191/149/149
-f 191/149/149 660/104/104 147/158/158
-f 578/150/150 659/86/86 577/159/159
-f 578/150/150 524/160/160 525/151/151
-f 525/151/151 409/161/161 408/152/152
-f 408/152/152 287/162/162 286/153/153
-f 286/153/153 222/163/163 221/154/154
-f 221/154/154 188/164/164 187/155/155
-f 187/155/155 153/165/165 154/156/156
-f 154/156/156 145/166/166 146/157/157
-f 147/158/158 145/166/166 148/16/16
-f 146/157/157 145/166/166 147/158/158
-f 147/158/158 148/16/16 660/104/104
-f 577/159/159 659/86/86 586/167/167
-f 577/159/159 530/168/168 524/160/160
-f 524/160/160 428/169/169 409/161/161
-f 409/161/161 321/170/170 287/162/162
-f 287/162/162 289/171/171 222/163/163
-f 222/163/163 236/172/172 188/164/164
-f 188/164/164 196/173/173 153/165/165
-f 153/165/165 189/174/174 145/166/166
-f 145/166/166 192/175/175 148/16/16
-f 148/16/16 192/175/175 660/104/104
-f 586/167/167 659/86/86 629/176/176
-f 586/167/167 567/177/177 530/168/168
-f 530/168/168 508/178/178 428/169/169
-f 428/169/169 460/179/179 321/170/170
-f 321/170/170 446/180/180 289/171/171
-f 289/171/171 436/181/181 236/172/172
-f 236/172/172 419/182/182 196/173/173
-f 196/173/173 413/183/183 189/174/174
-f 189/174/174 416/184/184 192/175/175
-f 192/175/175 416/184/184 660/104/104
-f 629/176/176 659/86/86 638/185/185
-f 629/176/176 601/186/186 567/177/177
-f 567/177/177 554/187/187 508/178/178
-f 508/178/178 533/188/188 460/179/179
-f 460/179/179 526/189/189 446/180/180
-f 446/180/180 517/190/190 436/181/181
-f 436/181/181 504/191/191 419/182/182
-f 419/182/182 500/192/192 413/183/183
-f 413/183/183 501/193/193 416/184/184
-f 416/184/184 501/193/193 660/104/104
-f 638/185/185 659/86/86 644/194/194
-f 638/185/185 642/195/195 601/186/186
-f 601/186/186 633/196/196 554/187/187
-f 554/187/187 612/197/197 533/188/188
-f 533/188/188 607/198/198 526/189/189
-f 526/189/189 605/199/199 517/190/190
-f 517/190/190 598/200/200 504/191/191
-f 504/191/191 594/201/201 500/192/192
-f 500/192/192 595/202/202 501/193/193
-f 501/193/193 595/202/202 660/104/104
-f 644/194/194 659/86/86 658/203/203
-f 642/195/195 658/203/203 657/204/204
-f 644/194/194 658/203/203 642/195/195
-f 633/196/196 657/204/204 656/205/205
-f 642/195/195 657/204/204 633/196/196
-f 612/197/197 656/205/205 655/206/206
-f 633/196/196 656/205/205 612/197/197
-f 607/198/198 655/206/206 654/207/207
-f 612/197/197 655/206/206 607/198/198
-f 607/198/198 653/208/208 605/199/199
-f 605/199/199 652/209/209 598/200/200
-f 594/201/201 652/209/209 649/210/210
-f 598/200/200 652/209/209 594/201/201
-f 594/201/201 651/211/211 595/202/202
-f 595/202/202 651/211/211 660/104/104
-f 658/203/203 659/86/86 700/212/212
-f 657/204/204 700/212/212 709/213/213
-f 658/203/203 700/212/212 657/204/204
-f 656/205/205 709/213/213 730/214/214
-f 657/204/204 709/213/213 656/205/205
-f 655/206/206 730/214/214 739/215/215
-f 656/205/205 730/214/214 655/206/206
-f 654/207/207 739/215/215 744/216/216
-f 655/206/206 739/215/215 654/207/207
-f 654/207/207 745/217/217 653/208/208
-f 653/208/208 751/218/218 652/209/209
-f 649/210/210 751/218/218 753/219/219
-f 652/209/209 751/218/218 649/210/210
-f 649/210/210 755/220/220 651/211/211
-f 651/211/211 755/220/220 660/104/104
-f 700/212/212 659/86/86 720/221/221
-f 700/212/212 749/222/222 709/213/213
-f 709/213/213 801/223/223 730/214/214
-f 730/214/214 823/224/224 739/215/215
-f 739/215/215 828/225/225 744/216/216
-f 744/216/216 840/226/226 745/217/217
-f 745/217/217 850/227/227 751/218/218
-f 751/218/218 852/228/228 753/219/219
-f 753/219/219 853/229/229 755/220/220
-f 755/220/220 660/104/104 853/229/229
-f 720/221/221 659/86/86 733/230/230
-f 720/221/221 790/231/231 749/222/222
-f 749/222/222 847/232/232 801/223/223
-f 801/223/223 894/233/233 823/224/224
-f 823/224/224 907/234/234 828/225/225
-f 828/225/225 916/235/235 840/226/226
-f 840/226/226 930/236/236 850/227/227
-f 850/227/227 936/237/237 852/228/228
-f 852/228/228 853/229/229 939/238/238
-f 853/229/229 660/104/104 939/238/238
-f 733/230/230 659/86/86 765/239/239
-f 733/230/230 825/240/240 790/231/231
-f 790/231/231 923/241/241 847/232/232
-f 847/232/232 1031/242/242 894/233/233
-f 894/233/233 1066/243/243 907/234/234
-f 907/234/234 1116/244/244 916/235/235
-f 916/235/235 1154/245/245 930/236/236
-f 930/236/236 1159/246/246 936/237/237
-f 936/237/237 939/238/238 1162/247/247
-f 939/238/238 660/104/104 1162/247/247
-f 765/239/239 659/86/86 776/248/248
-f 765/239/239 834/249/249 825/240/240
-f 825/240/240 946/250/250 923/241/241
-f 923/241/241 1069/251/251 1031/242/242
-f 1031/242/242 1130/252/252 1066/243/243
-f 1066/243/243 1164/253/253 1116/244/244
-f 1116/244/244 1199/254/254 1154/245/245
-f 1154/245/245 1202/255/255 1159/246/246
-f 1159/246/246 1204/1/1 1162/247/247
-f 1162/247/247 660/104/104 1204/1/1
-f 776/248/248 659/86/86 777/85/85
-f 776/248/248 835/89/89 834/249/249
-f 834/249/249 945/91/91 946/250/250
-f 946/250/250 1068/93/93 1069/251/251
-f 1069/251/251 1129/95/95 1130/252/252
-f 1130/252/252 1163/97/97 1164/253/253
-f 1164/253/253 1200/99/99 1199/254/254
-f 1199/254/254 1203/101/101 1202/255/255
-f 1204/1/1 1205/103/103 1203/101/101
-f 1202/255/255 1203/101/101 1204/1/1
-f 1204/1/1 660/104/104 1205/103/103
-f 777/85/85 766/87/87 824/88/88
-f 835/89/89 824/88/88 924/90/90
-f 945/91/91 924/90/90 1030/92/92
-f 1068/93/93 1030/92/92 1067/94/94
-f 1129/95/95 1067/94/94 1117/96/96
-f 1163/97/97 1117/96/96 1155/98/98
-f 1200/99/99 1155/98/98 1160/100/100
-f 1203/101/101 1160/100/100 1161/102/102
-f 766/87/87 734/105/105 789/106/106
-f 824/88/88 789/106/106 846/107/107
-f 924/90/90 846/107/107 895/108/108
-f 1030/92/92 895/108/108 906/109/109
-f 1067/94/94 906/109/109 917/110/110
-f 1117/96/96 917/110/110 931/111/111
-f 1155/98/98 931/111/111 937/112/112
-f 1160/100/100 937/112/112 938/113/113
-f 734/105/105 701/114/114 708/115/115
-f 789/106/106 708/115/115 731/116/116
-f 846/107/107 731/116/116 738/117/117
-f 895/108/108 738/117/117 743/118/118
-f 906/109/109 743/118/118 746/119/119
-f 917/110/110 746/119/119 752/120/120
-f 931/111/111 752/120/120 754/121/121
-f 937/112/112 754/121/121 756/122/122
-f 645/123/123 630/132/132 566/133/133
-f 641/124/124 566/133/133 507/134/134
-f 632/125/125 507/134/134 459/135/135
-f 611/126/126 459/135/135 445/136/136
-f 606/127/127 445/136/136 435/137/137
-f 604/128/128 435/137/137 420/138/138
-f 599/129/129 420/138/138 414/139/139
-f 596/130/130 415/140/140 414/139/139
-f 630/132/132 587/141/141 529/142/142
-f 566/133/133 529/142/142 427/143/143
-f 507/134/134 427/143/143 320/144/144
-f 459/135/135 320/144/144 288/145/145
-f 445/136/136 288/145/145 235/146/146
-f 435/137/137 235/146/146 197/147/147
-f 420/138/138 197/147/147 190/148/148
-f 414/139/139 191/149/149 190/148/148
-f 587/141/141 578/150/150 525/151/151
-f 529/142/142 525/151/151 408/152/152
-f 427/143/143 408/152/152 286/153/153
-f 320/144/144 286/153/153 221/154/154
-f 288/145/145 221/154/154 187/155/155
-f 235/146/146 187/155/155 154/156/156
-f 197/147/147 154/156/156 146/157/157
-f 190/148/148 146/157/157 147/158/158
-f 578/150/150 577/159/159 524/160/160
-f 525/151/151 524/160/160 409/161/161
-f 408/152/152 409/161/161 287/162/162
-f 286/153/153 287/162/162 222/163/163
-f 221/154/154 222/163/163 188/164/164
-f 187/155/155 188/164/164 153/165/165
-f 154/156/156 153/165/165 145/166/166
-f 577/159/159 586/167/167 530/168/168
-f 524/160/160 530/168/168 428/169/169
-f 409/161/161 428/169/169 321/170/170
-f 287/162/162 321/170/170 289/171/171
-f 222/163/163 289/171/171 236/172/172
-f 188/164/164 236/172/172 196/173/173
-f 153/165/165 196/173/173 189/174/174
-f 145/166/166 189/174/174 192/175/175
-f 586/167/167 629/176/176 567/177/177
-f 530/168/168 567/177/177 508/178/178
-f 428/169/169 508/178/178 460/179/179
-f 321/170/170 460/179/179 446/180/180
-f 289/171/171 446/180/180 436/181/181
-f 236/172/172 436/181/181 419/182/182
-f 196/173/173 419/182/182 413/183/183
-f 189/174/174 413/183/183 416/184/184
-f 629/176/176 638/185/185 601/186/186
-f 567/177/177 601/186/186 554/187/187
-f 508/178/178 554/187/187 533/188/188
-f 460/179/179 533/188/188 526/189/189
-f 446/180/180 526/189/189 517/190/190
-f 436/181/181 517/190/190 504/191/191
-f 419/182/182 504/191/191 500/192/192
-f 413/183/183 500/192/192 501/193/193
-f 638/185/185 644/194/194 642/195/195
-f 601/186/186 642/195/195 633/196/196
-f 554/187/187 633/196/196 612/197/197
-f 533/188/188 612/197/197 607/198/198
-f 526/189/189 607/198/198 605/199/199
-f 517/190/190 605/199/199 598/200/200
-f 504/191/191 598/200/200 594/201/201
-f 500/192/192 594/201/201 595/202/202
-f 607/198/198 654/207/207 653/208/208
-f 605/199/199 653/208/208 652/209/209
-f 594/201/201 649/210/210 651/211/211
-f 654/207/207 744/216/216 745/217/217
-f 653/208/208 745/217/217 751/218/218
-f 649/210/210 753/219/219 755/220/220
-f 700/212/212 720/221/221 749/222/222
-f 709/213/213 749/222/222 801/223/223
-f 730/214/214 801/223/223 823/224/224
-f 739/215/215 823/224/224 828/225/225
-f 744/216/216 828/225/225 840/226/226
-f 745/217/217 840/226/226 850/227/227
-f 751/218/218 850/227/227 852/228/228
-f 753/219/219 852/228/228 853/229/229
-f 720/221/221 733/230/230 790/231/231
-f 749/222/222 790/231/231 847/232/232
-f 801/223/223 847/232/232 894/233/233
-f 823/224/224 894/233/233 907/234/234
-f 828/225/225 907/234/234 916/235/235
-f 840/226/226 916/235/235 930/236/236
-f 850/227/227 930/236/236 936/237/237
-f 852/228/228 936/237/237 939/238/238
-f 733/230/230 765/239/239 825/240/240
-f 790/231/231 825/240/240 923/241/241
-f 847/232/232 923/241/241 1031/242/242
-f 894/233/233 1031/242/242 1066/243/243
-f 907/234/234 1066/243/243 1116/244/244
-f 916/235/235 1116/244/244 1154/245/245
-f 930/236/236 1154/245/245 1159/246/246
-f 936/237/237 1159/246/246 1162/247/247
-f 765/239/239 776/248/248 834/249/249
-f 825/240/240 834/249/249 946/250/250
-f 923/241/241 946/250/250 1069/251/251
-f 1031/242/242 1069/251/251 1130/252/252
-f 1066/243/243 1130/252/252 1164/253/253
-f 1116/244/244 1164/253/253 1199/254/254
-f 1154/245/245 1199/254/254 1202/255/255
-f 1159/246/246 1202/255/255 1204/1/1
-f 776/248/248 777/85/85 835/89/89
-f 834/249/249 835/89/89 945/91/91
-f 946/250/250 945/91/91 1068/93/93
-f 1069/251/251 1068/93/93 1129/95/95
-f 1130/252/252 1129/95/95 1163/97/97
-f 1164/253/253 1163/97/97 1200/99/99
-f 1199/254/254 1200/99/99 1203/101/101
-f 698/256/256 870/257/257 699/258/258
-f 699/258/258 1033/259/259 702/260/260
-f 702/260/260 1062/261/261 703/262/262
-f 703/262/262 1125/263/263 704/264/264
-f 704/264/264 1178/265/265 705/266/266
-f 705/266/266 1234/267/267 707/268/268
-f 707/268/268 1271/269/269 712/270/270
-f 712/270/270 1297/271/271 719/272/272
-f 719/272/272 1301/273/273 725/274/274
-f 725/274/274 1308/275/275 727/276/276
-f 727/276/276 1306/277/277 726/278/278
-f 726/278/278 1306/277/277 662/279/279
-f 829/280/280 1011/281/281 870/257/257
-f 870/257/257 1263/282/282 1033/259/259
-f 1033/259/259 1270/283/283 1062/261/261
-f 1062/261/261 1291/284/284 1125/263/263
-f 1125/263/263 1295/285/285 1178/265/265
-f 1178/265/265 1303/286/286 1234/267/267
-f 1234/267/267 1313/287/287 1271/269/269
-f 1271/269/269 1320/288/288 1297/271/271
-f 1297/271/271 1329/289/289 1301/273/273
-f 1301/273/273 1333/290/290 1308/275/275
-f 1308/275/275 1332/291/291 1306/277/277
-f 1306/277/277 1332/291/291 662/279/279
-f 922/292/292 1158/293/293 1011/281/281
-f 1011/281/281 1294/294/294 1263/282/282
-f 1263/282/282 1298/295/295 1270/283/283
-f 1270/283/283 1302/296/296 1291/284/284
-f 1291/284/284 1309/297/297 1295/285/285
-f 1295/285/285 1312/298/298 1303/286/286
-f 1303/286/286 1321/299/299 1313/287/287
-f 1313/287/287 1335/300/300 1320/288/288
-f 1320/288/288 1340/301/301 1329/289/289
-f 1329/289/289 1343/302/302 1333/290/290
-f 1333/290/290 1341/303/303 1332/291/291
-f 1332/291/291 1341/303/303 662/279/279
-f 1005/304/304 1158/293/293 1180/305/305
-f 1158/293/293 1294/294/294 1296/306/306
-f 1294/294/294 1298/295/295 1300/307/307
-f 1298/295/295 1302/296/296 1307/308/308
-f 1302/296/296 1309/297/297 1310/309/309
-f 1309/297/297 1312/298/298 1315/310/310
-f 1312/298/298 1321/299/299 1322/311/311
-f 1321/299/299 1335/300/300 1337/312/312
-f 1335/300/300 1340/301/301 1342/313/313
-f 1340/301/301 1343/302/302 1353/314/314
-f 1343/302/302 1341/303/303 1352/315/315
-f 1341/303/303 1352/315/315 662/279/279
-f 1180/305/305 184/316/316 342/317/317
-f 1038/318/318 1180/305/305 342/317/317
-f 1296/306/306 184/316/316 57/319/319
-f 1180/305/305 1296/306/306 184/316/316
-f 1300/307/307 57/319/319 54/320/320
-f 1296/306/306 1300/307/307 57/319/319
-f 1307/308/308 46/321/321 54/320/320
-f 1300/307/307 1307/308/308 54/320/320
-f 1310/309/309 44/322/322 46/321/321
-f 1307/308/308 1310/309/309 46/321/321
-f 1315/310/310 44/322/322 39/323/323
-f 1310/309/309 1315/310/310 44/322/322
-f 1322/311/311 32/324/324 39/323/323
-f 1315/310/310 1322/311/311 39/323/323
-f 1337/312/312 17/325/325 32/324/324
-f 1322/311/311 1337/312/312 32/324/324
-f 1337/312/312 1342/313/313 12/326/326
-f 1353/314/314 1/327/327 12/326/326
-f 1342/313/313 1353/314/314 12/326/326
-f 1/327/327 1352/315/315 2/328/328
-f 1/327/327 1353/314/314 1352/315/315
-f 1352/315/315 662/279/279 2/328/328
-f 342/317/317 184/316/316 204/329/329
-f 184/316/316 60/330/330 57/319/319
-f 57/319/319 55/331/331 54/320/320
-f 54/320/320 52/332/332 46/321/321
-f 46/321/321 45/333/333 44/322/322
-f 44/322/322 40/334/334 39/323/323
-f 39/323/323 33/335/335 32/324/324
-f 32/324/324 19/336/336 17/325/325
-f 17/325/325 14/337/337 12/326/326
-f 12/326/326 11/338/338 1/327/327
-f 1/327/327 2/328/328 13/339/339
-f 2/328/328 662/279/279 13/339/339
-f 353/340/340 349/341/341 204/329/329
-f 204/329/329 93/342/342 60/330/330
-f 60/330/330 85/343/343 55/331/331
-f 55/331/331 71/344/344 52/332/332
-f 52/332/332 59/345/345 45/333/333
-f 45/333/333 51/346/346 40/334/334
-f 40/334/334 41/347/347 33/335/335
-f 33/335/335 34/348/348 19/336/336
-f 19/336/336 27/349/349 14/337/337
-f 14/337/337 21/350/350 11/338/338
-f 11/338/338 22/351/351 13/339/339
-f 13/339/339 22/351/351 662/279/279
-f 431/352/352 492/353/353 349/341/341
-f 349/341/341 352/354/354 93/342/342
-f 93/342/342 313/355/355 85/343/343
-f 85/343/343 268/356/356 71/344/344
-f 71/344/344 202/357/357 59/345/345
-f 59/345/345 133/358/358 51/346/346
-f 51/346/346 87/359/359 41/347/347
-f 41/347/347 58/360/360 34/348/348
-f 34/348/348 53/361/361 27/349/349
-f 27/349/349 47/362/362 21/350/350
-f 21/350/350 48/363/363 22/351/351
-f 22/351/351 48/363/363 662/279/279
-f 531/364/364 699/258/258 492/353/353
-f 492/353/353 702/260/260 352/354/354
-f 352/354/354 703/262/262 313/355/355
-f 313/355/355 704/264/264 268/356/356
-f 268/356/356 705/266/266 202/357/357
-f 202/357/357 707/268/268 133/358/358
-f 133/358/358 712/270/270 87/359/359
-f 87/359/359 719/272/272 58/360/360
-f 58/360/360 725/274/274 53/361/361
-f 53/361/361 727/276/276 47/362/362
-f 47/362/362 726/278/278 48/363/363
-f 48/363/363 726/278/278 662/279/279
-f 698/256/256 829/280/280 870/257/257
-f 699/258/258 870/257/257 1033/259/259
-f 702/260/260 1033/259/259 1062/261/261
-f 703/262/262 1062/261/261 1125/263/263
-f 704/264/264 1125/263/263 1178/265/265
-f 705/266/266 1178/265/265 1234/267/267
-f 707/268/268 1234/267/267 1271/269/269
-f 712/270/270 1271/269/269 1297/271/271
-f 719/272/272 1297/271/271 1301/273/273
-f 725/274/274 1301/273/273 1308/275/275
-f 727/276/276 1308/275/275 1306/277/277
-f 829/280/280 922/292/292 1011/281/281
-f 870/257/257 1011/281/281 1263/282/282
-f 1033/259/259 1263/282/282 1270/283/283
-f 1062/261/261 1270/283/283 1291/284/284
-f 1125/263/263 1291/284/284 1295/285/285
-f 1178/265/265 1295/285/285 1303/286/286
-f 1234/267/267 1303/286/286 1313/287/287
-f 1271/269/269 1313/287/287 1320/288/288
-f 1297/271/271 1320/288/288 1329/289/289
-f 1301/273/273 1329/289/289 1333/290/290
-f 1308/275/275 1333/290/290 1332/291/291
-f 922/292/292 1158/293/293 1005/304/304
-f 1011/281/281 1294/294/294 1158/293/293
-f 1263/282/282 1298/295/295 1294/294/294
-f 1270/283/283 1302/296/296 1298/295/295
-f 1291/284/284 1309/297/297 1302/296/296
-f 1295/285/285 1312/298/298 1309/297/297
-f 1303/286/286 1321/299/299 1312/298/298
-f 1313/287/287 1335/300/300 1321/299/299
-f 1320/288/288 1340/301/301 1335/300/300
-f 1329/289/289 1343/302/302 1340/301/301
-f 1333/290/290 1343/302/302 1341/303/303
-f 1005/304/304 1180/305/305 1038/318/318
-f 1158/293/293 1296/306/306 1180/305/305
-f 1294/294/294 1300/307/307 1296/306/306
-f 1298/295/295 1307/308/308 1300/307/307
-f 1302/296/296 1310/309/309 1307/308/308
-f 1309/297/297 1315/310/310 1310/309/309
-f 1312/298/298 1322/311/311 1315/310/310
-f 1321/299/299 1337/312/312 1322/311/311
-f 1335/300/300 1342/313/313 1337/312/312
-f 1340/301/301 1353/314/314 1342/313/313
-f 1343/302/302 1352/315/315 1353/314/314
-f 1337/312/312 17/325/325 12/326/326
-f 342/317/317 353/340/340 204/329/329
-f 184/316/316 204/329/329 60/330/330
-f 57/319/319 60/330/330 55/331/331
-f 54/320/320 55/331/331 52/332/332
-f 46/321/321 52/332/332 45/333/333
-f 44/322/322 45/333/333 40/334/334
-f 39/323/323 40/334/334 33/335/335
-f 32/324/324 33/335/335 19/336/336
-f 17/325/325 19/336/336 14/337/337
-f 12/326/326 14/337/337 11/338/338
-f 1/327/327 11/338/338 13/339/339
-f 353/340/340 431/352/352 349/341/341
-f 204/329/329 349/341/341 93/342/342
-f 60/330/330 93/342/342 85/343/343
-f 55/331/331 85/343/343 71/344/344
-f 52/332/332 71/344/344 59/345/345
-f 45/333/333 59/345/345 51/346/346
-f 40/334/334 51/346/346 41/347/347
-f 33/335/335 41/347/347 34/348/348
-f 19/336/336 34/348/348 27/349/349
-f 14/337/337 27/349/349 21/350/350
-f 11/338/338 21/350/350 22/351/351
-f 431/352/352 531/364/364 492/353/353
-f 349/341/341 492/353/353 352/354/354
-f 93/342/342 352/354/354 313/355/355
-f 85/343/343 313/355/355 268/356/356
-f 71/344/344 268/356/356 202/357/357
-f 59/345/345 202/357/357 133/358/358
-f 51/346/346 133/358/358 87/359/359
-f 41/347/347 87/359/359 58/360/360
-f 34/348/348 58/360/360 53/361/361
-f 27/349/349 53/361/361 47/362/362
-f 21/350/350 47/362/362 48/363/363
-f 531/364/364 698/256/256 699/258/258
-f 492/353/353 699/258/258 702/260/260
-f 352/354/354 702/260/260 703/262/262
-f 313/355/355 703/262/262 704/264/264
-f 268/356/356 704/264/264 705/266/266
-f 202/357/357 705/266/266 707/268/268
-f 133/358/358 707/268/268 712/270/270
-f 87/359/359 712/270/270 719/272/272
-f 58/360/360 719/272/272 725/274/274
-f 53/361/361 725/274/274 727/276/276
-f 47/362/362 727/276/276 726/278/278
-f 1038/318/318 1180/305/305 1101/365/365
-f 1180/305/305 1296/306/306 1284/366/366
-f 1296/306/306 1300/307/307 1293/367/367
-f 1300/307/307 1307/308/308 1299/368/368
-f 1307/308/308 1310/309/309 1304/369/369
-f 1310/309/309 1315/310/310 1311/370/370
-f 1315/310/310 1322/311/311 1318/371/371
-f 1322/311/311 1337/312/312 1334/372/372
-f 1337/312/312 1342/313/313 1336/373/373
-f 1342/313/313 1353/314/314 1339/374/374
-f 1353/314/314 1352/315/315 1338/375/375
-f 1352/315/315 1338/375/375 662/279/279
-f 984/376/376 935/377/377 1101/365/365
-f 1101/365/365 1219/378/378 1284/366/366
-f 1284/366/366 1240/379/379 1293/367/367
-f 1293/367/367 1255/380/380 1299/368/368
-f 1299/368/368 1267/381/381 1304/369/369
-f 1304/369/369 1292/382/382 1311/370/370
-f 1311/370/370 1305/383/383 1318/371/371
-f 1318/371/371 1314/384/384 1334/372/372
-f 1334/372/372 1316/385/385 1336/373/373
-f 1336/373/373 1319/386/386 1339/374/374
-f 1339/374/374 1317/387/387 1338/375/375
-f 1338/375/375 1317/387/387 662/279/279
-f 887/388/388 799/389/389 935/377/377
-f 935/377/377 865/390/390 1219/378/378
-f 1219/378/378 874/391/391 1240/379/379
-f 1240/379/379 896/392/392 1255/380/380
-f 1255/380/380 908/393/393 1267/381/381
-f 1267/381/381 942/394/394 1292/382/382
-f 1292/382/382 1045/395/395 1305/383/383
-f 1305/383/383 1174/396/396 1314/384/384
-f 1314/384/384 1218/397/397 1316/385/385
-f 1316/385/385 1231/398/398 1319/386/386
-f 1319/386/386 1228/399/399 1317/387/387
-f 1317/387/387 1228/399/399 662/279/279
-f 778/400/400 564/401/401 799/389/389
-f 799/389/389 510/402/402 865/390/390
-f 874/391/391 510/402/402 493/403/403
-f 865/390/390 510/402/402 874/391/391
-f 896/392/392 493/403/403 483/404/404
-f 874/391/391 493/403/403 896/392/392
-f 908/393/393 483/404/404 465/405/405
-f 896/392/392 483/404/404 908/393/393
-f 942/394/394 465/405/405 441/406/406
-f 908/393/393 465/405/405 942/394/394
-f 1045/395/395 441/406/406 362/407/407
-f 942/394/394 441/406/406 1045/395/395
-f 1045/395/395 251/408/408 1174/396/396
-f 1174/396/396 193/409/409 1218/397/397
-f 1218/397/397 164/410/410 1231/398/398
-f 1228/399/399 164/410/410 171/411/411
-f 1231/398/398 164/410/410 1228/399/399
-f 1228/399/399 171/411/411 662/279/279
-f 585/412/412 429/413/413 564/401/401
-f 564/401/401 150/414/414 510/402/402
-f 510/402/402 125/415/415 493/403/403
-f 493/403/403 100/416/416 483/404/404
-f 483/404/404 92/417/417 465/405/405
-f 465/405/405 70/418/418 441/406/406
-f 441/406/406 49/419/419 362/407/407
-f 362/407/407 42/420/420 251/408/408
-f 251/408/408 38/421/421 193/409/409
-f 193/409/409 36/422/422 164/410/410
-f 164/410/410 37/423/423 171/411/411
-f 171/411/411 37/423/423 662/279/279
-f 477/424/424 264/425/425 429/413/413
-f 429/413/413 74/426/426 150/414/414
-f 150/414/414 61/427/427 125/415/415
-f 125/415/415 56/428/428 100/416/416
-f 100/416/416 50/429/429 92/417/417
-f 92/417/417 43/430/430 70/418/418
-f 70/418/418 35/431/431 49/419/419
-f 49/419/419 20/432/432 42/420/420
-f 42/420/420 18/433/433 38/421/421
-f 38/421/421 15/434/434 36/422/422
-f 36/422/422 16/435/435 37/423/423
-f 37/423/423 16/435/435 662/279/279
-f 381/436/436 184/316/316 264/425/425
-f 264/425/425 57/319/319 74/426/426
-f 74/426/426 54/320/320 61/427/427
-f 61/427/427 46/321/321 56/428/428
-f 56/428/428 44/322/322 50/429/429
-f 50/429/429 39/323/323 43/430/430
-f 43/430/430 32/324/324 35/431/431
-f 35/431/431 17/325/325 20/432/432
-f 20/432/432 12/326/326 18/433/433
-f 1/327/327 15/434/434 18/433/433
-f 15/434/434 2/328/328 16/435/435
-f 16/435/435 2/328/328 662/279/279
-f 1038/318/318 984/376/376 1101/365/365
-f 1180/305/305 1101/365/365 1284/366/366
-f 1296/306/306 1284/366/366 1293/367/367
-f 1300/307/307 1293/367/367 1299/368/368
-f 1307/308/308 1299/368/368 1304/369/369
-f 1310/309/309 1304/369/369 1311/370/370
-f 1315/310/310 1311/370/370 1318/371/371
-f 1322/311/311 1318/371/371 1334/372/372
-f 1337/312/312 1334/372/372 1336/373/373
-f 1342/313/313 1336/373/373 1339/374/374
-f 1353/314/314 1339/374/374 1338/375/375
-f 984/376/376 887/388/388 935/377/377
-f 1101/365/365 935/377/377 1219/378/378
-f 1284/366/366 1219/378/378 1240/379/379
-f 1293/367/367 1240/379/379 1255/380/380
-f 1299/368/368 1255/380/380 1267/381/381
-f 1304/369/369 1267/381/381 1292/382/382
-f 1311/370/370 1292/382/382 1305/383/383
-f 1318/371/371 1305/383/383 1314/384/384
-f 1334/372/372 1314/384/384 1316/385/385
-f 1336/373/373 1316/385/385 1319/386/386
-f 1339/374/374 1319/386/386 1317/387/387
-f 887/388/388 778/400/400 799/389/389
-f 935/377/377 799/389/389 865/390/390
-f 1219/378/378 865/390/390 874/391/391
-f 1240/379/379 874/391/391 896/392/392
-f 1255/380/380 896/392/392 908/393/393
-f 1267/381/381 908/393/393 942/394/394
-f 1292/382/382 942/394/394 1045/395/395
-f 1305/383/383 1045/395/395 1174/396/396
-f 1314/384/384 1174/396/396 1218/397/397
-f 1316/385/385 1218/397/397 1231/398/398
-f 1319/386/386 1231/398/398 1228/399/399
-f 778/400/400 585/412/412 564/401/401
-f 799/389/389 564/401/401 510/402/402
-f 1045/395/395 362/407/407 251/408/408
-f 1174/396/396 251/408/408 193/409/409
-f 1218/397/397 193/409/409 164/410/410
-f 585/412/412 477/424/424 429/413/413
-f 564/401/401 429/413/413 150/414/414
-f 510/402/402 150/414/414 125/415/415
-f 493/403/403 125/415/415 100/416/416
-f 483/404/404 100/416/416 92/417/417
-f 465/405/405 92/417/417 70/418/418
-f 441/406/406 70/418/418 49/419/419
-f 362/407/407 49/419/419 42/420/420
-f 251/408/408 42/420/420 38/421/421
-f 193/409/409 38/421/421 36/422/422
-f 164/410/410 36/422/422 37/423/423
-f 477/424/424 381/436/436 264/425/425
-f 429/413/413 264/425/425 74/426/426
-f 150/414/414 74/426/426 61/427/427
-f 125/415/415 61/427/427 56/428/428
-f 100/416/416 56/428/428 50/429/429
-f 92/417/417 50/429/429 43/430/430
-f 70/418/418 43/430/430 35/431/431
-f 49/419/419 35/431/431 20/432/432
-f 42/420/420 20/432/432 18/433/433
-f 38/421/421 18/433/433 15/434/434
-f 36/422/422 15/434/434 16/435/435
-f 381/436/436 342/317/317 184/316/316
-f 264/425/425 184/316/316 57/319/319
-f 74/426/426 57/319/319 54/320/320
-f 61/427/427 54/320/320 46/321/321
-f 56/428/428 46/321/321 44/322/322
-f 50/429/429 44/322/322 39/323/323
-f 43/430/430 39/323/323 32/324/324
-f 35/431/431 32/324/324 17/325/325
-f 20/432/432 17/325/325 12/326/326
-f 18/433/433 12/326/326 1/327/327
-f 1/327/327 2/328/328 15/434/434
-f 648/437/437 759/52/52 756/122/122
-f 650/438/438 648/437/437 756/122/122
-f 756/122/122 759/52/52 867/50/50
-f 854/439/439 867/50/50 978/48/48
-f 938/113/113 978/48/48 1108/46/46
-f 1057/440/440 1108/46/46 1207/42/42
-f 1161/102/102 1207/42/42 1237/41/41
-f 1205/103/103 1237/41/41 1236/2/2
-f 756/122/122 867/50/50 854/439/439
-f 854/439/439 978/48/48 938/113/113
-f 938/113/113 1108/46/46 1057/440/440
-f 1057/440/440 1207/42/42 1161/102/102
-f 1161/102/102 1237/41/41 1205/103/103
-f 1205/103/103 1236/2/2 1204/1/1
-f 692/441/441 597/131/131 592/54/54
-f 691/442/442 597/131/131 692/441/441
-f 597/131/131 486/56/56 592/54/54
-f 502/443/443 377/57/57 486/56/56
-f 415/140/140 246/58/58 377/57/57
-f 297/444/444 143/59/59 246/58/58
-f 191/149/149 118/60/60 143/59/59
-f 147/158/158 117/15/15 118/60/60
-f 597/131/131 502/443/443 486/56/56
-f 502/443/443 415/140/140 377/57/57
-f 415/140/140 297/444/444 246/58/58
-f 297/444/444 191/149/149 143/59/59
-f 191/149/149 147/158/158 118/60/60
-f 147/158/158 148/16/16 117/15/15
-f 148/16/16 142/62/62 117/15/15
-f 192/175/175 245/64/64 142/62/62
-f 298/445/445 376/66/66 245/64/64
-f 416/184/184 485/68/68 376/66/66
-f 501/193/193 591/70/70 485/68/68
-f 595/202/202 647/72/72 591/70/70
-f 148/16/16 192/175/175 142/62/62
-f 192/175/175 298/445/445 245/64/64
-f 298/445/445 416/184/184 376/66/66
-f 416/184/184 501/193/193 485/68/68
-f 501/193/193 595/202/202 591/70/70
-f 595/202/202 651/211/211 647/72/72
-f 651/211/211 758/74/74 647/72/72
-f 755/220/220 866/76/76 758/74/74
-f 853/229/229 977/78/78 866/76/76
-f 939/238/238 1107/80/80 977/78/78
-f 1056/446/446 1206/82/82 1107/80/80
-f 1162/247/247 1236/2/2 1206/82/82
-f 651/211/211 755/220/220 758/74/74
-f 755/220/220 853/229/229 866/76/76
-f 853/229/229 939/238/238 977/78/78
-f 939/238/238 1056/446/446 1107/80/80
-f 1056/446/446 1162/247/247 1206/82/82
-f 1162/247/247 1204/1/1 1236/2/2
-f 97/447/447 78/448/448 77/449/448
-f 98/450/449 78/448/448 97/447/447
-f 77/449/448 80/451/450 79/452/450
-f 78/448/448 80/451/450 77/449/448
-f 79/452/450 31/453/451 30/454/451
-f 80/451/450 31/453/451 79/452/450
-f 30/454/451 29/455/452 28/456/452
-f 31/453/451 29/455/452 30/454/451
-f 28/456/452 98/450/449 97/447/447
-f 29/455/452 98/450/449 28/456/452
-f 25/457/453 24/458/454 23/459/454
-f 26/460/453 24/458/454 25/457/453
-f 23/459/454 10/461/455 9/462/455
-f 24/458/454 10/461/455 23/459/454
-f 9/462/455 4/463/456 3/464/457
-f 10/461/455 4/463/456 9/462/455
-f 3/464/457 8/465/458 7/466/459
-f 4/463/456 8/465/458 3/464/457
-f 7/466/459 6/467/460 5/468/460
-f 8/465/458 6/467/460 7/466/459
-f 5/468/460 26/460/453 25/457/453
-f 6/467/460 26/460/453 5/468/460
-f 1328/469/461 1330/470/462 1331/471/462
-f 1327/472/461 1330/470/462 1328/469/461
-f 1331/471/462 1344/473/463 1345/474/463
-f 1330/470/462 1344/473/463 1331/471/462
-f 1345/474/463 1350/475/464 1351/476/464
-f 1344/473/463 1350/475/464 1345/474/463
-f 1351/476/464 1346/477/465 1347/478/465
-f 1350/475/464 1346/477/465 1351/476/464
-f 1347/478/465 1348/479/466 1349/480/466
-f 1346/477/465 1348/479/466 1347/478/465
-f 1349/480/466 1327/472/461 1328/469/461
-f 1348/479/466 1327/472/461 1349/480/466
-f 1257/481/467 1274/482/468 1275/483/468
-f 1256/484/467 1274/482/468 1257/481/467
-f 1275/483/468 1276/485/469 1277/486/469
-f 1274/482/468 1276/485/469 1275/483/468
-f 1277/486/469 1323/487/470 1324/488/470
-f 1276/485/469 1323/487/470 1277/486/469
-f 1324/488/470 1325/489/471 1326/490/471
-f 1323/487/470 1325/489/471 1324/488/470
-f 1326/490/471 1256/484/467 1257/481/467
-f 1325/489/471 1256/484/467 1326/490/471
-f 91/491/472 99/492/473 141/493/474
-f 99/492/473 108/494/475 157/495/476
-f 108/494/475 149/496/477 203/497/478
-f 149/496/477 258/498/479 292/499/480
-f 258/498/479 329/500/481 335/501/482
-f 124/502/483 141/493/474 198/503/484
-f 141/493/474 157/495/476 209/504/485
-f 157/495/476 203/497/478 261/505/486
-f 203/497/478 292/499/480 299/506/487
-f 335/501/482 338/507/488 299/506/487
-f 292/499/480 335/501/482 299/506/487
-f 182/508/489 198/503/484 412/509/490
-f 198/503/484 209/504/485 407/510/491
-f 209/504/485 261/505/486 388/511/492
-f 261/505/486 299/506/487 350/512/493
-f 299/506/487 338/507/488 337/513/494
-f 437/514/495 412/509/490 565/515/496
-f 412/509/490 407/510/491 540/516/497
-f 407/510/491 388/511/492 489/517/498
-f 350/512/493 405/518/499 489/517/498
-f 388/511/492 350/512/493 489/517/498
-f 350/512/493 337/513/494 328/519/500
-f 565/515/496 109/520/501 104/521/502
-f 643/522/503 565/515/496 104/521/502
-f 540/516/497 116/523/504 109/520/501
-f 565/515/496 540/516/497 109/520/501
-f 489/517/498 155/524/505 116/523/504
-f 540/516/497 489/517/498 116/523/504
-f 405/518/499 265/525/506 155/524/505
-f 489/517/498 405/518/499 155/524/505
-f 328/519/500 325/526/507 265/525/506
-f 405/518/499 328/519/500 265/525/506
-f 104/521/502 109/520/501 84/527/508
-f 109/520/501 116/523/504 89/528/509
-f 116/523/504 155/524/505 110/529/510
-f 155/524/505 265/525/506 227/530/511
-f 325/526/507 333/531/512 227/530/511
-f 265/525/506 325/526/507 227/530/511
-f 75/532/513 84/527/508 82/533/514
-f 84/527/508 89/528/509 86/534/515
-f 89/528/509 110/529/510 106/535/516
-f 110/529/510 227/530/511 216/536/517
-f 227/530/511 333/531/512 336/537/518
-f 66/538/519 82/533/514 83/539/520
-f 82/533/514 86/534/515 90/540/521
-f 86/534/515 106/535/516 111/541/522
-f 106/535/516 216/536/517 225/542/523
-f 216/536/517 336/537/518 334/543/524
-f 72/544/525 83/539/520 88/545/526
-f 83/539/520 90/540/521 96/546/527
-f 90/540/521 111/541/522 123/547/528
-f 111/541/522 225/542/523 240/548/529
-f 225/542/523 334/543/524 332/549/530
-f 81/550/531 88/545/526 99/492/473
-f 88/545/526 96/546/527 108/494/475
-f 96/546/527 123/547/528 149/496/477
-f 123/547/528 240/548/529 258/498/479
-f 240/548/529 332/549/530 329/500/481
-f 91/491/472 141/493/474 124/502/483
-f 99/492/473 157/495/476 141/493/474
-f 108/494/475 203/497/478 157/495/476
-f 149/496/477 292/499/480 203/497/478
-f 258/498/479 335/501/482 292/499/480
-f 124/502/483 198/503/484 182/508/489
-f 141/493/474 209/504/485 198/503/484
-f 157/495/476 261/505/486 209/504/485
-f 203/497/478 299/506/487 261/505/486
-f 182/508/489 412/509/490 437/514/495
-f 198/503/484 407/510/491 412/509/490
-f 209/504/485 388/511/492 407/510/491
-f 261/505/486 350/512/493 388/511/492
-f 299/506/487 337/513/494 350/512/493
-f 437/514/495 565/515/496 643/522/503
-f 412/509/490 540/516/497 565/515/496
-f 407/510/491 489/517/498 540/516/497
-f 350/512/493 328/519/500 405/518/499
-f 104/521/502 84/527/508 75/532/513
-f 109/520/501 89/528/509 84/527/508
-f 116/523/504 110/529/510 89/528/509
-f 155/524/505 227/530/511 110/529/510
-f 75/532/513 82/533/514 66/538/519
-f 84/527/508 86/534/515 82/533/514
-f 89/528/509 106/535/516 86/534/515
-f 110/529/510 216/536/517 106/535/516
-f 227/530/511 336/537/518 216/536/517
-f 66/538/519 83/539/520 72/544/525
-f 82/533/514 90/540/521 83/539/520
-f 86/534/515 111/541/522 90/540/521
-f 106/535/516 225/542/523 111/541/522
-f 216/536/517 334/543/524 225/542/523
-f 72/544/525 88/545/526 81/550/531
-f 83/539/520 96/546/527 88/545/526
-f 90/540/521 123/547/528 96/546/527
-f 111/541/522 240/548/529 123/547/528
-f 225/542/523 332/549/530 240/548/529
-f 81/550/531 99/492/473 91/491/472
-f 88/545/526 108/494/475 99/492/473
-f 96/546/527 149/496/477 108/494/475
-f 123/547/528 258/498/479 149/496/477
-f 240/548/529 329/500/481 258/498/479
-f 1261/551/532 1209/552/533 1254/553/534
-f 1254/553/534 1196/554/535 1246/555/536
-f 1246/555/536 1149/556/537 1201/557/538
-f 1201/557/538 1063/558/539 1094/559/540
-f 1094/559/540 1017/560/541 1023/561/542
-f 1226/562/543 1153/563/544 1209/552/533
-f 1209/552/533 1146/564/545 1196/554/535
-f 1196/554/535 1091/565/546 1149/556/537
-f 1149/556/537 1055/566/547 1063/558/539
-f 1017/560/541 1055/566/547 1014/567/548
-f 1063/558/539 1055/566/547 1017/560/541
-f 1169/568/549 941/569/550 1153/563/544
-f 1153/563/544 947/570/551 1146/564/545
-f 1146/564/545 968/571/552 1091/565/546
-f 1091/565/546 1002/572/553 1055/566/547
-f 1055/566/547 1015/573/554 1014/567/548
-f 915/574/555 791/575/556 941/569/550
-f 941/569/550 816/576/557 947/570/551
-f 947/570/551 863/577/558 968/571/552
-f 1002/572/553 863/577/558 949/578/559
-f 968/571/552 863/577/558 1002/572/553
-f 1002/572/553 1024/579/560 1015/573/554
-f 791/575/556 1249/580/561 1245/581/562
-f 706/582/563 1249/580/561 791/575/556
-f 816/576/557 1245/581/562 1239/583/564
-f 791/575/556 1245/581/562 816/576/557
-f 863/577/558 1239/583/564 1197/584/565
-f 816/576/557 1239/583/564 863/577/558
-f 949/578/559 1197/584/565 1088/585/566
-f 863/577/558 1197/584/565 949/578/559
-f 1024/579/560 1088/585/566 1027/586/567
-f 949/578/559 1088/585/566 1024/579/560
-f 1249/580/561 1268/587/568 1245/581/562
-f 1245/581/562 1264/588/569 1239/583/564
-f 1239/583/564 1244/589/570 1197/584/565
-f 1197/584/565 1124/590/571 1088/585/566
-f 1027/586/567 1124/590/571 1019/591/572
-f 1088/585/566 1124/590/571 1027/586/567
-f 1278/592/573 1272/593/574 1268/587/568
-f 1268/587/568 1266/594/575 1264/588/569
-f 1264/588/569 1248/595/576 1244/589/570
-f 1244/589/570 1137/596/577 1124/590/571
-f 1124/590/571 1016/597/578 1019/591/572
-f 1285/598/579 1269/599/580 1272/593/574
-f 1272/593/574 1262/600/581 1266/594/575
-f 1266/594/575 1243/601/582 1248/595/576
-f 1248/595/576 1126/602/583 1137/596/577
-f 1137/596/577 1018/603/584 1016/597/578
-f 1280/604/585 1265/605/586 1269/599/580
-f 1269/599/580 1258/606/587 1262/600/581
-f 1262/600/581 1227/607/588 1243/601/582
-f 1243/601/582 1114/608/589 1126/602/583
-f 1126/602/583 1020/609/590 1018/603/584
-f 1273/610/591 1254/553/534 1265/605/586
-f 1265/605/586 1246/555/536 1258/606/587
-f 1258/606/587 1201/557/538 1227/607/588
-f 1227/607/588 1094/559/540 1114/608/589
-f 1114/608/589 1023/561/542 1020/609/590
-f 1261/551/532 1226/562/543 1209/552/533
-f 1254/553/534 1209/552/533 1196/554/535
-f 1246/555/536 1196/554/535 1149/556/537
-f 1201/557/538 1149/556/537 1063/558/539
-f 1094/559/540 1063/558/539 1017/560/541
-f 1226/562/543 1169/568/549 1153/563/544
-f 1209/552/533 1153/563/544 1146/564/545
-f 1196/554/535 1146/564/545 1091/565/546
-f 1149/556/537 1091/565/546 1055/566/547
-f 1169/568/549 915/574/555 941/569/550
-f 1153/563/544 941/569/550 947/570/551
-f 1146/564/545 947/570/551 968/571/552
-f 1091/565/546 968/571/552 1002/572/553
-f 1055/566/547 1002/572/553 1015/573/554
-f 915/574/555 706/582/563 791/575/556
-f 941/569/550 791/575/556 816/576/557
-f 947/570/551 816/576/557 863/577/558
-f 1002/572/553 949/578/559 1024/579/560
-f 1249/580/561 1278/592/573 1268/587/568
-f 1245/581/562 1268/587/568 1264/588/569
-f 1239/583/564 1264/588/569 1244/589/570
-f 1197/584/565 1244/589/570 1124/590/571
-f 1278/592/573 1285/598/579 1272/593/574
-f 1268/587/568 1272/593/574 1266/594/575
-f 1264/588/569 1266/594/575 1248/595/576
-f 1244/589/570 1248/595/576 1137/596/577
-f 1124/590/571 1137/596/577 1016/597/578
-f 1285/598/579 1280/604/585 1269/599/580
-f 1272/593/574 1269/599/580 1262/600/581
-f 1266/594/575 1262/600/581 1243/601/582
-f 1248/595/576 1243/601/582 1126/602/583
-f 1137/596/577 1126/602/583 1018/603/584
-f 1280/604/585 1273/610/591 1265/605/586
-f 1269/599/580 1265/605/586 1258/606/587
-f 1262/600/581 1258/606/587 1227/607/588
-f 1243/601/582 1227/607/588 1114/608/589
-f 1126/602/583 1114/608/589 1020/609/590
-f 1273/610/591 1261/551/532 1254/553/534
-f 1265/605/586 1254/553/534 1246/555/536
-f 1258/606/587 1246/555/536 1201/557/538
-f 1227/607/588 1201/557/538 1094/559/540
-f 1114/608/589 1094/559/540 1023/561/542
-f 615/611/592 576/612/593 618/613/594
-f 774/614/595 618/613/594 775/615/594
-f 615/611/592 618/613/594 774/614/595
-f 774/614/595 775/615/594 800/616/596
-f 618/613/594 576/612/593 623/617/597
-f 775/615/594 623/617/597 757/618/598
-f 618/613/594 623/617/597 775/615/594
-f 775/615/594 757/618/598 800/616/596
-f 623/617/597 576/612/593 625/619/599
-f 757/618/598 625/619/599 722/620/600
-f 623/617/597 625/619/599 757/618/598
-f 757/618/598 722/620/600 800/616/596
-f 625/619/599 576/612/593 627/621/601
-f 722/620/600 627/621/601 717/622/602
-f 625/619/599 627/621/601 722/620/600
-f 722/620/600 717/622/602 800/616/596
-f 627/621/601 576/612/593 626/623/603
-f 717/622/602 626/623/603 715/624/604
-f 627/621/601 626/623/603 717/622/602
-f 717/622/602 715/624/604 800/616/596
-f 626/623/603 576/612/593 624/625/605
-f 715/624/604 624/625/605 713/626/606
-f 626/623/603 624/625/605 715/624/604
-f 715/624/604 713/626/606 800/616/596
-f 624/625/605 576/612/593 622/627/607
-f 713/626/606 622/627/607 714/628/608
-f 624/625/605 622/627/607 713/626/606
-f 713/626/606 714/628/608 800/616/596
-f 622/627/607 576/612/593 621/629/609
-f 714/628/608 621/629/609 716/630/610
-f 622/627/607 621/629/609 714/628/608
-f 714/628/608 716/630/610 800/616/596
-f 621/629/609 576/612/593 620/631/611
-f 716/630/610 620/631/611 718/632/612
-f 621/629/609 620/631/611 716/630/610
-f 716/630/610 718/632/612 800/616/596
-f 620/631/611 576/612/593 619/633/613
-f 718/632/612 619/633/613 721/634/614
-f 620/631/611 619/633/613 718/632/612
-f 718/632/612 721/634/614 800/616/596
-f 619/633/613 576/612/593 617/635/615
-f 721/634/614 617/635/615 764/636/616
-f 619/633/613 617/635/615 721/634/614
-f 721/634/614 764/636/616 800/616/596
-f 617/635/615 576/612/593 616/637/617
-f 764/636/616 616/637/617 767/638/618
-f 617/635/615 616/637/617 764/636/616
-f 764/636/616 767/638/618 800/616/596
-f 616/637/617 576/612/593 615/611/592
-f 767/638/618 615/611/592 774/614/595
-f 616/637/617 615/611/592 767/638/618
-f 767/638/618 774/614/595 800/616/596
-f 951/639/619 963/640/620 934/641/621
-f 973/642/622 934/641/621 893/643/623
-f 951/639/619 934/641/621 973/642/622
-f 983/644/624 893/643/623 872/645/625
-f 973/642/622 893/643/623 983/644/624
-f 986/646/626 872/645/625 876/647/627
-f 983/644/624 872/645/625 986/646/626
-f 988/648/628 876/647/627 898/649/628
-f 986/646/626 876/647/627 988/648/628
-f 934/641/621 963/640/620 920/650/629
-f 893/643/623 920/650/629 833/651/630
-f 934/641/621 920/650/629 893/643/623
-f 872/645/625 833/651/630 804/652/631
-f 893/643/623 833/651/630 872/645/625
-f 876/647/627 804/652/631 808/653/632
-f 872/645/625 804/652/631 876/647/627
-f 898/649/628 808/653/632 831/654/628
-f 876/647/627 808/653/632 898/649/628
-f 920/650/629 963/640/620 912/655/633
-f 833/651/630 912/655/633 819/656/634
-f 920/650/629 912/655/633 833/651/630
-f 804/652/631 819/656/634 783/657/635
-f 833/651/630 819/656/634 804/652/631
-f 808/653/632 783/657/635 788/658/636
-f 804/652/631 783/657/635 808/653/632
-f 831/654/628 788/658/636 811/659/628
-f 808/653/632 788/658/636 831/654/628
-f 912/655/633 963/640/620 919/660/637
-f 819/656/634 919/660/637 832/661/638
-f 912/655/633 919/660/637 819/656/634
-f 783/657/635 832/661/638 803/662/639
-f 819/656/634 832/661/638 783/657/635
-f 788/658/636 803/662/639 807/663/640
-f 783/657/635 803/662/639 788/658/636
-f 811/659/628 807/663/640 830/664/628
-f 788/658/636 807/663/640 811/659/628
-f 919/660/637 963/640/620 933/665/641
-f 832/661/638 933/665/641 892/666/642
-f 919/660/637 933/665/641 832/661/638
-f 803/662/639 892/666/642 871/667/643
-f 832/661/638 892/666/642 803/662/639
-f 807/663/640 871/667/643 875/668/644
-f 803/662/639 871/667/643 807/663/640
-f 830/664/628 875/668/644 897/669/628
-f 807/663/640 875/668/644 830/664/628
-f 933/665/641 963/640/620 950/670/645
-f 892/666/642 950/670/645 972/671/646
-f 933/665/641 950/670/645 892/666/642
-f 871/667/643 972/671/646 982/672/647
-f 892/666/642 972/671/646 871/667/643
-f 875/668/644 982/672/647 985/673/648
-f 871/667/643 982/672/647 875/668/644
-f 897/669/628 985/673/648 987/674/628
-f 875/668/644 985/673/648 897/669/628
-f 950/670/645 963/640/620 995/675/649
-f 972/671/646 995/675/649 1082/676/650
-f 950/670/645 995/675/649 972/671/646
-f 982/672/647 1082/676/650 1138/677/651
-f 972/671/646 1082/676/650 982/672/647
-f 985/673/648 1138/677/651 1140/678/652
-f 982/672/647 1138/677/651 985/673/648
-f 987/674/628 1140/678/652 1102/679/628
-f 985/673/648 1140/678/652 987/674/628
-f 995/675/649 963/640/620 1006/680/653
-f 1082/676/650 1006/680/653 1165/681/654
-f 995/675/649 1006/680/653 1082/676/650
-f 1138/677/651 1165/681/654 1222/682/655
-f 1082/676/650 1165/681/654 1138/677/651
-f 1140/678/652 1222/682/655 1220/683/656
-f 1138/677/651 1222/682/655 1140/678/652
-f 1102/679/628 1220/683/656 1192/684/657
-f 1140/678/652 1220/683/656 1102/679/628
-f 1006/680/653 963/640/620 1010/685/658
-f 1165/681/654 1010/685/658 1191/686/659
-f 1006/680/653 1010/685/658 1165/681/654
-f 1222/682/655 1191/686/659 1235/687/660
-f 1165/681/654 1191/686/659 1222/682/655
-f 1220/683/656 1235/687/660 1233/688/661
-f 1222/682/655 1235/687/660 1220/683/656
-f 1192/684/657 1233/688/661 1213/689/628
-f 1220/683/656 1233/688/661 1192/684/657
-f 1010/685/658 963/640/620 1007/690/662
-f 1191/686/659 1007/690/662 1166/691/663
-f 1010/685/658 1007/690/662 1191/686/659
-f 1235/687/660 1166/691/663 1223/692/664
-f 1191/686/659 1166/691/663 1235/687/660
-f 1233/688/661 1223/692/664 1221/693/665
-f 1235/687/660 1223/692/664 1233/688/661
-f 1213/689/628 1221/693/665 1193/694/628
-f 1233/688/661 1221/693/665 1213/689/628
-f 1007/690/662 963/640/620 996/695/666
-f 1166/691/663 996/695/666 1083/696/667
-f 1007/690/662 996/695/666 1166/691/663
-f 1223/692/664 1083/696/667 1139/697/668
-f 1166/691/663 1083/696/667 1223/692/664
-f 1221/693/665 1139/697/668 1141/698/669
-f 1223/692/664 1139/697/668 1221/693/665
-f 1193/694/628 1141/698/669 1103/699/628
-f 1221/693/665 1141/698/669 1193/694/628
-f 996/695/666 963/640/620 951/639/619
-f 1083/696/667 951/639/619 973/642/622
-f 996/695/666 951/639/619 1083/696/667
-f 1139/697/668 973/642/622 983/644/624
-f 1083/696/667 973/642/622 1139/697/668
-f 1141/698/669 983/644/624 986/646/626
-f 1139/697/668 983/644/624 1141/698/669
-f 1103/699/628 986/646/626 988/648/628
-f 1141/698/669 986/646/626 1103/699/628
-f 387/700/670 400/701/671 359/702/672
-f 375/703/673 359/702/672 271/704/674
-f 387/700/670 359/702/672 375/703/673
-f 368/705/675 271/704/674 213/706/676
-f 375/703/673 271/704/674 368/705/675
-f 364/707/677 213/706/676 206/708/678
-f 368/705/675 213/706/676 364/707/677
-f 366/709/679 206/708/678 238/710/679
-f 364/707/677 206/708/678 366/709/679
-f 359/702/672 400/701/671 346/711/680
-f 271/704/674 346/711/680 181/712/681
-f 359/702/672 346/711/680 271/704/674
-f 213/706/676 181/712/681 129/713/682
-f 271/704/674 181/712/681 213/706/676
-f 206/708/678 129/713/682 131/714/683
-f 213/706/676 129/713/682 206/708/678
-f 238/710/679 131/714/683 152/715/679
-f 206/708/678 131/714/683 238/710/679
-f 346/711/680 400/701/671 339/716/684
-f 181/712/681 339/716/684 159/717/685
-f 346/711/680 339/716/684 181/712/681
-f 129/713/682 159/717/685 112/718/686
-f 181/712/681 159/717/685 129/713/682
-f 131/714/683 112/718/686 115/719/687
-f 129/713/682 112/718/686 131/714/683
-f 152/715/679 115/719/687 132/720/679
-f 131/714/683 115/719/687 152/715/679
-f 339/716/684 400/701/671 345/721/688
-f 159/717/685 345/721/688 180/722/689
-f 339/716/684 345/721/688 159/717/685
-f 112/718/686 180/722/689 128/723/690
-f 159/717/685 180/722/689 112/718/686
-f 115/719/687 128/723/690 130/724/691
-f 112/718/686 128/723/690 115/719/687
-f 132/720/679 130/724/691 151/725/692
-f 115/719/687 130/724/691 132/720/679
-f 345/721/688 400/701/671 358/726/693
-f 180/722/689 358/726/693 270/727/694
-f 345/721/688 358/726/693 180/722/689
-f 128/723/690 270/727/694 212/728/695
-f 180/722/689 270/727/694 128/723/690
-f 130/724/691 212/728/695 205/729/696
-f 128/723/690 212/728/695 130/724/691
-f 151/725/692 205/729/696 237/730/679
-f 130/724/691 205/729/696 151/725/692
-f 358/726/693 400/701/671 386/731/697
-f 270/727/694 386/731/697 374/732/698
-f 358/726/693 386/731/697 270/727/694
-f 212/728/695 374/732/698 367/733/699
-f 270/727/694 374/732/698 212/728/695
-f 205/729/696 367/733/699 363/734/700
-f 212/728/695 367/733/699 205/729/696
-f 237/730/679 363/734/700 365/735/679
-f 205/729/696 363/734/700 237/730/679
-f 386/731/697 400/701/671 417/736/701
-f 374/732/698 417/736/701 455/737/702
-f 386/731/697 417/736/701 374/732/698
-f 367/733/699 455/737/702 475/738/703
-f 374/732/698 455/737/702 367/733/699
-f 363/734/700 475/738/703 469/739/704
-f 367/733/699 475/738/703 363/734/700
-f 365/735/679 469/739/704 452/740/705
-f 363/734/700 469/739/704 365/735/679
-f 417/736/701 400/701/671 432/741/706
-f 455/737/702 432/741/706 511/742/707
-f 417/736/701 432/741/706 455/737/702
-f 475/738/703 511/742/707 547/743/708
-f 455/737/702 511/742/707 475/738/703
-f 469/739/704 547/743/708 545/744/709
-f 475/738/703 547/743/708 469/739/704
-f 452/740/705 545/744/709 518/745/679
-f 469/739/704 545/744/709 452/740/705
-f 432/741/706 400/701/671 440/746/710
-f 511/742/707 440/746/710 532/747/711
-f 432/741/706 440/746/710 511/742/707
-f 547/743/708 532/747/711 563/748/712
-f 511/742/707 532/747/711 547/743/708
-f 545/744/709 563/748/712 560/749/713
-f 547/743/708 563/748/712 545/744/709
-f 518/745/679 560/749/713 535/750/679
-f 545/744/709 560/749/713 518/745/679
-f 440/746/710 400/701/671 433/751/714
-f 532/747/711 433/751/714 512/752/715
-f 440/746/710 433/751/714 532/747/711
-f 563/748/712 512/752/715 548/753/716
-f 532/747/711 512/752/715 563/748/712
-f 560/749/713 548/753/716 546/754/717
-f 563/748/712 548/753/716 560/749/713
-f 535/750/679 546/754/717 519/755/679
-f 560/749/713 546/754/717 535/750/679
-f 433/751/714 400/701/671 418/756/718
-f 512/752/715 418/756/718 456/757/719
-f 433/751/714 418/756/718 512/752/715
-f 548/753/716 456/757/719 476/758/720
-f 512/752/715 456/757/719 548/753/716
-f 546/754/717 476/758/720 470/759/721
-f 548/753/716 476/758/720 546/754/717
-f 519/755/679 470/759/721 453/760/679
-f 546/754/717 470/759/721 519/755/679
-f 418/756/718 400/701/671 387/700/670
-f 456/757/719 387/700/670 375/703/673
-f 418/756/718 387/700/670 456/757/719
-f 476/758/720 375/703/673 368/705/675
-f 456/757/719 375/703/673 476/758/720
-f 470/759/721 368/705/675 364/707/677
-f 476/758/720 368/705/675 470/759/721
-f 453/760/679 364/707/677 366/709/679
-f 470/759/721 364/707/677 453/760/679
-f 742/761/722 676/762/723 737/763/724
-f 851/764/725 737/763/724 839/765/726
-f 742/761/722 737/763/724 851/764/725
-f 902/766/727 839/765/726 886/767/728
-f 851/764/725 839/765/726 902/766/727
-f 901/768/729 886/767/728 884/769/730
-f 902/766/727 886/767/728 901/768/729
-f 864/770/731 884/769/730 858/771/732
-f 901/768/729 884/769/730 864/770/731
-f 737/763/724 676/762/723 729/772/733
-f 839/765/726 729/772/733 810/773/734
-f 737/763/724 729/772/733 839/765/726
-f 886/767/728 810/773/734 844/774/735
-f 839/765/726 810/773/734 886/767/728
-f 884/769/730 844/774/735 842/775/736
-f 886/767/728 844/774/735 884/769/730
-f 858/771/732 842/775/736 818/776/731
-f 884/769/730 842/775/736 858/771/732
-f 729/772/733 676/762/723 711/777/737
-f 810/773/734 711/777/737 762/778/738
-f 729/772/733 711/777/737 810/773/734
-f 844/774/735 762/778/738 787/779/739
-f 810/773/734 762/778/738 844/774/735
-f 842/775/736 787/779/739 785/780/740
-f 844/774/735 787/779/739 842/775/736
-f 818/776/731 785/780/740 771/781/731
-f 842/775/736 785/780/740 818/776/731
-f 711/777/737 676/762/723 679/782/741
-f 762/778/738 679/782/741 683/783/742
-f 711/777/737 679/782/741 762/778/738
-f 787/779/739 683/783/742 687/784/743
-f 762/778/738 683/783/742 787/779/739
-f 785/780/740 687/784/743 689/785/744
-f 787/779/739 687/784/743 785/780/740
-f 771/781/731 689/785/744 688/786/731
-f 785/780/740 689/785/744 771/781/731
-f 679/782/741 676/762/723 640/787/745
-f 683/783/742 640/787/745 590/788/746
-f 679/782/741 640/787/745 683/783/742
-f 687/784/743 590/788/746 569/789/747
-f 683/783/742 590/788/746 687/784/743
-f 689/785/744 569/789/747 571/790/748
-f 687/784/743 569/789/747 689/785/744
-f 688/786/731 571/790/748 582/791/749
-f 689/785/744 571/790/748 688/786/731
-f 640/787/745 676/762/723 635/792/750
-f 590/788/746 635/792/750 550/793/751
-f 640/787/745 635/792/750 590/788/746
-f 569/789/747 550/793/751 514/794/752
-f 590/788/746 550/793/751 569/789/747
-f 571/790/748 514/794/752 516/795/753
-f 569/789/747 514/794/752 571/790/748
-f 582/791/749 516/795/753 539/796/731
-f 571/790/748 516/795/753 582/791/749
-f 635/792/750 676/762/723 614/797/754
-f 550/793/751 614/797/754 521/798/755
-f 635/792/750 614/797/754 550/793/751
-f 514/794/752 521/798/755 468/799/756
-f 550/793/751 521/798/755 514/794/752
-f 516/795/753 468/799/756 472/800/757
-f 514/794/752 468/799/756 516/795/753
-f 539/796/731 472/800/757 497/801/731
-f 516/795/753 472/800/757 539/796/731
-f 614/797/754 676/762/723 608/802/758
-f 521/798/755 608/802/758 503/803/759
-f 614/797/754 608/802/758 521/798/755
-f 468/799/756 503/803/759 451/804/760
-f 521/798/755 503/803/759 468/799/756
-f 472/800/757 451/804/760 454/805/761
-f 468/799/756 451/804/760 472/800/757
-f 497/801/731 454/805/761 488/806/731
-f 472/800/757 454/805/761 497/801/731
-f 608/802/758 676/762/723 613/807/762
-f 503/803/759 613/807/762 520/808/763
-f 608/802/758 613/807/762 503/803/759
-f 451/804/760 520/808/763 467/809/764
-f 503/803/759 520/808/763 451/804/760
-f 454/805/761 467/809/764 471/810/765
-f 451/804/760 467/809/764 454/805/761
-f 488/806/731 471/810/765 496/811/731
-f 454/805/761 471/810/765 488/806/731
-f 613/807/762 676/762/723 634/812/766
-f 520/808/763 634/812/766 549/813/767
-f 613/807/762 634/812/766 520/808/763
-f 467/809/764 549/813/767 513/814/768
-f 520/808/763 549/813/767 467/809/764
-f 471/810/765 513/814/768 515/815/769
-f 467/809/764 513/814/768 471/810/765
-f 496/811/731 515/815/769 538/816/770
-f 471/810/765 515/815/769 496/811/731
-f 634/812/766 676/762/723 639/817/771
-f 549/813/767 639/817/771 589/818/772
-f 634/812/766 639/817/771 549/813/767
-f 513/814/768 589/818/772 568/819/773
-f 549/813/767 589/818/772 513/814/768
-f 515/815/769 568/819/773 570/820/774
-f 513/814/768 568/819/773 515/815/769
-f 538/816/770 570/820/774 581/821/749
-f 515/815/769 570/820/774 538/816/770
-f 639/817/771 676/762/723 675/822/775
-f 589/818/772 675/822/775 682/823/776
-f 639/817/771 675/822/775 589/818/772
-f 568/819/773 682/823/776 684/824/777
-f 589/818/772 682/823/776 568/819/773
-f 570/820/774 684/824/777 685/825/778
-f 568/819/773 684/824/777 570/820/774
-f 581/821/749 685/825/778 686/826/749
-f 570/820/774 685/825/778 581/821/749
-f 675/822/775 676/762/723 710/827/779
-f 682/823/776 710/827/779 761/828/780
-f 675/822/775 710/827/779 682/823/776
-f 684/824/777 761/828/780 786/829/781
-f 682/823/776 761/828/780 684/824/777
-f 685/825/778 786/829/781 784/830/782
-f 684/824/777 786/829/781 685/825/778
-f 686/826/749 784/830/782 770/831/749
-f 685/825/778 784/830/782 686/826/749
-f 710/827/779 676/762/723 728/832/783
-f 761/828/780 728/832/783 809/833/784
-f 710/827/779 728/832/783 761/828/780
-f 786/829/781 809/833/784 843/834/785
-f 761/828/780 809/833/784 786/829/781
-f 784/830/782 843/834/785 841/835/786
-f 786/829/781 843/834/785 784/830/782
-f 770/831/749 841/835/786 817/836/749
-f 784/830/782 841/835/786 770/831/749
-f 728/832/783 676/762/723 736/837/787
-f 809/833/784 736/837/787 838/838/788
-f 728/832/783 736/837/787 809/833/784
-f 843/834/785 838/838/788 885/839/789
-f 809/833/784 838/838/788 843/834/785
-f 841/835/786 885/839/789 883/840/790
-f 843/834/785 885/839/789 841/835/786
-f 817/836/749 883/840/790 857/841/731
-f 841/835/786 883/840/790 817/836/749
-f 736/837/787 676/762/723 742/761/722
-f 838/838/788 742/761/722 851/764/725
-f 736/837/787 742/761/722 838/838/788
-f 885/839/789 851/764/725 902/766/727
-f 838/838/788 851/764/725 885/839/789
-f 883/840/790 902/766/727 901/768/729
-f 885/839/789 902/766/727 883/840/790
-f 857/841/731 901/768/729 864/770/731
-f 883/840/790 901/768/729 857/841/731
-f 750/842/791 680/843/792 740/844/793
-f 802/845/794 740/844/793 792/846/795
-f 750/842/791 740/844/793 802/845/794
-f 845/847/796 792/846/795 826/848/797
-f 802/845/794 792/846/795 845/847/796
-f 873/849/798 826/848/797 855/850/799
-f 845/847/796 826/848/797 873/849/798
-f 905/851/800 855/850/799 879/852/801
-f 873/849/798 855/850/799 905/851/800
-f 918/853/802 879/852/801 899/854/803
-f 905/851/800 879/852/801 918/853/802
-f 921/855/804 899/854/803 903/856/805
-f 918/853/802 899/854/803 921/855/804
-f 740/844/793 680/843/792 723/857/806
-f 792/846/795 723/857/806 747/858/807
-f 740/844/793 723/857/806 792/846/795
-f 826/848/797 747/858/807 781/859/808
-f 792/846/795 747/858/807 826/848/797
-f 855/850/799 781/859/808 796/860/809
-f 826/848/797 781/859/808 855/850/799
-f 879/852/801 796/860/809 805/861/810
-f 855/850/799 796/860/809 879/852/801
-f 899/854/803 805/861/810 812/862/811
-f 879/852/801 805/861/810 899/854/803
-f 903/856/805 812/862/811 820/863/812
-f 899/854/803 812/862/811 903/856/805
-f 723/857/806 680/843/792 677/864/813
-f 747/858/807 677/864/813 674/865/814
-f 723/857/806 677/864/813 747/858/807
-f 781/859/808 674/865/814 670/866/815
-f 747/858/807 674/865/814 781/859/808
-f 796/860/809 670/866/815 667/867/816
-f 781/859/808 670/866/815 796/860/809
-f 805/861/810 667/867/816 666/868/817
-f 796/860/809 667/867/816 805/861/810
-f 812/862/811 666/868/817 664/869/818
-f 805/861/810 666/868/817 812/862/811
-f 820/863/812 664/869/818 663/870/819
-f 812/862/811 664/869/818 820/863/812
-f 677/864/813 680/843/792 636/871/820
-f 674/865/814 636/871/820 602/872/821
-f 677/864/813 636/871/820 674/865/814
-f 670/866/815 602/872/821 572/873/822
-f 674/865/814 602/872/821 670/866/815
-f 667/867/816 572/873/822 556/874/823
-f 670/866/815 572/873/822 667/867/816
-f 666/868/817 556/874/823 551/875/824
-f 667/867/816 556/874/823 666/868/817
-f 664/869/818 551/875/824 543/876/825
-f 666/868/817 551/875/824 664/869/818
-f 663/870/819 543/876/825 536/877/826
-f 664/869/818 543/876/825 663/870/819
-f 636/871/820 680/843/792 609/878/827
-f 602/872/821 609/878/827 561/879/828
-f 636/871/820 609/878/827 602/872/821
-f 572/873/822 561/879/828 527/880/829
-f 602/872/821 561/879/828 572/873/822
-f 556/874/823 527/880/829 498/881/830
-f 572/873/822 527/880/829 556/874/823
-f 551/875/824 498/881/830 478/882/831
-f 556/874/823 498/881/830 551/875/824
-f 543/876/825 478/882/831 457/883/832
-f 551/875/824 478/882/831 543/876/825
-f 536/877/826 457/883/832 449/884/833
-f 543/876/825 457/883/832 536/877/826
-f 609/878/827 680/843/792 600/885/834
-f 561/879/828 600/885/834 553/886/835
-f 609/878/827 600/885/834 561/879/828
-f 527/880/829 553/886/835 509/887/836
-f 561/879/828 553/886/835 527/880/829
-f 498/881/830 509/887/836 482/888/837
-f 527/880/829 509/887/836 498/881/830
-f 478/882/831 482/888/837 447/889/838
-f 498/881/830 482/888/837 478/882/831
-f 457/883/832 447/889/838 434/890/839
-f 478/882/831 447/889/838 457/883/832
-f 449/884/833 434/890/839 430/891/840
-f 457/883/832 434/890/839 449/884/833
-f 600/885/834 680/843/792 610/892/841
-f 553/886/835 610/892/841 562/893/842
-f 600/885/834 610/892/841 553/886/835
-f 509/887/836 562/893/842 528/894/843
-f 553/886/835 562/893/842 509/887/836
-f 482/888/837 528/894/843 499/895/844
-f 509/887/836 528/894/843 482/888/837
-f 447/889/838 499/895/844 479/896/845
-f 482/888/837 499/895/844 447/889/838
-f 434/890/839 479/896/845 458/897/846
-f 447/889/838 479/896/845 434/890/839
-f 430/891/840 458/897/846 450/898/847
-f 434/890/839 458/897/846 430/891/840
-f 610/892/841 680/843/792 637/899/848
-f 562/893/842 637/899/848 603/900/849
-f 610/892/841 637/899/848 562/893/842
-f 528/894/843 603/900/849 573/901/850
-f 562/893/842 603/900/849 528/894/843
-f 499/895/844 573/901/850 557/902/851
-f 528/894/843 573/901/850 499/895/844
-f 479/896/845 557/902/851 552/903/852
-f 499/895/844 557/902/851 479/896/845
-f 458/897/846 552/903/852 544/904/853
-f 479/896/845 552/903/852 458/897/846
-f 450/898/847 544/904/853 537/905/854
-f 458/897/846 544/904/853 450/898/847
-f 637/899/848 680/843/792 681/906/855
-f 603/900/849 681/906/855 678/907/856
-f 637/899/848 681/906/855 603/900/849
-f 573/901/850 678/907/856 672/908/857
-f 603/900/849 678/907/856 573/901/850
-f 557/902/851 672/908/857 673/909/858
-f 573/901/850 672/908/857 557/902/851
-f 552/903/852 673/909/858 671/910/859
-f 557/902/851 673/909/858 552/903/852
-f 544/904/853 671/910/859 669/911/860
-f 552/903/852 671/910/859 544/904/853
-f 537/905/854 669/911/860 665/912/861
-f 544/904/853 669/911/860 537/905/854
-f 681/906/855 680/843/792 724/913/862
-f 678/907/856 724/913/862 748/914/863
-f 681/906/855 724/913/862 678/907/856
-f 672/908/857 748/914/863 782/915/864
-f 678/907/856 748/914/863 672/908/857
-f 673/909/858 782/915/864 797/916/865
-f 672/908/857 782/915/864 673/909/858
-f 671/910/859 797/916/865 806/917/866
-f 673/909/858 797/916/865 671/910/859
-f 669/911/860 806/917/866 813/918/867
-f 671/910/859 806/917/866 669/911/860
-f 665/912/861 813/918/867 821/919/868
-f 669/911/860 813/918/867 665/912/861
-f 724/913/862 680/843/792 741/920/869
-f 748/914/863 741/920/869 793/921/870
-f 724/913/862 741/920/869 748/914/863
-f 782/915/864 793/921/870 827/922/871
-f 748/914/863 793/921/870 782/915/864
-f 797/916/865 827/922/871 856/923/872
-f 782/915/864 827/922/871 797/916/865
-f 806/917/866 856/923/872 880/924/873
-f 797/916/865 856/923/872 806/917/866
-f 813/918/867 880/924/873 900/925/874
-f 806/917/866 880/924/873 813/918/867
-f 821/919/868 900/925/874 904/926/875
-f 813/918/867 900/925/874 821/919/868
-f 741/920/869 680/843/792 750/842/791
-f 793/921/870 750/842/791 802/845/794
-f 741/920/869 750/842/791 793/921/870
-f 827/922/871 802/845/794 845/847/796
-f 793/921/870 802/845/794 827/922/871
-f 856/923/872 845/847/796 873/849/798
-f 827/922/871 845/847/796 856/923/872
-f 880/924/873 873/849/798 905/851/800
-f 856/923/872 873/849/798 880/924/873
-f 900/925/874 905/851/800 918/853/802
-f 880/924/873 905/851/800 900/925/874
-f 904/926/875 918/853/802 921/855/804
-f 900/925/874 918/853/802 904/926/875
-f 444/927/876 403/928/877 438/929/878
-f 484/930/879 438/929/878 473/931/880
-f 444/927/876 438/929/878 484/930/879
-f 534/932/881 473/931/880 522/933/882
-f 484/930/879 473/931/880 534/932/881
-f 555/934/883 522/933/882 541/935/884
-f 534/932/881 522/933/882 555/934/883
-f 588/936/885 541/935/884 558/937/886
-f 555/934/883 541/935/884 588/936/885
-f 628/938/887 558/937/886 574/939/888
-f 588/936/885 558/937/886 628/938/887
-f 631/940/889 574/939/888 583/941/890
-f 628/938/887 574/939/888 631/940/889
-f 438/929/878 403/928/877 423/942/891
-f 473/931/880 423/942/891 443/943/892
-f 438/929/878 423/942/891 473/931/880
-f 522/933/882 443/943/892 461/944/893
-f 473/931/880 443/943/892 522/933/882
-f 541/935/884 461/944/893 480/945/894
-f 522/933/882 461/944/893 541/935/884
-f 558/937/886 480/945/894 490/946/895
-f 541/935/884 480/945/894 558/937/886
-f 574/939/888 490/946/895 494/947/896
-f 558/937/886 490/946/895 574/939/888
-f 583/941/890 494/947/896 505/948/897
-f 574/939/888 494/947/896 583/941/890
-f 423/942/891 403/928/877 401/949/898
-f 443/943/892 401/949/898 397/950/899
-f 423/942/891 401/949/898 443/943/892
-f 461/944/893 397/950/899 394/951/900
-f 443/943/892 397/950/899 461/944/893
-f 480/945/894 394/951/900 393/952/901
-f 461/944/893 394/951/900 480/945/894
-f 490/946/895 393/952/901 392/953/902
-f 480/945/894 393/952/901 490/946/895
-f 494/947/896 392/953/902 390/954/903
-f 490/946/895 392/953/902 494/947/896
-f 505/948/897 390/954/903 389/955/904
-f 494/947/896 390/954/903 505/948/897
-f 401/949/898 403/928/877 356/956/905
-f 397/950/899 356/956/905 322/957/906
-f 401/949/898 356/956/905 397/950/899
-f 394/951/900 322/957/906 290/958/907
-f 397/950/899 322/957/906 394/951/900
-f 393/952/901 290/958/907 259/959/908
-f 394/951/900 290/958/907 393/952/901
-f 392/953/902 259/959/908 229/960/909
-f 393/952/901 259/959/908 392/953/902
-f 390/954/903 229/960/909 214/961/910
-f 392/953/902 229/960/909 390/954/903
-f 389/955/904 214/961/910 210/962/911
-f 390/954/903 214/961/910 389/955/904
-f 356/956/905 403/928/877 343/963/912
-f 322/957/906 343/963/912 266/964/913
-f 356/956/905 343/963/912 322/957/906
-f 290/958/907 266/964/913 194/965/914
-f 322/957/906 266/964/913 290/958/907
-f 259/959/908 194/965/914 161/966/915
-f 290/958/907 194/965/914 259/959/908
-f 229/960/909 161/966/915 134/967/916
-f 259/959/908 161/966/915 229/960/909
-f 214/961/910 134/967/916 126/968/917
-f 229/960/909 134/967/916 214/961/910
-f 210/962/911 126/968/917 121/969/918
-f 214/961/910 126/968/917 210/962/911
-f 343/963/912 403/928/877 318/970/919
-f 266/964/913 318/970/919 250/971/920
-f 343/963/912 318/970/919 266/964/913
-f 194/965/914 250/971/920 173/972/921
-f 266/964/913 250/971/920 194/965/914
-f 161/966/915 173/972/921 140/973/922
-f 194/965/914 173/972/921 161/966/915
-f 134/967/916 140/973/922 120/974/923
-f 161/966/915 140/973/922 134/967/916
-f 126/968/917 120/974/923 107/975/924
-f 134/967/916 120/974/923 126/968/917
-f 121/969/918 107/975/924 103/976/925
-f 126/968/917 107/975/924 121/969/918
-f 318/970/919 403/928/877 344/977/926
-f 250/971/920 344/977/926 267/978/927
-f 318/970/919 344/977/926 250/971/920
-f 173/972/921 267/978/927 195/979/928
-f 250/971/920 267/978/927 173/972/921
-f 140/973/922 195/979/928 162/980/929
-f 173/972/921 195/979/928 140/973/922
-f 120/974/923 162/980/929 135/981/930
-f 140/973/922 162/980/929 120/974/923
-f 107/975/924 135/981/930 127/982/931
-f 120/974/923 135/981/930 107/975/924
-f 103/976/925 127/982/931 122/983/932
-f 107/975/924 127/982/931 103/976/925
-f 344/977/926 403/928/877 357/984/933
-f 267/978/927 357/984/933 323/985/934
-f 344/977/926 357/984/933 267/978/927
-f 195/979/928 323/985/934 291/986/935
-f 267/978/927 323/985/934 195/979/928
-f 162/980/929 291/986/935 260/987/936
-f 195/979/928 291/986/935 162/980/929
-f 135/981/930 260/987/936 230/988/937
-f 162/980/929 260/987/936 135/981/930
-f 127/982/931 230/988/937 215/989/938
-f 135/981/930 230/988/937 127/982/931
-f 122/983/932 215/989/938 211/990/939
-f 127/982/931 215/989/938 122/983/932
-f 357/984/933 403/928/877 404/991/940
-f 323/985/934 404/991/940 402/992/941
-f 357/984/933 404/991/940 323/985/934
-f 291/986/935 402/992/941 398/993/942
-f 323/985/934 402/992/941 291/986/935
-f 260/987/936 398/993/942 399/994/943
-f 291/986/935 398/993/942 260/987/936
-f 230/988/937 399/994/943 396/995/944
-f 260/987/936 399/994/943 230/988/937
-f 215/989/938 396/995/944 395/996/945
-f 230/988/937 396/995/944 215/989/938
-f 211/990/939 395/996/945 391/997/946
-f 215/989/938 395/996/945 211/990/939
-f 404/991/940 403/928/877 424/998/947
-f 402/992/941 424/998/947 442/999/948
-f 404/991/940 424/998/947 402/992/941
-f 398/993/942 442/999/948 462/1000/949
-f 402/992/941 442/999/948 398/993/942
-f 399/994/943 462/1000/949 481/1001/950
-f 398/993/942 462/1000/949 399/994/943
-f 396/995/944 481/1001/950 491/1002/951
-f 399/994/943 481/1001/950 396/995/944
-f 395/996/945 491/1002/951 495/1003/952
-f 396/995/944 491/1002/951 395/996/945
-f 391/997/946 495/1003/952 506/1004/953
-f 395/996/945 495/1003/952 391/997/946
-f 424/998/947 403/928/877 439/1005/954
-f 442/999/948 439/1005/954 474/1006/955
-f 424/998/947 439/1005/954 442/999/948
-f 462/1000/949 474/1006/955 523/1007/956
-f 442/999/948 474/1006/955 462/1000/949
-f 481/1001/950 523/1007/956 542/1008/957
-f 462/1000/949 523/1007/956 481/1001/950
-f 491/1002/951 542/1008/957 559/1009/958
-f 481/1001/950 542/1008/957 491/1002/951
-f 495/1003/952 559/1009/958 575/1010/959
-f 491/1002/951 559/1009/958 495/1003/952
-f 506/1004/953 575/1010/959 584/1011/960
-f 495/1003/952 575/1010/959 506/1004/953
-f 439/1005/954 403/928/877 444/927/876
-f 474/1006/955 444/927/876 484/930/879
-f 439/1005/954 444/927/876 474/1006/955
-f 523/1007/956 484/930/879 534/932/881
-f 474/1006/955 484/930/879 523/1007/956
-f 542/1008/957 534/932/881 555/934/883
-f 523/1007/956 534/932/881 542/1008/957
-f 559/1009/958 555/934/883 588/936/885
-f 542/1008/957 555/934/883 559/1009/958
-f 575/1010/959 588/936/885 628/938/887
-f 559/1009/958 588/936/885 575/1010/959
-f 584/1011/960 628/938/887 631/940/889
-f 575/1010/959 628/938/887 584/1011/960
-f 1035/1012/961 966/1013/877 1008/1014/878
-f 1104/1015/879 1008/1014/878 1086/1016/880
-f 1035/1012/961 1008/1014/878 1104/1015/879
-f 1179/1017/962 1086/1016/880 1156/1018/882
-f 1104/1015/879 1086/1016/880 1179/1017/962
-f 1210/1019/883 1156/1018/882 1188/1020/884
-f 1179/1017/962 1156/1018/882 1210/1019/883
-f 1232/1021/885 1188/1020/884 1215/1022/886
-f 1210/1019/883 1188/1020/884 1232/1021/885
-f 1247/1023/887 1215/1022/886 1225/1024/888
-f 1232/1021/885 1215/1022/886 1247/1023/887
-f 1251/1025/889 1225/1024/888 1229/1026/963
-f 1247/1023/887 1225/1024/888 1251/1025/889
-f 1008/1014/878 966/1013/877 997/1027/964
-f 1086/1016/880 997/1027/964 1029/1028/892
-f 1008/1014/878 997/1027/964 1086/1016/880
-f 1156/1018/882 1029/1028/892 1064/1029/965
-f 1086/1016/880 1029/1028/892 1156/1018/882
-f 1188/1020/884 1064/1029/965 1092/1030/894
-f 1156/1018/882 1064/1029/965 1188/1020/884
-f 1215/1022/886 1092/1030/894 1122/1031/895
-f 1188/1020/884 1092/1030/894 1215/1022/886
-f 1225/1024/888 1122/1031/895 1142/1032/896
-f 1215/1022/886 1122/1031/895 1225/1024/888
-f 1229/1026/963 1142/1032/896 1144/1033/897
-f 1225/1024/888 1142/1032/896 1229/1026/963
-f 997/1027/964 966/1013/877 964/1034/966
-f 1029/1028/892 964/1034/966 960/1035/899
-f 997/1027/964 964/1034/966 1029/1028/892
-f 1064/1029/965 960/1035/899 957/1036/900
-f 1029/1028/892 960/1035/899 1064/1029/965
-f 1092/1030/894 957/1036/900 956/1037/901
-f 1064/1029/965 957/1036/900 1092/1030/894
-f 1122/1031/895 956/1037/901 955/1038/902
-f 1092/1030/894 956/1037/901 1122/1031/895
-f 1142/1032/896 955/1038/902 953/1039/903
-f 1122/1031/895 955/1038/902 1142/1032/896
-f 1144/1033/897 953/1039/903 952/1040/967
-f 1142/1032/896 953/1039/903 1144/1033/897
-f 964/1034/966 966/1013/877 926/1041/905
-f 960/1035/899 926/1041/905 910/1042/906
-f 964/1034/966 926/1041/905 960/1035/899
-f 957/1036/900 910/1042/906 890/1043/968
-f 960/1035/899 910/1042/906 957/1036/900
-f 956/1037/901 890/1043/968 877/1044/908
-f 957/1036/900 890/1043/968 956/1037/901
-f 955/1038/902 877/1044/908 861/1045/909
-f 956/1037/901 877/1044/908 955/1038/902
-f 953/1039/903 861/1045/909 859/1046/910
-f 955/1038/902 861/1045/909 953/1039/903
-f 952/1040/967 859/1046/910 848/1047/911
-f 953/1039/903 859/1046/910 952/1040/967
-f 926/1041/905 966/1013/877 913/1048/912
-f 910/1042/906 913/1048/912 881/1049/969
-f 926/1041/905 913/1048/912 910/1042/906
-f 890/1043/968 881/1049/969 836/1050/970
-f 910/1042/906 881/1049/969 890/1043/968
-f 877/1044/908 836/1050/970 814/1051/915
-f 890/1043/968 836/1050/970 877/1044/908
-f 861/1045/909 814/1051/915 794/1052/916
-f 877/1044/908 814/1051/915 861/1045/909
-f 859/1046/910 794/1052/916 779/1053/971
-f 861/1045/909 794/1052/916 859/1046/910
-f 848/1047/911 779/1053/971 768/1054/918
-f 859/1046/910 779/1053/971 848/1047/911
-f 913/1048/912 966/1013/877 909/1055/919
-f 881/1049/969 909/1055/919 869/1056/920
-f 913/1048/912 909/1055/919 881/1049/969
-f 836/1050/970 869/1056/920 822/1057/921
-f 881/1049/969 869/1056/920 836/1050/970
-f 814/1051/915 822/1057/921 798/1058/922
-f 836/1050/970 822/1057/921 814/1051/915
-f 794/1052/916 798/1058/922 763/1059/972
-f 814/1051/915 798/1058/922 794/1052/916
-f 779/1053/971 763/1059/972 735/1060/924
-f 794/1052/916 763/1059/972 779/1053/971
-f 768/1054/918 735/1060/924 732/1061/925
-f 779/1053/971 735/1060/924 768/1054/918
-f 909/1055/919 966/1013/877 914/1062/973
-f 869/1056/920 914/1062/973 882/1063/927
-f 909/1055/919 914/1062/973 869/1056/920
-f 822/1057/921 882/1063/927 837/1064/928
-f 869/1056/920 882/1063/927 822/1057/921
-f 798/1058/922 837/1064/928 815/1065/929
-f 822/1057/921 837/1064/928 798/1058/922
-f 763/1059/972 815/1065/929 795/1066/930
-f 798/1058/922 815/1065/929 763/1059/972
-f 735/1060/924 795/1066/930 780/1067/931
-f 763/1059/972 795/1066/930 735/1060/924
-f 732/1061/925 780/1067/931 769/1068/932
-f 735/1060/924 780/1067/931 732/1061/925
-f 914/1062/973 966/1013/877 927/1069/933
-f 882/1063/927 927/1069/933 911/1070/934
-f 914/1062/973 927/1069/933 882/1063/927
-f 837/1064/928 911/1070/934 891/1071/974
-f 882/1063/927 911/1070/934 837/1064/928
-f 815/1065/929 891/1071/974 878/1072/936
-f 837/1064/928 891/1071/974 815/1065/929
-f 795/1066/930 878/1072/936 862/1073/937
-f 815/1065/929 878/1072/936 795/1066/930
-f 780/1067/931 862/1073/937 860/1074/975
-f 795/1066/930 862/1073/937 780/1067/931
-f 769/1068/932 860/1074/975 849/1075/939
-f 780/1067/931 860/1074/975 769/1068/932
-f 927/1069/933 966/1013/877 967/1076/976
-f 911/1070/934 967/1076/976 965/1077/977
-f 927/1069/933 967/1076/976 911/1070/934
-f 891/1071/974 965/1077/977 961/1078/942
-f 911/1070/934 965/1077/977 891/1071/974
-f 878/1072/936 961/1078/942 962/1079/943
-f 891/1071/974 961/1078/942 878/1072/936
-f 862/1073/937 962/1079/943 959/1080/944
-f 878/1072/936 962/1079/943 862/1073/937
-f 860/1074/975 959/1080/944 958/1081/945
-f 862/1073/937 959/1080/944 860/1074/975
-f 849/1075/939 958/1081/945 954/1082/946
-f 860/1074/975 958/1081/945 849/1075/939
-f 967/1076/976 966/1013/877 998/1083/978
-f 965/1077/977 998/1083/978 1028/1084/948
-f 967/1076/976 998/1083/978 965/1077/977
-f 961/1078/942 1028/1084/948 1065/1085/949
-f 965/1077/977 1028/1084/948 961/1078/942
-f 962/1079/943 1065/1085/949 1093/1086/979
-f 961/1078/942 1065/1085/949 962/1079/943
-f 959/1080/944 1093/1086/979 1123/1087/951
-f 962/1079/943 1093/1086/979 959/1080/944
-f 958/1081/945 1123/1087/951 1143/1088/952
-f 959/1080/944 1123/1087/951 958/1081/945
-f 954/1082/946 1143/1088/952 1145/1089/953
-f 958/1081/945 1143/1088/952 954/1082/946
-f 998/1083/978 966/1013/877 1009/1090/954
-f 1028/1084/948 1009/1090/954 1087/1091/955
-f 998/1083/978 1009/1090/954 1028/1084/948
-f 1065/1085/949 1087/1091/955 1157/1092/980
-f 1028/1084/948 1087/1091/955 1065/1085/949
-f 1093/1086/979 1157/1092/980 1189/1093/957
-f 1065/1085/949 1157/1092/980 1093/1086/979
-f 1123/1087/951 1189/1093/957 1216/1094/958
-f 1093/1086/979 1189/1093/957 1123/1087/951
-f 1143/1088/952 1216/1094/958 1224/1095/959
-f 1123/1087/951 1216/1094/958 1143/1088/952
-f 1145/1089/953 1224/1095/959 1230/1096/981
-f 1143/1088/952 1224/1095/959 1145/1089/953
-f 1009/1090/954 966/1013/877 1035/1012/961
-f 1087/1091/955 1035/1012/961 1104/1015/879
-f 1009/1090/954 1035/1012/961 1087/1091/955
-f 1157/1092/980 1104/1015/879 1179/1017/962
-f 1087/1091/955 1104/1015/879 1157/1092/980
-f 1189/1093/957 1179/1017/962 1210/1019/883
-f 1157/1092/980 1179/1017/962 1189/1093/957
-f 1216/1094/958 1210/1019/883 1232/1021/885
-f 1189/1093/957 1210/1019/883 1216/1094/958
-f 1224/1095/959 1232/1021/885 1247/1023/887
-f 1216/1094/958 1232/1021/885 1224/1095/959
-f 1230/1096/981 1247/1023/887 1251/1025/889
-f 1224/1095/959 1247/1023/887 1230/1096/981
-f 1096/1097/982 1079/1098/983 1090/1099/984
-f 1136/1100/985 1090/1099/984 1100/1101/986
-f 1096/1097/982 1090/1099/984 1136/1100/985
-f 1152/1102/987 1100/1101/986 1119/1103/988
-f 1136/1100/985 1100/1101/986 1152/1102/987
-f 1168/1104/989 1119/1103/988 1134/1105/990
-f 1152/1102/987 1119/1103/988 1168/1104/989
-f 1090/1099/984 1079/1098/983 1078/1106/991
-f 1100/1101/986 1078/1106/991 1076/1107/992
-f 1090/1099/984 1078/1106/991 1100/1101/986
-f 1119/1103/988 1076/1107/992 1073/1108/993
-f 1100/1101/986 1076/1107/992 1119/1103/988
-f 1134/1105/990 1073/1108/993 1071/1109/994
-f 1119/1103/988 1073/1108/993 1134/1105/990
-f 1078/1106/991 1079/1098/983 1059/1110/995
-f 1076/1107/992 1059/1110/995 1050/1111/996
-f 1078/1106/991 1059/1110/995 1076/1107/992
-f 1073/1108/993 1050/1111/996 1037/1112/997
-f 1076/1107/992 1050/1111/996 1073/1108/993
-f 1071/1109/994 1037/1112/997 1026/1113/998
-f 1073/1108/993 1037/1112/997 1071/1109/994
-f 1059/1110/995 1079/1098/983 1054/1114/999
-f 1050/1111/996 1054/1114/999 1022/1115/1000
-f 1059/1110/995 1054/1114/999 1050/1111/996
-f 1037/1112/997 1022/1115/1000 1000/1116/1001
-f 1050/1111/996 1022/1115/1000 1037/1112/997
-f 1026/1113/998 1000/1116/1001 994/1117/1002
-f 1037/1112/997 1000/1116/1001 1026/1113/998
-f 1054/1114/999 1079/1098/983 1048/1118/1003
-f 1022/1115/1000 1048/1118/1003 1004/1119/1004
-f 1054/1114/999 1048/1118/1003 1022/1115/1000
-f 1000/1116/1001 1004/1119/1004 990/1120/1005
-f 1022/1115/1000 1004/1119/1004 1000/1116/1001
-f 994/1117/1002 990/1120/1005 971/1121/1006
-f 1000/1116/1001 990/1120/1005 994/1117/1002
-f 1048/1118/1003 1079/1098/983 1042/1122/1007
-f 1004/1119/1004 1042/1122/1007 1001/1123/1008
-f 1048/1118/1003 1042/1122/1007 1004/1119/1004
-f 990/1120/1005 1001/1123/1008 981/1124/1009
-f 1004/1119/1004 1001/1123/1008 990/1120/1005
-f 971/1121/1006 981/1124/1009 948/1125/1010
-f 990/1120/1005 981/1124/1009 971/1121/1006
-f 1042/1122/1007 1079/1098/983 1047/1126/1011
-f 1001/1123/1008 1047/1126/1011 1003/1127/1012
-f 1042/1122/1007 1047/1126/1011 1001/1123/1008
-f 981/1124/1009 1003/1127/1012 989/1128/1013
-f 1001/1123/1008 1003/1127/1012 981/1124/1009
-f 948/1125/1010 989/1128/1013 970/1129/1014
-f 981/1124/1009 989/1128/1013 948/1125/1010
-f 1047/1126/1011 1079/1098/983 1053/1130/1015
-f 1003/1127/1012 1053/1130/1015 1021/1131/1016
-f 1047/1126/1011 1053/1130/1015 1003/1127/1012
-f 989/1128/1013 1021/1131/1016 999/1132/1017
-f 1003/1127/1012 1021/1131/1016 989/1128/1013
-f 970/1129/1014 999/1132/1017 993/1133/1018
-f 989/1128/1013 999/1132/1017 970/1129/1014
-f 1053/1130/1015 1079/1098/983 1058/1134/1019
-f 1021/1131/1016 1058/1134/1019 1049/1135/1020
-f 1053/1130/1015 1058/1134/1019 1021/1131/1016
-f 999/1132/1017 1049/1135/1020 1036/1136/1021
-f 1021/1131/1016 1049/1135/1020 999/1132/1017
-f 993/1133/1018 1036/1136/1021 1025/1137/1022
-f 999/1132/1017 1036/1136/1021 993/1133/1018
-f 1058/1134/1019 1079/1098/983 1077/1138/1023
-f 1049/1135/1020 1077/1138/1023 1075/1139/1024
-f 1058/1134/1019 1077/1138/1023 1049/1135/1020
-f 1036/1136/1021 1075/1139/1024 1072/1140/1025
-f 1049/1135/1020 1075/1139/1024 1036/1136/1021
-f 1025/1137/1022 1072/1140/1025 1070/1141/1026
-f 1036/1136/1021 1072/1140/1025 1025/1137/1022
-f 1077/1138/1023 1079/1098/983 1089/1142/1027
-f 1075/1139/1024 1089/1142/1027 1099/1143/1028
-f 1077/1138/1023 1089/1142/1027 1075/1139/1024
-f 1072/1140/1025 1099/1143/1028 1118/1144/1029
-f 1075/1139/1024 1099/1143/1028 1072/1140/1025
-f 1070/1141/1026 1118/1144/1029 1133/1145/1030
-f 1072/1140/1025 1118/1144/1029 1070/1141/1026
-f 1089/1142/1027 1079/1098/983 1095/1146/1031
-f 1099/1143/1028 1095/1146/1031 1135/1147/1032
-f 1089/1142/1027 1095/1146/1031 1099/1143/1028
-f 1118/1144/1029 1135/1147/1032 1151/1148/1033
-f 1099/1143/1028 1135/1147/1032 1118/1144/1029
-f 1133/1145/1030 1151/1148/1033 1167/1149/1034
-f 1118/1144/1029 1151/1148/1033 1133/1145/1030
-f 1095/1146/1031 1079/1098/983 1105/1150/1035
-f 1135/1147/1032 1105/1150/1035 1147/1151/1036
-f 1095/1146/1031 1105/1150/1035 1135/1147/1032
-f 1151/1148/1033 1147/1151/1036 1171/1152/1037
-f 1135/1147/1032 1147/1151/1036 1151/1148/1033
-f 1167/1149/1034 1171/1152/1037 1185/1153/1038
-f 1151/1148/1033 1171/1152/1037 1167/1149/1034
-f 1105/1150/1035 1079/1098/983 1113/1154/1039
-f 1147/1151/1036 1113/1154/1039 1150/1155/1040
-f 1105/1150/1035 1113/1154/1039 1147/1151/1036
-f 1171/1152/1037 1150/1155/1040 1175/1156/1041
-f 1147/1151/1036 1150/1155/1040 1171/1152/1037
-f 1185/1153/1038 1175/1156/1041 1194/1157/1042
-f 1171/1152/1037 1175/1156/1041 1185/1153/1038
-f 1113/1154/1039 1079/1098/983 1106/1158/1043
-f 1150/1155/1040 1106/1158/1043 1148/1159/1044
-f 1113/1154/1039 1106/1158/1043 1150/1155/1040
-f 1175/1156/1041 1148/1159/1044 1172/1160/1045
-f 1150/1155/1040 1148/1159/1044 1175/1156/1041
-f 1194/1157/1042 1172/1160/1045 1186/1161/1046
-f 1175/1156/1041 1172/1160/1045 1194/1157/1042
-f 1106/1158/1043 1079/1098/983 1096/1097/982
-f 1148/1159/1044 1096/1097/982 1136/1100/985
-f 1106/1158/1043 1096/1097/982 1148/1159/1044
-f 1172/1160/1045 1136/1100/985 1152/1102/987
-f 1148/1159/1044 1136/1100/985 1172/1160/1045
-f 1186/1161/1046 1152/1102/987 1168/1104/989
-f 1172/1160/1045 1152/1102/987 1186/1161/1046
-f 301/1162/1047 284/1163/1048 296/1164/984
-f 331/1165/985 296/1164/984 305/1166/1049
-f 301/1162/1047 296/1164/984 331/1165/985
-f 355/1167/1050 305/1166/1049 315/1168/988
-f 331/1165/985 305/1166/1049 355/1167/1050
-f 361/1169/989 315/1168/988 327/1170/1051
-f 355/1167/1050 315/1168/988 361/1169/989
-f 296/1164/984 284/1163/1048 283/1171/991
-f 305/1166/1049 283/1171/991 281/1172/992
-f 296/1164/984 283/1171/991 305/1166/1049
-f 315/1168/988 281/1172/992 278/1173/993
-f 305/1166/1049 281/1172/992 315/1168/988
-f 327/1170/1051 278/1173/993 276/1174/994
-f 315/1168/988 278/1173/993 327/1170/1051
-f 283/1171/991 284/1163/1048 263/1175/995
-f 281/1172/992 263/1175/995 253/1176/1052
-f 283/1171/991 263/1175/995 281/1172/992
-f 278/1173/993 253/1176/1052 231/1177/1053
-f 281/1172/992 253/1176/1052 278/1173/993
-f 276/1174/994 231/1177/1053 220/1178/998
-f 278/1173/993 231/1177/1053 276/1174/994
-f 263/1175/995 284/1163/1048 257/1179/999
-f 253/1176/1052 257/1179/999 218/1180/1000
-f 263/1175/995 257/1179/999 253/1176/1052
-f 231/1177/1053 218/1180/1000 199/1181/1054
-f 253/1176/1052 218/1180/1000 231/1177/1053
-f 220/1178/998 199/1181/1054 186/1182/1055
-f 231/1177/1053 199/1181/1054 220/1178/998
-f 257/1179/999 284/1163/1048 249/1183/1003
-f 218/1180/1000 249/1183/1003 208/1184/1056
-f 257/1179/999 249/1183/1003 218/1180/1000
-f 199/1181/1054 208/1184/1056 178/1185/1005
-f 218/1180/1000 208/1184/1056 199/1181/1054
-f 186/1182/1055 178/1185/1005 166/1186/1006
-f 199/1181/1054 178/1185/1005 186/1182/1055
-f 249/1183/1003 284/1163/1048 241/1187/1057
-f 208/1184/1056 241/1187/1057 201/1188/1058
-f 249/1183/1003 241/1187/1057 208/1184/1056
-f 178/1185/1005 201/1188/1058 176/1189/1009
-f 208/1184/1056 201/1188/1058 178/1185/1005
-f 166/1186/1006 176/1189/1009 160/1190/1010
-f 178/1185/1005 176/1189/1009 166/1186/1006
-f 241/1187/1057 284/1163/1048 248/1191/1011
-f 201/1188/1058 248/1191/1011 207/1192/1012
-f 241/1187/1057 248/1191/1011 201/1188/1058
-f 176/1189/1009 207/1192/1012 177/1193/1059
-f 201/1188/1058 207/1192/1012 176/1189/1009
-f 160/1190/1010 177/1193/1059 165/1194/1014
-f 176/1189/1009 177/1193/1059 160/1190/1010
-f 248/1191/1011 284/1163/1048 256/1195/1015
-f 207/1192/1012 256/1195/1015 217/1196/1016
-f 248/1191/1011 256/1195/1015 207/1192/1012
-f 177/1193/1059 217/1196/1016 200/1197/1060
-f 207/1192/1012 217/1196/1016 177/1193/1059
-f 165/1194/1014 200/1197/1060 185/1198/1018
-f 177/1193/1059 200/1197/1060 165/1194/1014
-f 256/1195/1015 284/1163/1048 262/1199/1019
-f 217/1196/1016 262/1199/1019 252/1200/1020
-f 256/1195/1015 262/1199/1019 217/1196/1016
-f 200/1197/1060 252/1200/1020 232/1201/1061
-f 217/1196/1016 252/1200/1020 200/1197/1060
-f 185/1198/1018 232/1201/1061 219/1202/1022
-f 200/1197/1060 232/1201/1061 185/1198/1018
-f 262/1199/1019 284/1163/1048 282/1203/1023
-f 252/1200/1020 282/1203/1023 280/1204/1024
-f 262/1199/1019 282/1203/1023 252/1200/1020
-f 232/1201/1061 280/1204/1024 277/1205/1062
-f 252/1200/1020 280/1204/1024 232/1201/1061
-f 219/1202/1022 277/1205/1062 275/1206/1063
-f 232/1201/1061 277/1205/1062 219/1202/1022
-f 282/1203/1023 284/1163/1048 295/1207/1027
-f 280/1204/1024 295/1207/1027 304/1208/1064
-f 282/1203/1023 295/1207/1027 280/1204/1024
-f 277/1205/1062 304/1208/1064 314/1209/1029
-f 280/1204/1024 304/1208/1064 277/1205/1062
-f 275/1206/1063 314/1209/1029 326/1210/1065
-f 277/1205/1062 314/1209/1029 275/1206/1063
-f 295/1207/1027 284/1163/1048 300/1211/1066
-f 304/1208/1064 300/1211/1066 330/1212/1032
-f 295/1207/1027 300/1211/1066 304/1208/1064
-f 314/1209/1029 330/1212/1032 354/1213/1033
-f 304/1208/1064 330/1212/1032 314/1209/1029
-f 326/1210/1065 354/1213/1033 360/1214/1034
-f 314/1209/1029 354/1213/1033 326/1210/1065
-f 300/1211/1066 284/1163/1048 306/1215/1035
-f 330/1212/1032 306/1215/1035 347/1216/1067
-f 300/1211/1066 306/1215/1035 330/1212/1032
-f 354/1213/1033 347/1216/1067 370/1217/1068
-f 330/1212/1032 347/1216/1067 354/1213/1033
-f 360/1214/1034 370/1217/1068 382/1218/1038
-f 354/1213/1033 370/1217/1068 360/1214/1034
-f 306/1215/1035 284/1163/1048 311/1219/1039
-f 347/1216/1067 311/1219/1039 351/1220/1069
-f 306/1215/1035 311/1219/1039 347/1216/1067
-f 370/1217/1068 351/1220/1069 373/1221/1070
-f 347/1216/1067 351/1220/1069 370/1217/1068
-f 382/1218/1038 373/1221/1070 406/1222/1071
-f 370/1217/1068 373/1221/1070 382/1218/1038
-f 311/1219/1039 284/1163/1048 307/1223/1072
-f 351/1220/1069 307/1223/1072 348/1224/1073
-f 311/1219/1039 307/1223/1072 351/1220/1069
-f 373/1221/1070 348/1224/1073 371/1225/1074
-f 351/1220/1069 348/1224/1073 373/1221/1070
-f 406/1222/1071 371/1225/1074 383/1226/1075
-f 373/1221/1070 371/1225/1074 406/1222/1071
-f 307/1223/1072 284/1163/1048 301/1162/1047
-f 348/1224/1073 301/1162/1047 331/1165/985
-f 307/1223/1072 301/1162/1047 348/1224/1073
-f 371/1225/1074 331/1165/985 355/1167/1050
-f 348/1224/1073 331/1165/985 371/1225/1074
-f 383/1226/1075 355/1167/1050 361/1169/989
-f 371/1225/1074 355/1167/1050 383/1226/1075
-f 1080/1227/1076 1250/1228/1077 1249/580/561
-f 1081/1229/1076 1250/1228/1077 1080/1227/1076
-f 1249/580/561 1279/1230/1078 1278/592/573
-f 1250/1228/1077 1279/1230/1078 1249/580/561
-f 1278/592/573 1286/1231/1079 1285/598/579
-f 1279/1230/1078 1286/1231/1079 1278/592/573
-f 1285/598/579 1290/1232/1080 1289/1233/1080
-f 1286/1231/1079 1290/1232/1080 1285/598/579
-f 1289/1233/1080 1288/1234/1081 1287/1235/1081
-f 1290/1232/1080 1288/1234/1081 1289/1233/1080
-f 1287/1235/1081 1283/1236/1082 1282/1237/1082
-f 1288/1234/1081 1283/1236/1082 1287/1235/1081
-f 1282/1237/1082 1281/1238/1083 1280/604/585
-f 1283/1236/1082 1281/1238/1083 1282/1237/1082
-f 1280/604/585 1242/1239/1084 1241/1240/1084
-f 1281/1238/1083 1242/1239/1084 1280/604/585
-f 1241/1240/1084 1081/1229/1076 1080/1227/1076
-f 1242/1239/1084 1081/1229/1076 1241/1240/1084
-f 273/1241/1085 104/521/502 105/1242/1086
-f 274/1243/1085 273/1241/1085 105/1242/1086
-f 104/521/502 75/532/513 76/1244/1087
-f 105/1242/1086 104/521/502 76/1244/1087
-f 75/532/513 66/538/519 67/1245/1088
-f 76/1244/1087 75/532/513 67/1245/1088
-f 66/538/519 62/1246/1089 63/1247/1089
-f 67/1245/1088 66/538/519 63/1247/1089
-f 62/1246/1089 64/1248/1090 65/1249/1090
-f 63/1247/1089 62/1246/1089 65/1249/1090
-f 64/1248/1090 68/1250/1091 69/1251/1091
-f 65/1249/1090 64/1248/1090 69/1251/1091
-f 68/1250/1091 72/544/525 73/1252/1092
-f 69/1251/1091 68/1250/1091 73/1252/1092
-f 72/544/525 113/1253/1093 114/1254/1093
-f 73/1252/1092 72/544/525 114/1254/1093
-f 113/1253/1093 273/1241/1085 274/1243/1085
-f 114/1254/1093 113/1253/1093 274/1243/1085
-f 1097/1255/1094 1074/1256/1095 1084/1257/1096
-f 1184/1258/1097 1084/1257/1096 1121/1259/1098
-f 1097/1255/1094 1084/1257/1096 1184/1258/1097
-f 1181/1260/1099 1121/1259/1098 1120/1261/1100
-f 1184/1258/1097 1121/1259/1098 1181/1260/1099
-f 1170/1262/1048 1120/1261/1100 1110/1263/1048
-f 1181/1260/1099 1120/1261/1100 1170/1262/1048
-f 1084/1257/1096 1074/1256/1095 1060/1264/1101
-f 1121/1259/1098 1060/1264/1101 1032/1265/1102
-f 1084/1257/1096 1060/1264/1101 1121/1259/1098
-f 1120/1261/1100 1032/1265/1102 1034/1266/1103
-f 1121/1259/1098 1032/1265/1102 1120/1261/1100
-f 1110/1263/1048 1034/1266/1103 1041/1267/1048
-f 1120/1261/1100 1034/1266/1103 1110/1263/1048
-f 1060/1264/1101 1074/1256/1095 1051/1268/1104
-f 1032/1265/1102 1051/1268/1104 969/1269/1105
-f 1060/1264/1101 1051/1268/1104 1032/1265/1102
-f 1034/1266/1103 969/1269/1105 974/1270/1106
-f 1032/1265/1102 969/1269/1105 1034/1266/1103
-f 1041/1267/1048 974/1270/1106 991/1271/1048
-f 1034/1266/1103 974/1270/1106 1041/1267/1048
-f 1051/1268/1104 1074/1256/1095 1043/1272/1107
-f 969/1269/1105 1043/1272/1107 925/1273/1108
-f 1051/1268/1104 1043/1272/1107 969/1269/1105
-f 974/1270/1106 925/1273/1108 929/1274/1109
-f 969/1269/1105 925/1273/1108 974/1270/1106
-f 991/1271/1048 929/1274/1109 943/1275/1048
-f 974/1270/1106 929/1274/1109 991/1271/1048
-f 1043/1272/1107 1074/1256/1095 1044/1276/1110
-f 925/1273/1108 1044/1276/1110 928/1277/1111
-f 1043/1272/1107 1044/1276/1110 925/1273/1108
-f 929/1274/1109 928/1277/1111 932/1278/1112
-f 925/1273/1108 928/1277/1111 929/1274/1109
-f 943/1275/1048 932/1278/1112 944/1279/983
-f 929/1274/1109 932/1278/1112 943/1275/1048
-f 1044/1276/1110 1074/1256/1095 1052/1280/1113
-f 928/1277/1111 1052/1280/1113 975/1281/1114
-f 1044/1276/1110 1052/1280/1113 928/1277/1111
-f 932/1278/1112 975/1281/1114 976/1282/1115
-f 928/1277/1111 975/1281/1114 932/1278/1112
-f 944/1279/983 976/1282/1115 992/1283/983
-f 932/1278/1112 976/1282/1115 944/1279/983
-f 1052/1280/1113 1074/1256/1095 1061/1284/1116
-f 975/1281/1114 1061/1284/1116 1039/1285/1117
-f 1052/1280/1113 1061/1284/1116 975/1281/1114
-f 976/1282/1115 1039/1285/1117 1040/1286/1118
-f 975/1281/1114 1039/1285/1117 976/1282/1115
-f 992/1283/983 1040/1286/1118 1046/1287/1048
-f 976/1282/1115 1040/1286/1118 992/1283/983
-f 1061/1284/1116 1074/1256/1095 1085/1288/1119
-f 1039/1285/1117 1085/1288/1119 1128/1289/1120
-f 1061/1284/1116 1085/1288/1119 1039/1285/1117
-f 1040/1286/1118 1128/1289/1120 1127/1290/1121
-f 1039/1285/1117 1128/1289/1120 1040/1286/1118
-f 1046/1287/1048 1127/1290/1121 1115/1291/1122
-f 1040/1286/1118 1127/1290/1121 1046/1287/1048
-f 1085/1288/1119 1074/1256/1095 1098/1292/1123
-f 1128/1289/1120 1098/1292/1123 1190/1293/1124
-f 1085/1288/1119 1098/1292/1123 1128/1289/1120
-f 1127/1290/1121 1190/1293/1124 1187/1294/1125
-f 1128/1289/1120 1190/1293/1124 1127/1290/1121
-f 1115/1291/1122 1187/1294/1125 1173/1295/1048
-f 1127/1290/1121 1187/1294/1125 1115/1291/1122
-f 1098/1292/1123 1074/1256/1095 1112/1296/1126
-f 1190/1293/1124 1112/1296/1126 1217/1297/1127
-f 1098/1292/1123 1112/1296/1126 1190/1293/1124
-f 1187/1294/1125 1217/1297/1127 1212/1298/1128
-f 1190/1293/1124 1217/1297/1127 1187/1294/1125
-f 1173/1295/1048 1212/1298/1128 1198/1299/1048
-f 1187/1294/1125 1212/1298/1128 1173/1295/1048
-f 1112/1296/1126 1074/1256/1095 1111/1300/1129
-f 1217/1297/1127 1111/1300/1129 1214/1301/1130
-f 1112/1296/1126 1111/1300/1129 1217/1297/1127
-f 1212/1298/1128 1214/1301/1130 1211/1302/1131
-f 1217/1297/1127 1214/1301/1130 1212/1298/1128
-f 1198/1299/1048 1211/1302/1131 1195/1303/1048
-f 1212/1298/1128 1211/1302/1131 1198/1299/1048
-f 1111/1300/1129 1074/1256/1095 1097/1255/1094
-f 1214/1301/1130 1097/1255/1094 1184/1258/1097
-f 1111/1300/1129 1097/1255/1094 1214/1301/1130
-f 1211/1302/1131 1184/1258/1097 1181/1260/1099
-f 1214/1301/1130 1184/1258/1097 1211/1302/1131
-f 1195/1303/1048 1181/1260/1099 1170/1262/1048
-f 1211/1302/1131 1181/1260/1099 1195/1303/1048
-f 302/1304/1132 279/1305/1095 293/1306/1133
-f 380/1307/1097 293/1306/1133 317/1308/1098
-f 302/1304/1132 293/1306/1133 380/1307/1097
-f 379/1309/1134 317/1308/1098 316/1310/1135
-f 380/1307/1097 317/1308/1098 379/1309/1134
-f 369/1311/1136 316/1310/1135 308/1312/1137
-f 379/1309/1134 316/1310/1135 369/1311/1136
-f 369/1311/1136 308/1312/1137 285/1313/1138
-f 293/1306/1133 279/1305/1095 269/1314/1139
-f 317/1308/1098 269/1314/1139 226/1315/1102
-f 293/1306/1133 269/1314/1139 317/1308/1098
-f 316/1310/1135 226/1315/1102 228/1316/1103
-f 317/1308/1098 226/1315/1102 316/1310/1135
-f 308/1312/1137 228/1316/1103 239/1317/1140
-f 316/1310/1135 228/1316/1103 308/1312/1137
-f 308/1312/1137 239/1317/1140 285/1313/1138
-f 269/1314/1139 279/1305/1095 254/1318/1104
-f 226/1315/1102 254/1318/1104 163/1319/1105
-f 269/1314/1139 254/1318/1104 226/1315/1102
-f 228/1316/1103 163/1319/1105 167/1320/1106
-f 226/1315/1102 163/1319/1105 228/1316/1103
-f 239/1317/1140 167/1320/1106 179/1321/1141
-f 228/1316/1103 167/1320/1106 239/1317/1140
-f 239/1317/1140 179/1321/1141 285/1313/1138
-f 254/1318/1104 279/1305/1095 242/1322/1107
-f 163/1319/1105 242/1322/1107 136/1323/1108
-f 254/1318/1104 242/1322/1107 163/1319/1105
-f 167/1320/1106 136/1323/1108 138/1324/1142
-f 163/1319/1105 136/1323/1108 167/1320/1106
-f 179/1321/1141 138/1324/1142 156/1325/1143
-f 167/1320/1106 138/1324/1142 179/1321/1141
-f 179/1321/1141 156/1325/1143 285/1313/1138
-f 242/1322/1107 279/1305/1095 243/1326/1144
-f 136/1323/1108 243/1326/1144 137/1327/1145
-f 242/1322/1107 243/1326/1144 136/1323/1108
-f 138/1324/1142 137/1327/1145 139/1328/1146
-f 136/1323/1108 137/1327/1145 138/1324/1142
-f 156/1325/1143 139/1328/1146 158/1329/1147
-f 138/1324/1142 139/1328/1146 156/1325/1143
-f 156/1325/1143 158/1329/1147 285/1313/1138
-f 243/1326/1144 279/1305/1095 255/1330/1148
-f 137/1327/1145 255/1330/1148 168/1331/1114
-f 243/1326/1144 255/1330/1148 137/1327/1145
-f 139/1328/1146 168/1331/1114 172/1332/1149
-f 137/1327/1145 168/1331/1114 139/1328/1146
-f 158/1329/1147 172/1332/1149 183/1333/1150
-f 139/1328/1146 172/1332/1149 158/1329/1147
-f 158/1329/1147 183/1333/1150 285/1313/1138
-f 255/1330/1148 279/1305/1095 272/1334/1151
-f 168/1331/1114 272/1334/1151 233/1335/1117
-f 255/1330/1148 272/1334/1151 168/1331/1114
-f 172/1332/1149 233/1335/1117 234/1336/1152
-f 168/1331/1114 233/1335/1117 172/1332/1149
-f 183/1333/1150 234/1336/1152 244/1337/1153
-f 172/1332/1149 234/1336/1152 183/1333/1150
-f 183/1333/1150 244/1337/1153 285/1313/1138
-f 272/1334/1151 279/1305/1095 294/1338/1154
-f 233/1335/1117 294/1338/1154 324/1339/1120
-f 272/1334/1151 294/1338/1154 233/1335/1117
-f 234/1336/1152 324/1339/1120 319/1340/1121
-f 233/1335/1117 324/1339/1120 234/1336/1152
-f 244/1337/1153 319/1340/1121 312/1341/1155
-f 234/1336/1152 319/1340/1121 244/1337/1153
-f 244/1337/1153 312/1341/1155 285/1313/1138
-f 294/1338/1154 279/1305/1095 303/1342/1156
-f 324/1339/1120 303/1342/1156 385/1343/1157
-f 294/1338/1154 303/1342/1156 324/1339/1120
-f 319/1340/1121 385/1343/1157 384/1344/1158
-f 324/1339/1120 385/1343/1157 319/1340/1121
-f 312/1341/1155 384/1344/1158 372/1345/1159
-f 319/1340/1121 384/1344/1158 312/1341/1155
-f 312/1341/1155 372/1345/1159 285/1313/1138
-f 303/1342/1156 279/1305/1095 310/1346/1126
-f 385/1343/1157 310/1346/1126 426/1347/1127
-f 303/1342/1156 310/1346/1126 385/1343/1157
-f 384/1344/1158 426/1347/1127 422/1348/1160
-f 385/1343/1157 426/1347/1127 384/1344/1158
-f 372/1345/1159 422/1348/1160 411/1349/1161
-f 384/1344/1158 422/1348/1160 372/1345/1159
-f 372/1345/1159 411/1349/1161 285/1313/1138
-f 310/1346/1126 279/1305/1095 309/1350/1129
-f 426/1347/1127 309/1350/1129 425/1351/1162
-f 310/1346/1126 309/1350/1129 426/1347/1127
-f 422/1348/1160 425/1351/1162 421/1352/1163
-f 426/1347/1127 425/1351/1162 422/1348/1160
-f 411/1349/1161 421/1352/1163 410/1353/1164
-f 422/1348/1160 421/1352/1163 411/1349/1161
-f 411/1349/1161 410/1353/1164 285/1313/1138
-f 309/1350/1129 279/1305/1095 302/1304/1132
-f 425/1351/1162 302/1304/1132 380/1307/1097
-f 309/1350/1129 302/1304/1132 425/1351/1162
-f 421/1352/1163 380/1307/1097 379/1309/1134
-f 425/1351/1162 380/1307/1097 421/1352/1163
-f 410/1353/1164 379/1309/1134 369/1311/1136
-f 421/1352/1163 379/1309/1134 410/1353/1164
-f 410/1353/1164 369/1311/1136 285/1313/1138
diff --git a/tests/manual/qmlcamera/shuttle.png b/tests/manual/qmlcamera/shuttle.png
deleted file mode 100644
index 52d6244c..00000000
--- a/tests/manual/qmlcamera/shuttle.png
+++ /dev/null
Binary files differ
diff --git a/tests/manual/qmlmultiwindow/main.cpp b/tests/manual/qmlmultiwindow/main.cpp
deleted file mode 100644
index 0f15af4e..00000000
--- a/tests/manual/qmlmultiwindow/main.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include <QtGui/QGuiApplication>
-#include <QtCore/QDir>
-#include <QtQuick/QQuickView>
-#include <QtQml/QQmlEngine>
-
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
-
- QQuickView viewer;
-
- // The following are needed to make examples run without having to install the module
- // in desktop environments.
-#ifdef Q_OS_WIN
- QString extraImportPath(QStringLiteral("%1/../../../%2"));
-#else
- QString extraImportPath(QStringLiteral("%1/../../%2"));
-#endif
- viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
- QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
-
- viewer.setTitle(QStringLiteral("QML multiwindow example"));
- viewer.setSource(QUrl("qrc:/qml/qmlmultiwindow/main.qml"));
- viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.show();
-
- return app.exec();
-}
diff --git a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/Data.qml b/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/Data.qml
deleted file mode 100644
index 3571e7dc..00000000
--- a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/Data.qml
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-
-Item {
- property alias myData: dataModel
-
- ListModel {
- id: dataModel
- ListElement{ row: "0"; col: "0"; longitude: "20.0"; latitude: "10.0"; pop_density: "4.75"; }
- ListElement{ row: "1"; col: "0"; longitude: "21.1"; latitude: "10.3"; pop_density: "3.00"; }
- ListElement{ row: "2"; col: "0"; longitude: "22.5"; latitude: "10.7"; pop_density: "1.24"; }
- ListElement{ row: "3"; col: "0"; longitude: "24.0"; latitude: "10.5"; pop_density: "2.53"; }
- ListElement{ row: "0"; col: "1"; longitude: "20.2"; latitude: "11.2"; pop_density: "3.55"; }
- ListElement{ row: "1"; col: "1"; longitude: "21.3"; latitude: "11.5"; pop_density: "3.03"; }
- ListElement{ row: "2"; col: "1"; longitude: "22.6"; latitude: "11.7"; pop_density: "3.46"; }
- ListElement{ row: "3"; col: "1"; longitude: "23.4"; latitude: "11.5"; pop_density: "4.12"; }
- ListElement{ row: "0"; col: "2"; longitude: "20.2"; latitude: "12.3"; pop_density: "3.37"; }
- ListElement{ row: "1"; col: "2"; longitude: "21.1"; latitude: "12.4"; pop_density: "2.98"; }
- ListElement{ row: "2"; col: "2"; longitude: "22.5"; latitude: "12.1"; pop_density: "3.33"; }
- ListElement{ row: "3"; col: "2"; longitude: "23.3"; latitude: "12.7"; pop_density: "3.23"; }
- ListElement{ row: "0"; col: "3"; longitude: "20.7"; latitude: "13.3"; pop_density: "5.34"; }
- ListElement{ row: "1"; col: "3"; longitude: "21.5"; latitude: "13.2"; pop_density: "4.54"; }
- ListElement{ row: "2"; col: "3"; longitude: "22.4"; latitude: "13.6"; pop_density: "4.65"; }
- ListElement{ row: "3"; col: "3"; longitude: "23.2"; latitude: "13.4"; pop_density: "6.67"; }
- ListElement{ row: "0"; col: "4"; longitude: "20.6"; latitude: "15.0"; pop_density: "6.01"; }
- ListElement{ row: "1"; col: "4"; longitude: "21.3"; latitude: "14.6"; pop_density: "5.83"; }
- ListElement{ row: "2"; col: "4"; longitude: "22.5"; latitude: "14.8"; pop_density: "7.32"; }
- ListElement{ row: "3"; col: "4"; longitude: "23.7"; latitude: "14.3"; pop_density: "6.90"; }
- }
-}
-
diff --git a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml b/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml
deleted file mode 100644
index 0f9a7a5b..00000000
--- a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml
+++ /dev/null
@@ -1,55 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import QtQuick.Controls.Styles 1.0
-
-Item {
- id: newbutton
-
- property alias text: buttonText.text
-
- signal clicked
-
- implicitWidth: buttonText.implicitWidth + 5
- implicitHeight: buttonText.implicitHeight + 10
-
- Button {
- id: buttonText
- width: parent.width
- height: parent.height
-
- style: ButtonStyle {
- label: Component {
- Text {
- text: buttonText.text
- clip: true
- wrapMode: Text.WordWrap
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- anchors.fill: parent
- }
- }
- }
- onClicked: newbutton.clicked()
- }
-}
diff --git a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/main.qml b/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/main.qml
deleted file mode 100644
index 7200ba53..00000000
--- a/tests/manual/qmlmultiwindow/qml/qmlmultiwindow/main.qml
+++ /dev/null
@@ -1,263 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Window 2.1
-import QtQuick.Layouts 1.0
-import QtDataVisualization 1.0
-import "."
-
-Rectangle {
- id: mainView
- width: 800
- height: 600
-
- Data {
- id: data
- }
-
- property QtObject surfaceWindowObject;
- property string surfaceWindowStr:
- "\n
- import QtQuick 2.1\n
- import QtQuick.Window 2.1\n
- import QtQuick.Layouts 1.0\n
- import QtDataVisualization 1.0\n
- import \".\"\n
- Window {\n
- Data {\n
- id: data\n
- }\n
- id: firstWindow\n
- x: 100\n
- y: 100\n
- width: 500\n
- height: 500\n
- visible: true\n
- Rectangle {\n
- id: firstRect\n
- color: \"red\"\n
- anchors.fill: parent\n
- Surface3D {\n
- id: surfaceGraph\n
- anchors.fill: parent\n
- anchors.margins: parent.border.width\n
- theme: Theme3D {\n
- type: Theme3D.ThemePrimaryColors\n
- font.pointSize: 60\n
- }\n
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh\n
- Surface3DSeries {\n
- itemLabelFormat: \"Pop density at (@xLabel N, @zLabel E): @yLabel\"\n
- ItemModelSurfaceDataProxy {\n
- itemModel: data.myData\n
- rowRole: \"row\"\n
- columnRole: \"col\"\n
- xPosRole: \"latitude\"\n
- zPosRole: \"longitude\"\n
- yPosRole: \"pop_density\"\n
- }\n
- }\n
- }\n
- }\n
- }"
-
- Window {
- id: secondWindow
- x: 100
- y: 700
- width: 500
- height: 500
- visible: true
- Rectangle {
- id: secondRect
- color: "blue"
- anchors.fill: parent
- }
- }
-
- function destroyWindow() {
- if (surfaceWindowObject != null)
- surfaceWindowObject.destroy()
- }
-
- Component.onDestruction: destroyWindow()
-
- //! [0]
- GridLayout {
- id: gridLayout
- columns: 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- anchors.top: mainView.top
- anchors.bottom: mainView.bottom
- anchors.left: mainView.left
- anchors.right: mainView.right
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.width: 2
- }
-
- Timer {
- id: windowToggleTimer
- interval: 1000
- running: false
- repeat: false
- onTriggered: {
- destroyWindow()
- surfaceWindowObject = Qt.createQmlObject(surfaceWindowStr, mainView)
- }
- }
-
- // We'll use one grid cell for buttons
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
-
- GridLayout {
- anchors.right: parent.right
- anchors.left: parent.left
- anchors.top: parent.top
- anchors.bottom: parent.bottom
- columns: 2
-
- NewButton {
- Layout.minimumWidth: parent.width / 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "(re)construct surface window in a loop"
- onClicked: {
- windowToggleTimer.running = true
- windowToggleTimer.repeat = true
- }
- }
-
- NewButton {
- Layout.minimumWidth: parent.width / 2
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Quit"
- onClicked: Qt.quit(0);
- }
-
- NewButton {
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Reset Cameras"
- onClicked: resetCameras() // call a helper function to keep button itself simpler
- }
-
- NewButton {
- Layout.fillHeight: true
- Layout.fillWidth: true
- text: "Toggle Mesh Styles"
- onClicked: toggleMeshStyle() // call a helper function to keep button itself simpler
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.color: scatterGraph.theme.gridLineColor
- border.width: 2
-
- Scatter3D {
- id: scatterGraph
- anchors.fill: parent
- anchors.margins: parent.border.width
- theme: Theme3D {
- type: Theme3D.ThemeDigia
- font.pointSize: 60
- }
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
-
- Scatter3DSeries {
- itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
- ItemModelScatterDataProxy {
- itemModel: data.myData
- // Mapping model roles to scatter series item coordinates.
- xPosRole: "latitude"
- zPosRole: "longitude"
- yPosRole: "pop_density"
- }
- }
- }
- }
-
- Rectangle {
- Layout.fillHeight: true
- Layout.fillWidth: true
- border.color: barGraph.theme.gridLineColor
- border.width: 2
-
- Bars3D {
- id: barGraph
- anchors.fill: parent
- anchors.margins: parent.border.width
- theme: Theme3D {
- type: Theme3D.ThemeQt
- font.pointSize: 60
- }
- selectionMode: AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
- scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
-
- Bar3DSeries {
- itemLabelFormat: "@seriesName: @valueLabel"
- name: "Population density"
-
- ItemModelBarDataProxy {
- itemModel: data.myData
- // Mapping model roles to bar series rows, columns, and values.
- rowRole: "row"
- columnRole: "col"
- valueRole: "pop_density"
- }
- }
- }
- }
- }
- //! [0]
-
- function clearSelections() {
- barGraph.clearSelection()
- scatterGraph.clearSelection()
- }
-
- function resetCameras() {
- scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
- barGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
- scatterGraph.scene.activeCamera.zoomLevel = 100.0
- barGraph.scene.activeCamera.zoomLevel = 100.0
- }
-
- function toggleMeshStyle() {
- if (barGraph.seriesList[0].meshSmooth === true) {
- barGraph.seriesList[0].meshSmooth = false
- scatterGraph.seriesList[0].meshSmooth = false
- } else {
- barGraph.seriesList[0].meshSmooth = true
- scatterGraph.seriesList[0].meshSmooth = true
- }
- }
-}
diff --git a/tests/manual/qmlmultiwindow/qmlmultiwindow.pro b/tests/manual/qmlmultiwindow/qmlmultiwindow.pro
deleted file mode 100644
index c3e7d1bd..00000000
--- a/tests/manual/qmlmultiwindow/qmlmultiwindow.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-!include( ../tests.pri ) {
- error( "Couldn't find the tests.pri file!" )
-}
-
-# The .cpp file which was generated for your project. Feel free to hack it.
-SOURCES += main.cpp
-
-RESOURCES += qmlmultiwindow.qrc
-
-OTHER_FILES += doc/src/* \
- doc/images/* \
- qml/qmlmultiwindow/*
diff --git a/tests/manual/qmlmultiwindow/qmlmultiwindow.qrc b/tests/manual/qmlmultiwindow/qmlmultiwindow.qrc
deleted file mode 100644
index 31a92b25..00000000
--- a/tests/manual/qmlmultiwindow/qmlmultiwindow.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>qml/qmlmultiwindow/Data.qml</file>
- <file>qml/qmlmultiwindow/main.qml</file>
- <file>qml/qmlmultiwindow/NewButton.qml</file>
- </qresource>
-</RCC>
diff --git a/tests/manual/spectrum/3rdparty/fftreal/Array.h b/tests/manual/spectrum/3rdparty/fftreal/Array.h
deleted file mode 100644
index a08e3cf2..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/Array.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************************
-
- Array.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (Array_HEADER_INCLUDED)
-#define Array_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T, long LEN>
-class Array
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- Array ();
-
- inline const DataType &
- operator [] (long pos) const;
- inline DataType &
- operator [] (long pos);
-
- static inline long
- size ();
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType _data_arr [LEN];
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- Array (const Array &other);
- Array & operator = (const Array &other);
- bool operator == (const Array &other);
- bool operator != (const Array &other);
-
-}; // class Array
-
-
-
-#include "Array.hpp"
-
-
-
-#endif // Array_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/Array.hpp b/tests/manual/spectrum/3rdparty/fftreal/Array.hpp
deleted file mode 100644
index 8300077e..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/Array.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************************
-
- Array.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (Array_CURRENT_CODEHEADER)
- #error Recursive inclusion of Array code header.
-#endif
-#define Array_CURRENT_CODEHEADER
-
-#if ! defined (Array_CODEHEADER_INCLUDED)
-#define Array_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T, long LEN>
-Array <T, LEN>::Array ()
-{
- // Nothing
-}
-
-
-
-template <class T, long LEN>
-const typename Array <T, LEN>::DataType & Array <T, LEN>::operator [] (long pos) const
-{
- assert (pos >= 0);
- assert (pos < LEN);
-
- return (_data_arr [pos]);
-}
-
-
-
-template <class T, long LEN>
-typename Array <T, LEN>::DataType & Array <T, LEN>::operator [] (long pos)
-{
- assert (pos >= 0);
- assert (pos < LEN);
-
- return (_data_arr [pos]);
-}
-
-
-
-template <class T, long LEN>
-long Array <T, LEN>::size ()
-{
- return (LEN);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // Array_CODEHEADER_INCLUDED
-
-#undef Array_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/DynArray.h b/tests/manual/spectrum/3rdparty/fftreal/DynArray.h
deleted file mode 100644
index 8041a0c1..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/DynArray.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*****************************************************************************
-
- DynArray.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (DynArray_HEADER_INCLUDED)
-#define DynArray_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-class DynArray
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- DynArray ();
- explicit DynArray (long size);
- ~DynArray ();
-
- inline long size () const;
- inline void resize (long size);
-
- inline const DataType &
- operator [] (long pos) const;
- inline DataType &
- operator [] (long pos);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType * _data_ptr;
- long _len;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DynArray (const DynArray &other);
- DynArray & operator = (const DynArray &other);
- bool operator == (const DynArray &other);
- bool operator != (const DynArray &other);
-
-}; // class DynArray
-
-
-
-#include "DynArray.hpp"
-
-
-
-#endif // DynArray_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/DynArray.hpp b/tests/manual/spectrum/3rdparty/fftreal/DynArray.hpp
deleted file mode 100644
index e62b10f8..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/DynArray.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*****************************************************************************
-
- DynArray.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (DynArray_CURRENT_CODEHEADER)
- #error Recursive inclusion of DynArray code header.
-#endif
-#define DynArray_CURRENT_CODEHEADER
-
-#if ! defined (DynArray_CODEHEADER_INCLUDED)
-#define DynArray_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-DynArray <T>::DynArray ()
-: _data_ptr (0)
-, _len (0)
-{
- // Nothing
-}
-
-
-
-template <class T>
-DynArray <T>::DynArray (long size)
-: _data_ptr (0)
-, _len (0)
-{
- assert (size >= 0);
- if (size > 0)
- {
- _data_ptr = new DataType [size];
- _len = size;
- }
-}
-
-
-
-template <class T>
-DynArray <T>::~DynArray ()
-{
- delete [] _data_ptr;
- _data_ptr = 0;
- _len = 0;
-}
-
-
-
-template <class T>
-long DynArray <T>::size () const
-{
- return (_len);
-}
-
-
-
-template <class T>
-void DynArray <T>::resize (long size)
-{
- assert (size >= 0);
- if (size > 0)
- {
- DataType * old_data_ptr = _data_ptr;
- DataType * tmp_data_ptr = new DataType [size];
-
- _data_ptr = tmp_data_ptr;
- _len = size;
-
- delete [] old_data_ptr;
- }
-}
-
-
-
-template <class T>
-const typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos) const
-{
- assert (pos >= 0);
- assert (pos < _len);
-
- return (_data_ptr [pos]);
-}
-
-
-
-template <class T>
-typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos)
-{
- assert (pos >= 0);
- assert (pos < _len);
-
- return (_data_ptr [pos]);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // DynArray_CODEHEADER_INCLUDED
-
-#undef DynArray_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsp b/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsp
deleted file mode 100644
index fe970db0..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsp
+++ /dev/null
@@ -1,273 +0,0 @@
-# Microsoft Developer Studio Project File - Name="FFTReal" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=FFTReal - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "FFTReal.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "FFTReal.mak" CFG="FFTReal - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "FFTReal - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "FFTReal - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "FFTReal - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GR /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x40c /d "NDEBUG"
-# ADD RSC /l 0x40c /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "FFTReal - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /G6 /MTd /W3 /Gm /GR /GX /Zi /Od /Gf /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE RSC /l 0x40c /d "_DEBUG"
-# ADD RSC /l 0x40c /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "FFTReal - Win32 Release"
-# Name "FFTReal - Win32 Debug"
-# Begin Group "Library"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\Array.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Array.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\def.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\DynArray.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\DynArray.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTReal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTReal.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLen.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLenParam.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassDirect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassDirect.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassInverse.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassInverse.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealSelect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealSelect.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealUseTrigo.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealUseTrigo.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\OscSinCos.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\OscSinCos.hpp
-# End Source File
-# End Group
-# Begin Group "Test"
-
-# PROP Default_Filter ""
-# Begin Group "stopwatch"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\def.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\fnc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\fnc.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\Int64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.hpp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\test.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_fnc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_fnc.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_settings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestAccuracy.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestAccuracy.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperFixLen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperFixLen.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperNormal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperNormal.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestSpeed.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestSpeed.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestWhiteNoiseGen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestWhiteNoiseGen.hpp
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsw b/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsw
deleted file mode 100644
index 076b0aeb..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "FFTReal"=.\FFTReal.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.h b/tests/manual/spectrum/3rdparty/fftreal/FFTReal.h
deleted file mode 100644
index 9fb27250..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*****************************************************************************
-
- FFTReal.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTReal_HEADER_INCLUDED)
-#define FFTReal_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "DynArray.h"
-#include "OscSinCos.h"
-
-
-
-template <class DT>
-class FFTReal
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- enum { MAX_BIT_DEPTH = 30 }; // So length can be represented as long int
-
- typedef DT DataType;
-
- explicit FFTReal (long length);
- virtual ~FFTReal () {}
-
- long get_length () const;
- void do_fft (DataType f [], const DataType x []) const;
- void do_ifft (const DataType f [], DataType x []) const;
- void rescale (DataType x []) const;
- DataType * use_buffer () const;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- // Over this bit depth, we use direct calculation for sin/cos
- enum { TRIGO_BD_LIMIT = 12 };
-
- typedef OscSinCos <DataType> OscType;
-
- void init_br_lut ();
- void init_trigo_lut ();
- void init_trigo_osc ();
-
- FORCEINLINE const long *
- get_br_ptr () const;
- FORCEINLINE const DataType *
- get_trigo_ptr (int level) const;
- FORCEINLINE long
- get_trigo_level_index (int level) const;
-
- inline void compute_fft_general (DataType f [], const DataType x []) const;
- inline void compute_direct_pass_1_2 (DataType df [], const DataType x []) const;
- inline void compute_direct_pass_3 (DataType df [], const DataType sf []) const;
- inline void compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const;
- inline void compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
- inline void compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
-
- inline void compute_ifft_general (const DataType f [], DataType x []) const;
- inline void compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_3 (DataType df [], const DataType sf []) const;
- inline void compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const;
-
- const long _length;
- const int _nbr_bits;
- DynArray <long>
- _br_lut;
- DynArray <DataType>
- _trigo_lut;
- mutable DynArray <DataType>
- _buffer;
- mutable DynArray <OscType>
- _trigo_osc;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTReal ();
- FFTReal (const FFTReal &other);
- FFTReal & operator = (const FFTReal &other);
- bool operator == (const FFTReal &other);
- bool operator != (const FFTReal &other);
-
-}; // class FFTReal
-
-
-
-#include "FFTReal.hpp"
-
-
-
-#endif // FFTReal_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTReal.hpp
deleted file mode 100644
index 335d771d..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTReal.hpp
+++ /dev/null
@@ -1,916 +0,0 @@
-/*****************************************************************************
-
- FFTReal.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTReal_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTReal code header.
-#endif
-#define FFTReal_CURRENT_CODEHEADER
-
-#if ! defined (FFTReal_CODEHEADER_INCLUDED)
-#define FFTReal_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-#include <cmath>
-
-
-
-static inline bool FFTReal_is_pow2 (long x)
-{
- assert (x > 0);
-
- return ((x & -x) == x);
-}
-
-
-
-static inline int FFTReal_get_next_pow2 (long x)
-{
- --x;
-
- int p = 0;
- while ((x & ~0xFFFFL) != 0)
- {
- p += 16;
- x >>= 16;
- }
- while ((x & ~0xFL) != 0)
- {
- p += 4;
- x >>= 4;
- }
- while (x > 0)
- {
- ++p;
- x >>= 1;
- }
-
- return (p);
-}
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*
-==============================================================================
-Name: ctor
-Input parameters:
- - length: length of the array on which we want to do a FFT. Range: power of
- 2 only, > 0.
-Throws: std::bad_alloc
-==============================================================================
-*/
-
-template <class DT>
-FFTReal <DT>::FFTReal (long length)
-: _length (length)
-, _nbr_bits (FFTReal_get_next_pow2 (length))
-, _br_lut ()
-, _trigo_lut ()
-, _buffer (length)
-, _trigo_osc ()
-{
- assert (FFTReal_is_pow2 (length));
- assert (_nbr_bits <= MAX_BIT_DEPTH);
-
- init_br_lut ();
- init_trigo_lut ();
- init_trigo_osc ();
-}
-
-
-
-/*
-==============================================================================
-Name: get_length
-Description:
- Returns the number of points processed by this FFT object.
-Returns: The number of points, power of 2, > 0.
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-long FFTReal <DT>::get_length () const
-{
- return (_length);
-}
-
-
-
-/*
-==============================================================================
-Name: do_fft
-Description:
- Compute the FFT of the array.
-Input parameters:
- - x: pointer on the source array (time).
-Output parameters:
- - f: pointer on the destination array (frequencies).
- f [0...length(x)/2] = real values,
- f [length(x)/2+1...length(x)-1] = negative imaginary values of
- coefficents 1...length(x)/2-1.
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::do_fft (DataType f [], const DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- // General case
- if (_nbr_bits > 2)
- {
- compute_fft_general (f, x);
- }
-
- // 4-point FFT
- else if (_nbr_bits == 2)
- {
- f [1] = x [0] - x [2];
- f [3] = x [1] - x [3];
-
- const DataType b_0 = x [0] + x [2];
- const DataType b_2 = x [1] + x [3];
-
- f [0] = b_0 + b_2;
- f [2] = b_0 - b_2;
- }
-
- // 2-point FFT
- else if (_nbr_bits == 1)
- {
- f [0] = x [0] + x [1];
- f [1] = x [0] - x [1];
- }
-
- // 1-point FFT
- else
- {
- f [0] = x [0];
- }
-}
-
-
-
-/*
-==============================================================================
-Name: do_ifft
-Description:
- Compute the inverse FFT of the array. Note that data must be post-scaled:
- IFFT (FFT (x)) = x * length (x).
-Input parameters:
- - f: pointer on the source array (frequencies).
- f [0...length(x)/2] = real values
- f [length(x)/2+1...length(x)-1] = negative imaginary values of
- coefficents 1...length(x)/2-1.
-Output parameters:
- - x: pointer on the destination array (time).
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::do_ifft (const DataType f [], DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- // General case
- if (_nbr_bits > 2)
- {
- compute_ifft_general (f, x);
- }
-
- // 4-point IFFT
- else if (_nbr_bits == 2)
- {
- const DataType b_0 = f [0] + f [2];
- const DataType b_2 = f [0] - f [2];
-
- x [0] = b_0 + f [1] * 2;
- x [2] = b_0 - f [1] * 2;
- x [1] = b_2 + f [3] * 2;
- x [3] = b_2 - f [3] * 2;
- }
-
- // 2-point IFFT
- else if (_nbr_bits == 1)
- {
- x [0] = f [0] + f [1];
- x [1] = f [0] - f [1];
- }
-
- // 1-point IFFT
- else
- {
- x [0] = f [0];
- }
-}
-
-
-
-/*
-==============================================================================
-Name: rescale
-Description:
- Scale an array by divide each element by its length. This function should
- be called after FFT + IFFT.
-Input parameters:
- - x: pointer on array to rescale (time or frequency).
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::rescale (DataType x []) const
-{
- const DataType mul = DataType (1.0 / _length);
-
- if (_length < 4)
- {
- long i = _length - 1;
- do
- {
- x [i] *= mul;
- --i;
- }
- while (i >= 0);
- }
-
- else
- {
- assert ((_length & 3) == 0);
-
- // Could be optimized with SIMD instruction sets (needs alignment check)
- long i = _length - 4;
- do
- {
- x [i + 0] *= mul;
- x [i + 1] *= mul;
- x [i + 2] *= mul;
- x [i + 3] *= mul;
- i -= 4;
- }
- while (i >= 0);
- }
-}
-
-
-
-/*
-==============================================================================
-Name: use_buffer
-Description:
- Access the internal buffer, whose length is the FFT one.
- Buffer content will be erased at each do_fft() / do_ifft() call!
- This buffer cannot be used as:
- - source for FFT or IFFT done with this object
- - destination for FFT or IFFT done with this object
-Returns:
- Buffer start address
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-typename FFTReal <DT>::DataType * FFTReal <DT>::use_buffer () const
-{
- return (&_buffer [0]);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-void FFTReal <DT>::init_br_lut ()
-{
- const long length = 1L << _nbr_bits;
- _br_lut.resize (length);
-
- _br_lut [0] = 0;
- long br_index = 0;
- for (long cnt = 1; cnt < length; ++cnt)
- {
- // ++br_index (bit reversed)
- long bit = length >> 1;
- while (((br_index ^= bit) & bit) == 0)
- {
- bit >>= 1;
- }
-
- _br_lut [cnt] = br_index;
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::init_trigo_lut ()
-{
- using namespace std;
-
- if (_nbr_bits > 3)
- {
- const long total_len = (1L << (_nbr_bits - 1)) - 4;
- _trigo_lut.resize (total_len);
-
- for (int level = 3; level < _nbr_bits; ++level)
- {
- const long level_len = 1L << (level - 1);
- DataType * const level_ptr =
- &_trigo_lut [get_trigo_level_index (level)];
- const double mul = PI / (level_len << 1);
-
- for (long i = 0; i < level_len; ++ i)
- {
- level_ptr [i] = static_cast <DataType> (cos (i * mul));
- }
- }
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::init_trigo_osc ()
-{
- const int nbr_osc = _nbr_bits - TRIGO_BD_LIMIT;
- if (nbr_osc > 0)
- {
- _trigo_osc.resize (nbr_osc);
-
- for (int osc_cnt = 0; osc_cnt < nbr_osc; ++osc_cnt)
- {
- OscType & osc = _trigo_osc [osc_cnt];
-
- const long len = 1L << (TRIGO_BD_LIMIT + osc_cnt);
- const double mul = (0.5 * PI) / len;
- osc.set_step (mul);
- }
- }
-}
-
-
-
-template <class DT>
-const long * FFTReal <DT>::get_br_ptr () const
-{
- return (&_br_lut [0]);
-}
-
-
-
-template <class DT>
-const typename FFTReal <DT>::DataType * FFTReal <DT>::get_trigo_ptr (int level) const
-{
- assert (level >= 3);
-
- return (&_trigo_lut [get_trigo_level_index (level)]);
-}
-
-
-
-template <class DT>
-long FFTReal <DT>::get_trigo_level_index (int level) const
-{
- assert (level >= 3);
-
- return ((1L << (level - 1)) - 4);
-}
-
-
-
-// Transform in several passes
-template <class DT>
-void FFTReal <DT>::compute_fft_general (DataType f [], const DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- DataType * sf;
- DataType * df;
-
- if ((_nbr_bits & 1) != 0)
- {
- df = use_buffer ();
- sf = f;
- }
- else
- {
- df = f;
- sf = use_buffer ();
- }
-
- compute_direct_pass_1_2 (df, x);
- compute_direct_pass_3 (sf, df);
-
- for (int pass = 3; pass < _nbr_bits; ++ pass)
- {
- compute_direct_pass_n (df, sf, pass);
-
- DataType * const temp_ptr = df;
- df = sf;
- sf = temp_ptr;
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_1_2 (DataType df [], const DataType x []) const
-{
- assert (df != 0);
- assert (x != 0);
- assert (df != x);
-
- const long * const bit_rev_lut_ptr = get_br_ptr ();
- long coef_index = 0;
- do
- {
- const long rev_index_0 = bit_rev_lut_ptr [coef_index];
- const long rev_index_1 = bit_rev_lut_ptr [coef_index + 1];
- const long rev_index_2 = bit_rev_lut_ptr [coef_index + 2];
- const long rev_index_3 = bit_rev_lut_ptr [coef_index + 3];
-
- DataType * const df2 = df + coef_index;
- df2 [1] = x [rev_index_0] - x [rev_index_1];
- df2 [3] = x [rev_index_2] - x [rev_index_3];
-
- const DataType sf_0 = x [rev_index_0] + x [rev_index_1];
- const DataType sf_2 = x [rev_index_2] + x [rev_index_3];
-
- df2 [0] = sf_0 + sf_2;
- df2 [2] = sf_0 - sf_2;
-
- coef_index += 4;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_3 (DataType df [], const DataType sf []) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
-
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
- long coef_index = 0;
- do
- {
- DataType v;
-
- df [coef_index] = sf [coef_index] + sf [coef_index + 4];
- df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
- df [coef_index + 2] = sf [coef_index + 2];
- df [coef_index + 6] = sf [coef_index + 6];
-
- v = (sf [coef_index + 5] - sf [coef_index + 7]) * sqrt2_2;
- df [coef_index + 1] = sf [coef_index + 1] + v;
- df [coef_index + 3] = sf [coef_index + 1] - v;
-
- v = (sf [coef_index + 5] + sf [coef_index + 7]) * sqrt2_2;
- df [coef_index + 5] = v + sf [coef_index + 3];
- df [coef_index + 7] = v - sf [coef_index + 3];
-
- coef_index += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- if (pass <= TRIGO_BD_LIMIT)
- {
- compute_direct_pass_n_lut (df, sf, pass);
- }
- else
- {
- compute_direct_pass_n_osc (df, sf, pass);
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- const DataType * const cos_ptr = get_trigo_ptr (pass);
- do
- {
- const DataType * const sf1r = sf + coef_index;
- const DataType * const sf2r = sf1r + nbr_coef;
- DataType * const dfr = df + coef_index;
- DataType * const dfi = dfr + nbr_coef;
-
- // Extreme coefficients are always real
- dfr [0] = sf1r [0] + sf2r [0];
- dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] =
- dfr [h_nbr_coef] = sf1r [h_nbr_coef];
- dfi [h_nbr_coef] = sf2r [h_nbr_coef];
-
- // Others are conjugate complex numbers
- const DataType * const sf1i = sf1r + h_nbr_coef;
- const DataType * const sf2i = sf1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef);
- const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- DataType v;
-
- v = sf2r [i] * c - sf2i [i] * s;
- dfr [i] = sf1r [i] + v;
- dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] =
-
- v = sf2r [i] * s + sf2i [i] * c;
- dfi [i] = v + sf1i [i];
- dfi [nbr_coef - i] = v - sf1i [i];
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass > TRIGO_BD_LIMIT);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
- do
- {
- const DataType * const sf1r = sf + coef_index;
- const DataType * const sf2r = sf1r + nbr_coef;
- DataType * const dfr = df + coef_index;
- DataType * const dfi = dfr + nbr_coef;
-
- osc.clear_buffers ();
-
- // Extreme coefficients are always real
- dfr [0] = sf1r [0] + sf2r [0];
- dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] =
- dfr [h_nbr_coef] = sf1r [h_nbr_coef];
- dfi [h_nbr_coef] = sf2r [h_nbr_coef];
-
- // Others are conjugate complex numbers
- const DataType * const sf1i = sf1r + h_nbr_coef;
- const DataType * const sf2i = sf1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- osc.step ();
- const DataType c = osc.get_cos ();
- const DataType s = osc.get_sin ();
- DataType v;
-
- v = sf2r [i] * c - sf2i [i] * s;
- dfr [i] = sf1r [i] + v;
- dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] =
-
- v = sf2r [i] * s + sf2i [i] * c;
- dfi [i] = v + sf1i [i];
- dfi [nbr_coef - i] = v - sf1i [i];
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-// Transform in several pass
-template <class DT>
-void FFTReal <DT>::compute_ifft_general (const DataType f [], DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- DataType * sf = const_cast <DataType *> (f);
- DataType * df;
- DataType * df_temp;
-
- if (_nbr_bits & 1)
- {
- df = use_buffer ();
- df_temp = x;
- }
- else
- {
- df = x;
- df_temp = use_buffer ();
- }
-
- for (int pass = _nbr_bits - 1; pass >= 3; -- pass)
- {
- compute_inverse_pass_n (df, sf, pass);
-
- if (pass < _nbr_bits - 1)
- {
- DataType * const temp_ptr = df;
- df = sf;
- sf = temp_ptr;
- }
- else
- {
- sf = df;
- df = df_temp;
- }
- }
-
- compute_inverse_pass_3 (df, sf);
- compute_inverse_pass_1_2 (x, df);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- if (pass <= TRIGO_BD_LIMIT)
- {
- compute_inverse_pass_n_lut (df, sf, pass);
- }
- else
- {
- compute_inverse_pass_n_osc (df, sf, pass);
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- const DataType * const cos_ptr = get_trigo_ptr (pass);
- do
- {
- const DataType * const sfr = sf + coef_index;
- const DataType * const sfi = sfr + nbr_coef;
- DataType * const df1r = df + coef_index;
- DataType * const df2r = df1r + nbr_coef;
-
- // Extreme coefficients are always real
- df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef]
- df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef]
- df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
- df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- DataType * const df1i = df1r + h_nbr_coef;
- DataType * const df2i = df1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i]
- df1i [i] = sfi [i] - sfi [nbr_coef - i];
-
- const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef);
- const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i]
- const DataType vi = sfi [i] + sfi [nbr_coef - i];
-
- df2r [i] = vr * c + vi * s;
- df2i [i] = vi * c - vr * s;
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass > TRIGO_BD_LIMIT);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
- do
- {
- const DataType * const sfr = sf + coef_index;
- const DataType * const sfi = sfr + nbr_coef;
- DataType * const df1r = df + coef_index;
- DataType * const df2r = df1r + nbr_coef;
-
- osc.clear_buffers ();
-
- // Extreme coefficients are always real
- df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef]
- df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef]
- df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
- df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- DataType * const df1i = df1r + h_nbr_coef;
- DataType * const df2i = df1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i]
- df1i [i] = sfi [i] - sfi [nbr_coef - i];
-
- osc.step ();
- const DataType c = osc.get_cos ();
- const DataType s = osc.get_sin ();
- const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i]
- const DataType vi = sfi [i] + sfi [nbr_coef - i];
-
- df2r [i] = vr * c + vi * s;
- df2i [i] = vi * c - vr * s;
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_3 (DataType df [], const DataType sf []) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
-
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
- long coef_index = 0;
- do
- {
- df [coef_index] = sf [coef_index] + sf [coef_index + 4];
- df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
- df [coef_index + 2] = sf [coef_index + 2] * 2;
- df [coef_index + 6] = sf [coef_index + 6] * 2;
-
- df [coef_index + 1] = sf [coef_index + 1] + sf [coef_index + 3];
- df [coef_index + 3] = sf [coef_index + 5] - sf [coef_index + 7];
-
- const DataType vr = sf [coef_index + 1] - sf [coef_index + 3];
- const DataType vi = sf [coef_index + 5] + sf [coef_index + 7];
-
- df [coef_index + 5] = (vr + vi) * sqrt2_2;
- df [coef_index + 7] = (vi - vr) * sqrt2_2;
-
- coef_index += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const
-{
- assert (x != 0);
- assert (sf != 0);
- assert (x != sf);
-
- const long * bit_rev_lut_ptr = get_br_ptr ();
- const DataType * sf2 = sf;
- long coef_index = 0;
- do
- {
- {
- const DataType b_0 = sf2 [0] + sf2 [2];
- const DataType b_2 = sf2 [0] - sf2 [2];
- const DataType b_1 = sf2 [1] * 2;
- const DataType b_3 = sf2 [3] * 2;
-
- x [bit_rev_lut_ptr [0]] = b_0 + b_1;
- x [bit_rev_lut_ptr [1]] = b_0 - b_1;
- x [bit_rev_lut_ptr [2]] = b_2 + b_3;
- x [bit_rev_lut_ptr [3]] = b_2 - b_3;
- }
- {
- const DataType b_0 = sf2 [4] + sf2 [6];
- const DataType b_2 = sf2 [4] - sf2 [6];
- const DataType b_1 = sf2 [5] * 2;
- const DataType b_3 = sf2 [7] * 2;
-
- x [bit_rev_lut_ptr [4]] = b_0 + b_1;
- x [bit_rev_lut_ptr [5]] = b_0 - b_1;
- x [bit_rev_lut_ptr [6]] = b_2 + b_3;
- x [bit_rev_lut_ptr [7]] = b_2 - b_3;
- }
-
- sf2 += 8;
- coef_index += 8;
- bit_rev_lut_ptr += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-#endif // FFTReal_CODEHEADER_INCLUDED
-
-#undef FFTReal_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.h
deleted file mode 100644
index 0b802668..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealFixLen_HEADER_INCLUDED)
-#define FFTRealFixLen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "Array.h"
-#include "DynArray.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int LL2>
-class FFTRealFixLen
-{
- typedef int CompileTimeCheck1 [(LL2 >= 0) ? 1 : -1];
- typedef int CompileTimeCheck2 [(LL2 <= 30) ? 1 : -1];
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- enum { FFT_LEN_L2 = LL2 };
- enum { FFT_LEN = 1 << FFT_LEN_L2 };
-
- FFTRealFixLen ();
-
- inline long get_length () const;
- void do_fft (DataType f [], const DataType x []);
- void do_ifft (const DataType f [], DataType x []);
- void rescale (DataType x []) const;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { TRIGO_BD_LIMIT = FFTRealFixLenParam::TRIGO_BD_LIMIT };
-
- enum { BR_ARR_SIZE_L2 = ((FFT_LEN_L2 - 3) < 0) ? 0 : (FFT_LEN_L2 - 2) };
- enum { BR_ARR_SIZE = 1 << BR_ARR_SIZE_L2 };
-
- enum { TRIGO_BD = ((FFT_LEN_L2 - TRIGO_BD_LIMIT) < 0)
- ? (int)FFT_LEN_L2
- : (int)TRIGO_BD_LIMIT };
- enum { TRIGO_TABLE_ARR_SIZE_L2 = (LL2 < 4) ? 0 : (TRIGO_BD - 2) };
- enum { TRIGO_TABLE_ARR_SIZE = 1 << TRIGO_TABLE_ARR_SIZE_L2 };
-
- enum { NBR_TRIGO_OSC = FFT_LEN_L2 - TRIGO_BD };
- enum { TRIGO_OSC_ARR_SIZE = (NBR_TRIGO_OSC > 0) ? NBR_TRIGO_OSC : 1 };
-
- void build_br_lut ();
- void build_trigo_lut ();
- void build_trigo_osc ();
-
- DynArray <DataType>
- _buffer;
- DynArray <long>
- _br_data;
- DynArray <DataType>
- _trigo_data;
- Array <OscType, TRIGO_OSC_ARR_SIZE>
- _trigo_osc;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealFixLen (const FFTRealFixLen &other);
- FFTRealFixLen& operator = (const FFTRealFixLen &other);
- bool operator == (const FFTRealFixLen &other);
- bool operator != (const FFTRealFixLen &other);
-
-}; // class FFTRealFixLen
-
-
-
-#include "FFTRealFixLen.hpp"
-
-
-
-#endif // FFTRealFixLen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp
deleted file mode 100644
index 6defb009..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp
+++ /dev/null
@@ -1,322 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealFixLen_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealFixLen code header.
-#endif
-#define FFTRealFixLen_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealFixLen_CODEHEADER_INCLUDED)
-#define FFTRealFixLen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealPassDirect.h"
-#include "FFTRealPassInverse.h"
-#include "FFTRealSelect.h"
-
-#include <cassert>
-#include <cmath>
-
-namespace std { }
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int LL2>
-FFTRealFixLen <LL2>::FFTRealFixLen ()
-: _buffer (FFT_LEN)
-, _br_data (BR_ARR_SIZE)
-, _trigo_data (TRIGO_TABLE_ARR_SIZE)
-, _trigo_osc ()
-{
- build_br_lut ();
- build_trigo_lut ();
- build_trigo_osc ();
-}
-
-
-
-template <int LL2>
-long FFTRealFixLen <LL2>::get_length () const
-{
- return (FFT_LEN);
-}
-
-
-
-// General case
-template <int LL2>
-void FFTRealFixLen <LL2>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
- assert (FFT_LEN_L2 >= 3);
-
- // Do the transform in several passes
- const DataType * cos_ptr = &_trigo_data [0];
- const long * br_ptr = &_br_data [0];
-
- FFTRealPassDirect <FFT_LEN_L2 - 1>::process (
- FFT_LEN,
- f,
- &_buffer [0],
- x,
- cos_ptr,
- TRIGO_TABLE_ARR_SIZE,
- br_ptr,
- &_trigo_osc [0]
- );
-}
-
-// 4-point FFT
-template <>
-void FFTRealFixLen <2>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- f [1] = x [0] - x [2];
- f [3] = x [1] - x [3];
-
- const DataType b_0 = x [0] + x [2];
- const DataType b_2 = x [1] + x [3];
-
- f [0] = b_0 + b_2;
- f [2] = b_0 - b_2;
-}
-
-// 2-point FFT
-template <>
-void FFTRealFixLen <1>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- f [0] = x [0] + x [1];
- f [1] = x [0] - x [1];
-}
-
-// 1-point FFT
-template <>
-void FFTRealFixLen <0>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
-
- f [0] = x [0];
-}
-
-
-
-// General case
-template <int LL2>
-void FFTRealFixLen <LL2>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
- assert (FFT_LEN_L2 >= 3);
-
- // Do the transform in several passes
- DataType * s_ptr =
- FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (&_buffer [0], x);
- DataType * d_ptr =
- FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (x, &_buffer [0]);
- const DataType * cos_ptr = &_trigo_data [0];
- const long * br_ptr = &_br_data [0];
-
- FFTRealPassInverse <FFT_LEN_L2 - 1>::process (
- FFT_LEN,
- d_ptr,
- s_ptr,
- f,
- cos_ptr,
- TRIGO_TABLE_ARR_SIZE,
- br_ptr,
- &_trigo_osc [0]
- );
-}
-
-// 4-point IFFT
-template <>
-void FFTRealFixLen <2>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- const DataType b_0 = f [0] + f [2];
- const DataType b_2 = f [0] - f [2];
-
- x [0] = b_0 + f [1] * 2;
- x [2] = b_0 - f [1] * 2;
- x [1] = b_2 + f [3] * 2;
- x [3] = b_2 - f [3] * 2;
-}
-
-// 2-point IFFT
-template <>
-void FFTRealFixLen <1>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- x [0] = f [0] + f [1];
- x [1] = f [0] - f [1];
-}
-
-// 1-point IFFT
-template <>
-void FFTRealFixLen <0>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- x [0] = f [0];
-}
-
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::rescale (DataType x []) const
-{
- assert (x != 0);
-
- const DataType mul = DataType (1.0 / FFT_LEN);
-
- if (FFT_LEN < 4)
- {
- long i = FFT_LEN - 1;
- do
- {
- x [i] *= mul;
- --i;
- }
- while (i >= 0);
- }
-
- else
- {
- assert ((FFT_LEN & 3) == 0);
-
- // Could be optimized with SIMD instruction sets (needs alignment check)
- long i = FFT_LEN - 4;
- do
- {
- x [i + 0] *= mul;
- x [i + 1] *= mul;
- x [i + 2] *= mul;
- x [i + 3] *= mul;
- i -= 4;
- }
- while (i >= 0);
- }
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_br_lut ()
-{
- _br_data [0] = 0;
- for (long cnt = 1; cnt < BR_ARR_SIZE; ++cnt)
- {
- long index = cnt << 2;
- long br_index = 0;
-
- int bit_cnt = FFT_LEN_L2;
- do
- {
- br_index <<= 1;
- br_index += (index & 1);
- index >>= 1;
-
- -- bit_cnt;
- }
- while (bit_cnt > 0);
-
- _br_data [cnt] = br_index;
- }
-}
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_trigo_lut ()
-{
- const double mul = (0.5 * PI) / TRIGO_TABLE_ARR_SIZE;
- for (long i = 0; i < TRIGO_TABLE_ARR_SIZE; ++ i)
- {
- using namespace std;
-
- _trigo_data [i] = DataType (cos (i * mul));
- }
-}
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_trigo_osc ()
-{
- for (int i = 0; i < NBR_TRIGO_OSC; ++i)
- {
- OscType & osc = _trigo_osc [i];
-
- const long len = static_cast <long> (TRIGO_TABLE_ARR_SIZE) << (i + 1);
- const double mul = (0.5 * PI) / len;
- osc.set_step (mul);
- }
-}
-
-
-
-#endif // FFTRealFixLen_CODEHEADER_INCLUDED
-
-#undef FFTRealFixLen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h
deleted file mode 100644
index 163c0832..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLenParam.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealFixLenParam_HEADER_INCLUDED)
-#define FFTRealFixLenParam_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-class FFTRealFixLenParam
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- // Over this bit depth, we use direct calculation for sin/cos
- enum { TRIGO_BD_LIMIT = 12 };
-
- typedef float DataType;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-#if 0 // To avoid GCC warning:
- // All member functions in class 'FFTRealFixLenParam' are private
- FFTRealFixLenParam ();
- ~FFTRealFixLenParam ();
- FFTRealFixLenParam (const FFTRealFixLenParam &other);
- FFTRealFixLenParam &
- operator = (const FFTRealFixLenParam &other);
- bool operator == (const FFTRealFixLenParam &other);
- bool operator != (const FFTRealFixLenParam &other);
-#endif
-
-}; // class FFTRealFixLenParam
-
-
-
-//#include "FFTRealFixLenParam.hpp"
-
-
-
-#endif // FFTRealFixLenParam_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.h
deleted file mode 100644
index 7d19c02e..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassDirect.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealPassDirect_HEADER_INCLUDED)
-#define FFTRealPassDirect_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int PASS>
-class FFTRealPassDirect
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealPassDirect ();
- ~FFTRealPassDirect ();
- FFTRealPassDirect (const FFTRealPassDirect &other);
- FFTRealPassDirect &
- operator = (const FFTRealPassDirect &other);
- bool operator == (const FFTRealPassDirect &other);
- bool operator != (const FFTRealPassDirect &other);
-
-}; // class FFTRealPassDirect
-
-
-
-#include "FFTRealPassDirect.hpp"
-
-
-
-#endif // FFTRealPassDirect_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp
deleted file mode 100644
index db9d568e..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassDirect.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealPassDirect_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealPassDirect code header.
-#endif
-#define FFTRealPassDirect_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealPassDirect_CODEHEADER_INCLUDED)
-#define FFTRealPassDirect_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealUseTrigo.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <>
-void FFTRealPassDirect <1>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // First and second pass at once
- const long qlen = len >> 2;
-
- long coef_index = 0;
- do
- {
- // To do: unroll the loop (2x).
- const long ri_0 = br_ptr [coef_index >> 2];
- const long ri_1 = ri_0 + 2 * qlen; // bit_rev_lut_ptr [coef_index + 1];
- const long ri_2 = ri_0 + 1 * qlen; // bit_rev_lut_ptr [coef_index + 2];
- const long ri_3 = ri_0 + 3 * qlen; // bit_rev_lut_ptr [coef_index + 3];
-
- DataType * const df2 = dest_ptr + coef_index;
- df2 [1] = x_ptr [ri_0] - x_ptr [ri_1];
- df2 [3] = x_ptr [ri_2] - x_ptr [ri_3];
-
- const DataType sf_0 = x_ptr [ri_0] + x_ptr [ri_1];
- const DataType sf_2 = x_ptr [ri_2] + x_ptr [ri_3];
-
- df2 [0] = sf_0 + sf_2;
- df2 [2] = sf_0 - sf_2;
-
- coef_index += 4;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassDirect <2>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Executes "previous" passes first. Inverts source and destination buffers
- FFTRealPassDirect <1>::process (
- len,
- src_ptr,
- dest_ptr,
- x_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-
- // Third pass
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
-
- long coef_index = 0;
- do
- {
- dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
- dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
- dest_ptr [coef_index + 2] = src_ptr [coef_index + 2];
- dest_ptr [coef_index + 6] = src_ptr [coef_index + 6];
-
- DataType v;
-
- v = (src_ptr [coef_index + 5] - src_ptr [coef_index + 7]) * sqrt2_2;
- dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + v;
- dest_ptr [coef_index + 3] = src_ptr [coef_index + 1] - v;
-
- v = (src_ptr [coef_index + 5] + src_ptr [coef_index + 7]) * sqrt2_2;
- dest_ptr [coef_index + 5] = v + src_ptr [coef_index + 3];
- dest_ptr [coef_index + 7] = v - src_ptr [coef_index + 3];
-
- coef_index += 8;
- }
- while (coef_index < len);
-}
-
-template <int PASS>
-void FFTRealPassDirect <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Executes "previous" passes first. Inverts source and destination buffers
- FFTRealPassDirect <PASS - 1>::process (
- len,
- src_ptr,
- dest_ptr,
- x_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-
- const long dist = 1L << (PASS - 1);
- const long c1_r = 0;
- const long c1_i = dist;
- const long c2_r = dist * 2;
- const long c2_i = dist * 3;
- const long cend = dist * 4;
- const long table_step = cos_len >> (PASS - 1);
-
- enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT };
- enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 };
-
- long coef_index = 0;
- do
- {
- const DataType * const sf = src_ptr + coef_index;
- DataType * const df = dest_ptr + coef_index;
-
- // Extreme coefficients are always real
- df [c1_r] = sf [c1_r] + sf [c2_r];
- df [c2_r] = sf [c1_r] - sf [c2_r];
- df [c1_i] = sf [c1_i];
- df [c2_i] = sf [c2_i];
-
- FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
-
- // Others are conjugate complex numbers
- for (long i = 1; i < dist; ++ i)
- {
- DataType c;
- DataType s;
- FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
- osc_list [TRIGO_OSC],
- c,
- s,
- cos_ptr,
- i * table_step,
- (dist - i) * table_step
- );
-
- const DataType sf_r_i = sf [c1_r + i];
- const DataType sf_i_i = sf [c1_i + i];
-
- const DataType v1 = sf [c2_r + i] * c - sf [c2_i + i] * s;
- df [c1_r + i] = sf_r_i + v1;
- df [c2_r - i] = sf_r_i - v1;
-
- const DataType v2 = sf [c2_r + i] * s + sf [c2_i + i] * c;
- df [c2_r + i] = v2 + sf_i_i;
- df [cend - i] = v2 - sf_i_i;
- }
-
- coef_index += cend;
- }
- while (coef_index < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealPassDirect_CODEHEADER_INCLUDED
-
-#undef FFTRealPassDirect_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.h
deleted file mode 100644
index 2de89527..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassInverse.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealPassInverse_HEADER_INCLUDED)
-#define FFTRealPassInverse_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-
-template <int PASS>
-class FFTRealPassInverse
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
- FORCEINLINE static void
- process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
- FORCEINLINE static void
- process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealPassInverse ();
- ~FFTRealPassInverse ();
- FFTRealPassInverse (const FFTRealPassInverse &other);
- FFTRealPassInverse &
- operator = (const FFTRealPassInverse &other);
- bool operator == (const FFTRealPassInverse &other);
- bool operator != (const FFTRealPassInverse &other);
-
-}; // class FFTRealPassInverse
-
-
-
-#include "FFTRealPassInverse.hpp"
-
-
-
-#endif // FFTRealPassInverse_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp
deleted file mode 100644
index 57375469..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassInverse.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealPassInverse_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealPassInverse code header.
-#endif
-#define FFTRealPassInverse_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealPassInverse_CODEHEADER_INCLUDED)
-#define FFTRealPassInverse_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealUseTrigo.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- process_internal (
- len,
- dest_ptr,
- f_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
- FFTRealPassInverse <PASS - 1>::process_rec (
- len,
- src_ptr,
- dest_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-}
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- process_internal (
- len,
- dest_ptr,
- src_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
- FFTRealPassInverse <PASS - 1>::process_rec (
- len,
- src_ptr,
- dest_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-}
-
-template <>
-void FFTRealPassInverse <0>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Stops recursion
-}
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- const long dist = 1L << (PASS - 1);
- const long c1_r = 0;
- const long c1_i = dist;
- const long c2_r = dist * 2;
- const long c2_i = dist * 3;
- const long cend = dist * 4;
- const long table_step = cos_len >> (PASS - 1);
-
- enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT };
- enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 };
-
- long coef_index = 0;
- do
- {
- const DataType * const sf = src_ptr + coef_index;
- DataType * const df = dest_ptr + coef_index;
-
- // Extreme coefficients are always real
- df [c1_r] = sf [c1_r] + sf [c2_r];
- df [c2_r] = sf [c1_r] - sf [c2_r];
- df [c1_i] = sf [c1_i] * 2;
- df [c2_i] = sf [c2_i] * 2;
-
- FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
-
- // Others are conjugate complex numbers
- for (long i = 1; i < dist; ++ i)
- {
- df [c1_r + i] = sf [c1_r + i] + sf [c2_r - i];
- df [c1_i + i] = sf [c2_r + i] - sf [cend - i];
-
- DataType c;
- DataType s;
- FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
- osc_list [TRIGO_OSC],
- c,
- s,
- cos_ptr,
- i * table_step,
- (dist - i) * table_step
- );
-
- const DataType vr = sf [c1_r + i] - sf [c2_r - i];
- const DataType vi = sf [c2_r + i] + sf [cend - i];
-
- df [c2_r + i] = vr * c + vi * s;
- df [c2_i + i] = vi * c - vr * s;
- }
-
- coef_index += cend;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassInverse <2>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Antepenultimate pass
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
-
- long coef_index = 0;
- do
- {
- dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
- dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
- dest_ptr [coef_index + 2] = src_ptr [coef_index + 2] * 2;
- dest_ptr [coef_index + 6] = src_ptr [coef_index + 6] * 2;
-
- dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + src_ptr [coef_index + 3];
- dest_ptr [coef_index + 3] = src_ptr [coef_index + 5] - src_ptr [coef_index + 7];
-
- const DataType vr = src_ptr [coef_index + 1] - src_ptr [coef_index + 3];
- const DataType vi = src_ptr [coef_index + 5] + src_ptr [coef_index + 7];
-
- dest_ptr [coef_index + 5] = (vr + vi) * sqrt2_2;
- dest_ptr [coef_index + 7] = (vi - vr) * sqrt2_2;
-
- coef_index += 8;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassInverse <1>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Penultimate and last pass at once
- const long qlen = len >> 2;
-
- long coef_index = 0;
- do
- {
- const long ri_0 = br_ptr [coef_index >> 2];
-
- const DataType b_0 = src_ptr [coef_index ] + src_ptr [coef_index + 2];
- const DataType b_2 = src_ptr [coef_index ] - src_ptr [coef_index + 2];
- const DataType b_1 = src_ptr [coef_index + 1] * 2;
- const DataType b_3 = src_ptr [coef_index + 3] * 2;
-
- dest_ptr [ri_0 ] = b_0 + b_1;
- dest_ptr [ri_0 + 2 * qlen] = b_0 - b_1;
- dest_ptr [ri_0 + 1 * qlen] = b_2 + b_3;
- dest_ptr [ri_0 + 3 * qlen] = b_2 - b_3;
-
- coef_index += 4;
- }
- while (coef_index < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealPassInverse_CODEHEADER_INCLUDED
-
-#undef FFTRealPassInverse_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.h
deleted file mode 100644
index bd722d4d..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************
-
- FFTRealSelect.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealSelect_HEADER_INCLUDED)
-#define FFTRealSelect_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-
-
-
-template <int P>
-class FFTRealSelect
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- FORCEINLINE static float *
- sel_bin (float *e_ptr, float *o_ptr);
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealSelect ();
- ~FFTRealSelect ();
- FFTRealSelect (const FFTRealSelect &other);
- FFTRealSelect& operator = (const FFTRealSelect &other);
- bool operator == (const FFTRealSelect &other);
- bool operator != (const FFTRealSelect &other);
-
-}; // class FFTRealSelect
-
-
-
-#include "FFTRealSelect.hpp"
-
-
-
-#endif // FFTRealSelect_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.hpp
deleted file mode 100644
index 9ddf5864..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealSelect.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************
-
- FFTRealSelect.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealSelect_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealSelect code header.
-#endif
-#define FFTRealSelect_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealSelect_CODEHEADER_INCLUDED)
-#define FFTRealSelect_CODEHEADER_INCLUDED
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int P>
-float * FFTRealSelect <P>::sel_bin (float *e_ptr, float *o_ptr)
-{
- return (o_ptr);
-}
-
-
-
-template <>
-float * FFTRealSelect <0>::sel_bin (float *e_ptr, float *o_ptr)
-{
- return (e_ptr);
-}
-
-
-
-#endif // FFTRealSelect_CODEHEADER_INCLUDED
-
-#undef FFTRealSelect_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h b/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h
deleted file mode 100644
index c4368ee0..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************
-
- FFTRealUseTrigo.h
- Copyright (c) 2005 Laurent de Soras
-
-Template parameters:
- - ALGO: algorithm choice. 0 = table, other = oscillator
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealUseTrigo_HEADER_INCLUDED)
-#define FFTRealUseTrigo_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int ALGO>
-class FFTRealUseTrigo
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- prepare (OscType &osc);
- FORCEINLINE static void
- iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealUseTrigo ();
- ~FFTRealUseTrigo ();
- FFTRealUseTrigo (const FFTRealUseTrigo &other);
- FFTRealUseTrigo &
- operator = (const FFTRealUseTrigo &other);
- bool operator == (const FFTRealUseTrigo &other);
- bool operator != (const FFTRealUseTrigo &other);
-
-}; // class FFTRealUseTrigo
-
-
-
-#include "FFTRealUseTrigo.hpp"
-
-
-
-#endif // FFTRealUseTrigo_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp b/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp
deleted file mode 100644
index aa968b81..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************
-
- FFTRealUseTrigo.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealUseTrigo_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealUseTrigo code header.
-#endif
-#define FFTRealUseTrigo_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealUseTrigo_CODEHEADER_INCLUDED)
-#define FFTRealUseTrigo_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "OscSinCos.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int ALGO>
-void FFTRealUseTrigo <ALGO>::prepare (OscType &osc)
-{
- osc.clear_buffers ();
-}
-
-template <>
-void FFTRealUseTrigo <0>::prepare (OscType &osc)
-{
- // Nothing
-}
-
-
-
-template <int ALGO>
-void FFTRealUseTrigo <ALGO>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
-{
- osc.step ();
- c = osc.get_cos ();
- s = osc.get_sin ();
-}
-
-template <>
-void FFTRealUseTrigo <0>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
-{
- c = cos_ptr [index_c];
- s = cos_ptr [index_s];
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealUseTrigo_CODEHEADER_INCLUDED
-
-#undef FFTRealUseTrigo_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.h b/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.h
deleted file mode 100644
index 775fc14f..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************
-
- OscSinCos.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (OscSinCos_HEADER_INCLUDED)
-#define OscSinCos_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-
-
-
-template <class T>
-class OscSinCos
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- OscSinCos ();
-
- FORCEINLINE void
- set_step (double angle_rad);
-
- FORCEINLINE DataType
- get_cos () const;
- FORCEINLINE DataType
- get_sin () const;
- FORCEINLINE void
- step ();
- FORCEINLINE void
- clear_buffers ();
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType _pos_cos; // Current phase expressed with sin and cos. [-1 ; 1]
- DataType _pos_sin; // -
- DataType _step_cos; // Phase increment per step, [-1 ; 1]
- DataType _step_sin; // -
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- OscSinCos (const OscSinCos &other);
- OscSinCos & operator = (const OscSinCos &other);
- bool operator == (const OscSinCos &other);
- bool operator != (const OscSinCos &other);
-
-}; // class OscSinCos
-
-
-
-#include "OscSinCos.hpp"
-
-
-
-#endif // OscSinCos_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.hpp b/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.hpp
deleted file mode 100644
index 749aef04..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/OscSinCos.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*****************************************************************************
-
- OscSinCos.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (OscSinCos_CURRENT_CODEHEADER)
- #error Recursive inclusion of OscSinCos code header.
-#endif
-#define OscSinCos_CURRENT_CODEHEADER
-
-#if ! defined (OscSinCos_CODEHEADER_INCLUDED)
-#define OscSinCos_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cmath>
-
-namespace std { }
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-OscSinCos <T>::OscSinCos ()
-: _pos_cos (1)
-, _pos_sin (0)
-, _step_cos (1)
-, _step_sin (0)
-{
- // Nothing
-}
-
-
-
-template <class T>
-void OscSinCos <T>::set_step (double angle_rad)
-{
- using namespace std;
-
- _step_cos = static_cast <DataType> (cos (angle_rad));
- _step_sin = static_cast <DataType> (sin (angle_rad));
-}
-
-
-
-template <class T>
-typename OscSinCos <T>::DataType OscSinCos <T>::get_cos () const
-{
- return (_pos_cos);
-}
-
-
-
-template <class T>
-typename OscSinCos <T>::DataType OscSinCos <T>::get_sin () const
-{
- return (_pos_sin);
-}
-
-
-
-template <class T>
-void OscSinCos <T>::step ()
-{
- const DataType old_cos = _pos_cos;
- const DataType old_sin = _pos_sin;
-
- _pos_cos = old_cos * _step_cos - old_sin * _step_sin;
- _pos_sin = old_cos * _step_sin + old_sin * _step_cos;
-}
-
-
-
-template <class T>
-void OscSinCos <T>::clear_buffers ()
-{
- _pos_cos = static_cast <DataType> (1);
- _pos_sin = static_cast <DataType> (0);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // OscSinCos_CODEHEADER_INCLUDED
-
-#undef OscSinCos_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.h b/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.h
deleted file mode 100644
index 4b07a6b6..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************
-
- TestAccuracy.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestAccuracy_HEADER_INCLUDED)
-#define TestAccuracy_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-class TestAccuracy
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef typename FO::DataType DataType;
- typedef long double BigFloat; // To get maximum accuracy during intermediate calculations
-
- static int perform_test_single_object (FO &fft);
- static int perform_test_d (FO &fft, const char *class_name_0);
- static int perform_test_i (FO &fft, const char *class_name_0);
- static int perform_test_di (FO &fft, const char *class_name_0);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { NBR_ACC_TESTS = 10 * 1000 * 1000 };
- enum { MAX_NBR_TESTS = 10000 };
-
- static void compute_tf (DataType s [], const DataType x [], long length);
- static void compute_itf (DataType x [], const DataType s [], long length);
- static int compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel);
- static BigFloat
- compute_power (const DataType x_ptr [], long len);
- static BigFloat
- compute_power (const DataType x_ptr [], const DataType y_ptr [], long len);
- static void compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len);
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestAccuracy ();
- ~TestAccuracy ();
- TestAccuracy (const TestAccuracy &other);
- TestAccuracy & operator = (const TestAccuracy &other);
- bool operator == (const TestAccuracy &other);
- bool operator != (const TestAccuracy &other);
-
-}; // class TestAccuracy
-
-
-
-#include "TestAccuracy.hpp"
-
-
-
-#endif // TestAccuracy_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.hpp b/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.hpp
deleted file mode 100644
index 5c794f74..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestAccuracy.hpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/*****************************************************************************
-
- TestAccuracy.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestAccuracy_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestAccuracy code header.
-#endif
-#define TestAccuracy_CURRENT_CODEHEADER
-
-#if ! defined (TestAccuracy_CODEHEADER_INCLUDED)
-#define TestAccuracy_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "test_fnc.h"
-#include "TestWhiteNoiseGen.h"
-
-#include <typeinfo>
-#include <vector>
-
-#include <cmath>
-#include <cstdio>
-
-
-
-static const double TestAccuracy_LN10 = 2.3025850929940456840179914546844;
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_single_object (FO &fft)
-{
- assert (&fft != 0);
-
- using namespace std;
-
- int ret_val = 0;
-
- const std::type_info & ti = typeid (fft);
- const char * class_name_0 = ti.name ();
-
- if (ret_val == 0)
- {
- ret_val = perform_test_d (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- ret_val = perform_test_i (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- ret_val = perform_test_di (fft, class_name_0);
- }
-
- if (ret_val == 0)
- {
- printf ("\n");
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_d (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf ("Testing %s::do_fft () [%ld samples]... ", class_name_0, len);
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s1 (len);
- std::vector <DataType> s2 (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&x [0], len);
- fft.do_fft (&s1 [0], &x [0]);
- compute_tf (&s2 [0], &x [0], len);
-
- BigFloat max_err;
- compare_vect_display (&s1 [0], &s2 [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_i (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 10L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf ("Testing %s::do_ifft () [%ld samples]... ", class_name_0, len);
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> s (len);
- std::vector <DataType> x1 (len);
- std::vector <DataType> x2 (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&s [0], len);
- fft.do_ifft (&s [0], &x1 [0]);
- compute_itf (&x2 [0], &s [0], len);
-
- BigFloat max_err;
- compare_vect_display (&x1 [0], &x2 [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_di (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf (
- "Testing %s::do_fft () / do_ifft () / rescale () [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s (len);
- std::vector <DataType> y (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&x [0], len);
- fft.do_fft (&s [0], &x [0]);
- fft.do_ifft (&s [0], &y [0]);
- fft.rescale (&y [0]);
-
- BigFloat max_err;
- compare_vect_display (&x [0], &y [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-// Positive transform
-template <class FO>
-void TestAccuracy <FO>::compute_tf (DataType s [], const DataType x [], long length)
-{
- assert (s != 0);
- assert (x != 0);
- assert (length >= 2);
- assert ((length & 1) == 0);
-
- const long nbr_bins = length >> 1;
-
- // DC and Nyquist
- BigFloat dc = 0;
- BigFloat ny = 0;
- for (long pos = 0; pos < length; pos += 2)
- {
- const BigFloat even = x [pos ];
- const BigFloat odd = x [pos + 1];
- dc += even + odd;
- ny += even - odd;
- }
- s [0 ] = static_cast <DataType> (dc);
- s [nbr_bins] = static_cast <DataType> (ny);
-
- // Regular bins
- for (long bin = 1; bin < nbr_bins; ++ bin)
- {
- BigFloat sum_r = 0;
- BigFloat sum_i = 0;
-
- const BigFloat m = bin * static_cast <BigFloat> (2 * PI) / length;
-
- for (long pos = 0; pos < length; ++pos)
- {
- using namespace std;
-
- const BigFloat phase = pos * m;
- const BigFloat e_r = cos (phase);
- const BigFloat e_i = sin (phase);
-
- sum_r += x [pos] * e_r;
- sum_i += x [pos] * e_i;
- }
-
- s [ bin] = static_cast <DataType> (sum_r);
- s [nbr_bins + bin] = static_cast <DataType> (sum_i);
- }
-}
-
-
-
-// Negative transform
-template <class FO>
-void TestAccuracy <FO>::compute_itf (DataType x [], const DataType s [], long length)
-{
- assert (s != 0);
- assert (x != 0);
- assert (length >= 2);
- assert ((length & 1) == 0);
-
- const long nbr_bins = length >> 1;
-
- // DC and Nyquist
- BigFloat dc = s [0 ];
- BigFloat ny = s [nbr_bins];
-
- // Regular bins
- for (long pos = 0; pos < length; ++pos)
- {
- BigFloat sum = dc + ny * (1 - 2 * (pos & 1));
-
- const BigFloat m = pos * static_cast <BigFloat> (-2 * PI) / length;
-
- for (long bin = 1; bin < nbr_bins; ++ bin)
- {
- using namespace std;
-
- const BigFloat phase = bin * m;
- const BigFloat e_r = cos (phase);
- const BigFloat e_i = sin (phase);
-
- sum += 2 * ( e_r * s [bin ]
- - e_i * s [bin + nbr_bins]);
- }
-
- x [pos] = static_cast <DataType> (sum);
- }
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
- assert (&max_err_rel != 0);
-
- using namespace std;
-
- int ret_val = 0;
-
- BigFloat power = compute_power (&x_ptr [0], &y_ptr [0], len);
- BigFloat power_dif;
- long max_err_pos;
- compare_vect (&x_ptr [0], &y_ptr [0], power_dif, max_err_pos, len);
-
- if (power == 0)
- {
- power = power_dif;
- }
- const BigFloat power_err_rel = power_dif / power;
-
- BigFloat max_err = 0;
- max_err_rel = 0;
- if (max_err_pos >= 0)
- {
- max_err = y_ptr [max_err_pos] - x_ptr [max_err_pos];
- max_err_rel = 2 * fabs (max_err) / ( fabs (y_ptr [max_err_pos])
- + fabs (x_ptr [max_err_pos]));
- }
-
- if (power_err_rel > 0.001)
- {
- printf ("Power error : %f (%.6f %%)\n",
- static_cast <double> (power_err_rel),
- static_cast <double> (power_err_rel * 100)
- );
- if (max_err_pos >= 0)
- {
- printf (
- "Maximum error: %f - %f = %f (%f)\n",
- static_cast <double> (y_ptr [max_err_pos]),
- static_cast <double> (x_ptr [max_err_pos]),
- static_cast <double> (max_err),
- static_cast <double> (max_err_pos)
- );
- }
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-typename TestAccuracy <FO>::BigFloat TestAccuracy <FO>::compute_power (const DataType x_ptr [], long len)
-{
- assert (x_ptr != 0);
- assert (len > 0);
-
- BigFloat power = 0;
- for (long pos = 0; pos < len; ++pos)
- {
- const BigFloat val = x_ptr [pos];
-
- power += val * val;
- }
-
- using namespace std;
-
- power = sqrt (power) / len;
-
- return (power);
-}
-
-
-
-template <class FO>
-typename TestAccuracy <FO>::BigFloat TestAccuracy <FO>::compute_power (const DataType x_ptr [], const DataType y_ptr [], long len)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
-
- return ((compute_power (x_ptr, len) + compute_power (y_ptr, len)) * 0.5);
-}
-
-
-
-template <class FO>
-void TestAccuracy <FO>::compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
- assert (&power != 0);
- assert (&max_err_pos != 0);
-
- power = 0;
- BigFloat max_dif2 = 0;
- max_err_pos = -1;
-
- for (long pos = 0; pos < len; ++pos)
- {
- const BigFloat x = x_ptr [pos];
- const BigFloat y = y_ptr [pos];
- const BigFloat dif = y - x;
- const BigFloat dif2 = dif * dif;
-
- power += dif2;
- if (dif2 > max_dif2)
- {
- max_err_pos = pos;
- max_dif2 = dif2;
- }
- }
-
- using namespace std;
-
- power = sqrt (power) / len;
-}
-
-
-
-#endif // TestAccuracy_CODEHEADER_INCLUDED
-
-#undef TestAccuracy_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.h b/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.h
deleted file mode 100644
index ecff96d3..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- TestHelperFixLen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestHelperFixLen_HEADER_INCLUDED)
-#define TestHelperFixLen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealFixLen.h"
-
-
-
-template <int L>
-class TestHelperFixLen
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLen <L> FftType;
-
- static void perform_test_accuracy (int &ret_val);
- static void perform_test_speed (int &ret_val);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestHelperFixLen ();
- ~TestHelperFixLen ();
- TestHelperFixLen (const TestHelperFixLen &other);
- TestHelperFixLen &
- operator = (const TestHelperFixLen &other);
- bool operator == (const TestHelperFixLen &other);
- bool operator != (const TestHelperFixLen &other);
-
-}; // class TestHelperFixLen
-
-
-
-#include "TestHelperFixLen.hpp"
-
-
-
-#endif // TestHelperFixLen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp b/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp
deleted file mode 100644
index 25048b91..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- TestHelperFixLen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestHelperFixLen_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestHelperFixLen code header.
-#endif
-#define TestHelperFixLen_CURRENT_CODEHEADER
-
-#if ! defined (TestHelperFixLen_CODEHEADER_INCLUDED)
-#define TestHelperFixLen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-
-#include "TestAccuracy.h"
-#if defined (test_settings_SPEED_TEST_ENABLED)
- #include "TestSpeed.h"
-#endif
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int L>
-void TestHelperFixLen <L>::perform_test_accuracy (int &ret_val)
-{
- if (ret_val == 0)
- {
- FftType fft;
- ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
- }
-}
-
-
-
-template <int L>
-void TestHelperFixLen <L>::perform_test_speed (int &ret_val)
-{
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- if (ret_val == 0)
- {
- FftType fft;
- ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
- }
-
-#endif
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestHelperFixLen_CODEHEADER_INCLUDED
-
-#undef TestHelperFixLen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.h b/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.h
deleted file mode 100644
index a7bff5c2..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************
-
- TestHelperNormal.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestHelperNormal_HEADER_INCLUDED)
-#define TestHelperNormal_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTReal.h"
-
-
-
-template <class DT>
-class TestHelperNormal
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef DT DataType;
- typedef FFTReal <DataType> FftType;
-
- static void perform_test_accuracy (int &ret_val);
- static void perform_test_speed (int &ret_val);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestHelperNormal ();
- ~TestHelperNormal ();
- TestHelperNormal (const TestHelperNormal &other);
- TestHelperNormal &
- operator = (const TestHelperNormal &other);
- bool operator == (const TestHelperNormal &other);
- bool operator != (const TestHelperNormal &other);
-
-}; // class TestHelperNormal
-
-
-
-#include "TestHelperNormal.hpp"
-
-
-
-#endif // TestHelperNormal_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.hpp b/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.hpp
deleted file mode 100644
index e037696a..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestHelperNormal.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************
-
- TestHelperNormal.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestHelperNormal_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestHelperNormal code header.
-#endif
-#define TestHelperNormal_CURRENT_CODEHEADER
-
-#if ! defined (TestHelperNormal_CODEHEADER_INCLUDED)
-#define TestHelperNormal_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-
-#include "TestAccuracy.h"
-#if defined (test_settings_SPEED_TEST_ENABLED)
- #include "TestSpeed.h"
-#endif
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-void TestHelperNormal <DT>::perform_test_accuracy (int &ret_val)
-{
- const int len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12 };
- const int nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
- for (int k = 0; k < nbr_len && ret_val == 0; ++k)
- {
- const long len = 1L << (len_arr [k]);
- FftType fft (len);
- ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
- }
-}
-
-
-
-template <class DT>
-void TestHelperNormal <DT>::perform_test_speed (int &ret_val)
-{
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- const int len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12, 14, 16, 18, 20, 22 };
- const int nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
- for (int k = 0; k < nbr_len && ret_val == 0; ++k)
- {
- const long len = 1L << (len_arr [k]);
- FftType fft (len);
- ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
- }
-
-#endif
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestHelperNormal_CODEHEADER_INCLUDED
-
-#undef TestHelperNormal_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.h b/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.h
deleted file mode 100644
index 22957818..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************
-
- TestSpeed.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestSpeed_HEADER_INCLUDED)
-#define TestSpeed_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-class TestSpeed
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef typename FO::DataType DataType;
-
- static int perform_test_single_object (FO &fft);
- static int perform_test_d (FO &fft, const char *class_name_0);
- static int perform_test_i (FO &fft, const char *class_name_0);
- static int perform_test_di (FO &fft, const char *class_name_0);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { NBR_SPD_TESTS = 10 * 1000 * 1000 };
- enum { MAX_NBR_TESTS = 10000 };
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestSpeed ();
- ~TestSpeed ();
- TestSpeed (const TestSpeed &other);
- TestSpeed & operator = (const TestSpeed &other);
- bool operator == (const TestSpeed &other);
- bool operator != (const TestSpeed &other);
-
-}; // class TestSpeed
-
-
-
-#include "TestSpeed.hpp"
-
-
-
-#endif // TestSpeed_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.hpp b/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.hpp
deleted file mode 100644
index e716b2a7..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestSpeed.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-/*****************************************************************************
-
- TestSpeed.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestSpeed_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestSpeed code header.
-#endif
-#define TestSpeed_CURRENT_CODEHEADER
-
-#if ! defined (TestSpeed_CODEHEADER_INCLUDED)
-#define TestSpeed_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_fnc.h"
-#include "stopwatch/StopWatch.h"
-#include "TestWhiteNoiseGen.h"
-
-#include <typeinfo>
-
-#include <cstdio>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_single_object (FO &fft)
-{
- assert (&fft != 0);
-
- int ret_val = 0;
-
- const std::type_info & ti = typeid (fft);
- const char * class_name_0 = ti.name ();
-
- if (ret_val == 0)
- {
- perform_test_d (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- perform_test_i (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- perform_test_di (fft, class_name_0);
- }
-
- if (ret_val == 0)
- {
- printf ("\n");
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_d (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len, 0);
- std::vector <DataType> s (len);
- noise.generate (&x [0], len);
-
- printf (
- "%s::do_fft () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_fft (&s [0], &x [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_i (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s (len, 0);
- noise.generate (&s [0], len);
-
- printf (
- "%s::do_ifft () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_ifft (&s [0], &x [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_di (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len, 0);
- std::vector <DataType> s (len);
- std::vector <DataType> y (len);
- noise.generate (&x [0], len);
-
- printf (
- "%s::do_fft () / do_ifft () / rescale () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
-
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_fft (&s [0], &x [0]);
- fft.do_ifft (&s [0], &y [0]);
- fft.rescale (&y [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestSpeed_CODEHEADER_INCLUDED
-
-#undef TestSpeed_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h b/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h
deleted file mode 100644
index d815f8e3..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************
-
- TestWhiteNoiseGen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestWhiteNoiseGen_HEADER_INCLUDED)
-#define TestWhiteNoiseGen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-class TestWhiteNoiseGen
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef DT DataType;
-
- TestWhiteNoiseGen ();
- virtual ~TestWhiteNoiseGen () {}
-
- void generate (DataType data_ptr [], long len);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- typedef unsigned long StateType;
-
- StateType _rand_state;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestWhiteNoiseGen (const TestWhiteNoiseGen &other);
- TestWhiteNoiseGen &
- operator = (const TestWhiteNoiseGen &other);
- bool operator == (const TestWhiteNoiseGen &other);
- bool operator != (const TestWhiteNoiseGen &other);
-
-}; // class TestWhiteNoiseGen
-
-
-
-#include "TestWhiteNoiseGen.hpp"
-
-
-
-#endif // TestWhiteNoiseGen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp b/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp
deleted file mode 100644
index 13b7eb3e..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************
-
- TestWhiteNoiseGen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestWhiteNoiseGen_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestWhiteNoiseGen code header.
-#endif
-#define TestWhiteNoiseGen_CURRENT_CODEHEADER
-
-#if ! defined (TestWhiteNoiseGen_CODEHEADER_INCLUDED)
-#define TestWhiteNoiseGen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-TestWhiteNoiseGen <DT>::TestWhiteNoiseGen ()
-: _rand_state (0)
-{
- _rand_state = reinterpret_cast <StateType> (this);
-}
-
-
-
-template <class DT>
-void TestWhiteNoiseGen <DT>::generate (DataType data_ptr [], long len)
-{
- assert (data_ptr != 0);
- assert (len > 0);
-
- const DataType one = static_cast <DataType> (1);
- const DataType mul = one / static_cast <DataType> (0x80000000UL);
-
- long pos = 0;
- do
- {
- const DataType x = static_cast <DataType> (_rand_state & 0xFFFFFFFFUL);
- data_ptr [pos] = x * mul - one;
-
- _rand_state = _rand_state * 1234567UL + 890123UL;
-
- ++ pos;
- }
- while (pos < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestWhiteNoiseGen_CODEHEADER_INCLUDED
-
-#undef TestWhiteNoiseGen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/def.h b/tests/manual/spectrum/3rdparty/fftreal/def.h
deleted file mode 100644
index 99c545f5..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/def.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************
-
- def.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (def_HEADER_INCLUDED)
-#define def_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-
-const double PI = 3.1415926535897932384626433832795;
-const double SQRT2 = 1.41421356237309514547462185873883;
-
-#if defined (_MSC_VER)
-
- #define FORCEINLINE __forceinline
-
-#else
-
- #define FORCEINLINE inline
-
-#endif
-
-
-
-#endif // def_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/fftreal.pas b/tests/manual/spectrum/3rdparty/fftreal/fftreal.pas
deleted file mode 100644
index ea637545..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/fftreal.pas
+++ /dev/null
@@ -1,661 +0,0 @@
-(*****************************************************************************
-
- DIGITAL SIGNAL PROCESSING TOOLS
- Version 1.03, 2001/06/15
- (c) 1999 - Laurent de Soras
-
- FFTReal.h
- Fourier transformation of real number arrays.
- Portable ISO C++
-
-------------------------------------------------------------------------------
-
- LEGAL
-
- Source code may be freely used for any purpose, including commercial
- applications. Programs must display in their "About" dialog-box (or
- documentation) a text telling they use these routines by Laurent de Soras.
- Modified source code can be distributed, but modifications must be clearly
- indicated.
-
- CONTACT
-
- Laurent de Soras
- 92 avenue Albert 1er
- 92500 Rueil-Malmaison
- France
-
- ldesoras@club-internet.fr
-
-------------------------------------------------------------------------------
-
- Translation to ObjectPascal by :
- Frederic Vanmol
- frederic@axiworld.be
-
-*****************************************************************************)
-
-
-unit
- FFTReal;
-
-interface
-
-uses
- Windows;
-
-(* Change this typedef to use a different floating point type in your FFTs
- (i.e. float, double or long double). *)
-type
- pflt_t = ^flt_t;
- flt_t = single;
-
- pflt_array = ^flt_array;
- flt_array = array[0..0] of flt_t;
-
- plongarray = ^longarray;
- longarray = array[0..0] of longint;
-
-const
- sizeof_flt : longint = SizeOf(flt_t);
-
-
-
-type
- // Bit reversed look-up table nested class
- TBitReversedLUT = class
- private
- _ptr : plongint;
- public
- constructor Create(const nbr_bits: integer);
- destructor Destroy; override;
- function get_ptr: plongint;
- end;
-
- // Trigonometric look-up table nested class
- TTrigoLUT = class
- private
- _ptr : pflt_t;
- public
- constructor Create(const nbr_bits: integer);
- destructor Destroy; override;
- function get_ptr(const level: integer): pflt_t;
- end;
-
- TFFTReal = class
- private
- _bit_rev_lut : TBitReversedLUT;
- _trigo_lut : TTrigoLUT;
- _sqrt2_2 : flt_t;
- _length : longint;
- _nbr_bits : integer;
- _buffer_ptr : pflt_t;
- public
- constructor Create(const length: longint);
- destructor Destroy; override;
-
- procedure do_fft(f: pflt_array; const x: pflt_array);
- procedure do_ifft(const f: pflt_array; x: pflt_array);
- procedure rescale(x: pflt_array);
- end;
-
-
-
-
-
-
-
-implementation
-
-uses
- Math;
-
-{ TBitReversedLUT }
-
-constructor TBitReversedLUT.Create(const nbr_bits: integer);
-var
- length : longint;
- cnt : longint;
- br_index : longint;
- bit : longint;
-begin
- inherited Create;
-
- length := 1 shl nbr_bits;
- GetMem(_ptr, length*SizeOf(longint));
-
- br_index := 0;
- plongarray(_ptr)^[0] := 0;
- for cnt := 1 to length-1 do
- begin
- // ++br_index (bit reversed)
- bit := length shr 1;
- br_index := br_index xor bit;
- while br_index and bit = 0 do
- begin
- bit := bit shr 1;
- br_index := br_index xor bit;
- end;
-
- plongarray(_ptr)^[cnt] := br_index;
- end;
-end;
-
-destructor TBitReversedLUT.Destroy;
-begin
- FreeMem(_ptr);
- _ptr := nil;
- inherited;
-end;
-
-function TBitReversedLUT.get_ptr: plongint;
-begin
- Result := _ptr;
-end;
-
-{ TTrigLUT }
-
-constructor TTrigoLUT.Create(const nbr_bits: integer);
-var
- total_len : longint;
- PI : double;
- level : integer;
- level_len : longint;
- level_ptr : pflt_array;
- mul : double;
- i : longint;
-begin
- inherited Create;
-
- _ptr := nil;
-
- if (nbr_bits > 3) then
- begin
- total_len := (1 shl (nbr_bits - 1)) - 4;
- GetMem(_ptr, total_len * sizeof_flt);
-
- PI := ArcTan(1) * 4;
- for level := 3 to nbr_bits-1 do
- begin
- level_len := 1 shl (level - 1);
- level_ptr := pointer(get_ptr(level));
- mul := PI / (level_len shl 1);
-
- for i := 0 to level_len-1 do
- level_ptr^[i] := cos(i * mul);
- end;
- end;
-end;
-
-destructor TTrigoLUT.Destroy;
-begin
- FreeMem(_ptr);
- _ptr := nil;
- inherited;
-end;
-
-function TTrigoLUT.get_ptr(const level: integer): pflt_t;
-var
- tempp : pflt_t;
-begin
- tempp := _ptr;
- inc(tempp, (1 shl (level-1)) - 4);
- Result := tempp;
-end;
-
-{ TFFTReal }
-
-constructor TFFTReal.Create(const length: longint);
-begin
- inherited Create;
-
- _length := length;
- _nbr_bits := Floor(Ln(length) / Ln(2) + 0.5);
- _bit_rev_lut := TBitReversedLUT.Create(Floor(Ln(length) / Ln(2) + 0.5));
- _trigo_lut := TTrigoLUT.Create(Floor(Ln(length) / Ln(2) + 0.05));
- _sqrt2_2 := Sqrt(2) * 0.5;
-
- _buffer_ptr := nil;
- if _nbr_bits > 2 then
- GetMem(_buffer_ptr, _length * sizeof_flt);
-end;
-
-destructor TFFTReal.Destroy;
-begin
- if _buffer_ptr <> nil then
- begin
- FreeMem(_buffer_ptr);
- _buffer_ptr := nil;
- end;
-
- _bit_rev_lut.Free;
- _bit_rev_lut := nil;
- _trigo_lut.Free;
- _trigo_lut := nil;
-
- inherited;
-end;
-
-(*==========================================================================*/
-/* Name: do_fft */
-/* Description: Compute the FFT of the array. */
-/* Input parameters: */
-/* - x: pointer on the source array (time). */
-/* Output parameters: */
-/* - f: pointer on the destination array (frequencies). */
-/* f [0...length(x)/2] = real values, */
-/* f [length(x)/2+1...length(x)-1] = imaginary values of */
-/* coefficents 1...length(x)/2-1. */
-/*==========================================================================*)
-procedure TFFTReal.do_fft(f: pflt_array; const x: pflt_array);
-var
- sf, df : pflt_array;
- pass : integer;
- nbr_coef : longint;
- h_nbr_coef : longint;
- d_nbr_coef : longint;
- coef_index : longint;
- bit_rev_lut_ptr : plongarray;
- rev_index_0 : longint;
- rev_index_1 : longint;
- rev_index_2 : longint;
- rev_index_3 : longint;
- df2 : pflt_array;
- n1, n2, n3 : integer;
- sf_0, sf_2 : flt_t;
- sqrt2_2 : flt_t;
- v : flt_t;
- cos_ptr : pflt_array;
- i : longint;
- sf1r, sf2r : pflt_array;
- dfr, dfi : pflt_array;
- sf1i, sf2i : pflt_array;
- c, s : flt_t;
- temp_ptr : pflt_array;
- b_0, b_2 : flt_t;
-begin
- n1 := 1;
- n2 := 2;
- n3 := 3;
-
- (*______________________________________________
- *
- * General case
- *______________________________________________
- *)
-
- if _nbr_bits > 2 then
- begin
- if _nbr_bits and 1 <> 0 then
- begin
- df := pointer(_buffer_ptr);
- sf := f;
- end
- else
- begin
- df := f;
- sf := pointer(_buffer_ptr);
- end;
-
- //
- // Do the transformation in several passes
- //
-
- // First and second pass at once
- bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
- coef_index := 0;
-
- repeat
- rev_index_0 := bit_rev_lut_ptr^[coef_index];
- rev_index_1 := bit_rev_lut_ptr^[coef_index + 1];
- rev_index_2 := bit_rev_lut_ptr^[coef_index + 2];
- rev_index_3 := bit_rev_lut_ptr^[coef_index + 3];
-
- df2 := pointer(longint(df) + (coef_index*sizeof_flt));
- df2^[n1] := x^[rev_index_0] - x^[rev_index_1];
- df2^[n3] := x^[rev_index_2] - x^[rev_index_3];
-
- sf_0 := x^[rev_index_0] + x^[rev_index_1];
- sf_2 := x^[rev_index_2] + x^[rev_index_3];
-
- df2^[0] := sf_0 + sf_2;
- df2^[n2] := sf_0 - sf_2;
-
- inc(coef_index, 4);
- until (coef_index >= _length);
-
-
- // Third pass
- coef_index := 0;
- sqrt2_2 := _sqrt2_2;
-
- repeat
- sf^[coef_index] := df^[coef_index] + df^[coef_index + 4];
- sf^[coef_index + 4] := df^[coef_index] - df^[coef_index + 4];
- sf^[coef_index + 2] := df^[coef_index + 2];
- sf^[coef_index + 6] := df^[coef_index + 6];
-
- v := (df [coef_index + 5] - df^[coef_index + 7]) * sqrt2_2;
- sf^[coef_index + 1] := df^[coef_index + 1] + v;
- sf^[coef_index + 3] := df^[coef_index + 1] - v;
-
- v := (df^[coef_index + 5] + df^[coef_index + 7]) * sqrt2_2;
- sf [coef_index + 5] := v + df^[coef_index + 3];
- sf [coef_index + 7] := v - df^[coef_index + 3];
-
- inc(coef_index, 8);
- until (coef_index >= _length);
-
-
- // Next pass
- for pass := 3 to _nbr_bits-1 do
- begin
- coef_index := 0;
- nbr_coef := 1 shl pass;
- h_nbr_coef := nbr_coef shr 1;
- d_nbr_coef := nbr_coef shl 1;
-
- cos_ptr := pointer(_trigo_lut.get_ptr(pass));
- repeat
- sf1r := pointer(longint(sf) + (coef_index * sizeof_flt));
- sf2r := pointer(longint(sf1r) + (nbr_coef * sizeof_flt));
- dfr := pointer(longint(df) + (coef_index * sizeof_flt));
- dfi := pointer(longint(dfr) + (nbr_coef * sizeof_flt));
-
- // Extreme coefficients are always real
- dfr^[0] := sf1r^[0] + sf2r^[0];
- dfi^[0] := sf1r^[0] - sf2r^[0]; // dfr [nbr_coef] =
- dfr^[h_nbr_coef] := sf1r^[h_nbr_coef];
- dfi^[h_nbr_coef] := sf2r^[h_nbr_coef];
-
- // Others are conjugate complex numbers
- sf1i := pointer(longint(sf1r) + (h_nbr_coef * sizeof_flt));
- sf2i := pointer(longint(sf1i) + (nbr_coef * sizeof_flt));
-
- for i := 1 to h_nbr_coef-1 do
- begin
- c := cos_ptr^[i]; // cos (i*PI/nbr_coef);
- s := cos_ptr^[h_nbr_coef - i]; // sin (i*PI/nbr_coef);
-
- v := sf2r^[i] * c - sf2i^[i] * s;
- dfr^[i] := sf1r^[i] + v;
- dfi^[-i] := sf1r^[i] - v; // dfr [nbr_coef - i] =
-
- v := sf2r^[i] * s + sf2i^[i] * c;
- dfi^[i] := v + sf1i^[i];
- dfi^[nbr_coef - i] := v - sf1i^[i];
- end;
-
- inc(coef_index, d_nbr_coef);
- until (coef_index >= _length);
-
- // Prepare to the next pass
- temp_ptr := df;
- df := sf;
- sf := temp_ptr;
- end;
- end
-
- (*______________________________________________
- *
- * Special cases
- *______________________________________________
- *)
-
- // 4-point FFT
- else if _nbr_bits = 2 then
- begin
- f^[n1] := x^[0] - x^[n2];
- f^[n3] := x^[n1] - x^[n3];
-
- b_0 := x^[0] + x^[n2];
- b_2 := x^[n1] + x^[n3];
-
- f^[0] := b_0 + b_2;
- f^[n2] := b_0 - b_2;
- end
-
- // 2-point FFT
- else if _nbr_bits = 1 then
- begin
- f^[0] := x^[0] + x^[n1];
- f^[n1] := x^[0] - x^[n1];
- end
-
- // 1-point FFT
- else
- f^[0] := x^[0];
-end;
-
-
-(*==========================================================================*/
-/* Name: do_ifft */
-/* Description: Compute the inverse FFT of the array. Notice that */
-/* IFFT (FFT (x)) = x * length (x). Data must be */
-/* post-scaled. */
-/* Input parameters: */
-/* - f: pointer on the source array (frequencies). */
-/* f [0...length(x)/2] = real values, */
-/* f [length(x)/2+1...length(x)-1] = imaginary values of */
-/* coefficents 1...length(x)/2-1. */
-/* Output parameters: */
-/* - x: pointer on the destination array (time). */
-/*==========================================================================*)
-procedure TFFTReal.do_ifft(const f: pflt_array; x: pflt_array);
-var
- n1, n2, n3 : integer;
- n4, n5, n6, n7 : integer;
- sf, df, df_temp : pflt_array;
- pass : integer;
- nbr_coef : longint;
- h_nbr_coef : longint;
- d_nbr_coef : longint;
- coef_index : longint;
- cos_ptr : pflt_array;
- i : longint;
- sfr, sfi : pflt_array;
- df1r, df2r : pflt_array;
- df1i, df2i : pflt_array;
- c, s, vr, vi : flt_t;
- temp_ptr : pflt_array;
- sqrt2_2 : flt_t;
- bit_rev_lut_ptr : plongarray;
- sf2 : pflt_array;
- b_0, b_1, b_2, b_3 : flt_t;
-begin
- n1 := 1;
- n2 := 2;
- n3 := 3;
- n4 := 4;
- n5 := 5;
- n6 := 6;
- n7 := 7;
-
- (*______________________________________________
- *
- * General case
- *______________________________________________
- *)
-
- if _nbr_bits > 2 then
- begin
- sf := f;
-
- if _nbr_bits and 1 <> 0 then
- begin
- df := pointer(_buffer_ptr);
- df_temp := x;
- end
- else
- begin
- df := x;
- df_temp := pointer(_buffer_ptr);
- end;
-
- // Do the transformation in several pass
-
- // First pass
- for pass := _nbr_bits-1 downto 3 do
- begin
- coef_index := 0;
- nbr_coef := 1 shl pass;
- h_nbr_coef := nbr_coef shr 1;
- d_nbr_coef := nbr_coef shl 1;
-
- cos_ptr := pointer(_trigo_lut.get_ptr(pass));
-
- repeat
- sfr := pointer(longint(sf) + (coef_index*sizeof_flt));
- sfi := pointer(longint(sfr) + (nbr_coef*sizeof_flt));
- df1r := pointer(longint(df) + (coef_index*sizeof_flt));
- df2r := pointer(longint(df1r) + (nbr_coef*sizeof_flt));
-
- // Extreme coefficients are always real
- df1r^[0] := sfr^[0] + sfi^[0]; // + sfr [nbr_coef]
- df2r^[0] := sfr^[0] - sfi^[0]; // - sfr [nbr_coef]
- df1r^[h_nbr_coef] := sfr^[h_nbr_coef] * 2;
- df2r^[h_nbr_coef] := sfi^[h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- df1i := pointer(longint(df1r) + (h_nbr_coef*sizeof_flt));
- df2i := pointer(longint(df1i) + (nbr_coef*sizeof_flt));
-
- for i := 1 to h_nbr_coef-1 do
- begin
- df1r^[i] := sfr^[i] + sfi^[-i]; // + sfr [nbr_coef - i]
- df1i^[i] := sfi^[i] - sfi^[nbr_coef - i];
-
- c := cos_ptr^[i]; // cos (i*PI/nbr_coef);
- s := cos_ptr^[h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- vr := sfr^[i] - sfi^[-i]; // - sfr [nbr_coef - i]
- vi := sfi^[i] + sfi^[nbr_coef - i];
-
- df2r^[i] := vr * c + vi * s;
- df2i^[i] := vi * c - vr * s;
- end;
-
- inc(coef_index, d_nbr_coef);
- until (coef_index >= _length);
-
-
- // Prepare to the next pass
- if (pass < _nbr_bits - 1) then
- begin
- temp_ptr := df;
- df := sf;
- sf := temp_ptr;
- end
- else
- begin
- sf := df;
- df := df_temp;
- end
- end;
-
- // Antepenultimate pass
- sqrt2_2 := _sqrt2_2;
- coef_index := 0;
-
- repeat
- df^[coef_index] := sf^[coef_index] + sf^[coef_index + 4];
- df^[coef_index + 4] := sf^[coef_index] - sf^[coef_index + 4];
- df^[coef_index + 2] := sf^[coef_index + 2] * 2;
- df^[coef_index + 6] := sf^[coef_index + 6] * 2;
-
- df^[coef_index + 1] := sf^[coef_index + 1] + sf^[coef_index + 3];
- df^[coef_index + 3] := sf^[coef_index + 5] - sf^[coef_index + 7];
-
- vr := sf^[coef_index + 1] - sf^[coef_index + 3];
- vi := sf^[coef_index + 5] + sf^[coef_index + 7];
-
- df^[coef_index + 5] := (vr + vi) * sqrt2_2;
- df^[coef_index + 7] := (vi - vr) * sqrt2_2;
-
- inc(coef_index, 8);
- until (coef_index >= _length);
-
-
- // Penultimate and last pass at once
- coef_index := 0;
- bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
- sf2 := df;
-
- repeat
- b_0 := sf2^[0] + sf2^[n2];
- b_2 := sf2^[0] - sf2^[n2];
- b_1 := sf2^[n1] * 2;
- b_3 := sf2^[n3] * 2;
-
- x^[bit_rev_lut_ptr^[0]] := b_0 + b_1;
- x^[bit_rev_lut_ptr^[n1]] := b_0 - b_1;
- x^[bit_rev_lut_ptr^[n2]] := b_2 + b_3;
- x^[bit_rev_lut_ptr^[n3]] := b_2 - b_3;
-
- b_0 := sf2^[n4] + sf2^[n6];
- b_2 := sf2^[n4] - sf2^[n6];
- b_1 := sf2^[n5] * 2;
- b_3 := sf2^[n7] * 2;
-
- x^[bit_rev_lut_ptr^[n4]] := b_0 + b_1;
- x^[bit_rev_lut_ptr^[n5]] := b_0 - b_1;
- x^[bit_rev_lut_ptr^[n6]] := b_2 + b_3;
- x^[bit_rev_lut_ptr^[n7]] := b_2 - b_3;
-
- inc(sf2, 8);
- inc(coef_index, 8);
- inc(bit_rev_lut_ptr, 8);
- until (coef_index >= _length);
- end
-
- (*______________________________________________
- *
- * Special cases
- *______________________________________________
- *)
-
- // 4-point IFFT
- else if _nbr_bits = 2 then
- begin
- b_0 := f^[0] + f [n2];
- b_2 := f^[0] - f [n2];
-
- x^[0] := b_0 + f [n1] * 2;
- x^[n2] := b_0 - f [n1] * 2;
- x^[n1] := b_2 + f [n3] * 2;
- x^[n3] := b_2 - f [n3] * 2;
- end
-
- // 2-point IFFT
- else if _nbr_bits = 1 then
- begin
- x^[0] := f^[0] + f^[n1];
- x^[n1] := f^[0] - f^[n1];
- end
-
- // 1-point IFFT
- else
- x^[0] := f^[0];
-end;
-
-(*==========================================================================*/
-/* Name: rescale */
-/* Description: Scale an array by divide each element by its length. */
-/* This function should be called after FFT + IFFT. */
-/* Input/Output parameters: */
-/* - x: pointer on array to rescale (time or frequency). */
-/*==========================================================================*)
-procedure TFFTReal.rescale(x: pflt_array);
-var
- mul : flt_t;
- i : longint;
-begin
- mul := 1.0 / _length;
- i := _length - 1;
-
- repeat
- x^[i] := x^[i] * mul;
- dec(i);
- until (i < 0);
-end;
-
-end.
diff --git a/tests/manual/spectrum/3rdparty/fftreal/fftreal.pro b/tests/manual/spectrum/3rdparty/fftreal/fftreal.pro
deleted file mode 100644
index f6abeeb1..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/fftreal.pro
+++ /dev/null
@@ -1,44 +0,0 @@
-include(../../spectrum.pri)
-
-static: error(This library cannot be built for static linkage)
-
-TEMPLATE = lib
-TARGET = fftreal
-
-# FFTReal
-HEADERS += Array.h \
- Array.hpp \
- DynArray.h \
- DynArray.hpp \
- FFTRealFixLen.h \
- FFTRealFixLen.hpp \
- FFTRealFixLenParam.h \
- FFTRealPassDirect.h \
- FFTRealPassDirect.hpp \
- FFTRealPassInverse.h \
- FFTRealPassInverse.hpp \
- FFTRealSelect.h \
- FFTRealSelect.hpp \
- FFTRealUseTrigo.h \
- FFTRealUseTrigo.hpp \
- OscSinCos.h \
- OscSinCos.hpp \
- def.h
-
-# Wrapper used to export the required instantiation of the FFTRealFixLen template
-HEADERS += fftreal_wrapper.h
-SOURCES += fftreal_wrapper.cpp
-
-DEFINES += FFTREAL_LIBRARY
-
-macx {
- CONFIG += lib_bundle
-} else {
- DESTDIR = ../..$${spectrum_build_dir}
-}
-
-EXAMPLE_FILES = bwins/fftreal.def eabi/fftreal.def readme.txt license.txt
-
-target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/spectrum
-INSTALLS += target
-
diff --git a/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp b/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp
deleted file mode 100644
index 461c3907..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of QtDataVisualization.
-**
-** This program is free software: you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as
-** published by the Free Software Foundation, either version 2.1. This
-** program is distributed in the hope that it will be useful, but WITHOUT
-** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-** for more details. You should have received a copy of the GNU General
-** Public License along with this program. If not, see
-** <http://www.gnu.org/licenses/>.
-**
-***************************************************************************/
-
-#include "fftreal_wrapper.h"
-
-// FFTReal code generates quite a lot of 'unused parameter' compiler warnings,
-// which we suppress here in order to get a clean build output.
-#if defined Q_CC_MSVC
-# pragma warning(disable:4100)
-#elif defined Q_CC_GNU
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined Q_CC_MWERKS
-# pragma warning off (10182)
-#endif
-
-#include "FFTRealFixLen.h"
-
-class FFTRealWrapperPrivate {
-public:
- FFTRealFixLen<FFTLengthPowerOfTwo> m_fft;
-};
-
-
-FFTRealWrapper::FFTRealWrapper()
- : m_private(new FFTRealWrapperPrivate)
-{
-
-}
-
-FFTRealWrapper::~FFTRealWrapper()
-{
- delete m_private;
-}
-
-void FFTRealWrapper::calculateFFT(DataType in[], const DataType out[])
-{
- m_private->m_fft.do_fft(in, out);
-}
diff --git a/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.h b/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.h
deleted file mode 100644
index 1b4f58fb..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/fftreal_wrapper.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of QtDataVisualization.
-**
-** This program is free software: you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as
-** published by the Free Software Foundation, either version 2.1. This
-** program is distributed in the hope that it will be useful, but WITHOUT
-** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-** for more details. You should have received a copy of the GNU General
-** Public License along with this program. If not, see
-** <http://www.gnu.org/licenses/>.
-**
-***************************************************************************/
-
-#ifndef FFTREAL_WRAPPER_H
-#define FFTREAL_WRAPPER_H
-
-#include <QtCore/QtGlobal>
-
-#if defined(FFTREAL_LIBRARY)
-# define FFTREAL_EXPORT Q_DECL_EXPORT
-#else
-# define FFTREAL_EXPORT Q_DECL_IMPORT
-#endif
-
-class FFTRealWrapperPrivate;
-
-// Each pass of the FFT processes 2^X samples, where X is the
-// number below.
-static const int FFTLengthPowerOfTwo = 12;
-
-/**
- * Wrapper around the FFTRealFixLen template provided by the FFTReal
- * library
- *
- * This class instantiates a single instance of FFTRealFixLen, using
- * FFTLengthPowerOfTwo as the template parameter. It then exposes
- * FFTRealFixLen<FFTLengthPowerOfTwo>::do_fft via the calculateFFT
- * function, thereby allowing an application to dynamically link
- * against the FFTReal implementation.
- *
- * See http://ldesoras.free.fr/prod.html
- */
-class FFTREAL_EXPORT FFTRealWrapper
-{
-public:
- FFTRealWrapper();
- ~FFTRealWrapper();
-
- typedef float DataType;
- void calculateFFT(DataType in[], const DataType out[]);
-
-private:
- FFTRealWrapperPrivate* m_private;
-};
-
-#endif // FFTREAL_WRAPPER_H
-
diff --git a/tests/manual/spectrum/3rdparty/fftreal/license.txt b/tests/manual/spectrum/3rdparty/fftreal/license.txt
deleted file mode 100644
index 918fe68e..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/license.txt
+++ /dev/null
@@ -1,459 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/tests/manual/spectrum/3rdparty/fftreal/readme.txt b/tests/manual/spectrum/3rdparty/fftreal/readme.txt
deleted file mode 100644
index 0c5ce162..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/readme.txt
+++ /dev/null
@@ -1,242 +0,0 @@
-==============================================================================
-
- FFTReal
- Version 2.00, 2005/10/18
-
- Fourier transformation (FFT, IFFT) library specialised for real data
- Portable ISO C++
-
- (c) Laurent de Soras <laurent.de.soras@club-internet.fr>
- Object Pascal port (c) Frederic Vanmol <frederic@fruityloops.com>
-
-==============================================================================
-
-
-
-1. Legal
---------
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Check the file license.txt to get full information about the license.
-
-
-
-2. Content
-----------
-
-FFTReal is a library to compute Discrete Fourier Transforms (DFT) with the
-FFT algorithm (Fast Fourier Transform) on arrays of real numbers. It can
-also compute the inverse transform.
-
-You should find in this package a lot of files ; some of them are of interest:
-- readme.txt: you are reading it
-- FFTReal.h: FFT, length fixed at run-time
-- FFTRealFixLen.h: FFT, length fixed at compile-time
-- FFTReal.pas: Pascal implementation (working but not up-to-date)
-- stopwatch directory
-
-
-
-3. Using FFTReal
-----------------
-
-Important - if you were using older versions of FFTReal (up to 1.03), some
-things have changed. FFTReal is now a template. Therefore use FFTReal<float>
-or FFTReal<double> in your code depending on the application datatype. The
-flt_t typedef has been removed.
-
-You have two ways to use FFTReal. In the first way, the FFT has its length
-fixed at run-time, when the object is instanciated. It means that you have
-not to know the length when you write the code. This is the usual way of
-proceeding.
-
-
-3.1 FFTReal - Length fixed at run-time
---------------------------------------
-
-Just instanciate one time a FFTReal object. Specify the data type you want
-as template parameter (only floating point: float, double, long double or
-custom type). The constructor precompute a lot of things, so it may be a bit
-long. The parameter is the number of points used for the next FFTs. It must
-be a power of 2:
-
- #include "FFTReal.h"
- ...
- long len = 1024;
- ...
- FFTReal <float> fft_object (len); // 1024-point FFT object constructed.
-
-Then you can use this object to compute as many FFTs and IFFTs as you want.
-They will be computed very quickly because a lot of work has been done in the
-object construction.
-
- float x [1024];
- float f [1024];
-
- ...
- fft_object.do_fft (f, x); // x (real) --FFT---> f (complex)
- ...
- fft_object.do_ifft (f, x); // f (complex) --IFFT--> x (real)
- fft_object.rescale (x); // Post-scaling should be done after FFT+IFFT
- ...
-
-x [] and f [] are floating point number arrays. x [] is the real number
-sequence which we want to compute the FFT. f [] is the result, in the
-"frequency" domain. f has the same number of elements as x [], but f []
-elements are complex numbers. The routine uses some FFT properties to
-optimize memory and to reduce calculations: the transformaton of a real
-number sequence is a conjugate complex number sequence: F [k] = F [-k]*.
-
-
-3.2 FFTRealFixLen - Length fixed at compile-time
-------------------------------------------------
-
-This class is significantly faster than the previous one, giving a speed
-gain between 50 and 100 %. The template parameter is the base-2 logarithm of
-the FFT length. The datatype is float; it can be changed by modifying the
-DataType typedef in FFTRealFixLenParam.h. As FFTReal class, it supports
-only floating-point types or equivalent.
-
-To instanciate the object, just proceed as below:
-
- #include "FFTRealFixLen.h"
- ...
- FFTRealFixLen <10> fft_object; // 1024-point (2^10) FFT object constructed.
-
-Use is similar as the one of FFTReal.
-
-
-3.3 Data organisation
----------------------
-
-Mathematically speaking, the formulas below show what does FFTReal:
-
-do_fft() : f(k) = sum (p = 0, N-1, x(p) * exp (+j*2*pi*k*p/N))
-do_ifft(): x(k) = sum (p = 0, N-1, f(p) * exp (-j*2*pi*k*p/N))
-
-Where j is the square root of -1. The formulas differ only by the sign of
-the exponential. When the sign is positive, the transform is called positive.
-Common formulas for Fourier transform are negative for the direct tranform and
-positive for the inverse one.
-
-However in these formulas, f is an array of complex numbers and doesn't
-correspound exactly to the f[] array taken as function parameter. The
-following table shows how the f[] sequence is mapped onto the usable FFT
-coefficients (called bins):
-
- FFTReal output | Positive FFT equiv. | Negative FFT equiv.
- ---------------+-----------------------+-----------------------
- f [0] | Real (bin 0) | Real (bin 0)
- f [...] | Real (bin ...) | Real (bin ...)
- f [length/2] | Real (bin length/2) | Real (bin length/2)
- f [length/2+1] | Imag (bin 1) | -Imag (bin 1)
- f [...] | Imag (bin ...) | -Imag (bin ...)
- f [length-1] | Imag (bin length/2-1) | -Imag (bin length/2-1)
-
-And FFT bins are distributed in f [] as above:
-
- | | Positive FFT | Negative FFT
- Bin | Real part | imaginary part | imaginary part
- ------------+----------------+-----------------+---------------
- 0 | f [0] | 0 | 0
- 1 | f [1] | f [length/2+1] | -f [length/2+1]
- ... | f [...], | f [...] | -f [...]
- length/2-1 | f [length/2-1] | f [length-1] | -f [length-1]
- length/2 | f [length/2] | 0 | 0
- length/2+1 | f [length/2-1] | -f [length-1] | f [length-1]
- ... | f [...] | -f [...] | f [...]
- length-1 | f [1] | -f [length/2+1] | f [length/2+1]
-
-f [] coefficients have the same layout for FFT and IFFT functions. You may
-notice that scaling must be done if you want to retrieve x after FFT and IFFT.
-Actually, IFFT (FFT (x)) = x * length(x). This is a not a problem because
-most of the applications don't care about absolute values. Thus, the operation
-requires less calculation. If you want to use the FFT and IFFT to transform a
-signal, you have to apply post- (or pre-) processing yourself. Multiplying
-or dividing floating point numbers by a power of 2 doesn't generate extra
-computation noise.
-
-
-
-4. Compilation and testing
---------------------------
-
-Drop the following files into your project or makefile:
-
-Array.*
-def.h
-DynArray.*
-FFTReal*.cpp
-FFTReal*.h*
-OscSinCos.*
-
-Other files are for testing purpose only, do not include them if you just need
-to use the library ; they are not needed to use FFTReal in your own programs.
-
-FFTReal may be compiled in two versions: release and debug. Debug version
-has checks that could slow down the code. Define NDEBUG to set the Release
-mode. For example, the command line to compile the test bench on GCC would
-look like:
-
-Debug mode:
-g++ -Wall -o fftreal_debug.exe *.cpp stopwatch/*.cpp
-
-Release mode:
-g++ -Wall -o fftreal_release.exe -DNDEBUG -O3 *.cpp stopwatch/*.cpp
-
-It may be tricky to compile the test bench because the speed tests use the
-stopwatch sub-library, which is not that cross-platform. If you encounter
-any problem that you cannot easily fix while compiling it, edit the file
-test_settings.h and un-define the speed test macro. Remove the stopwatch
-directory from your source file list, too.
-
-If it's not done by default, you should activate the exception handling
-of your compiler to get the class memory-leak-safe. Thus, when a memory
-allocation fails (in the constructor), an exception is thrown and the entire
-object is safely destructed. It reduces the permanent error checking overhead
-in the client code. Also, the test bench requires Run-Time Type Information
-(RTTI) to be enabled in order to display the names of the tested classes -
-sometimes mangled, depending on the compiler.
-
-The test bench may take a long time to compile, especially in Release mode,
-because a lot of recursive templates are instanciated.
-
-
-
-5. History
-----------
-
-v2.00 (2005.10.18)
-- Turned FFTReal class into template (data type as parameter)
-- Added FFTRealFixLen
-- Trigonometric tables are size-limited in order to preserve cache memory;
-over a given size, sin/cos functions are computed on the fly.
-- Better test bench for accuracy and speed
-
-v1.03 (2001.06.15)
-- Thanks to Frederic Vanmol for the Pascal port (works with Delphi).
-- Documentation improvement
-
-v1.02 (2001.03.25)
-- sqrt() is now precomputed when the object FFTReal is constructed, resulting
-in speed impovement for small size FFT.
-
-v1.01 (2000)
-- Small modifications, I don't remember what.
-
-v1.00 (1999.08.14)
-- First version released
-
diff --git a/tests/manual/spectrum/3rdparty/fftreal/test.cpp b/tests/manual/spectrum/3rdparty/fftreal/test.cpp
deleted file mode 100644
index 7b6ed2ca..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/test.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/*****************************************************************************
-
- test.cpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (_MSC_VER)
- #pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
- #pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-#include "TestHelperFixLen.h"
-#include "TestHelperNormal.h"
-
-#if defined (_MSC_VER)
-#include <crtdbg.h>
-#include <new.h>
-#endif // _MSC_VER
-
-#include <new>
-
-#include <cassert>
-#include <cstdio>
-
-
-
-#define TEST_
-
-
-/*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-static int TEST_perform_test_accuracy_all ();
-static int TEST_perform_test_speed_all ();
-
-static void TEST_prog_init ();
-static void TEST_prog_end ();
-
-
-
-int main (int argc, char *argv [])
-{
- using namespace std;
-
- int ret_val = 0;
-
- TEST_prog_init ();
-
- try
- {
- if (ret_val == 0)
- {
- ret_val = TEST_perform_test_accuracy_all ();
- }
-
- if (ret_val == 0)
- {
- ret_val = TEST_perform_test_speed_all ();
- }
- }
-
- catch (std::exception &e)
- {
- printf ("\n*** main(): Exception (std::exception) : %s\n", e.what ());
- ret_val = -1;
- }
-
- catch (...)
- {
- printf ("\n*** main(): Undefined exception\n");
- ret_val = -1;
- }
-
- TEST_prog_end ();
-
- return (ret_val);
-}
-
-
-
-int TEST_perform_test_accuracy_all ()
-{
- int ret_val = 0;
-
- TestHelperNormal <float >::perform_test_accuracy (ret_val);
- TestHelperNormal <double>::perform_test_accuracy (ret_val);
-
- TestHelperFixLen < 1>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 2>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 3>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 4>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 7>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 8>::perform_test_accuracy (ret_val);
- TestHelperFixLen <10>::perform_test_accuracy (ret_val);
- TestHelperFixLen <12>::perform_test_accuracy (ret_val);
- TestHelperFixLen <13>::perform_test_accuracy (ret_val);
-
- return (ret_val);
-}
-
-
-
-int TEST_perform_test_speed_all ()
-{
- int ret_val = 0;
-
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- TestHelperNormal <float >::perform_test_speed (ret_val);
- TestHelperNormal <double>::perform_test_speed (ret_val);
-
- TestHelperFixLen < 1>::perform_test_speed (ret_val);
- TestHelperFixLen < 2>::perform_test_speed (ret_val);
- TestHelperFixLen < 3>::perform_test_speed (ret_val);
- TestHelperFixLen < 4>::perform_test_speed (ret_val);
- TestHelperFixLen < 7>::perform_test_speed (ret_val);
- TestHelperFixLen < 8>::perform_test_speed (ret_val);
- TestHelperFixLen <10>::perform_test_speed (ret_val);
- TestHelperFixLen <12>::perform_test_speed (ret_val);
- TestHelperFixLen <14>::perform_test_speed (ret_val);
- TestHelperFixLen <16>::perform_test_speed (ret_val);
- TestHelperFixLen <20>::perform_test_speed (ret_val);
-
-#endif
-
- return (ret_val);
-}
-
-
-
-#if defined (_MSC_VER)
-static int __cdecl TEST_new_handler_cb (size_t dummy)
-{
- throw std::bad_alloc ();
- return (0);
-}
-#endif // _MSC_VER
-
-
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
-static int __cdecl TEST_debug_alloc_hook_cb (int alloc_type, void *user_data_ptr, size_t size, int block_type, long request_nbr, const unsigned char *filename_0, int line_nbr)
-{
- if (block_type != _CRT_BLOCK) // Ignore CRT blocks to prevent infinite recursion
- {
- switch (alloc_type)
- {
- case _HOOK_ALLOC:
- case _HOOK_REALLOC:
- case _HOOK_FREE:
-
- // Put some debug code here
-
- break;
-
- default:
- assert (false); // Undefined allocation type
- break;
- }
- }
-
- return (1);
-}
-#endif
-
-
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
-static int __cdecl TEST_debug_report_hook_cb (int report_type, char *user_msg_0, int *ret_val_ptr)
-{
- *ret_val_ptr = 0; // 1 to override the CRT default reporting mode
-
- switch (report_type)
- {
- case _CRT_WARN:
- case _CRT_ERROR:
- case _CRT_ASSERT:
-
-// Put some debug code here
-
- break;
- }
-
- return (*ret_val_ptr);
-}
-#endif
-
-
-
-static void TEST_prog_init ()
-{
-#if defined (_MSC_VER)
- ::_set_new_handler (::TEST_new_handler_cb);
-#endif // _MSC_VER
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
- {
- const int mode = (1 * _CRTDBG_MODE_DEBUG)
- | (1 * _CRTDBG_MODE_WNDW);
- ::_CrtSetReportMode (_CRT_WARN, mode);
- ::_CrtSetReportMode (_CRT_ERROR, mode);
- ::_CrtSetReportMode (_CRT_ASSERT, mode);
-
- const int old_flags = ::_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
- ::_CrtSetDbgFlag ( old_flags
- | (1 * _CRTDBG_LEAK_CHECK_DF)
- | (1 * _CRTDBG_CHECK_ALWAYS_DF));
- ::_CrtSetBreakAlloc (-1); // Specify here a memory bloc number
- ::_CrtSetAllocHook (TEST_debug_alloc_hook_cb);
- ::_CrtSetReportHook (TEST_debug_report_hook_cb);
-
- // Speed up I/O but breaks C stdio compatibility
-// std::cout.sync_with_stdio (false);
-// std::cin.sync_with_stdio (false);
-// std::cerr.sync_with_stdio (false);
-// std::clog.sync_with_stdio (false);
- }
-#endif // _MSC_VER, NDEBUG
-}
-
-
-
-static void TEST_prog_end ()
-{
-#if defined (_MSC_VER) && ! defined (NDEBUG)
- {
- const int mode = (1 * _CRTDBG_MODE_DEBUG)
- | (0 * _CRTDBG_MODE_WNDW);
- ::_CrtSetReportMode (_CRT_WARN, mode);
- ::_CrtSetReportMode (_CRT_ERROR, mode);
- ::_CrtSetReportMode (_CRT_ASSERT, mode);
-
- ::_CrtMemState mem_state;
- ::_CrtMemCheckpoint (&mem_state);
- ::_CrtMemDumpStatistics (&mem_state);
- }
-#endif // _MSC_VER, NDEBUG
-}
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/test_fnc.h b/tests/manual/spectrum/3rdparty/fftreal/test_fnc.h
deleted file mode 100644
index 26221566..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/test_fnc.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************
-
- test_fnc.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (test_fnc_HEADER_INCLUDED)
-#define test_fnc_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-inline T limit (const T &x, const T &inf, const T &sup);
-
-
-
-#include "test_fnc.hpp"
-
-
-
-#endif // test_fnc_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/test_fnc.hpp b/tests/manual/spectrum/3rdparty/fftreal/test_fnc.hpp
deleted file mode 100644
index 4b5f9f59..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/test_fnc.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************
-
- test_fnc.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (test_fnc_CURRENT_CODEHEADER)
- #error Recursive inclusion of test_fnc code header.
-#endif
-#define test_fnc_CURRENT_CODEHEADER
-
-#if ! defined (test_fnc_CODEHEADER_INCLUDED)
-#define test_fnc_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-T limit (const T &x, const T &inf, const T &sup)
-{
- assert (! (sup < inf));
-
- return ((x < inf) ? inf : ((sup < x) ? sup : x));
-}
-
-
-
-#endif // test_fnc_CODEHEADER_INCLUDED
-
-#undef test_fnc_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/test_settings.h b/tests/manual/spectrum/3rdparty/fftreal/test_settings.h
deleted file mode 100644
index b893afc8..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/test_settings.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************************
-
- test_settings.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (test_settings_HEADER_INCLUDED)
-#define test_settings_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-// #undef this label to avoid speed test compilation.
-#define test_settings_SPEED_TEST_ENABLED
-
-
-
-#endif // test_settings_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/tests/manual/spectrum/3rdparty/fftreal/testapp.dpr b/tests/manual/spectrum/3rdparty/fftreal/testapp.dpr
deleted file mode 100644
index 54f2eb99..00000000
--- a/tests/manual/spectrum/3rdparty/fftreal/testapp.dpr
+++ /dev/null
@@ -1,150 +0,0 @@
-program testapp;
-{$APPTYPE CONSOLE}
-uses
- SysUtils,
- fftreal in 'fftreal.pas',
- Math,
- Windows;
-
-var
- nbr_points : longint;
- x, f : pflt_array;
- fft : TFFTReal;
- i : longint;
- PI : double;
- areal, img : double;
- f_abs : double;
- buffer_size : longint;
- nbr_tests : longint;
- time0, time1, time2 : int64;
- timereso : int64;
- offset : longint;
- t0, t1 : double;
- nbr_s_chn : longint;
- tempp1, tempp2 : pflt_array;
-
-begin
- (*______________________________________________
- *
- * Exactness test
- *______________________________________________
- *)
-
- WriteLn('Accuracy test:');
- WriteLn;
-
- nbr_points := 16; // Power of 2
- GetMem(x, nbr_points * sizeof_flt);
- GetMem(f, nbr_points * sizeof_flt);
- fft := TFFTReal.Create(nbr_points); // FFT object initialized here
-
- // Test signal
- PI := ArcTan(1) * 4;
- for i := 0 to nbr_points-1 do
- begin
- x^[i] := -1 + sin (3*2*PI*i/nbr_points)
- + cos (5*2*PI*i/nbr_points) * 2
- - sin (7*2*PI*i/nbr_points) * 3
- + cos (8*2*PI*i/nbr_points) * 5;
- end;
-
- // Compute FFT and IFFT
- fft.do_fft(f, x);
- fft.do_ifft(f, x);
- fft.rescale(x);
-
- // Display the result
- WriteLn('FFT:');
- for i := 0 to nbr_points div 2 do
- begin
- areal := f^[i];
- if (i > 0) and (i < nbr_points div 2) then
- img := f^[i + nbr_points div 2]
- else
- img := 0;
-
- f_abs := Sqrt(areal * areal + img * img);
- WriteLn(Format('%5d: %12.6f %12.6f (%12.6f)', [i, areal, img, f_abs]));
- end;
-
- WriteLn;
- WriteLn('IFFT:');
- for i := 0 to nbr_points-1 do
- WriteLn(Format('%5d: %f', [i, x^[i]]));
-
- WriteLn;
-
- FreeMem(x);
- FreeMem(f);
- fft.Free;
-
-
- (*______________________________________________
- *
- * Speed test
- *______________________________________________
- *)
-
- WriteLn('Speed test:');
- WriteLn('Please wait...');
- WriteLn;
-
- nbr_points := 1024; // Power of 2
- buffer_size := 256*nbr_points; // Number of flt_t (float or double)
- nbr_tests := 10000;
-
- assert(nbr_points <= buffer_size);
- GetMem(x, buffer_size * sizeof_flt);
- GetMem(f, buffer_size * sizeof_flt);
- fft := TFFTReal.Create(nbr_points); // FFT object initialized here
-
- // Test signal: noise
- for i := 0 to nbr_points-1 do
- x^[i] := Random($7fff) - ($7fff shr 1);
-
- // timing
- QueryPerformanceFrequency(timereso);
- QueryPerformanceCounter(time0);
-
- for i := 0 to nbr_tests-1 do
- begin
- offset := (i * nbr_points) and (buffer_size - 1);
- tempp1 := f;
- inc(tempp1, offset);
- tempp2 := x;
- inc(tempp2, offset);
- fft.do_fft(tempp1, tempp2);
- end;
-
- QueryPerformanceCounter(time1);
-
- for i := 0 to nbr_tests-1 do
- begin
- offset := (i * nbr_points) and (buffer_size - 1);
- tempp1 := f;
- inc(tempp1, offset);
- tempp2 := x;
- inc(tempp2, offset);
- fft.do_ifft(tempp1, tempp2);
- fft.rescale(x);
- end;
-
- QueryPerformanceCounter(time2);
-
- t0 := ((time1-time0) / timereso) / nbr_tests;
- t1 := ((time2-time1) / timereso) / nbr_tests;
-
- WriteLn(Format('%d-points FFT : %.0f us.', [nbr_points, t0 * 1000000]));
- WriteLn(Format('%d-points IFFT + scaling: %.0f us.', [nbr_points, t1 * 1000000]));
-
- nbr_s_chn := Floor(nbr_points / ((t0 + t1) * 44100 * 2));
- WriteLn(Format('Peak performance: FFT+IFFT on %d mono channels at 44.1 KHz (with overlapping)', [nbr_s_chn]));
- WriteLn;
-
- FreeMem(x);
- FreeMem(f);
- fft.Free;
-
- WriteLn('Press [Return] key to terminate...');
- ReadLn;
-end.
diff --git a/tests/manual/spectrum/README.txt b/tests/manual/spectrum/README.txt
deleted file mode 100644
index c39d4a70..00000000
--- a/tests/manual/spectrum/README.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-Spectrum analyser demo app
-==========================
-
-Introduction
-------------
-
-This application is a demo which uses the QtMultimedia APIs to capture and play back PCM audio. While either recording or playback is ongoing, the application performs real-time level and frequency spectrum analysis, displaying the results in its main window.
-
-
-Acknowledgments
----------------
-
-The application uses the FFTReal v2.00 library by Laurent de Soras to perform frequency analysis of the audio signal. For further information, see the project home page:
- http://ldesoras.free.fr/prod.html
-
-
-Quick start
------------
-
-Play generated tone
-1. Select 'Play generated tone' from the mode menu
-2. Ensure that the 'Frequency sweep' box is checked
-3. Press 'OK'
-4. Press the play button
-You should hear a rising tone, and see progressively higher frequencies indicated by the spectrograph.
-
-Record and playback
-1. Select 'Record and play back audio' from the mode menu
-2. Press the record button, and speak into the microphone
-3. Wait until the buffer is full (shown as a full blue bar in the top widget)
-4. Press play, and wait until playback of the buffer is complete
-
-Play file
-1. Select 'Play file' from the mode menu
-2. Select a WAV file
-3. Press the play button
-You should hear the first few seconds of the file being played. The waveform, spectrograph and level meter should be updated as the file is played.
-
-
-Things to play with
--------------------
-
-Try repeating the 'Play generated tone' sequence using different window functions. These can be selected from the settings dialog - launch it by pressing the spanner icon. The window function is applied to the audio signal before performing the frequency analysis; different windows should have a visible effect on the resulting frequency spectrum.
-
-Try clicking on one of the spectrograph bars while the tone is being played. The frequency range for that bar will be displayed at the top of the application window.
-
-
-Troubleshooting
----------------
-
-If either recording or playback do not work, you may need to select a different input / output audio device. This can be done in the settings dialog - launch it by pressing the spanner icon.
-
-If that doesn't work, there may be a problem either in the application or in Qt. Report a bug in the usual way.
-
-
-Application interface
----------------------
-
-The main window of the application contains the following widgets, starting at the top:
-
-Message box
-This shows various messages during execution, such as the current audio format.
-
-Progress bar / waveform display
-- While recording or playback is ongoing, the audio waveform is displayed, sliding from right to left.
-- Superimposed on the waveform, the amount of data currently in the buffer is showed as a blue bar. When recording, this blue bar fills up from left to right; when playing, the bar gets consumed from left to right.
-- A green window shows which part of the buffer has most recently been analysed. This window should be close to the 'leading edge' of recording or playback, i.e. the most recently recorded / played data, although it will lag slightly depending on the performance of the machine on which the application is running.
-
-Frequency spectrograph (on the left)
-The spectrograph shows 10 bars, each representing a frequency range. The frequency range of each bar is displayed in the message box when the bar is clicked. The height of the bar shows the maximum amplitude of freqencies within its range.
-
-Level meter (on the right)
-The current peak audio level is shown as a pink bar; the current RMS level is shown as a red bar. The 'high water mark' during a recent period is shown as a thin red line.
-
-Button panel
-- The mode menu allows switching between the three operation modes - 'Play generated tone', 'Record and play back' and 'Play file'.
-- The record button starts or resumes audio capture from the current input device.
-- The pause button suspends either capture or recording.
-- The play button starts or resumes audio playback to the current output device.
-- The settings button launches the settings dialog.
-
-
-Hacking
--------
-
-If you want to hack the application, here are some pointers to get started.
-
-The spectrum.pri file contains several macros which you can enable by uncommenting:
-- LOG_FOO Enable logging from class Foo via qDebug()
-- DUMP_FOO Dump data from class Foo to the file system
- e.g. DUMP_SPECTRUMANALYSER writes files containing the raw FFT input and output.
- Be aware that this can generate a *lot* of data and may slow the app down considerably.
-- DISABLE_FOO Disable specified functionality
-
-If you don't like the combination of the waveform and progress bar in a single widget, separate them by commenting out SUPERIMPOSE_PROGRESS_ON_WAVEFORM.
-
-The spectrum.h file defines a number of parameters which can be played with. These control things such as the number of audio samples analysed per FFT calculation, the range and number of bands displayed by the spectrograph, and so on.
-
-The part of the application which interacts with QtMultimedia is in the Engine class.
-
-Some ideas for enhancements to the app are listed in TODO.txt. Feel free to start work on any of them :)
-
-
diff --git a/tests/manual/spectrum/spectrum.pri b/tests/manual/spectrum/spectrum.pri
deleted file mode 100644
index 31a3767c..00000000
--- a/tests/manual/spectrum/spectrum.pri
+++ /dev/null
@@ -1,18 +0,0 @@
-# The following macros allow certain features and debugging output
-# to be disabled / enabled at compile time.
-
-# Debug output from spectrum calculation
-#DEFINES += LOG_SPECTRUMANALYSER
-
-# Debug output from engine
-#DEFINES += LOG_ENGINE
-
-# Disable level calculation
-DEFINES += DISABLE_LEVEL
-
-# Perform spectrum analysis calculation in a separate thread
-DEFINES += SPECTRUM_ANALYSER_SEPARATE_THREAD
-
-# Suppress warnings about strncpy potentially being unsafe, emitted by MSVC
-win32: DEFINES += _CRT_SECURE_NO_WARNINGS
-
diff --git a/tests/manual/spectrum/spectrum.pro b/tests/manual/spectrum/spectrum.pro
deleted file mode 100644
index 2f44bfac..00000000
--- a/tests/manual/spectrum/spectrum.pro
+++ /dev/null
@@ -1,16 +0,0 @@
-qtHaveModule(multimedia) {
-!include( ../tests.pri ) {
- error( "Couldn't find the tests.pri file!" )
-}
-include(spectrum.pri)
-
-TEMPLATE = subdirs
-
-# Ensure that library is built before application
-CONFIG += ordered
-
-SUBDIRS += 3rdparty/fftreal
-SUBDIRS += spectrumapp
-
-TARGET = spectrum
-}
diff --git a/tests/manual/spectrum/spectrumapp/engine.cpp b/tests/manual/spectrum/spectrumapp/engine.cpp
deleted file mode 100644
index 349a764f..00000000
--- a/tests/manual/spectrum/spectrumapp/engine.cpp
+++ /dev/null
@@ -1,622 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "engine.h"
-#include "utils.h"
-
-#include <math.h>
-
-#include <QAudioInput>
-#include <QAudioOutput>
-#include <QCoreApplication>
-#include <QDebug>
-#include <QFile>
-#include <QMetaObject>
-#include <QSet>
-#include <QThread>
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const qint64 BufferDurationUs = 10 * 1000000;
-const int NotifyIntervalMs = 100;
-
-// Size of the level calculation window in microseconds
-const int LevelWindowUs = 0.1 * 1000000;
-
-//-----------------------------------------------------------------------------
-// Constructor and destructor
-//-----------------------------------------------------------------------------
-
-Engine::Engine(QObject *parent)
- : QObject(parent),
- m_mode(QAudio::AudioInput),
- m_state(QAudio::StoppedState),
- m_generateTone(false),
- m_file(0),
- m_analysisFile(0),
- m_availableAudioInputDevices
- (QAudioDeviceInfo::availableDevices(QAudio::AudioInput)),
- m_audioInputDevice(QAudioDeviceInfo::defaultInputDevice()),
- m_audioInput(0),
- m_audioInputIODevice(0),
- m_recordPosition(0),
- m_availableAudioOutputDevices
- (QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)),
- m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice()),
- m_audioOutput(0),
- m_playPosition(0),
- m_bufferPosition(0),
- m_bufferLength(0),
- m_dataLength(0),
- m_levelBufferLength(0),
- m_rmsLevel(0.0),
- m_peakLevel(0.0),
- m_spectrumBufferLength(0),
- m_spectrumAnalyser(),
- m_spectrumPosition(0),
- m_count(0)
-{
- qRegisterMetaType<FrequencySpectrum>("FrequencySpectrum");
- qRegisterMetaType<WindowFunction>("WindowFunction");
- CHECKED_CONNECT(&m_spectrumAnalyser,
- SIGNAL(spectrumChanged(FrequencySpectrum)),
- this,
- SLOT(spectrumChanged(FrequencySpectrum)));
-
- initialize();
- qDebug() << "output devices:";
- foreach (QAudioDeviceInfo device, m_availableAudioOutputDevices)
- qDebug() << device.deviceName();
- qDebug() << "input devices:";
- foreach (QAudioDeviceInfo device, m_availableAudioInputDevices)
- qDebug() << device.deviceName();
-}
-
-Engine::~Engine()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-bool Engine::loadFile(const QString &fileName)
-{
- reset();
- bool result = false;
- Q_ASSERT(!m_generateTone);
- Q_ASSERT(!m_file);
- Q_ASSERT(!fileName.isEmpty());
- m_file = new WavFile(this);
- if (m_file->open(fileName)) {
- if (isPCMS16LE(m_file->fileFormat())) {
- result = initialize();
- } else {
- ENGINE_DEBUG << "Audio format not supported" << formatToString(m_file->fileFormat());
- }
- } else {
- ENGINE_DEBUG << "Could not open file" << fileName;
- }
- if (result) {
- m_analysisFile = new WavFile(this);
- m_analysisFile->open(fileName);
- }
- return result;
-}
-
-qint64 Engine::bufferLength() const
-{
- return m_file ? m_file->size() : m_bufferLength;
-}
-
-void Engine::setWindowFunction(WindowFunction type)
-{
- m_spectrumAnalyser.setWindowFunction(type);
-}
-
-
-//-----------------------------------------------------------------------------
-// Public slots
-//-----------------------------------------------------------------------------
-
-void Engine::startRecording()
-{
- if (m_audioInput) {
- if (QAudio::AudioInput == m_mode &&
- QAudio::SuspendedState == m_state) {
- m_audioInput->resume();
- } else {
- m_spectrumAnalyser.cancelCalculation();
- changedSpectrum(0, 0, FrequencySpectrum());
-
- m_buffer.fill(0);
- setRecordPosition(0, true);
- stopPlayback();
- m_mode = QAudio::AudioInput;
- CHECKED_CONNECT(m_audioInput, SIGNAL(stateChanged(QAudio::State)),
- this, SLOT(audioStateChanged(QAudio::State)));
- CHECKED_CONNECT(m_audioInput, SIGNAL(notify()),
- this, SLOT(audioNotify()));
- m_count = 0;
- m_dataLength = 0;
- emit dataLengthChanged(0);
- m_audioInputIODevice = m_audioInput->start();
- CHECKED_CONNECT(m_audioInputIODevice, SIGNAL(readyRead()),
- this, SLOT(audioDataReady()));
- }
- }
-}
-
-void Engine::startPlayback()
-{
- if (m_audioOutput) {
- if (QAudio::AudioOutput == m_mode &&
- QAudio::SuspendedState == m_state) {
-#ifdef Q_OS_WIN
- // The Windows backend seems to internally go back into ActiveState
- // while still returning SuspendedState, so to ensure that it doesn't
- // ignore the resume() call, we first re-suspend
- m_audioOutput->suspend();
-#endif
- m_audioOutput->resume();
- } else {
- m_spectrumAnalyser.cancelCalculation();
- changedSpectrum(0, 0, FrequencySpectrum());
- setPlayPosition(0, true);
- stopRecording();
- m_mode = QAudio::AudioOutput;
- CHECKED_CONNECT(m_audioOutput, SIGNAL(stateChanged(QAudio::State)),
- this, SLOT(audioStateChanged(QAudio::State)));
- CHECKED_CONNECT(m_audioOutput, SIGNAL(notify()),
- this, SLOT(audioNotify()));
- m_count = 0;
- if (m_file) {
- m_file->seek(0);
- m_bufferPosition = 0;
- m_dataLength = 0;
- m_audioOutput->start(m_file);
- } else {
- m_audioOutputIODevice.close();
- m_audioOutputIODevice.setBuffer(&m_buffer);
- m_audioOutputIODevice.open(QIODevice::ReadOnly);
- m_audioOutput->start(&m_audioOutputIODevice);
- }
- }
- }
-}
-
-void Engine::suspend()
-{
- if (QAudio::ActiveState == m_state ||
- QAudio::IdleState == m_state) {
- switch (m_mode) {
- case QAudio::AudioInput:
- m_audioInput->suspend();
- break;
- case QAudio::AudioOutput:
- m_audioOutput->suspend();
- break;
- }
- }
-}
-
-void Engine::setAudioInputDevice(const QAudioDeviceInfo &device)
-{
- if (device.deviceName() != m_audioInputDevice.deviceName()) {
- m_audioInputDevice = device;
- initialize();
- }
-}
-
-void Engine::setAudioOutputDevice(const QAudioDeviceInfo &device)
-{
- if (device.deviceName() != m_audioOutputDevice.deviceName()) {
- m_audioOutputDevice = device;
- initialize();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void Engine::audioNotify()
-{
- switch (m_mode) {
- case QAudio::AudioInput: {
- const qint64 recordPosition = qMin(m_bufferLength, audioLength(m_format, m_audioInput->processedUSecs()));
- setRecordPosition(recordPosition);
- const qint64 levelPosition = m_dataLength - m_levelBufferLength;
- if (levelPosition >= 0)
- calculateLevel(levelPosition, m_levelBufferLength);
- if (m_dataLength >= m_spectrumBufferLength) {
- const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength;
- calculateSpectrum(spectrumPosition);
- }
- emit bufferChanged(0, m_dataLength, m_buffer);
- }
- break;
- case QAudio::AudioOutput: {
- const qint64 playPosition = audioLength(m_format, m_audioOutput->processedUSecs());
- setPlayPosition(qMin(bufferLength(), playPosition));
- const qint64 levelPosition = playPosition - m_levelBufferLength;
- const qint64 spectrumPosition = playPosition - m_spectrumBufferLength;
- if (m_file) {
- if (levelPosition > m_bufferPosition ||
- spectrumPosition > m_bufferPosition ||
- qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) {
- m_bufferPosition = 0;
- m_dataLength = 0;
- // Data needs to be read into m_buffer in order to be analysed
- const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition));
- const qint64 readEnd = qMin(m_analysisFile->size(), qMax(levelPosition + m_levelBufferLength, spectrumPosition + m_spectrumBufferLength));
- const qint64 readLen = readEnd - readPos + audioLength(m_format, WaveformWindowDuration);
- ENGINE_DEBUG << "Engine::audioNotify [1]"
- << "analysisFileSize" << m_analysisFile->size()
- << "readPos" << readPos
- << "readLen" << readLen;
- if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) {
- m_buffer.resize(readLen);
- m_bufferPosition = readPos;
- m_dataLength = m_analysisFile->read(m_buffer.data(), readLen);
- ENGINE_DEBUG << "Engine::audioNotify [2]" << "bufferPosition" << m_bufferPosition << "dataLength" << m_dataLength;
- } else {
- ENGINE_DEBUG << "Engine::audioNotify [2]" << "file seek error";
- }
- emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer);
- }
- } else {
- if (playPosition >= m_dataLength)
- stopPlayback();
- }
- if (levelPosition >= 0 && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength)
- calculateLevel(levelPosition, m_levelBufferLength);
- if (spectrumPosition >= 0 && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength)
- calculateSpectrum(spectrumPosition);
- }
- break;
- }
-}
-
-void Engine::audioStateChanged(QAudio::State state)
-{
- ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state
- << "to" << state;
-
- if (QAudio::IdleState == state && m_file && m_file->pos() == m_file->size()) {
- stopPlayback();
- } else {
- if (QAudio::StoppedState == state) {
- // Check error
- QAudio::Error error = QAudio::NoError;
- switch (m_mode) {
- case QAudio::AudioInput:
- error = m_audioInput->error();
- break;
- case QAudio::AudioOutput:
- error = m_audioOutput->error();
- break;
- }
- if (QAudio::NoError != error) {
- reset();
- return;
- }
- }
- setState(state);
- }
-}
-
-void Engine::audioDataReady()
-{
- Q_ASSERT(0 == m_bufferPosition);
- const qint64 bytesReady = m_audioInput->bytesReady();
- const qint64 bytesSpace = m_buffer.size() - m_dataLength;
- const qint64 bytesToRead = qMin(bytesReady, bytesSpace);
-
- const qint64 bytesRead = m_audioInputIODevice->read(
- m_buffer.data() + m_dataLength,
- bytesToRead);
-
- if (bytesRead) {
- m_dataLength += bytesRead;
- emit dataLengthChanged(dataLength());
- }
-
- if (m_buffer.size() == m_dataLength)
- stopRecording();
-}
-
-void Engine::spectrumChanged(const FrequencySpectrum &spectrum)
-{
- ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition;
- emit changedSpectrum(m_spectrumPosition, m_spectrumBufferLength, spectrum);
-}
-
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void Engine::resetAudioDevices()
-{
- delete m_audioInput;
- m_audioInput = 0;
- m_audioInputIODevice = 0;
- setRecordPosition(0);
- delete m_audioOutput;
- m_audioOutput = 0;
- setPlayPosition(0);
- m_spectrumPosition = 0;
- setLevel(0.0, 0.0, 0);
-}
-
-void Engine::reset()
-{
- stopRecording();
- stopPlayback();
- setState(QAudio::AudioInput, QAudio::StoppedState);
- setFormat(QAudioFormat());
- m_generateTone = false;
- delete m_file;
- m_file = 0;
- delete m_analysisFile;
- m_analysisFile = 0;
- m_buffer.clear();
- m_bufferPosition = 0;
- m_bufferLength = 0;
- m_dataLength = 0;
- emit dataLengthChanged(0);
- resetAudioDevices();
-}
-
-bool Engine::initialize()
-{
- bool result = false;
-
- QAudioFormat format = m_format;
-
- if (selectFormat()) {
- resetAudioDevices();
- if (m_file) {
- emit bufferLengthChanged(bufferLength());
- emit dataLengthChanged(dataLength());
- emit bufferChanged(0, 0, m_buffer);
- setRecordPosition(bufferLength());
- result = true;
- }
- m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
- m_audioOutput->setNotifyInterval(NotifyIntervalMs);
- } else {
- if (m_file)
- ENGINE_DEBUG << "Audio format not supported" << formatToString(m_format);
- else
- ENGINE_DEBUG << "No common input / output format found";
- }
-
- ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength;
- ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength;
- ENGINE_DEBUG << "Engine::initialize" << "format" << m_format;
-
- return result;
-}
-
-bool Engine::selectFormat()
-{
- bool foundSupportedFormat = false;
-
- if (m_file || QAudioFormat() != m_format) {
- QAudioFormat format = m_format;
- if (m_file)
- // Header is read from the WAV file; just need to check whether
- // it is supported by the audio output device
- format = m_file->fileFormat();
- if (m_audioOutputDevice.isFormatSupported(format)) {
- setFormat(format);
- foundSupportedFormat = true;
- }
- } else {
-
- QList<int> sampleRatesList;
-#ifdef Q_OS_WIN
- // The Windows audio backend does not correctly report format support
- // (see QTBUG-9100). Furthermore, although the audio subsystem captures
- // at 11025Hz, the resulting audio is corrupted.
- sampleRatesList += 8000;
-#endif
-
- if (!m_generateTone)
- sampleRatesList += m_audioInputDevice.supportedSampleRates();
-
- sampleRatesList += m_audioOutputDevice.supportedSampleRates();
- sampleRatesList = sampleRatesList.toSet().toList(); // remove duplicates
- qSort(sampleRatesList);
- ENGINE_DEBUG << "Engine::initialize frequenciesList" << sampleRatesList;
-
- QList<int> channelsList;
- channelsList += m_audioInputDevice.supportedChannelCounts();
- channelsList += m_audioOutputDevice.supportedChannelCounts();
- channelsList = channelsList.toSet().toList();
- qSort(channelsList);
- ENGINE_DEBUG << "Engine::initialize channelsList" << channelsList;
-
- QAudioFormat format;
- format.setByteOrder(QAudioFormat::LittleEndian);
- format.setCodec("audio/pcm");
- format.setSampleSize(16);
- format.setSampleType(QAudioFormat::SignedInt);
- int sampleRate, channels;
- foreach (sampleRate, sampleRatesList) {
- if (foundSupportedFormat)
- break;
- format.setSampleRate(sampleRate);
- foreach (channels, channelsList) {
- format.setChannelCount(channels);
- const bool inputSupport = m_generateTone ||
- m_audioInputDevice.isFormatSupported(format);
- const bool outputSupport = m_audioOutputDevice.isFormatSupported(format);
- ENGINE_DEBUG << "Engine::initialize checking " << format
- << "input" << inputSupport
- << "output" << outputSupport;
- if (inputSupport && outputSupport) {
- foundSupportedFormat = true;
- break;
- }
- }
- }
-
- if (!foundSupportedFormat)
- format = QAudioFormat();
-
- setFormat(format);
- }
-
- return foundSupportedFormat;
-}
-
-void Engine::stopRecording()
-{
- if (m_audioInput) {
- m_audioInput->stop();
- QCoreApplication::instance()->processEvents();
- m_audioInput->disconnect();
- }
- m_audioInputIODevice = 0;
-}
-
-void Engine::stopPlayback()
-{
- if (m_audioOutput) {
- m_audioOutput->stop();
- QCoreApplication::instance()->processEvents();
- m_audioOutput->disconnect();
- setPlayPosition(0);
- }
-}
-
-void Engine::setState(QAudio::State state)
-{
- const bool changed = (m_state != state);
- m_state = state;
- if (changed)
- emit stateChanged(m_mode, m_state);
-}
-
-void Engine::setState(QAudio::Mode mode, QAudio::State state)
-{
- const bool changed = (m_mode != mode || m_state != state);
- m_mode = mode;
- m_state = state;
- if (changed)
- emit stateChanged(m_mode, m_state);
-}
-
-void Engine::setRecordPosition(qint64 position, bool forceEmit)
-{
- const bool changed = (m_recordPosition != position);
- m_recordPosition = position;
- if (changed || forceEmit)
- emit recordPositionChanged(m_recordPosition);
-}
-
-void Engine::setPlayPosition(qint64 position, bool forceEmit)
-{
- const bool changed = (m_playPosition != position);
- m_playPosition = position;
- if (changed || forceEmit)
- emit playPositionChanged(m_playPosition);
-}
-
-void Engine::calculateLevel(qint64 position, qint64 length)
-{
-#ifdef DISABLE_LEVEL
- Q_UNUSED(position)
- Q_UNUSED(length)
-#else
- Q_ASSERT(position + length <= m_bufferPosition + m_dataLength);
-
- qreal peakLevel = 0.0;
-
- qreal sum = 0.0;
- const char *ptr = m_buffer.constData() + position - m_bufferPosition;
- const char *const end = ptr + length;
- while (ptr < end) {
- const qint16 value = *reinterpret_cast<const qint16*>(ptr);
- const qreal fracValue = pcmToReal(value);
- peakLevel = qMax(peakLevel, fracValue);
- sum += fracValue * fracValue;
- ptr += 2;
- }
- const int numSamples = length / 2;
- qreal rmsLevel = sqrt(sum / numSamples);
-
- rmsLevel = qMax(qreal(0.0), rmsLevel);
- rmsLevel = qMin(qreal(1.0), rmsLevel);
- setLevel(rmsLevel, peakLevel, numSamples);
-
- ENGINE_DEBUG << "Engine::calculateLevel" << "pos" << position << "len" << length
- << "rms" << rmsLevel << "peak" << peakLevel;
-#endif
-}
-
-void Engine::calculateSpectrum(qint64 position)
-{
-#ifdef DISABLE_SPECTRUM
- Q_UNUSED(position)
-#else
- Q_ASSERT(position + m_spectrumBufferLength <= m_bufferPosition + m_dataLength);
- Q_ASSERT(0 == m_spectrumBufferLength % 2); // constraint of FFT algorithm
-
- // QThread::currentThread is marked 'for internal use only', but
- // we're only using it for debug output here, so it's probably OK :)
- ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread()
- << "count" << m_count << "pos" << position << "len" << m_spectrumBufferLength
- << "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady();
-
- if (m_spectrumAnalyser.isReady()) {
- m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position - m_bufferPosition,
- m_spectrumBufferLength);
- m_spectrumPosition = position;
- m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format);
- }
-#endif
-}
-
-void Engine::setFormat(const QAudioFormat &format)
-{
- const bool changed = (format != m_format);
- m_format = format;
- m_levelBufferLength = audioLength(m_format, LevelWindowUs);
- m_spectrumBufferLength = SpectrumLengthSamples *
- (m_format.sampleSize() / 8) * m_format.channelCount();
- if (changed)
- emit formatChanged(m_format);
-}
-
-void Engine::setLevel(qreal rmsLevel, qreal peakLevel, int numSamples)
-{
- m_rmsLevel = rmsLevel;
- m_peakLevel = peakLevel;
- emit levelChanged(m_rmsLevel, m_peakLevel, numSamples);
-}
diff --git a/tests/manual/spectrum/spectrumapp/engine.h b/tests/manual/spectrum/spectrumapp/engine.h
deleted file mode 100644
index fb8450e0..00000000
--- a/tests/manual/spectrum/spectrumapp/engine.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef ENGINE_H
-#define ENGINE_H
-
-#include "spectrum.h"
-#include "spectrumanalyser.h"
-#include "wavfile.h"
-
-#include <QAudioDeviceInfo>
-#include <QAudioFormat>
-#include <QBuffer>
-#include <QByteArray>
-#include <QDir>
-#include <QObject>
-#include <QVector>
-
-class FrequencySpectrum;
-QT_BEGIN_NAMESPACE
-class QAudioInput;
-class QAudioOutput;
-QT_END_NAMESPACE
-
-/**
- * This class interfaces with the QtMultimedia audio classes, and also with
- * the SpectrumAnalyser class. Its role is to manage the capture and playback
- * of audio data, meanwhile performing real-time analysis of the audio level
- * and frequency spectrum.
- */
-class Engine : public QObject
-{
- Q_OBJECT
-
-public:
- explicit Engine(QObject *parent = 0);
- ~Engine();
-
- const QList<QAudioDeviceInfo> &availableAudioInputDevices() const
- { return m_availableAudioInputDevices; }
-
- const QList<QAudioDeviceInfo> &availableAudioOutputDevices() const
- { return m_availableAudioOutputDevices; }
-
- QAudio::Mode mode() const { return m_mode; }
- QAudio::State state() const { return m_state; }
-
- /**
- * \return Current audio format
- * \note May be QAudioFormat() if engine is not initialized
- */
- const QAudioFormat& format() const { return m_format; }
-
- /**
- * Stop any ongoing recording or playback, and reset to ground state.
- */
- void reset();
-
- /**
- * Load data from WAV file
- */
- bool loadFile(const QString &fileName);
-
- /**
- * Position of the audio input device.
- * \return Position in bytes.
- */
- qint64 recordPosition() const { return m_recordPosition; }
-
- /**
- * RMS level of the most recently processed set of audio samples.
- * \return Level in range (0.0, 1.0)
- */
- qreal rmsLevel() const { return m_rmsLevel; }
-
- /**
- * Peak level of the most recently processed set of audio samples.
- * \return Level in range (0.0, 1.0)
- */
- qreal peakLevel() const { return m_peakLevel; }
-
- /**
- * Position of the audio output device.
- * \return Position in bytes.
- */
- qint64 playPosition() const { return m_playPosition; }
-
- /**
- * Length of the internal engine buffer.
- * \return Buffer length in bytes.
- */
- qint64 bufferLength() const;
-
- /**
- * Amount of data held in the buffer.
- * \return Data length in bytes.
- */
- qint64 dataLength() const { return m_dataLength; }
-
- /**
- * Set window function applied to audio data before spectral analysis.
- */
- void setWindowFunction(WindowFunction type);
-
-public Q_SLOTS:
- void startRecording();
- void startPlayback();
- void suspend();
- void setAudioInputDevice(const QAudioDeviceInfo &device);
- void setAudioOutputDevice(const QAudioDeviceInfo &device);
-
-Q_SIGNALS:
- void stateChanged(QAudio::Mode mode, QAudio::State state);
-
- /**
- * Format of audio data has changed
- */
- void formatChanged(const QAudioFormat &format);
-
- /**
- * Length of buffer has changed.
- * \param duration Duration in microseconds
- */
- void bufferLengthChanged(qint64 duration);
-
- /**
- * Amount of data in buffer has changed.
- * \param Length of data in bytes
- */
- void dataLengthChanged(qint64 duration);
-
- /**
- * Position of the audio input device has changed.
- * \param position Position in bytes
- */
- void recordPositionChanged(qint64 position);
-
- /**
- * Position of the audio output device has changed.
- * \param position Position in bytes
- */
- void playPositionChanged(qint64 position);
-
- /**
- * Level changed
- * \param rmsLevel RMS level in range 0.0 - 1.0
- * \param peakLevel Peak level in range 0.0 - 1.0
- * \param numSamples Number of audio samples analyzed
- */
- void levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples);
-
- /**
- * Spectrum has changed.
- * \param position Position of start of window in bytes
- * \param length Length of window in bytes
- * \param spectrum Resulting frequency spectrum
- */
- void changedSpectrum(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
-
- /**
- * Buffer containing audio data has changed.
- * \param position Position of start of buffer in bytes
- * \param buffer Buffer
- */
- void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer);
-
-private Q_SLOTS:
- void audioNotify();
- void audioStateChanged(QAudio::State state);
- void audioDataReady();
- void spectrumChanged(const FrequencySpectrum &spectrum);
-
-private:
- void resetAudioDevices();
- bool initialize();
- bool selectFormat();
- void stopRecording();
- void stopPlayback();
- void setState(QAudio::State state);
- void setState(QAudio::Mode mode, QAudio::State state);
- void setFormat(const QAudioFormat &format);
- void setRecordPosition(qint64 position, bool forceEmit = false);
- void setPlayPosition(qint64 position, bool forceEmit = false);
- void calculateLevel(qint64 position, qint64 length);
- void calculateSpectrum(qint64 position);
- void setLevel(qreal rmsLevel, qreal peakLevel, int numSamples);
-
-private:
- QAudio::Mode m_mode;
- QAudio::State m_state;
-
- bool m_generateTone;
- SweptTone m_tone;
-
- WavFile* m_file;
- // We need a second file handle via which to read data into m_buffer
- // for analysis
- WavFile* m_analysisFile;
-
- QAudioFormat m_format;
-
- const QList<QAudioDeviceInfo> m_availableAudioInputDevices;
- QAudioDeviceInfo m_audioInputDevice;
- QAudioInput* m_audioInput;
- QIODevice* m_audioInputIODevice;
- qint64 m_recordPosition;
-
- const QList<QAudioDeviceInfo> m_availableAudioOutputDevices;
- QAudioDeviceInfo m_audioOutputDevice;
- QAudioOutput* m_audioOutput;
- qint64 m_playPosition;
- QBuffer m_audioOutputIODevice;
-
- QByteArray m_buffer;
- qint64 m_bufferPosition;
- qint64 m_bufferLength;
- qint64 m_dataLength;
-
- int m_levelBufferLength;
- qreal m_rmsLevel;
- qreal m_peakLevel;
-
- int m_spectrumBufferLength;
- QByteArray m_spectrumBuffer;
- SpectrumAnalyser m_spectrumAnalyser;
- qint64 m_spectrumPosition;
-
- int m_count;
-
-};
-
-#endif // ENGINE_H
diff --git a/tests/manual/spectrum/spectrumapp/frequencyspectrum.cpp b/tests/manual/spectrum/spectrumapp/frequencyspectrum.cpp
deleted file mode 100644
index 39e7e822..00000000
--- a/tests/manual/spectrum/spectrumapp/frequencyspectrum.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "frequencyspectrum.h"
-
-FrequencySpectrum::FrequencySpectrum(int numPoints)
- : m_elements(numPoints)
-{
-
-}
-
-void FrequencySpectrum::reset()
-{
- iterator i = begin();
- for ( ; i != end(); ++i)
- *i = Element();
-}
-
-int FrequencySpectrum::count() const
-{
- return m_elements.count();
-}
-
-FrequencySpectrum::Element &FrequencySpectrum::operator[](int index)
-{
- return m_elements[index];
-}
-
-const FrequencySpectrum::Element &FrequencySpectrum::operator[](int index) const
-{
- return m_elements[index];
-}
-
-FrequencySpectrum::iterator FrequencySpectrum::begin()
-{
- return m_elements.begin();
-}
-
-FrequencySpectrum::iterator FrequencySpectrum::end()
-{
- return m_elements.end();
-}
-
-FrequencySpectrum::const_iterator FrequencySpectrum::begin() const
-{
- return m_elements.begin();
-}
-
-FrequencySpectrum::const_iterator FrequencySpectrum::end() const
-{
- return m_elements.end();
-}
diff --git a/tests/manual/spectrum/spectrumapp/frequencyspectrum.h b/tests/manual/spectrum/spectrumapp/frequencyspectrum.h
deleted file mode 100644
index 229f58a0..00000000
--- a/tests/manual/spectrum/spectrumapp/frequencyspectrum.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef FREQUENCYSPECTRUM_H
-#define FREQUENCYSPECTRUM_H
-
-#include <QtCore/QVector>
-
-/**
- * Represents a frequency spectrum as a series of elements, each of which
- * consists of a frequency, an amplitude and a phase.
- */
-class FrequencySpectrum {
-public:
- FrequencySpectrum(int numPoints = 0);
-
- struct Element {
- Element()
- : frequency(0.0), amplitude(0.0), phase(0.0), clipped(false)
- { }
-
- /**
- * Frequency in Hertz
- */
- qreal frequency;
-
- /**
- * Amplitude in range [0.0, 1.0]
- */
- qreal amplitude;
-
- /**
- * Phase in range [0.0, 2*PI]
- */
- qreal phase;
-
- /**
- * Indicates whether value has been clipped during spectrum analysis
- */
- bool clipped;
- };
-
- typedef QVector<Element>::iterator iterator;
- typedef QVector<Element>::const_iterator const_iterator;
-
- void reset();
-
- int count() const;
- Element& operator[](int index);
- const Element& operator[](int index) const;
- iterator begin();
- iterator end();
- const_iterator begin() const;
- const_iterator end() const;
-
-private:
- QVector<Element> m_elements;
-
-};
-
-#endif // FREQUENCYSPECTRUM_H
diff --git a/tests/manual/spectrum/spectrumapp/main.cpp b/tests/manual/spectrum/spectrumapp/main.cpp
deleted file mode 100644
index e9548b4e..00000000
--- a/tests/manual/spectrum/spectrumapp/main.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "engine.h"
-#include "utils.h"
-
-#include <QtDataVisualization/q3dbars.h>
-#include <QtDataVisualization/qbardataproxy.h>
-#include <QtDataVisualization/qvalue3daxis.h>
-#include <QtDataVisualization/qcategory3daxis.h>
-#include <QtDataVisualization/q3dscene.h>
-#include <QtDataVisualization/q3dcamera.h>
-#include <QtDataVisualization/qbar3dseries.h>
-#include <QtDataVisualization/q3dtheme.h>
-
-#include <QGuiApplication>
-#include <QAudio>
-#include <QTimer>
-
-//#define USE_CONES
-
-using namespace QtDataVisualization;
-
-class MainApp : public QObject
-{
-public:
- MainApp(Q3DBars *window);
- ~MainApp();
-
- void start(QString fileName);
-
-public slots:
- void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
- void stateChanged(QAudio::Mode mode, QAudio::State state);
-
-private slots:
- void restart();
-
-private:
- int barIndex(qreal frequency) const;
-
-private:
- Q3DBars *m_chart;
- Engine *m_engine;
- QTimer *m_restartTimer;
- // Lower bound of first band in the spectrum in Hz
- qreal m_lowFreq;
- // Upper band of last band in the spectrum in Hz
- qreal m_highFreq;
-};
-
-MainApp::MainApp(Q3DBars *window)
- : m_chart(window),
- m_engine(new Engine(this)),
- m_restartTimer(new QTimer(this)),
- m_lowFreq(SpectrumLowFreq),
- m_highFreq(SpectrumHighFreq)
-{
- m_chart->rowAxis()->setMax(SpectrumNumBands * 2);
- m_chart->columnAxis()->setMax(SpectrumNumBands - 1);
- // Disable grid
- m_chart->activeTheme()->setGridEnabled(false);
- // Disable auto-scaling of height by defining explicit range
- m_chart->valueAxis()->setRange(0.0f, 1.0f);
- // Disable shadows
- m_chart->setShadowQuality(QAbstract3DGraph::ShadowQualityNone);
-#if USE_CONES
- // Set bar specifications; make them a bit wider than deep and make them be drawn 75%
- // inside each other
- m_chart->setBarThickness(1.25);
- m_chart->setBarSpacing(QSizeF(0.2, -0.75));
- // Set bar type, smooth cones
- m_chart->setBarType(QAbstract3DGraph::MeshCones, true);
- // Adjust zoom manually; automatic zoom level calculation does not work well with negative
- // spacings (in setBarSpacing)
- m_chart->setCameraPosition(10.0f, 5.0f, 70.0f);
-#else
- // Set bar specifications; make them twice as wide as they're deep
- m_chart->setBarThickness(2.0f);
- m_chart->setBarSpacing(QSizeF(0.0, 0.0));
- // Set bar type, flat bars
- // Adjust camera position
- m_chart->scene()->activeCamera()->setCameraPosition(10.0f, 7.5f, 75.0f);
-#endif
- // Disable selection
- m_chart->setSelectionMode(QAbstract3DGraph::SelectionNone);
- QObject::connect(m_engine, &Engine::changedSpectrum, this, &MainApp::spectrumChanged);
- QObject::connect(m_engine, &Engine::stateChanged, this, &MainApp::stateChanged);
- m_restartTimer->setSingleShot(true);
- QObject::connect(m_restartTimer, &QTimer::timeout, this, &MainApp::restart);
-
- QBar3DSeries *series = new QBar3DSeries();
- series->setBaseColor(QColor(Qt::red));
- series->setMesh(QAbstract3DSeries::MeshBar);
- m_chart->addSeries(series);
-}
-
-MainApp::~MainApp()
-{
- delete m_engine;
- delete m_restartTimer;
-}
-
-void MainApp::start(QString fileName)
-{
- m_engine->loadFile(fileName);
- m_engine->startPlayback();
-}
-
-//-----------------------------------------------------------------------------
-// Public slots
-//-----------------------------------------------------------------------------
-
-void MainApp::spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum)
-{
- Q_UNUSED(position);
- Q_UNUSED(length);
- //qDebug() << "updating bar values" << position << length;
- QBarDataRow *data = new QBarDataRow(SpectrumNumBands);
- for (int bar = 0; bar < SpectrumNumBands; bar++) {
- // init data set
- (*data)[bar].setValue(qreal(0.0));
- }
- FrequencySpectrum::const_iterator i = spectrum.begin();
- const FrequencySpectrum::const_iterator end = spectrum.end();
- for ( ; i != end; ++i) {
- const FrequencySpectrum::Element e = *i;
- if (e.frequency >= m_lowFreq && e.frequency < m_highFreq) {
- (*data)[barIndex(e.frequency)].setValue(qMax(data->at(barIndex(e.frequency)).value(), float(e.amplitude)));
- }
- }
- m_chart->seriesList().at(0)->dataProxy()->insertRow(0, data);
-}
-
-void MainApp::stateChanged(QAudio::Mode mode, QAudio::State state)
-{
- //qDebug() << "mode:" << mode << " state: " << state;
- // Restart once playback is finished
- if (QAudio::AudioOutput == mode && QAudio::StoppedState == state)
- m_restartTimer->start(500);
-}
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void MainApp::restart()
-{
- // Change file each time
- QString fileToLoad = QStringLiteral(":/file");
- static int fileNo = 3;
- QString nrStr;
- nrStr.setNum(fileNo);
- fileToLoad.append(nrStr);
- //qDebug() << fileToLoad;
- start(fileToLoad);
- fileNo++;
- if (fileNo > 3)
- fileNo = 1;
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-int MainApp::barIndex(qreal frequency) const
-{
- Q_ASSERT(frequency >= m_lowFreq && frequency < m_highFreq);
- const qreal bandWidth = (m_highFreq - m_lowFreq) / SpectrumNumBands;
- const int index = (frequency - m_lowFreq) / bandWidth;
- if (index < 0 || index >= SpectrumNumBands)
- Q_ASSERT(false);
- //qDebug() << "insert to" << index;
- return index;
-}
-
-//-----------------------------------------------------------------------------
-// main
-//-----------------------------------------------------------------------------
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
- app.setApplicationName("QtDataVisualization spectrum analyzer");
-
- Q3DBars window;
- window.setFlags(window.flags() ^ Qt::FramelessWindowHint);
- window.resize(1024, 768);
- window.show();
-
- MainApp *mainApp = new MainApp(&window);
- mainApp->start(QStringLiteral(":/file2"));
-
- return app.exec();
-}
diff --git a/tests/manual/spectrum/spectrumapp/soundFiles/Rockhop.wav b/tests/manual/spectrum/spectrumapp/soundFiles/Rockhop.wav
deleted file mode 100644
index e56e1c0f..00000000
--- a/tests/manual/spectrum/spectrumapp/soundFiles/Rockhop.wav
+++ /dev/null
Binary files differ
diff --git a/tests/manual/spectrum/spectrumapp/soundFiles/futurebells_beat.wav b/tests/manual/spectrum/spectrumapp/soundFiles/futurebells_beat.wav
deleted file mode 100644
index c45cbc71..00000000
--- a/tests/manual/spectrum/spectrumapp/soundFiles/futurebells_beat.wav
+++ /dev/null
Binary files differ
diff --git a/tests/manual/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav b/tests/manual/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav
deleted file mode 100644
index 78b8dbda..00000000
--- a/tests/manual/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav
+++ /dev/null
Binary files differ
diff --git a/tests/manual/spectrum/spectrumapp/spectrum.h b/tests/manual/spectrum/spectrumapp/spectrum.h
deleted file mode 100644
index 8b072568..00000000
--- a/tests/manual/spectrum/spectrumapp/spectrum.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef SPECTRUM_H
-#define SPECTRUM_H
-
-#include "utils.h"
-#include "fftreal_wrapper.h" // For FFTLengthPowerOfTwo
-#include <qglobal.h>
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-// Number of audio samples used to calculate the frequency spectrum
-const int SpectrumLengthSamples = PowerOfTwo<FFTLengthPowerOfTwo>::Result;
-
-// Number of bands in the frequency spectrum
-const int SpectrumNumBands = 30;
-
-// Lower bound of first band in the spectrum
-const qreal SpectrumLowFreq = 0.0; // Hz
-
-// Upper band of last band in the spectrum
-const qreal SpectrumHighFreq = 1000.0; // Hz
-
-// Waveform window size in microseconds
-const qint64 WaveformWindowDuration = 500 * 1000;
-
-// Fudge factor used to calculate the spectrum bar heights
-const qreal SpectrumAnalyserMultiplier = 0.15;
-
-// Disable message timeout
-const int NullMessageTimeout = -1;
-
-
-//-----------------------------------------------------------------------------
-// Types and data structures
-//-----------------------------------------------------------------------------
-
-enum WindowFunction {
- NoWindow,
- HannWindow
-};
-
-const WindowFunction DefaultWindowFunction = HannWindow;
-
-struct Tone
-{
- Tone(qreal freq = 0.0, qreal amp = 0.0)
- : frequency(freq), amplitude(amp)
- { }
-
- // Start and end frequencies for swept tone generation
- qreal frequency;
-
- // Amplitude in range [0.0, 1.0]
- qreal amplitude;
-};
-
-struct SweptTone
-{
- SweptTone(qreal start = 0.0, qreal end = 0.0, qreal amp = 0.0)
- : startFreq(start), endFreq(end), amplitude(amp)
- { Q_ASSERT(end >= start); }
-
- SweptTone(const Tone &tone)
- : startFreq(tone.frequency), endFreq(tone.frequency), amplitude(tone.amplitude)
- { }
-
- // Start and end frequencies for swept tone generation
- qreal startFreq;
- qreal endFreq;
-
- // Amplitude in range [0.0, 1.0]
- qreal amplitude;
-};
-
-
-//-----------------------------------------------------------------------------
-// Macros
-//-----------------------------------------------------------------------------
-
-// Macro which connects a signal to a slot, and which causes application to
-// abort if the connection fails. This is intended to catch programming errors
-// such as mis-typing a signal or slot name. It is necessary to write our own
-// macro to do this - the following idiom
-// Q_ASSERT(connect(source, signal, receiver, slot));
-// will not work because Q_ASSERT compiles to a no-op in release builds.
-
-#define CHECKED_CONNECT(source, signal, receiver, slot) \
- if (!connect(source, signal, receiver, slot)) \
- qt_assert_x(Q_FUNC_INFO, "CHECKED_CONNECT failed", __FILE__, __LINE__);
-
-#endif // SPECTRUM_H
-
diff --git a/tests/manual/spectrum/spectrumapp/spectrum.qrc b/tests/manual/spectrum/spectrumapp/spectrum.qrc
deleted file mode 100644
index 9368abc7..00000000
--- a/tests/manual/spectrum/spectrumapp/spectrum.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file alias="file1">soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav</file>
- <file alias="file2">soundFiles/Rockhop.wav</file>
- <file alias="file3">soundFiles/futurebells_beat.wav</file>
- </qresource>
-</RCC>
diff --git a/tests/manual/spectrum/spectrumapp/spectrumanalyser.cpp b/tests/manual/spectrum/spectrumapp/spectrumanalyser.cpp
deleted file mode 100644
index 37f2e175..00000000
--- a/tests/manual/spectrum/spectrumapp/spectrumanalyser.cpp
+++ /dev/null
@@ -1,212 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include "spectrumanalyser.h"
-#include "utils.h"
-#include "fftreal_wrapper.h"
-
-#include <qmath.h>
-#include <qmetatype.h>
-#include <QAudioFormat>
-#include <QThread>
-
-SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent)
- : QObject(parent),
- m_fft(new FFTRealWrapper),
- m_numSamples(SpectrumLengthSamples),
- m_windowFunction(DefaultWindowFunction),
- m_window(SpectrumLengthSamples, 0.0),
- m_input(SpectrumLengthSamples, 0.0),
- m_output(SpectrumLengthSamples, 0.0),
- m_spectrum(SpectrumLengthSamples)
- #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- , m_thread(new QThread(this))
- #endif
-{
-#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- // moveToThread() cannot be called on a QObject with a parent
- setParent(0);
- moveToThread(m_thread);
- m_thread->start();
-#endif
- calculateWindow();
-}
-
-SpectrumAnalyserThread::~SpectrumAnalyserThread()
-{
- delete m_fft;
-}
-
-void SpectrumAnalyserThread::setWindowFunction(WindowFunction type)
-{
- m_windowFunction = type;
- calculateWindow();
-}
-
-void SpectrumAnalyserThread::calculateWindow()
-{
- for (int i=0; i<m_numSamples; ++i) {
- DataType x = 0.0;
-
- switch (m_windowFunction) {
- case NoWindow:
- x = 1.0;
- break;
- case HannWindow:
- x = 0.5 * (1 - qCos((2 * M_PI * i) / (m_numSamples - 1)));
- break;
- default:
- Q_ASSERT(false);
- }
-
- m_window[i] = x;
- }
-}
-
-void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer,
- int inputFrequency,
- int bytesPerSample)
-{
- Q_ASSERT(buffer.size() == m_numSamples * bytesPerSample);
-
- // Initialize data array
- const char *ptr = buffer.constData();
- for (int i=0; i<m_numSamples; ++i) {
- const qint16 pcmSample = *reinterpret_cast<const qint16*>(ptr);
- // Scale down to range [-1.0, 1.0]
- const DataType realSample = pcmToReal(pcmSample);
- const DataType windowedSample = realSample * m_window[i];
- m_input[i] = windowedSample;
- ptr += bytesPerSample;
- }
-
- // Calculate the FFT
- m_fft->calculateFFT(m_output.data(), m_input.data());
-
- // Analyze output to obtain amplitude and phase for each frequency
- for (int i=2; i<=m_numSamples/2; ++i) {
- // Calculate frequency of this complex sample
- m_spectrum[i].frequency = qreal(i * inputFrequency) / (m_numSamples);
-
- const qreal real = m_output[i];
- qreal imag = 0.0;
- if (i>0 && i<m_numSamples/2)
- imag = m_output[m_numSamples/2 + i];
-
- const qreal magnitude = sqrt(real*real + imag*imag);
- qreal amplitude = SpectrumAnalyserMultiplier * log(magnitude);
-
- // Bound amplitude to [0.0, 1.0]
- m_spectrum[i].clipped = (amplitude > 1.0);
- amplitude = qMax(qreal(0.0), amplitude);
- amplitude = qMin(qreal(1.0), amplitude);
- m_spectrum[i].amplitude = amplitude;
- }
-
- emit calculationComplete(m_spectrum);
-}
-
-
-//=============================================================================
-// SpectrumAnalyser
-//=============================================================================
-
-SpectrumAnalyser::SpectrumAnalyser(QObject *parent)
- : QObject(parent),
- m_thread(new SpectrumAnalyserThread(this)),
- m_state(Idle)
-{
- CHECKED_CONNECT(m_thread, SIGNAL(calculationComplete(FrequencySpectrum)),
- this, SLOT(calculationComplete(FrequencySpectrum)));
-}
-
-SpectrumAnalyser::~SpectrumAnalyser()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-void SpectrumAnalyser::setWindowFunction(WindowFunction type)
-{
- const bool b = QMetaObject::invokeMethod(m_thread, "setWindowFunction",
- Qt::AutoConnection,
- Q_ARG(WindowFunction, type));
- Q_ASSERT(b);
- Q_UNUSED(b) // suppress warnings in release builds
-}
-
-void SpectrumAnalyser::calculate(const QByteArray &buffer,
- const QAudioFormat &format)
-{
- // QThread::currentThread is marked 'for internal use only', but
- // we're only using it for debug output here, so it's probably OK :)
- SPECTRUMANALYSER_DEBUG << "SpectrumAnalyser::calculate"
- << QThread::currentThread()
- << "state" << m_state;
-
- if (isReady()) {
- Q_ASSERT(isPCMS16LE(format));
-
- const int bytesPerSample = format.sampleSize() * format.channelCount() / 8;
-
- m_state = Busy;
-
- // Invoke SpectrumAnalyserThread::calculateSpectrum using QMetaObject. If
- // m_thread is in a different thread from the current thread, the
- // calculation will be done in the child thread.
- // Once the calculation is finished, a calculationChanged signal will be
- // emitted by m_thread.
- const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum",
- Qt::AutoConnection,
- Q_ARG(QByteArray, buffer),
- Q_ARG(int, format.sampleRate()),
- Q_ARG(int, bytesPerSample));
- Q_ASSERT(b);
- Q_UNUSED(b) // suppress warnings in release builds
- }
-}
-
-bool SpectrumAnalyser::isReady() const
-{
- return (Idle == m_state);
-}
-
-void SpectrumAnalyser::cancelCalculation()
-{
- if (Busy == m_state)
- m_state = Cancelled;
-}
-
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void SpectrumAnalyser::calculationComplete(const FrequencySpectrum &spectrum)
-{
- Q_ASSERT(Idle != m_state);
- if (Busy == m_state)
- emit spectrumChanged(spectrum);
- m_state = Idle;
-}
diff --git a/tests/manual/spectrum/spectrumapp/spectrumanalyser.h b/tests/manual/spectrum/spectrumapp/spectrumanalyser.h
deleted file mode 100644
index 8eb70a20..00000000
--- a/tests/manual/spectrum/spectrumapp/spectrumanalyser.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef SPECTRUMANALYSER_H
-#define SPECTRUMANALYSER_H
-
-#include <QByteArray>
-#include <QObject>
-#include <QVector>
-
-#include "frequencyspectrum.h"
-#include "spectrum.h"
-
-#include "FFTRealFixLenParam.h"
-
-QT_FORWARD_DECLARE_CLASS(QAudioFormat)
-QT_FORWARD_DECLARE_CLASS(QThread)
-
-class FFTRealWrapper;
-
-class SpectrumAnalyserThreadPrivate;
-
-/**
- * Implementation of the spectrum analysis which can be run in a
- * separate thread.
- */
-class SpectrumAnalyserThread : public QObject
-{
- Q_OBJECT
-
-public:
- SpectrumAnalyserThread(QObject *parent);
- ~SpectrumAnalyserThread();
-
-public Q_SLOTS:
- void setWindowFunction(WindowFunction type);
- void calculateSpectrum(const QByteArray &buffer,
- int inputFrequency,
- int bytesPerSample);
-
-Q_SIGNALS:
- void calculationComplete(const FrequencySpectrum &spectrum);
-
-private:
- void calculateWindow();
-
-private:
- FFTRealWrapper* m_fft;
-
- const int m_numSamples;
-
- WindowFunction m_windowFunction;
-
- typedef FFTRealFixLenParam::DataType DataType;
-
- QVector<DataType> m_window;
-
- QVector<DataType> m_input;
- QVector<DataType> m_output;
-
- FrequencySpectrum m_spectrum;
-
-#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- QThread* m_thread;
-#endif
-};
-
-/**
- * Class which performs frequency spectrum analysis on a window of
- * audio samples, provided to it by the Engine.
- */
-class SpectrumAnalyser : public QObject
-{
- Q_OBJECT
-
-public:
- SpectrumAnalyser(QObject *parent = 0);
- ~SpectrumAnalyser();
-
-public:
- /*
- * Set the windowing function which is applied before calculating the FFT
- */
- void setWindowFunction(WindowFunction type);
-
- /*
- * Calculate a frequency spectrum
- *
- * \param buffer Audio data
- * \param format Format of audio data
- *
- * Frequency spectrum is calculated asynchronously. The result is returned
- * via the spectrumChanged signal.
- *
- * An ongoing calculation can be cancelled by calling cancelCalculation().
- *
- */
- void calculate(const QByteArray &buffer, const QAudioFormat &format);
-
- /*
- * Check whether the object is ready to perform another calculation
- */
- bool isReady() const;
-
- /*
- * Cancel an ongoing calculation
- *
- * Note that cancelling is asynchronous.
- */
- void cancelCalculation();
-
-Q_SIGNALS:
- void spectrumChanged(const FrequencySpectrum &spectrum);
-
-private Q_SLOTS:
- void calculationComplete(const FrequencySpectrum &spectrum);
-
-private:
- void calculateWindow();
-
-private:
-
- SpectrumAnalyserThread* m_thread;
-
- enum State {
- Idle,
- Busy,
- Cancelled
- };
-
- State m_state;
-};
-
-#endif // SPECTRUMANALYSER_H
-
diff --git a/tests/manual/spectrum/spectrumapp/spectrumapp.pro b/tests/manual/spectrum/spectrumapp/spectrumapp.pro
deleted file mode 100644
index ab12e221..00000000
--- a/tests/manual/spectrum/spectrumapp/spectrumapp.pro
+++ /dev/null
@@ -1,73 +0,0 @@
-!include( ../../tests.pri ) {
- error( "Couldn't find the tests.pri file!" )
-}
-
-!include( ../spectrum.pri ) {
- error( "Couldn't find the spectrum.pri file!" )
-}
-
-static: error(This application cannot be statically linked to the fftreal library)
-
-TEMPLATE = app
-
-TARGET = spectrum
-
-QT += multimedia
-
-SOURCES += main.cpp \
- engine.cpp \
- frequencyspectrum.cpp \
- spectrumanalyser.cpp \
- utils.cpp \
- wavfile.cpp
-
-HEADERS += engine.h \
- frequencyspectrum.h \
- spectrum.h \
- spectrumanalyser.h \
- utils.h \
- wavfile.h
-
-fftreal_dir = ../3rdparty/fftreal
-
-INCLUDEPATH += $${fftreal_dir}
-INCLUDEPATH += ../../../include
-
-RESOURCES = spectrum.qrc
-
-# Dynamic linkage against FFTReal DLL
-!contains(DEFINES, DISABLE_FFT) {
- macx {
- # Link to fftreal framework
- LIBS += -F$${fftreal_dir}
- LIBS += -framework fftreal
- } else {
- LIBS += -L..$${spectrum_build_dir}
- LIBS += -lfftreal
- }
-}
-
-# Deployment
-
-DESTDIR = ..$${spectrum_build_dir}
-macx {
- !contains(DEFINES, DISABLE_FFT) {
- # Relocate fftreal.framework into spectrum.app bundle
- framework_dir = ../spectrum.app/Contents/Frameworks
- framework_name = fftreal.framework/Versions/1/fftreal
- QMAKE_POST_LINK = \
- mkdir -p $${framework_dir} &&\
- rm -rf $${framework_dir}/fftreal.framework &&\
- cp -R $${fftreal_dir}/fftreal.framework $${framework_dir} &&\
- install_name_tool -id @executable_path/../Frameworks/$${framework_name} \
- $${framework_dir}/$${framework_name} &&\
- install_name_tool -change $${framework_name} \
- @executable_path/../Frameworks/$${framework_name} \
- ../spectrum.app/Contents/MacOS/spectrum
- }
-} else {
- linux-g++*: {
- # Provide relative path from application to fftreal library
- QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
- }
-}
diff --git a/tests/manual/spectrum/spectrumapp/utils.cpp b/tests/manual/spectrum/spectrumapp/utils.cpp
deleted file mode 100644
index 95a55544..00000000
--- a/tests/manual/spectrum/spectrumapp/utils.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include <QAudioFormat>
-#include "utils.h"
-
-qint64 audioDuration(const QAudioFormat &format, qint64 bytes)
-{
- return (bytes * 1000000) /
- (format.sampleRate() * format.channelCount() * (format.sampleSize() / 8));
-}
-
-qint64 audioLength(const QAudioFormat &format, qint64 microSeconds)
-{
- qint64 result = (format.sampleRate() * format.channelCount() * (format.sampleSize() / 8))
- * microSeconds / 1000000;
- result -= result % (format.channelCount() * format.sampleSize());
- return result;
-}
-
-qreal nyquistFrequency(const QAudioFormat &format)
-{
- return format.sampleRate() / 2;
-}
-
-QString formatToString(const QAudioFormat &format)
-{
- QString result;
-
- if (QAudioFormat() != format) {
- if (format.codec() == "audio/pcm") {
- Q_ASSERT(format.sampleType() == QAudioFormat::SignedInt);
-
- const QString formatEndian = (format.byteOrder() == QAudioFormat::LittleEndian)
- ? QString("LE") : QString("BE");
-
- QString formatType;
- switch (format.sampleType()) {
- case QAudioFormat::SignedInt:
- formatType = "signed";
- break;
- case QAudioFormat::UnSignedInt:
- formatType = "unsigned";
- break;
- case QAudioFormat::Float:
- formatType = "float";
- break;
- case QAudioFormat::Unknown:
- formatType = "unknown";
- break;
- }
-
- QString formatChannels = QString("%1 channels").arg(format.channelCount());
- switch (format.channelCount()) {
- case 1:
- formatChannels = "mono";
- break;
- case 2:
- formatChannels = "stereo";
- break;
- }
-
- result = QString("%1 Hz %2 bit %3 %4 %5")
- .arg(format.sampleRate())
- .arg(format.sampleSize())
- .arg(formatType)
- .arg(formatEndian)
- .arg(formatChannels);
- } else {
- result = format.codec();
- }
- }
-
- return result;
-}
-
-bool isPCM(const QAudioFormat &format)
-{
- return (format.codec() == "audio/pcm");
-}
-
-
-bool isPCMS16LE(const QAudioFormat &format)
-{
- return isPCM(format) &&
- format.sampleType() == QAudioFormat::SignedInt &&
- format.sampleSize() == 16 &&
- format.byteOrder() == QAudioFormat::LittleEndian;
-}
-
-const qint16 PCMS16MaxValue = 32767;
-const quint16 PCMS16MaxAmplitude = 32768; // because minimum is -32768
-
-qreal pcmToReal(qint16 pcm)
-{
- return qreal(pcm) / PCMS16MaxAmplitude;
-}
-
-qint16 realToPcm(qreal real)
-{
- return real * PCMS16MaxValue;
-}
diff --git a/tests/manual/spectrum/spectrumapp/utils.h b/tests/manual/spectrum/spectrumapp/utils.h
deleted file mode 100644
index 8c6ee151..00000000
--- a/tests/manual/spectrum/spectrumapp/utils.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef UTILS_H
-#define UTILS_H
-
-#include <QtCore/qglobal.h>
-#include <QDebug>
-
-QT_FORWARD_DECLARE_CLASS(QAudioFormat)
-
-//-----------------------------------------------------------------------------
-// Miscellaneous utility functions
-//-----------------------------------------------------------------------------
-
-qint64 audioDuration(const QAudioFormat &format, qint64 bytes);
-qint64 audioLength(const QAudioFormat &format, qint64 microSeconds);
-
-QString formatToString(const QAudioFormat &format);
-
-qreal nyquistFrequency(const QAudioFormat &format);
-
-// Scale PCM value to [-1.0, 1.0]
-qreal pcmToReal(qint16 pcm);
-
-// Scale real value in [-1.0, 1.0] to PCM
-qint16 realToPcm(qreal real);
-
-// Check whether the audio format is PCM
-bool isPCM(const QAudioFormat &format);
-
-// Check whether the audio format is signed, little-endian, 16-bit PCM
-bool isPCMS16LE(const QAudioFormat &format);
-
-// Compile-time calculation of powers of two
-
-template<int N> class PowerOfTwo
-{ public: static const int Result = PowerOfTwo<N-1>::Result * 2; };
-
-template<> class PowerOfTwo<0>
-{ public: static const int Result = 1; };
-
-
-//-----------------------------------------------------------------------------
-// Debug output
-//-----------------------------------------------------------------------------
-
-class NullDebug
-{
-public:
- template <typename T>
- NullDebug& operator<<(const T&) { return *this; }
-};
-
-inline NullDebug nullDebug() { return NullDebug(); }
-
-#ifdef LOG_ENGINE
-# define ENGINE_DEBUG qDebug()
-#else
-# define ENGINE_DEBUG nullDebug()
-#endif
-
-#ifdef LOG_SPECTRUMANALYSER
-# define SPECTRUMANALYSER_DEBUG qDebug()
-#else
-# define SPECTRUMANALYSER_DEBUG nullDebug()
-#endif
-
-#ifdef LOG_WAVEFORM
-# define WAVEFORM_DEBUG qDebug()
-#else
-# define WAVEFORM_DEBUG nullDebug()
-#endif
-
-#endif // UTILS_H
diff --git a/tests/manual/spectrum/spectrumapp/wavfile.cpp b/tests/manual/spectrum/spectrumapp/wavfile.cpp
deleted file mode 100644
index 373cdbb1..00000000
--- a/tests/manual/spectrum/spectrumapp/wavfile.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#include <qendian.h>
-#include <QVector>
-#include <QDebug>
-#include "utils.h"
-#include "wavfile.h"
-
-struct chunk
-{
- char id[4];
- quint32 size;
-};
-
-struct RIFFHeader
-{
- chunk descriptor; // "RIFF"
- char type[4]; // "WAVE"
-};
-
-struct WAVEHeader
-{
- chunk descriptor;
- quint16 audioFormat;
- quint16 numChannels;
- quint32 sampleRate;
- quint32 byteRate;
- quint16 blockAlign;
- quint16 bitsPerSample;
-};
-
-struct DATAHeader
-{
- chunk descriptor;
-};
-
-struct CombinedHeader
-{
- RIFFHeader riff;
- WAVEHeader wave;
-};
-
-WavFile::WavFile(QObject *parent)
- : QFile(parent),
- m_headerLength(0)
-{
-
-}
-
-bool WavFile::open(const QString &fileName)
-{
- close();
- setFileName(fileName);
- return QFile::open(QIODevice::ReadOnly) && readHeader();
-}
-
-const QAudioFormat &WavFile::fileFormat() const
-{
- return m_fileFormat;
-}
-
-qint64 WavFile::headerLength() const
-{
- return m_headerLength;
-}
-
-bool WavFile::readHeader()
-{
- seek(0);
- CombinedHeader header;
- bool result = read(reinterpret_cast<char *>(&header), sizeof(CombinedHeader)) == sizeof(CombinedHeader);
- if (result) {
- if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0
- || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0)
- && memcmp(&header.riff.type, "WAVE", 4) == 0
- && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0
- && (header.wave.audioFormat == 1 || header.wave.audioFormat == 0)) {
-
- // Read off remaining header information
- DATAHeader dataHeader;
-
- if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
- // Extended data available
- quint16 extraFormatBytes;
- if (peek((char*)&extraFormatBytes, sizeof(quint16)) != sizeof(quint16))
- return false;
- const qint64 throwAwayBytes = sizeof(quint16) + qFromLittleEndian<quint16>(extraFormatBytes);
- if (read(throwAwayBytes).size() != throwAwayBytes)
- return false;
- }
-
- if (read((char*)&dataHeader, sizeof(DATAHeader)) != sizeof(DATAHeader))
- return false;
-
- // Establish format
- if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0)
- m_fileFormat.setByteOrder(QAudioFormat::LittleEndian);
- else
- m_fileFormat.setByteOrder(QAudioFormat::BigEndian);
-
- int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
- m_fileFormat.setChannelCount(qFromLittleEndian<quint16>(header.wave.numChannels));
- m_fileFormat.setCodec("audio/pcm");
- m_fileFormat.setSampleRate(qFromLittleEndian<quint32>(header.wave.sampleRate));
- m_fileFormat.setSampleSize(qFromLittleEndian<quint16>(header.wave.bitsPerSample));
- m_fileFormat.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
- } else {
- result = false;
- }
- }
- m_headerLength = pos();
- return result;
-}
diff --git a/tests/manual/spectrum/spectrumapp/wavfile.h b/tests/manual/spectrum/spectrumapp/wavfile.h
deleted file mode 100644
index 38e81f6e..00000000
--- a/tests/manual/spectrum/spectrumapp/wavfile.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/******************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Data Visualization module.
-**
-** $QT_BEGIN_LICENSE:COMM$
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** $QT_END_LICENSE$
-**
-******************************************************************************/
-
-#ifndef WAVFILE_H
-#define WAVFILE_H
-
-#include <QObject>
-#include <QFile>
-#include <QAudioFormat>
-
-class WavFile : public QFile
-{
-public:
- WavFile(QObject *parent = 0);
-
- using QFile::open;
- bool open(const QString &fileName);
- const QAudioFormat &fileFormat() const;
- qint64 headerLength() const;
-
-private:
- bool readHeader();
-
-private:
- QAudioFormat m_fileFormat;
- qint64 m_headerLength;
-};
-
-#endif // WAVFILE_H