XnStatus prepare(char useScene, char useDepth, char useImage, char useIr, char useHistogram) { //TODO handle possible failures! Gotcha! if (useDepth) { mDepthGen.GetMetaData(depthMD); nXRes = depthMD.XRes(); nYRes = depthMD.YRes(); pDepth = depthMD.Data(); if (useHistogram) { calcHist(); // rewind the pointer pDepth = depthMD.Data(); } } if (useScene) { mUserGen.GetUserPixels(0, sceneMD); nXRes = sceneMD.XRes(); nYRes = sceneMD.YRes(); pLabels = sceneMD.Data(); } if (useImage) { mImageGen.GetMetaData(imageMD); nXRes = imageMD.XRes(); nYRes = imageMD.YRes(); pRGB = imageMD.RGB24Data(); // HISTOGRAM????? } if (useIr) { mIrGen.GetMetaData(irMD); nXRes = irMD.XRes(); nYRes = irMD.YRes(); pIR = irMD.Data(); // HISTOGRAM???? } }
void readFrame() { if (!g_Depth.IsValid() && !g_Image.IsValid() && !g_IR.IsValid() && !g_Audio.IsValid()) // @@@dded return; XnStatus rc = XN_STATUS_OK; if (g_pPrimary != NULL) { rc = g_Context.WaitOneUpdateAll(*g_pPrimary); } else { rc = g_Context.WaitAnyUpdateAll(); } if (rc != XN_STATUS_OK) { printf("Error: %s\n", xnGetStatusString(rc)); } if (g_Depth.IsValid()) { g_Depth.GetMetaData(g_DepthMD); } if (g_Image.IsValid()) { g_Image.GetMetaData(g_ImageMD); } if (g_IR.IsValid()) { g_IR.GetMetaData(g_irMD); } if (g_Audio.IsValid()) { g_Audio.GetMetaData(g_AudioMD); } }
/* * Class: org_OpenNI_Samples_Assistant_NativeMethods * Method: initFromContext * Signature: (JZZ)I */ JNIEXPORT jint JNICALL Java_org_OpenNI_Samples_Assistant_NativeMethods_initFromContext (JNIEnv *env, jclass cls, jlong pContext, jboolean _hasUserGen, jboolean _hasDepthGen, jboolean _hasImageGen, jboolean _hasIrGen) { LOGD("init_start"); hasUserGen = _hasUserGen; hasDepthGen = _hasDepthGen; hasImageGen = _hasImageGen; hasIrGen = _hasIrGen; mContext = new Context((XnContext*) pContext); if (!(hasUserGen || hasDepthGen || hasImageGen || hasIrGen)) { LOGD(" All booleans are false"); return XN_STATUS_BAD_PARAM; } int rc; if (hasUserGen) { rc = mContext->FindExistingNode(XN_NODE_TYPE_USER, mUserGen); if (rc != XN_STATUS_OK) { //TODO log&retval LOGD("No user node exists!"); return 1; } mUserGen.GetUserPixels(0, sceneMD); } if (hasDepthGen) { rc = mContext->FindExistingNode(XN_NODE_TYPE_DEPTH, mDepthGen); if (rc != XN_STATUS_OK) { //TODO log&retval LOGD("No depth node exists! Check your XML."); return 1; } mDepthGen.GetMetaData(depthMD); } if(hasImageGen) { rc = mContext->FindExistingNode(XN_NODE_TYPE_IMAGE,mImageGen); if(rc != XN_STATUS_OK) { LOGD("No image node exists! Check your XML."); return 1; } mImageGen.GetMetaData(imageMD); } if(hasIrGen) { rc = mContext->FindExistingNode(XN_NODE_TYPE_IR,mIrGen); if(rc != XN_STATUS_OK) { LOGD("No IR node exists! Check your XML"); return 1; } LOGD("Ir Node created"); mIrGen.GetMetaData(irMD); } initGraphics(); LOGD("init_end"); return XN_STATUS_OK; }
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mxArray *tmpContext; mxArray *tmpIR, *tmpIRMD; mxArray *tmpDepth, *tmpDepthMD; mxArray *context_initialised_array; mxArray *has_ir_node_array; mxArray *has_depth_node_array; Context* context; IRGenerator* ir; IRMetaData* irMD; DepthGenerator* depth; DepthMetaData* depthMD; unsigned short* output_ir = 0; unsigned short* output_depth = 0; mwSize dims2_ir[2]; mwSize dims2_depth[2]; bool context_initialised = false; bool has_ir_node = false; bool has_depth_node = false; //--------------------------------- // Read input variables //--------------------------------- // ni_context_obj tmpContext = mxGetField(prhs[0], 0, "ni_context_obj"); memcpy((void*)&context, mxGetPr(tmpContext), sizeof(Context*)); // ir_obj tmpIR = mxGetField(prhs[0], 0, "ir_obj"); memcpy((void*)&ir, mxGetPr(tmpIR), sizeof(IRGenerator*)); // irMD_obj tmpIRMD = mxGetField(prhs[0], 0, "irMD_obj"); memcpy((void*)&irMD, mxGetPr(tmpIRMD), sizeof(IRMetaData*)); // depth_obj tmpDepth = mxGetField(prhs[0], 0, "depth_obj"); memcpy((void*)&depth, mxGetPr(tmpDepth), sizeof(DepthGenerator*)); // depthMD_obj tmpDepthMD = mxGetField(prhs[0], 0, "depthMD_obj"); memcpy((void*)&depthMD, mxGetPr(tmpDepthMD), sizeof(DepthMetaData*)); // context_initialised context_initialised_array = mxGetField(prhs[0], 0, "context_initialised"); context_initialised = mxGetScalar(context_initialised_array); // has_ir_node has_ir_node_array = mxGetField(prhs[0], 0, "has_ir_node"); has_ir_node = mxGetScalar(has_ir_node_array); // has_depth_node has_depth_node_array = mxGetField(prhs[0], 0, "has_depth_node"); has_depth_node = mxGetScalar(has_depth_node_array); //------------------------------- // Create output variables //------------------------------- bool initialised = context_initialised; int ir_width = 640; int ir_height = 480; int depth_width = 640; int depth_height = 480; if(initialised){ XnStatus rc; if(has_ir_node){ ir->GetMetaData(*irMD); ir_width = irMD->XRes(); ir_height = irMD->YRes(); } if(has_depth_node){ depth->GetMetaData(*depthMD); depth_width = depthMD->XRes(); depth_height = depthMD->YRes(); } } dims2_ir[0] = ir_height; dims2_ir[1] = ir_width; plhs[0] = mxCreateNumericArray(2, dims2_ir, mxUINT16_CLASS, mxREAL); output_ir = (unsigned short*)mxGetPr(plhs[0]); if(nlhs >= 2){ dims2_depth[0] = depth_height; dims2_depth[1] = depth_width; plhs[1] = mxCreateNumericArray(2, dims2_depth, mxUINT16_CLASS, mxREAL); output_depth = (unsigned short*)mxGetPr(plhs[1]); } if(!initialised) return; if(has_ir_node && output_ir != 0){ const XnIRPixel* pIR = irMD->Data(); int ir_image_size = ir_width*ir_height; for(int i=0;i<ir_height;i++){ for(int j = 0;j < ir_width;j++){ output_ir[j*ir_height+i] = pIR[i*ir_width+j]; } } } if(has_depth_node && output_depth != 0){ const XnDepthPixel* pDepth = depthMD->Data(); int depth_image_size = depth_width*depth_height; for(int i=0;i<depth_height;i++){ for(int j = 0;j < depth_width;j++){ output_depth[j*depth_height+i] = pDepth[i*depth_width+j]; } } } }