renamed property of openni camera

This commit is contained in:
Maria Dimashova
2012-03-16 13:59:08 +00:00
parent c9489a8bf3
commit baa81de122
4 changed files with 99 additions and 59 deletions

View File

@@ -127,8 +127,9 @@ protected:
// OpenNI context
xn::Context context;
bool m_isOpened;
bool m_isDepthGeneratorPresent;
bool m_isImageGeneratorPresent;
// Data generators with its metadata
xn::DepthGenerator depthGenerator;
xn::DepthMetaData depthMetaData;
@@ -229,6 +230,21 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
}
// Associate generators with context.
// enumerate the nodes to find if depth generator is present
xn::NodeInfoList depthList;
status = context.EnumerateExistingNodes( depthList, XN_NODE_TYPE_DEPTH );
if( status != XN_STATUS_OK )
{
std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate depth generators: "
<< std::string(xnGetStatusString(status)) << std::endl;
return;
}
if( depthList.IsEmpty() )
{
std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : The device doesn't have depth generator. Such devices aren't supported now." << std::endl;
return;
}
m_isDepthGeneratorPresent = true;
status = depthGenerator.Create( context );
if( status != XN_STATUS_OK )
{
@@ -238,8 +254,8 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
}
// enumerate the nodes to find if image generator is present
xn::NodeInfoList Imagelist;
status = context.EnumerateExistingNodes( Imagelist, XN_NODE_TYPE_IMAGE );
xn::NodeInfoList imageList;
status = context.EnumerateExistingNodes( imageList, XN_NODE_TYPE_IMAGE );
if( status != XN_STATUS_OK )
{
std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate image generators: "
@@ -247,10 +263,10 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
return;
}
if( !Imagelist.IsEmpty() )
if( !imageList.IsEmpty() )
{
m_isImageGeneratorPresent = true;
imageGenerator.Create( context );
status = imageGenerator.Create( context );
if( status != XN_STATUS_OK )
{
std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to create image generator: "
@@ -390,12 +406,18 @@ bool CvCapture_OpenNI::setProperty( int propIdx, double propValue )
double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx )
{
CV_Assert( depthGenerator.IsValid() );
double propValue = 0;
if( !m_isDepthGeneratorPresent )
return propValue;
CV_Assert( depthGenerator.IsValid() );
switch( propIdx )
{
case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT :
CV_Assert( m_isDepthGeneratorPresent );
propValue = 1.;
break;
case CV_CAP_PROP_FRAME_WIDTH :
propValue = depthOutputMode.nXRes;
break;
@@ -417,7 +439,11 @@ double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx )
case CV_CAP_PROP_OPENNI_REGISTRATION :
propValue = depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) ? 1.0 : 0.0;
default :
CV_Error( CV_StsBadArg, "Depth generator does not support such parameter for getting.\n");
{
std::stringstream ss;
ss << "Depth generator does not support such parameter (propIdx=" << propIdx << ") for getting.\n";
CV_Error( CV_StsBadArg, ss.str().c_str() );
}
}
return propValue;
@@ -431,44 +457,48 @@ bool CvCapture_OpenNI::setDepthGeneratorProperty( int propIdx, double propValue
switch( propIdx )
{
case CV_CAP_PROP_OPENNI_REGISTRATION:
case CV_CAP_PROP_OPENNI_REGISTRATION:
{
if( propValue != 0.0 ) // "on"
{
if( propValue != 0.0 ) // "on"
// if there isn't image generator (i.e. ASUS XtionPro doesn't have it)
// then the property isn't avaliable
if( m_isImageGeneratorPresent )
{
// if there isn't image generator (i.e. ASUS XtionPro doesn't have it)
// then the property isn't avaliable
if( m_isImageGeneratorPresent )
CV_Assert( imageGenerator.IsValid() );
if( !depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) )
{
CV_Assert( imageGenerator.IsValid() );
if( !depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) )
if( depthGenerator.GetAlternativeViewPointCap().IsViewPointSupported(imageGenerator) )
{
if( depthGenerator.GetAlternativeViewPointCap().IsViewPointSupported(imageGenerator) )
{
XnStatus status = depthGenerator.GetAlternativeViewPointCap().SetViewPoint(imageGenerator);
if( status != XN_STATUS_OK )
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl;
else
isSet = true;
}
XnStatus status = depthGenerator.GetAlternativeViewPointCap().SetViewPoint(imageGenerator);
if( status != XN_STATUS_OK )
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl;
else
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : Unsupported viewpoint." << std::endl;
isSet = true;
}
else
isSet = true;
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : Unsupported viewpoint." << std::endl;
}
}
else // "off"
{
XnStatus status = depthGenerator.GetAlternativeViewPointCap().ResetViewPoint();
if( status != XN_STATUS_OK )
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl;
else
isSet = true;
}
}
break;
default:
CV_Error( CV_StsBadArg, "Unsupported depth generator property.\n");
else // "off"
{
XnStatus status = depthGenerator.GetAlternativeViewPointCap().ResetViewPoint();
if( status != XN_STATUS_OK )
std::cerr << "CvCapture_OpenNI::setDepthGeneratorProperty : " << xnGetStatusString(status) << std::endl;
else
isSet = true;
}
}
break;
default:
{
std::stringstream ss;
ss << "Depth generator does not support such parameter (propIdx=" << propIdx << ") for setting.\n";
CV_Error( CV_StsBadArg, ss.str().c_str() );
}
}
return isSet;
@@ -476,31 +506,35 @@ bool CvCapture_OpenNI::setDepthGeneratorProperty( int propIdx, double propValue
double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx )
{
double propValue = 0;
double propValue = 0.;
if( !m_isImageGeneratorPresent )
return propValue;
if( propIdx == CV_CAP_PROP_OPENNI_IMAGE_GENERATOR_PRESENT )
propValue = m_isImageGeneratorPresent ? 1. : 0.;
else
{
CV_Assert( imageGenerator.IsValid() );
CV_Assert( imageGenerator.IsValid() );
switch( propIdx )
{
case CV_CAP_PROP_FRAME_WIDTH :
propValue = imageOutputMode.nXRes;
break;
case CV_CAP_PROP_FRAME_HEIGHT :
propValue = imageOutputMode.nYRes;
break;
case CV_CAP_PROP_FPS :
propValue = imageOutputMode.nFPS;
break;
default :
CV_Error( CV_StsBadArg, "Image generator does not support such parameter for getting.\n");
}
switch( propIdx )
{
case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT :
CV_Assert( m_isImageGeneratorPresent );
propValue = 1.;
break;
case CV_CAP_PROP_FRAME_WIDTH :
propValue = imageOutputMode.nXRes;
break;
case CV_CAP_PROP_FRAME_HEIGHT :
propValue = imageOutputMode.nYRes;
break;
case CV_CAP_PROP_FPS :
propValue = imageOutputMode.nFPS;
break;
default :
{
std::stringstream ss;
ss << "Image generator does not support such parameter (propIdx=" << propIdx << ") for getting.\n";
CV_Error( CV_StsBadArg, ss.str().c_str() );
}
}
return propValue;
}
@@ -550,7 +584,11 @@ bool CvCapture_OpenNI::setImageGeneratorProperty( int propIdx, double propValue
break;
}
default:
CV_Error( CV_StsBadArg, "Unsupported image generator property.\n");
{
std::stringstream ss;
ss << "Image generator does not support such parameter (propIdx=" << propIdx << ") for setting.\n";
CV_Error( CV_StsBadArg, ss.str().c_str() );
}
}
return isSet;