fixed CvCapture_OpenNI constructor (removed all exceptions) (#1237)
authorMaria Dimashova <no@email>
Mon, 8 Aug 2011 15:47:52 +0000 (15:47 +0000)
committerMaria Dimashova <no@email>
Mon, 8 Aug 2011 15:47:52 +0000 (15:47 +0000)
modules/highgui/src/cap_openni.cpp

index c862e67..463abe1 100644 (file)
@@ -118,7 +118,7 @@ protected:
     IplImage* retrieveBGRImage();
     IplImage* retrieveGrayImage();
 
-    void readCamerasParams();
+    bool readCamerasParams();
 
     double getDepthGeneratorProperty(int propIdx);
     bool setDepthGeneratorProperty(int propIdx, double propVal);
@@ -177,6 +177,7 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
     depthOutputMode.nFPS = imageOutputMode.nFPS = 30;
 
     m_isOpened = false;
+    bool isContextInitialized = false;
 
     // Initialize and configure the context.
     if( context.Init() == XN_STATUS_OK )
@@ -185,7 +186,11 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
         xn::NodeInfoList devicesList;
         status = context.EnumerateProductionTrees( XN_NODE_TYPE_DEVICE, NULL, devicesList, 0 );
         if( status != XN_STATUS_OK )
-            CV_Error(CV_StsError, ("Failed to enumerate production trees: " + std::string(xnGetStatusString(status))).c_str() );
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate production trees: "
+                      << std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
 
         // Chose device according to index
         xn::NodeInfoList::Iterator it = devicesList.Begin();
@@ -194,7 +199,11 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
         xn::NodeInfo deviceNode = *it;
         status = context.CreateProductionTree( deviceNode );
         if( status != XN_STATUS_OK )
-            CV_Error(CV_StsError, ("Failed to create production tree: " + std::string(xnGetStatusString(status))).c_str() );
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create production tree: "
+                      << std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
 
 #ifdef HACK_WITH_XML
         // Write configuration to the temporary file.
@@ -206,39 +215,65 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
         outfile.close();
 
         status = context.RunXmlScriptFromFile( xmlFilename.c_str() );
+        if( status != XN_STATUS_OK )
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to run xml script: "
+                      << std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
 
         // Remove temporary configuration file.
         remove( xmlFilename.c_str() );
 #else
         status = context.RunXmlScript( XMLConfig.c_str() );
 #endif
-        m_isOpened = ( status == XN_STATUS_OK );
+        isContextInitialized = ( status == XN_STATUS_OK );
     }
 
-    if( m_isOpened )
+    if( isContextInitialized )
     {
         // Associate generators with context.
         status = depthGenerator.Create( context );
-        if( status != XN_STATUS_OK )
-            CV_Error(CV_StsError, ("Failed to create depth generator: " + std::string(xnGetStatusString(status))).c_str() );
+        if( status != XN_STATUS_OK )\
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create depth generator: "
+                      << std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
+
         imageGenerator.Create( context );
         if( status != XN_STATUS_OK )
-            CV_Error(CV_StsError, ("Failed to create image generator: " + std::string(xnGetStatusString(status))).c_str() );
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create image generator: "
+                      <<  std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
 
         // Set map output mode.
         CV_Assert( depthGenerator.SetMapOutputMode( depthOutputMode ) == XN_STATUS_OK ); // xn::DepthGenerator supports VGA only! (Jan 2011)
         CV_Assert( imageGenerator.SetMapOutputMode( imageOutputMode ) == XN_STATUS_OK );
-        CV_Assert( setProperty(CV_CAP_PROP_OPENNI_REGISTRATION, 1.0) );
 
         //  Start generating data.
         status = context.StartGeneratingAll();
         if( status != XN_STATUS_OK )
-            CV_Error(CV_StsError, ("Failed to start generating OpenNI data: " + std::string(xnGetStatusString(status))).c_str() );
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to start generating OpenNI data: "
+                      << std::string(xnGetStatusString(status)) << std::endl;
+            return;
+        }
 
-        readCamerasParams();
+        if( !readCamerasParams() )
+        {
+            std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Could not read cameras parameters" << std::endl;
+            return;
+        }
 
         outputMaps.resize( outputTypesCount );
+
+        m_isOpened = true;
     }
+
+    setProperty(CV_CAP_PROP_OPENNI_REGISTRATION, 1.0);
 }
 
 CvCapture_OpenNI::~CvCapture_OpenNI()
@@ -247,11 +282,14 @@ CvCapture_OpenNI::~CvCapture_OpenNI()
     context.Shutdown();
 }
 
-void CvCapture_OpenNI::readCamerasParams()
+bool CvCapture_OpenNI::readCamerasParams()
 {
     XnDouble pixelSize = 0;
     if( depthGenerator.GetRealProperty( "ZPPS", pixelSize ) != XN_STATUS_OK )
-        CV_Error( CV_StsError, "Could not read pixel size!" );
+    {
+        std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read pixel size!" << std::endl;
+        return false;
+    }
 
     // pixel size @ VGA = pixel size @ SXGA x 2
     pixelSize *= 2.0; // in mm
@@ -259,10 +297,16 @@ void CvCapture_OpenNI::readCamerasParams()
     // focal length of IR camera in pixels for VGA resolution
     XnUInt64 zeroPlanDistance; // in mm
     if( depthGenerator.GetIntProperty( "ZPD", zeroPlanDistance ) != XN_STATUS_OK )
-        CV_Error( CV_StsError, "Could not read virtual plane distance!" );
+    {
+        std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read virtual plane distance!" << std::endl;
+        return false;
+    }
 
     if( depthGenerator.GetRealProperty( "LDDIS", baseline ) != XN_STATUS_OK )
-        CV_Error( CV_StsError, "Could not read base line!" );
+    {
+        std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read base line!" << std::endl;
+        return false;
+    }
 
     // baseline from cm -> mm
     baseline *= 10;
@@ -271,10 +315,18 @@ void CvCapture_OpenNI::readCamerasParams()
     depthFocalLength_VGA = (XnUInt64)((double)zeroPlanDistance / (double)pixelSize);
 
     if( depthGenerator.GetIntProperty( "ShadowValue", shadowValue ) != XN_STATUS_OK )
-        CV_Error( CV_StsError, "Could not read property \"ShadowValue\"!" );
+    {
+        std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read property \"ShadowValue\"!" << std::endl;
+        return false;
+    }
 
     if( depthGenerator.GetIntProperty("NoSampleValue", noSampleValue ) != XN_STATUS_OK )
-        CV_Error( CV_StsError, "Could not read property \"NoSampleValue\"!" );
+    {
+        std::cerr << "CvCapture_OpenNI::readCamerasParams : Could not read property \"NoSampleValue\"!" <<std::endl;
+        return false;
+    }
+
+    return true;
 }
 
 double CvCapture_OpenNI::getProperty( int propIdx )