From 8e8d2e87e837fcc3e622929ebcb2123e7d35fb37 Mon Sep 17 00:00:00 2001 From: Nikolas Psaroudakis Date: Wed, 22 Aug 2012 18:35:10 +0200 Subject: [PATCH] Added shutdown code --- proj/vc10/_2RealKinect.sln | 44 +++++++++---------- src/OpenNISpecific/OpenNIDevice.cpp | 16 ++++++- .../_2RealImplementationOpenNI.hpp | 30 ++++++++++--- 3 files changed, 60 insertions(+), 30 deletions(-) diff --git a/proj/vc10/_2RealKinect.sln b/proj/vc10/_2RealKinect.sln index e9ebca0..91a55b9 100644 --- a/proj/vc10/_2RealKinect.sln +++ b/proj/vc10/_2RealKinect.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_2RealKinect", "_2RealKinect.vcxproj", "{67112A04-6E97-4C40-97EA-2A8FB6C14797}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glSingleKinect", "..\..\samples\glSingleKinect\proj\vc10\glSingleKinect.vcxproj", "{9A71947B-E3A5-C4D0-6A52-D22C44A21233}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glSingleKinect", "..\..\samples\glSingleKinect\proj\vc10\glSingleKinect.vcxproj", "{1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}" ProjectSection(ProjectDependencies) = postProject {67112A04-6E97-4C40-97EA-2A8FB6C14797} = {67112A04-6E97-4C40-97EA-2A8FB6C14797} EndProjectSection @@ -54,26 +54,26 @@ Global {67112A04-6E97-4C40-97EA-2A8FB6C14797}.Release MTD (OpenNI)|Win32.Build.0 = Release MTD (OpenNI)|Win32 {67112A04-6E97-4C40-97EA-2A8FB6C14797}.Release|Win32.ActiveCfg = Release (OpenNI)|Win32 {67112A04-6E97-4C40-97EA-2A8FB6C14797}.Release|Win32.Build.0 = Release (OpenNI)|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug (MS KINECT SDK)|Win32.ActiveCfg = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug (MS KINECT SDK)|Win32.Build.0 = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug (OpenNI)|Win32.ActiveCfg = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug (OpenNI)|Win32.Build.0 = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug MTD (MS KINECT SDK)|Win32.ActiveCfg = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug MTD (MS KINECT SDK)|Win32.Build.0 = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug MTD (OpenNI)|Win32.ActiveCfg = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug MTD (OpenNI)|Win32.Build.0 = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug|Win32.ActiveCfg = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Debug|Win32.Build.0 = Debug|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release (MS KINECT SDK)|Win32.ActiveCfg = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release (MS KINECT SDK)|Win32.Build.0 = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release (OpenNI)|Win32.ActiveCfg = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release (OpenNI)|Win32.Build.0 = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release MTD (MS KINECT SDK)|Win32.ActiveCfg = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release MTD (MS KINECT SDK)|Win32.Build.0 = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release MTD (OpenNI)|Win32.ActiveCfg = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release MTD (OpenNI)|Win32.Build.0 = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release|Win32.ActiveCfg = Release|Win32 - {9A71947B-E3A5-C4D0-6A52-D22C44A21233}.Release|Win32.Build.0 = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug (MS KINECT SDK)|Win32.ActiveCfg = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug (MS KINECT SDK)|Win32.Build.0 = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug (OpenNI)|Win32.ActiveCfg = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug (OpenNI)|Win32.Build.0 = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug MTD (MS KINECT SDK)|Win32.ActiveCfg = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug MTD (MS KINECT SDK)|Win32.Build.0 = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug MTD (OpenNI)|Win32.ActiveCfg = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug MTD (OpenNI)|Win32.Build.0 = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug|Win32.ActiveCfg = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Debug|Win32.Build.0 = Debug|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release (MS KINECT SDK)|Win32.ActiveCfg = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release (MS KINECT SDK)|Win32.Build.0 = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release (OpenNI)|Win32.ActiveCfg = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release (OpenNI)|Win32.Build.0 = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release MTD (MS KINECT SDK)|Win32.ActiveCfg = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release MTD (MS KINECT SDK)|Win32.Build.0 = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release MTD (OpenNI)|Win32.ActiveCfg = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release MTD (OpenNI)|Win32.Build.0 = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release|Win32.ActiveCfg = Release|Win32 + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB}.Release|Win32.Build.0 = Release|Win32 {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug (MS KINECT SDK)|Win32.ActiveCfg = Debug|Win32 {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug (MS KINECT SDK)|Win32.Build.0 = Debug|Win32 {7FD42DF7-442E-479A-BA76-D0022F99702A}.Debug (OpenNI)|Win32.ActiveCfg = Debug|Win32 @@ -119,7 +119,7 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {9A71947B-E3A5-C4D0-6A52-D22C44A21233} = {7922FCA8-9F38-47C9-93D3-D591F6CD3419} + {1D21AB6E-B6BA-A556-7CDF-71133E3D1BFB} = {7922FCA8-9F38-47C9-93D3-D591F6CD3419} {7FD42DF7-442E-479A-BA76-D0022F99702A} = {7922FCA8-9F38-47C9-93D3-D591F6CD3419} {01B47039-3133-407A-944A-3F554A017C2C} = {7922FCA8-9F38-47C9-93D3-D591F6CD3419} EndGlobalSection diff --git a/src/OpenNISpecific/OpenNIDevice.cpp b/src/OpenNISpecific/OpenNIDevice.cpp index 9a0234b..5da8dc6 100644 --- a/src/OpenNISpecific/OpenNIDevice.cpp +++ b/src/OpenNISpecific/OpenNIDevice.cpp @@ -842,8 +842,20 @@ _2RealTrackedJointRef OpenNIDevice::getUserJoint( const uint32_t userID, XnSkele getExistingProductionNode( XN_NODE_TYPE_DEPTH, depthGen ); xnConvertRealWorldToProjective( depthGen.GetHandle(), 1, &joint.position.position, &screenPos ); _2RealMatrix3x3 mat; - for( int i=0; i < 9; ++i ) - mat.elements[i] = joint.orientation.orientation.elements[i]; + + //for( int i=0; i < 9; ++i ) + // mat.elements[i] = joint.orientation.orientation.elements[i]; + + mat.m11 = joint.orientation.orientation.elements[0]; + mat.m12 = joint.orientation.orientation.elements[1]; + mat.m13 = joint.orientation.orientation.elements[2]; + mat.m21 = joint.orientation.orientation.elements[3]; + mat.m22 = joint.orientation.orientation.elements[4]; + mat.m23 = joint.orientation.orientation.elements[5]; + mat.m31 = joint.orientation.orientation.elements[6]; + mat.m32 = joint.orientation.orientation.elements[7]; + mat.m33 = joint.orientation.orientation.elements[8]; + _2RealJointConfidence confidence((float)joint.position.fConfidence, (float)joint.orientation.fConfidence); diff --git a/src/OpenNISpecific/_2RealImplementationOpenNI.hpp b/src/OpenNISpecific/_2RealImplementationOpenNI.hpp index cb7ba15..a2f2b1a 100644 --- a/src/OpenNISpecific/_2RealImplementationOpenNI.hpp +++ b/src/OpenNISpecific/_2RealImplementationOpenNI.hpp @@ -54,6 +54,7 @@ class _2RealImplementationOpenNI : public I_2RealImplementation bool m_IsInitialized; _2RealTrackedUserVector m_TrackedUserVector; bool m_ShouldUpdate; + bool m_StopRequested; boost::thread m_ProcessingThread; virtual void initialize() { @@ -132,7 +133,7 @@ class _2RealImplementationOpenNI : public I_2RealImplementation void update() { - while ( true ) + while ( !m_StopRequested ) { if ( m_ShouldUpdate ) { @@ -147,10 +148,11 @@ class _2RealImplementationOpenNI : public I_2RealImplementation public: _2RealImplementationOpenNI() :m_NumDevices( 0 ), - m_IsInitialized( 0 ), + m_IsInitialized( false ), m_GeneratorConfig( CONFIG_DEFAULT ), m_ImageConfig( IMAGE_CONFIG_DEFAULT ), - m_ShouldUpdate( false ) + m_ShouldUpdate( false ), + m_StopRequested( false ) { initialize(); } @@ -316,7 +318,23 @@ class _2RealImplementationOpenNI : public I_2RealImplementation } virtual bool shutdown() { + m_StopRequested = true; + m_ProcessingThread.join(); return false; + + if( m_IsInitialized ) + { + _2REAL_LOG( info ) << std::endl << "_2Real: Shutting down system..." << std::endl; + m_StopRequested = true; + m_ProcessingThread.join(); + m_IsInitialized = false; + _2REAL_LOG( info ) << "OK" << std::endl; + return true; + } + _2REAL_LOG( warn ) << std::endl << "_2Real: System not shutdown correctly..." << std::endl; + return false; + + } virtual boost::shared_array getImageData( const uint32_t deviceID, _2RealGenerator type, bool waitAndBlock, const uint8_t userId ) { @@ -444,7 +462,7 @@ class _2RealImplementationOpenNI : public I_2RealImplementation return m_TrackedUserVector[userID]->getJointWorldPosition( type ); } - virtual const _2RealPositionsVector3f& getSkeletonWorldPositions( const uint32_t deviceID, const uint8_t userID ) + virtual const _2RealPositionsVector3f getSkeletonWorldPositions( const uint32_t deviceID, const uint8_t userID ) { checkDeviceRunning(deviceID); @@ -470,7 +488,7 @@ class _2RealImplementationOpenNI : public I_2RealImplementation return m_TrackedUserVector[userID]->getJointScreenPosition( type ); } - virtual const _2RealPositionsVector3f& getSkeletonScreenPositions( const uint32_t deviceID, const uint8_t userID ) + virtual const _2RealPositionsVector3f getSkeletonScreenPositions( const uint32_t deviceID, const uint8_t userID ) { checkDeviceRunning(deviceID); @@ -485,7 +503,7 @@ class _2RealImplementationOpenNI : public I_2RealImplementation return m_TrackedUserVector[userID]->getSkeletonScreenPositions(); } - virtual const _2RealOrientationsMatrix3x3& getSkeletonWorldOrientations( const uint32_t deviceID, const uint8_t userID ) + virtual const _2RealOrientationsMatrix3x3 getSkeletonWorldOrientations( const uint32_t deviceID, const uint8_t userID ) { checkDeviceRunning(deviceID);