removed unnecessary members of CvCapture_OpenNI
This commit is contained in:
parent
5c23d52618
commit
fedff0922e
@ -327,6 +327,11 @@ CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)
|
||||
result = cvCreateFileCapture_AVFoundation (filename);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_OPENNI
|
||||
if (! result)
|
||||
result = cvCreateFileCapture_OpenNI (filename);
|
||||
#endif
|
||||
|
||||
if (! result)
|
||||
result = cvCreateFileCapture_Images (filename);
|
||||
|
||||
|
@ -83,6 +83,7 @@ public:
|
||||
static const int INVALID_COORDINATE_VAL = 0;
|
||||
|
||||
CvCapture_OpenNI(int index=0);
|
||||
CvCapture_OpenNI(const char * filename);
|
||||
virtual ~CvCapture_OpenNI();
|
||||
|
||||
virtual double getProperty(int propIdx);
|
||||
@ -121,18 +122,14 @@ protected:
|
||||
|
||||
// OpenNI context
|
||||
xn::Context context;
|
||||
bool m_isOpened;
|
||||
bool m_isDepthGeneratorPresent;
|
||||
bool m_isImageGeneratorPresent;
|
||||
bool isContextOpened;
|
||||
|
||||
// Data generators with its metadata
|
||||
xn::DepthGenerator depthGenerator;
|
||||
xn::DepthMetaData depthMetaData;
|
||||
XnMapOutputMode depthOutputMode;
|
||||
|
||||
xn::ImageGenerator imageGenerator;
|
||||
xn::ImageMetaData imageMetaData;
|
||||
XnMapOutputMode imageOutputMode;
|
||||
|
||||
// Cameras settings:
|
||||
// TODO find in OpenNI function to convert z->disparity and remove fields "baseline" and depthFocalLength_VGA
|
||||
@ -160,27 +157,28 @@ IplImage* CvCapture_OpenNI::OutputMap::getIplImagePtr()
|
||||
|
||||
bool CvCapture_OpenNI::isOpened() const
|
||||
{
|
||||
return m_isOpened;
|
||||
return isContextOpened;
|
||||
}
|
||||
|
||||
XnMapOutputMode defaultMapOutputMode()
|
||||
{
|
||||
XnMapOutputMode mode;
|
||||
mode.nXRes = XN_VGA_X_RES;
|
||||
mode.nYRes = XN_VGA_Y_RES;
|
||||
mode.nFPS = 30;
|
||||
return mode;
|
||||
}
|
||||
|
||||
CvCapture_OpenNI::CvCapture_OpenNI( int index )
|
||||
{
|
||||
XnStatus status = XN_STATUS_OK;
|
||||
|
||||
// Initialize image output modes (VGA_30HZ by default).
|
||||
depthOutputMode.nXRes = imageOutputMode.nXRes = XN_VGA_X_RES;
|
||||
depthOutputMode.nYRes = imageOutputMode.nYRes = XN_VGA_Y_RES;
|
||||
depthOutputMode.nFPS = imageOutputMode.nFPS = 30;
|
||||
|
||||
m_isOpened = false;
|
||||
m_isImageGeneratorPresent = false;
|
||||
isContextOpened = false;
|
||||
|
||||
// Initialize and configure the context.
|
||||
if( context.Init() == XN_STATUS_OK )
|
||||
{
|
||||
// Find devices
|
||||
xn::NodeInfoList devicesList;
|
||||
status = context.EnumerateProductionTrees( XN_NODE_TYPE_DEVICE, NULL, devicesList, 0 );
|
||||
XnStatus status = context.EnumerateProductionTrees( XN_NODE_TYPE_DEVICE, NULL, devicesList, 0 );
|
||||
if( status != XN_STATUS_OK )
|
||||
{
|
||||
std::cerr << "CvCapture_OpenNI::CvCapture_OpenNI : Failed to enumerate production trees: "
|
||||
@ -224,7 +222,6 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
|
||||
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 )
|
||||
{
|
||||
@ -245,7 +242,6 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
|
||||
|
||||
if( !imageList.IsEmpty() )
|
||||
{
|
||||
m_isImageGeneratorPresent = true;
|
||||
status = imageGenerator.Create( context );
|
||||
if( status != XN_STATUS_OK )
|
||||
{
|
||||
@ -256,8 +252,10 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
|
||||
}
|
||||
|
||||
// Set map output mode.
|
||||
CV_Assert( depthGenerator.SetMapOutputMode( depthOutputMode ) == XN_STATUS_OK ); // xn::DepthGenerator supports VGA only! (Jan 2011)
|
||||
CV_Assert( m_isImageGeneratorPresent ? ( imageGenerator.SetMapOutputMode( imageOutputMode ) == XN_STATUS_OK ) : true );
|
||||
if( depthGenerator.IsValid() )
|
||||
CV_DbgAssert( depthGenerator.SetMapOutputMode(defaultMapOutputMode()) == XN_STATUS_OK ); // xn::DepthGenerator supports VGA only! (Jan 2011)
|
||||
if( imageGenerator.IsValid() )
|
||||
CV_DbgAssert( imageGenerator.SetMapOutputMode(defaultMapOutputMode()) == XN_STATUS_OK );
|
||||
|
||||
// Start generating data.
|
||||
status = context.StartGeneratingAll();
|
||||
@ -276,12 +274,17 @@ CvCapture_OpenNI::CvCapture_OpenNI( int index )
|
||||
|
||||
outputMaps.resize( outputMapsTypesCount );
|
||||
|
||||
m_isOpened = true;
|
||||
isContextOpened = true;
|
||||
}
|
||||
|
||||
setProperty(CV_CAP_PROP_OPENNI_REGISTRATION, 1.0);
|
||||
}
|
||||
|
||||
CvCapture_OpenNI::CvCapture_OpenNI(const char * filename)
|
||||
{
|
||||
CV_Assert(0);
|
||||
}
|
||||
|
||||
CvCapture_OpenNI::~CvCapture_OpenNI()
|
||||
{
|
||||
context.StopGeneratingAll();
|
||||
@ -387,25 +390,28 @@ bool CvCapture_OpenNI::setProperty( int propIdx, double propValue )
|
||||
double CvCapture_OpenNI::getDepthGeneratorProperty( int propIdx )
|
||||
{
|
||||
double propValue = 0;
|
||||
if( !m_isDepthGeneratorPresent )
|
||||
if( !depthGenerator.IsValid() )
|
||||
return propValue;
|
||||
|
||||
CV_Assert( depthGenerator.IsValid() );
|
||||
XnMapOutputMode mode;
|
||||
|
||||
switch( propIdx )
|
||||
{
|
||||
case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT :
|
||||
CV_Assert( m_isDepthGeneratorPresent );
|
||||
CV_DbgAssert( depthGenerator.IsValid() );
|
||||
propValue = 1.;
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_WIDTH :
|
||||
propValue = depthOutputMode.nXRes;
|
||||
if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nXRes;
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_HEIGHT :
|
||||
propValue = depthOutputMode.nYRes;
|
||||
if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nYRes;
|
||||
break;
|
||||
case CV_CAP_PROP_FPS :
|
||||
propValue = depthOutputMode.nFPS;
|
||||
if( depthGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nFPS;
|
||||
break;
|
||||
case CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH :
|
||||
propValue = depthGenerator.GetDeviceMaxDepth();
|
||||
@ -443,9 +449,8 @@ bool CvCapture_OpenNI::setDepthGeneratorProperty( int propIdx, double propValue
|
||||
{
|
||||
// if there isn't image generator (i.e. ASUS XtionPro doesn't have it)
|
||||
// then the property isn't avaliable
|
||||
if( m_isImageGeneratorPresent )
|
||||
if( imageGenerator.IsValid() )
|
||||
{
|
||||
CV_Assert( imageGenerator.IsValid() );
|
||||
if( !depthGenerator.GetAlternativeViewPointCap().IsViewPointAs(imageGenerator) )
|
||||
{
|
||||
if( depthGenerator.GetAlternativeViewPointCap().IsViewPointSupported(imageGenerator) )
|
||||
@ -487,25 +492,27 @@ bool CvCapture_OpenNI::setDepthGeneratorProperty( int propIdx, double propValue
|
||||
double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx )
|
||||
{
|
||||
double propValue = 0.;
|
||||
if( !m_isImageGeneratorPresent )
|
||||
if( !imageGenerator.IsValid() )
|
||||
return propValue;
|
||||
|
||||
CV_Assert( imageGenerator.IsValid() );
|
||||
|
||||
XnMapOutputMode mode;
|
||||
switch( propIdx )
|
||||
{
|
||||
case CV_CAP_PROP_OPENNI_GENERATOR_PRESENT :
|
||||
CV_Assert( m_isImageGeneratorPresent );
|
||||
CV_DbgAssert( imageGenerator.IsValid() );
|
||||
propValue = 1.;
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_WIDTH :
|
||||
propValue = imageOutputMode.nXRes;
|
||||
if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nXRes;
|
||||
break;
|
||||
case CV_CAP_PROP_FRAME_HEIGHT :
|
||||
propValue = imageOutputMode.nYRes;
|
||||
if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nYRes;
|
||||
break;
|
||||
case CV_CAP_PROP_FPS :
|
||||
propValue = imageOutputMode.nFPS;
|
||||
if( imageGenerator.GetMapOutputMode(mode) == XN_STATUS_OK )
|
||||
propValue = mode.nFPS;
|
||||
break;
|
||||
default :
|
||||
{
|
||||
@ -521,46 +528,41 @@ double CvCapture_OpenNI::getImageGeneratorProperty( int propIdx )
|
||||
bool CvCapture_OpenNI::setImageGeneratorProperty( int propIdx, double propValue )
|
||||
{
|
||||
bool isSet = false;
|
||||
if( !m_isImageGeneratorPresent )
|
||||
if( !imageGenerator.IsValid() )
|
||||
return isSet;
|
||||
|
||||
CV_Assert( imageGenerator.IsValid() );
|
||||
|
||||
switch( propIdx )
|
||||
{
|
||||
case CV_CAP_PROP_OPENNI_OUTPUT_MODE :
|
||||
{
|
||||
XnMapOutputMode newImageOutputMode = imageOutputMode;
|
||||
XnMapOutputMode mode;
|
||||
|
||||
switch( cvRound(propValue) )
|
||||
{
|
||||
case CV_CAP_OPENNI_VGA_30HZ :
|
||||
newImageOutputMode.nXRes = XN_VGA_X_RES;
|
||||
newImageOutputMode.nYRes = XN_VGA_Y_RES;
|
||||
newImageOutputMode.nFPS = 30;
|
||||
mode.nXRes = XN_VGA_X_RES;
|
||||
mode.nYRes = XN_VGA_Y_RES;
|
||||
mode.nFPS = 30;
|
||||
break;
|
||||
case CV_CAP_OPENNI_SXGA_15HZ :
|
||||
newImageOutputMode.nXRes = XN_SXGA_X_RES;
|
||||
newImageOutputMode.nYRes = XN_SXGA_Y_RES;
|
||||
newImageOutputMode.nFPS = 15;
|
||||
mode.nXRes = XN_SXGA_X_RES;
|
||||
mode.nYRes = XN_SXGA_Y_RES;
|
||||
mode.nFPS = 15;
|
||||
break;
|
||||
case CV_CAP_OPENNI_SXGA_30HZ :
|
||||
newImageOutputMode.nXRes = XN_SXGA_X_RES;
|
||||
newImageOutputMode.nYRes = XN_SXGA_Y_RES;
|
||||
newImageOutputMode.nFPS = 30;
|
||||
mode.nXRes = XN_SXGA_X_RES;
|
||||
mode.nYRes = XN_SXGA_Y_RES;
|
||||
mode.nFPS = 30;
|
||||
break;
|
||||
default :
|
||||
CV_Error( CV_StsBadArg, "Unsupported image generator output mode.\n");
|
||||
}
|
||||
|
||||
XnStatus status = imageGenerator.SetMapOutputMode( newImageOutputMode );
|
||||
XnStatus status = imageGenerator.SetMapOutputMode( mode );
|
||||
if( status != XN_STATUS_OK )
|
||||
std::cerr << "CvCapture_OpenNI::setImageGeneratorProperty : " << xnGetStatusString(status) << std::endl;
|
||||
else
|
||||
{
|
||||
imageOutputMode = newImageOutputMode;
|
||||
isSet = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -583,8 +585,9 @@ bool CvCapture_OpenNI::grabFrame()
|
||||
if( status != XN_STATUS_OK )
|
||||
return false;
|
||||
|
||||
if( depthGenerator.IsValid() )
|
||||
depthGenerator.GetMetaData( depthMetaData );
|
||||
if( m_isImageGeneratorPresent )
|
||||
if( imageGenerator.IsValid() )
|
||||
imageGenerator.GetMetaData( imageMetaData );
|
||||
|
||||
return true;
|
||||
@ -813,4 +816,15 @@ CvCapture* cvCreateCameraCapture_OpenNI( int index )
|
||||
return 0;
|
||||
}
|
||||
|
||||
CvCapture* cvCreateFileCapture_OpenNI( const char* filename )
|
||||
{
|
||||
CvCapture_OpenNI* capture = new CvCapture_OpenNI( filename );
|
||||
|
||||
if( capture->isOpened() )
|
||||
return capture;
|
||||
|
||||
delete capture;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -132,6 +132,7 @@ CvVideoWriter* cvCreateVideoWriter_VFW( const char* filename, int fourcc,
|
||||
double fps, CvSize frameSize, int is_color );
|
||||
CvCapture* cvCreateCameraCapture_DShow( int index );
|
||||
CvCapture* cvCreateCameraCapture_OpenNI( int index );
|
||||
CvCapture* cvCreateFileCapture_OpenNI( const char* filename );
|
||||
CvCapture* cvCreateCameraCapture_Android( int index );
|
||||
CvCapture* cvCreateCameraCapture_XIMEA( int index );
|
||||
CvCapture* cvCreateCameraCapture_AVFoundation(int index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user