| 3748 | } |
| 3749 | |
| 3750 | XN_C_API XnStatus xnRemoveNodeFromRecording(XnNodeHandle hRecorder, XnNodeHandle hNode) |
| 3751 | { |
| 3752 | XN_VALIDATE_INPUT_PTR(hRecorder); |
| 3753 | XN_VALIDATE_INTERFACE_TYPE(hRecorder, XN_NODE_TYPE_RECORDER); |
| 3754 | XN_VALIDATE_INPUT_PTR(hNode); |
| 3755 | XN_VALIDATE_CHANGES_ALLOWED(hRecorder); |
| 3756 | XnStatus nRetVal = XN_STATUS_OK; |
| 3757 | |
| 3758 | //Find node in recorder's dependencies |
| 3759 | XnNodeInfoList *pRecorderNeededTrees = hRecorder->pNodeInfo->pNeededTrees; |
| 3760 | XnNodeInfoListIterator it = xnNodeInfoListGetFirst(pRecorderNeededTrees); |
| 3761 | while (xnNodeInfoListIteratorIsValid(it) && (xnNodeInfoListGetCurrent(it)->hNode != hNode)) |
| 3762 | { |
| 3763 | it = xnNodeInfoListGetNext(it); |
| 3764 | } |
| 3765 | |
| 3766 | if (!xnNodeInfoListIteratorIsValid(it)) |
| 3767 | { |
| 3768 | //node not found in recorder dependency list |
| 3769 | return XN_STATUS_NO_MATCH; |
| 3770 | } |
| 3771 | |
| 3772 | // Remove node from recording |
| 3773 | xn::RecorderImpl *pRecorderImpl = dynamic_cast<xn::RecorderImpl*>(hRecorder->pPrivateData); |
| 3774 | XN_VALIDATE_PTR(pRecorderImpl, XN_STATUS_ERROR); |
| 3775 | |
| 3776 | xn::ProductionNode node(hNode); |
| 3777 | nRetVal = pRecorderImpl->RemoveNode(node); |
| 3778 | XN_IS_STATUS_OK(nRetVal); |
| 3779 | |
| 3780 | //Remove node from recorder's dependencies |
| 3781 | nRetVal = xnRemoveNeededNode(hRecorder, hNode); |
| 3782 | XN_IS_STATUS_OK(nRetVal); |
| 3783 | |
| 3784 | return (XN_STATUS_OK); |
| 3785 | } |
| 3786 | |
| 3787 | XN_C_API XnStatus xnRecord(XnNodeHandle hInstance) |
| 3788 | { |
no test coverage detected