void StartCapture() { char recordFile[256] = {0}; time_t rawtime; struct tm *timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); XnUInt32 size; xnOSStrFormat(recordFile, sizeof(recordFile)-1, &size, "%d_%02d_%02d[%02d_%02d_%02d].oni", timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); if (g_pRecorder != NULL) { StopCapture(); } XnStatus nRetVal = XN_STATUS_OK; g_pRecorder = new xn::Recorder; g_Context.CreateAnyProductionTree(XN_NODE_TYPE_RECORDER, NULL, *g_pRecorder); START_CAPTURE_CHECK_RC(nRetVal, "Create recorder"); nRetVal = g_pRecorder->SetDestination(XN_RECORD_MEDIUM_FILE, recordFile); START_CAPTURE_CHECK_RC(nRetVal, "set destination"); nRetVal = g_pRecorder->AddNodeToRecording(g_DepthGenerator, XN_CODEC_16Z_EMB_TABLES); START_CAPTURE_CHECK_RC(nRetVal, "add node"); g_bRecord = true; }
bool captureOpenWriteDevice() { XnStatus nRetVal = XN_STATUS_OK; NodeInfoList recordersList; nRetVal = g_Context.EnumerateProductionTrees(XN_NODE_TYPE_RECORDER, NULL, recordersList); START_CAPTURE_CHECK_RC(nRetVal, "Enumerate recorders"); // take first NodeInfo chosen = *recordersList.Begin(); nRetVal = g_Context.CreateProductionTree(chosen); START_CAPTURE_CHECK_RC(nRetVal, "Create recorder"); g_Capture.pRecorder = new Recorder; nRetVal = chosen.GetInstance(*g_Capture.pRecorder); START_CAPTURE_CHECK_RC(nRetVal, "Get recorder instance"); nRetVal = g_Capture.pRecorder->SetDestination(XN_RECORD_MEDIUM_FILE, g_Capture.csFileName); START_CAPTURE_CHECK_RC(nRetVal, "Set output file"); if (getDevice() != NULL) { nRetVal = g_Capture.pRecorder->AddNodeToRecording(*getDevice(), XN_CODEC_UNCOMPRESSED); START_CAPTURE_CHECK_RC(nRetVal, "add device node"); } if (isDepthOn() && (g_Capture.DepthFormat != CODEC_DONT_CAPTURE)) { nRetVal = g_Capture.pRecorder->AddNodeToRecording(*getDepthGenerator(), g_Capture.DepthFormat); START_CAPTURE_CHECK_RC(nRetVal, "add depth node"); } if (isImageOn() && (g_Capture.ImageFormat != CODEC_DONT_CAPTURE)) { nRetVal = g_Capture.pRecorder->AddNodeToRecording(*getImageGenerator(), g_Capture.ImageFormat); START_CAPTURE_CHECK_RC(nRetVal, "add image node"); } if (isIROn() && (g_Capture.IRFormat != CODEC_DONT_CAPTURE)) { nRetVal = g_Capture.pRecorder->AddNodeToRecording(*getIRGenerator(), g_Capture.IRFormat); START_CAPTURE_CHECK_RC(nRetVal, "add IR stream"); } if (isAudioOn() && (g_Capture.AudioFormat != CODEC_DONT_CAPTURE)) { nRetVal = g_Capture.pRecorder->AddNodeToRecording(*getAudioGenerator(), g_Capture.AudioFormat); START_CAPTURE_CHECK_RC(nRetVal, "add Audio stream"); } return true; }
void captureRun() { XnStatus nRetVal = XN_STATUS_OK; if (g_Capture.State != SHOULD_CAPTURE) { return; } XnUInt64 nNow; xnOSGetTimeStamp(&nNow); nNow /= 1000; // check if time has arrived if ((XnInt64)nNow >= g_Capture.nStartOn) { // check if we need to discard first frame if (g_Capture.bSkipFirstFrame) { g_Capture.bSkipFirstFrame = false; } else { // start recording for (int i = 0; i < CAPTURE_STREAM_COUNT; ++i) { g_Capture.streams[i].bRecording = false; if (g_Capture.streams[i].isStreamOn() && g_Capture.streams[i].captureType != STREAM_DONT_CAPTURE) { nRetVal = g_Capture.recorder.attach(g_Capture.streams[i].getStream(), g_Capture.streams[i].captureType == STREAM_CAPTURE_LOSSY); START_CAPTURE_CHECK_RC(nRetVal, "add stream"); g_Capture.streams[i].bRecording = TRUE; g_Capture.streams[i].startFrame = g_Capture.streams[i].getFrameFunc().getFrameIndex(); } } nRetVal = g_Capture.recorder.start(); START_CAPTURE_CHECK_RC(nRetVal, "start recording"); g_Capture.State = CAPTURING; } } }