public void AdvancedPipeline() { PXCMSession session; pxcmStatus sts = PXCMSession.CreateInstance(out session); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to create an SDK session"); return; } /* Set Module */ PXCMSession.ImplDesc desc = new PXCMSession.ImplDesc(); desc.friendlyName.set(form.GetCheckedModule()); PXCMEmotion emotionDet; sts = session.CreateImpl <PXCMEmotion>(ref desc, PXCMEmotion.CUID, out emotionDet); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to create the emotionDet module"); session.Dispose(); return; } UtilMCapture capture = null; if (form.GetRecordState()) { capture = new UtilMCaptureFile(session, form.GetFileName(), true); capture.SetFilter(form.GetCheckedDevice()); } else if (form.GetPlaybackState()) { capture = new UtilMCaptureFile(session, form.GetFileName(), false); } else { capture = new UtilMCapture(session); capture.SetFilter(form.GetCheckedDevice()); } form.UpdateStatus("Pair moudle with I/O"); for (uint i = 0; ; i++) { PXCMEmotion.ProfileInfo pinfo; sts = emotionDet.QueryProfile(i, out pinfo); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } sts = capture.LocateStreams(ref pinfo.inputs); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { continue; } sts = emotionDet.SetProfile(ref pinfo); if (sts >= pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } } if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to pair the emotionDet module with I/O"); capture.Dispose(); emotionDet.Dispose(); session.Dispose(); return; } form.UpdateStatus("Streaming"); PXCMImage[] images = new PXCMImage[PXCMCapture.VideoStream.STREAM_LIMIT]; PXCMScheduler.SyncPoint[] sps = new PXCMScheduler.SyncPoint[2]; while (!form.stop) { PXCMImage.Dispose(images); PXCMScheduler.SyncPoint.Dispose(sps); sts = capture.ReadStreamAsync(images, out sps[0]); if (DisplayDeviceConnection(sts == pxcmStatus.PXCM_STATUS_DEVICE_LOST)) { continue; } if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } sts = emotionDet.ProcessImageAsync(images, out sps[1]); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } PXCMScheduler.SyncPoint.SynchronizeEx(sps); sts = sps[0].Synchronize(); if (DisplayDeviceConnection(sts == pxcmStatus.PXCM_STATUS_DEVICE_LOST)) { continue; } if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { break; } /* Display Results */ DisplayPicture(capture.QueryImage(images, PXCMImage.ImageType.IMAGE_TYPE_COLOR)); DisplayLocation(emotionDet); form.UpdatePanel(); } PXCMImage.Dispose(images); PXCMScheduler.SyncPoint.Dispose(sps); capture.Dispose(); emotionDet.Dispose(); session.Dispose(); form.UpdateStatus("Stopped"); }
public void AdvancedPipeline() { PXCMSession session; pxcmStatus sts = PXCMSession.CreateInstance(out session); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to create an SDK session"); return; } /* Set Module */ PXCMSession.ImplDesc desc = new PXCMSession.ImplDesc(); desc.friendlyName.set(form.GetCheckedModule()); PXCMEmotion emotionDet; sts = session.CreateImpl<PXCMEmotion>(ref desc, PXCMEmotion.CUID, out emotionDet); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to create the emotionDet module"); session.Dispose(); return; } UtilMCapture capture = null; if (form.GetRecordState()) { capture = new UtilMCaptureFile(session, form.GetFileName(), true); capture.SetFilter(form.GetCheckedDevice()); } else if (form.GetPlaybackState()) { capture = new UtilMCaptureFile(session, form.GetFileName(), false); } else { capture = new UtilMCapture(session); capture.SetFilter(form.GetCheckedDevice()); } form.UpdateStatus("Pair moudle with I/O"); for (uint i = 0; ; i++) { PXCMEmotion.ProfileInfo pinfo; sts = emotionDet.QueryProfile(i, out pinfo); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) break; sts = capture.LocateStreams(ref pinfo.inputs); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) continue; sts = emotionDet.SetProfile(ref pinfo); if (sts >= pxcmStatus.PXCM_STATUS_NO_ERROR) break; } if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) { form.UpdateStatus("Failed to pair the emotionDet module with I/O"); capture.Dispose(); emotionDet.Dispose(); session.Dispose(); return; } form.UpdateStatus("Streaming"); PXCMImage[] images = new PXCMImage[PXCMCapture.VideoStream.STREAM_LIMIT]; PXCMScheduler.SyncPoint[] sps = new PXCMScheduler.SyncPoint[2]; while (!form.stop) { PXCMImage.Dispose(images); PXCMScheduler.SyncPoint.Dispose(sps); sts = capture.ReadStreamAsync(images, out sps[0]); if (DisplayDeviceConnection(sts == pxcmStatus.PXCM_STATUS_DEVICE_LOST)) continue; if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) break; sts = emotionDet.ProcessImageAsync(images, out sps[1]); if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) break; PXCMScheduler.SyncPoint.SynchronizeEx(sps); sts=sps[0].Synchronize(); if (DisplayDeviceConnection(sts==pxcmStatus.PXCM_STATUS_DEVICE_LOST)) continue; if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR) break; /* Display Results */ DisplayPicture(capture.QueryImage(images,PXCMImage.ImageType.IMAGE_TYPE_COLOR)); DisplayLocation(emotionDet); form.UpdatePanel(); } PXCMImage.Dispose(images); PXCMScheduler.SyncPoint.Dispose(sps); capture.Dispose(); emotionDet.Dispose(); session.Dispose(); form.UpdateStatus("Stopped"); }