diff options
author | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2015-10-20 13:18:59 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2015-10-22 10:08:51 +0000 |
commit | 31f9c57bc50ae053cfaf039a1dfdb128e2494458 (patch) | |
tree | 316138cb73c49877f5a80a8496c2f1b737122fb5 /tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h | |
parent | 4162ddeb02ee41fd4217d7f3d93d45cab3313ba8 (diff) |
Fix issues with COIN builds
-Fix miscellaneous compile errors
-Move manual tests to manual folder and enable export of autotests
-Added widgets requirement
-Fixed autotests
-Fixed renderer and controller synchronization in QML case
-Treat fallback Mesa as ES2 similar to setting AA_UseSoftwareOpenGL
Change-Id: If6619733725d079e339bef16262e5ea1450ab20f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com>
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h')
-rw-r--r-- | tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h new file mode 100644 index 00000000..a9ede311 --- /dev/null +++ b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnThreadSafeQueue.h @@ -0,0 +1,156 @@ +/**************************************************************************** +* * +* 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__ |