Commit 8f4f982e authored by Maria Dimashova's avatar Maria Dimashova

added support of several kinects (#1105)

parent 781ea62b
...@@ -88,7 +88,7 @@ public: ...@@ -88,7 +88,7 @@ public:
static const int INVALID_PIXEL_VAL = 0; static const int INVALID_PIXEL_VAL = 0;
static const int INVALID_COORDINATE_VAL = 0; static const int INVALID_COORDINATE_VAL = 0;
CvCapture_OpenNI(); CvCapture_OpenNI( int index=0 );
virtual ~CvCapture_OpenNI(); virtual ~CvCapture_OpenNI();
virtual double getProperty(int propIdx); virtual double getProperty(int propIdx);
...@@ -167,7 +167,7 @@ bool CvCapture_OpenNI::isOpened() const ...@@ -167,7 +167,7 @@ bool CvCapture_OpenNI::isOpened() const
return m_isOpened; return m_isOpened;
} }
CvCapture_OpenNI::CvCapture_OpenNI() CvCapture_OpenNI::CvCapture_OpenNI( int index )
{ {
XnStatus status = XN_STATUS_OK; XnStatus status = XN_STATUS_OK;
...@@ -181,6 +181,21 @@ CvCapture_OpenNI::CvCapture_OpenNI() ...@@ -181,6 +181,21 @@ CvCapture_OpenNI::CvCapture_OpenNI()
// Initialize and configure the context. // Initialize and configure the context.
if( context.Init() == XN_STATUS_OK ) if( context.Init() == XN_STATUS_OK )
{ {
// Find devices
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() );
// Chose device according to index
xn::NodeInfoList::Iterator it = devicesList.Begin();
for( int i = 0; i < index; ++i ) it++;
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() );
#ifdef HACK_WITH_XML #ifdef HACK_WITH_XML
// Write configuration to the temporary file. // Write configuration to the temporary file.
// This is a hack, because there is a bug in RunXmlScript(). // This is a hack, because there is a bug in RunXmlScript().
...@@ -659,10 +674,9 @@ IplImage* CvCapture_OpenNI::retrieveFrame( int outputType ) ...@@ -659,10 +674,9 @@ IplImage* CvCapture_OpenNI::retrieveFrame( int outputType )
} }
CvCapture* cvCreateCameraCapture_OpenNI( int /*index*/ ) CvCapture* cvCreateCameraCapture_OpenNI( int index )
{ {
// TODO devices enumeration (if several Kinects) CvCapture_OpenNI* capture = new CvCapture_OpenNI( index );
CvCapture_OpenNI* capture = new CvCapture_OpenNI();
if( capture->isOpened() ) if( capture->isOpened() )
return capture; return capture;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment