bool CvCapture_OpenNI::setCommonProperty( int propIdx, double propValue ) { bool isSet = false; switch( propIdx ) { // There is a set of properties that correspond to depth generator by default // (is they are pass without particular generator flag). case CV_CAP_PROP_OPENNI_REGISTRATION: isSet = setDepthGeneratorProperty( propIdx, propValue ); break; case CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC : if( propValue && depthGenerator.IsValid() && imageGenerator.IsValid() ) { // start synchronization if( approxSyncGrabber.empty() ) { approxSyncGrabber = new ApproximateSyncGrabber( context, depthGenerator, imageGenerator, maxBufferSize, isCircleBuffer, maxTimeDuration ); } else { approxSyncGrabber->finish(); // update params approxSyncGrabber->setMaxBufferSize(maxBufferSize); approxSyncGrabber->setIsCircleBuffer(isCircleBuffer); approxSyncGrabber->setMaxTimeDuration(maxTimeDuration); } approxSyncGrabber->start(); } else if( !propValue && !approxSyncGrabber.empty() ) { // finish synchronization approxSyncGrabber->finish(); } break; case CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE : maxBufferSize = cvRound(propValue); if( !approxSyncGrabber.empty() ) approxSyncGrabber->setMaxBufferSize(maxBufferSize); break; case CV_CAP_PROP_OPENNI_CIRCLE_BUFFER : if( !approxSyncGrabber.empty() ) approxSyncGrabber->setIsCircleBuffer(isCircleBuffer); break; case CV_CAP_PROP_OPENNI_MAX_TIME_DURATION : maxTimeDuration = cvRound(propValue); if( !approxSyncGrabber.empty() ) approxSyncGrabber->setMaxTimeDuration(maxTimeDuration); break; default: { std::stringstream ss; ss << "Such parameter (propIdx=" << propIdx << ") isn't supported for setting.\n"; CV_Error( CV_StsBadArg, ss.str().c_str() ); } } return isSet; }