| 495 | } |
| 496 | |
| 497 | XnStatus RecorderNode::UpdateNodeSeekInfo(const XnChar* strNodeName, const RecordedNodeInfo& recordedNodeInfo) |
| 498 | { |
| 499 | XnStatus nRetVal = XN_STATUS_OK; |
| 500 | |
| 501 | if (recordedNodeInfo.bGotData) |
| 502 | { |
| 503 | XnUInt64 nSeekTablePos = 0; |
| 504 | |
| 505 | nSeekTablePos = TellStream(); |
| 506 | |
| 507 | // write seek table |
| 508 | DataIndexRecordHeader seekTableHeader(m_pRecordBuffer, RECORD_MAX_SIZE, FALSE); |
| 509 | seekTableHeader.SetNodeID(recordedNodeInfo.nNodeID); |
| 510 | seekTableHeader.SetPayloadSize((recordedNodeInfo.nMaxFrameNum+1) * sizeof(DataIndexEntry)); |
| 511 | nRetVal = seekTableHeader.Encode(); |
| 512 | XN_IS_STATUS_OK(nRetVal); |
| 513 | |
| 514 | nRetVal = WriteRecordToStream(strNodeName, seekTableHeader); |
| 515 | XN_IS_STATUS_OK(nRetVal); |
| 516 | |
| 517 | // write an empty entry for frame 0 (frames start with 1) |
| 518 | DataIndexEntry* pPayload = (DataIndexEntry*)m_pPayloadData; |
| 519 | xnOSMemSet(pPayload, 0, sizeof(DataIndexEntry)); |
| 520 | pPayload++; |
| 521 | |
| 522 | // now write the table itself |
| 523 | for (DataIndexEntryList::ConstIterator it = recordedNodeInfo.dataIndex.Begin(); it != recordedNodeInfo.dataIndex.End(); ++it, ++pPayload) |
| 524 | { |
| 525 | *pPayload = *it; |
| 526 | } |
| 527 | XN_ASSERT((recordedNodeInfo.nMaxFrameNum+1) == XnUInt32(pPayload - (DataIndexEntry*)m_pPayloadData)); |
| 528 | |
| 529 | nRetVal = WriteToStream(strNodeName, m_pPayloadData, (XnUInt32)((XnUInt8*)pPayload - m_pPayloadData)); |
| 530 | if (nRetVal != XN_STATUS_OK) |
| 531 | { |
| 532 | xnLogWarning(XN_MASK_OPEN_NI, "Failed to write Seek Table to file: %s", xnGetStatusString(nRetVal)); |
| 533 | XN_ASSERT(FALSE); |
| 534 | return nRetVal; |
| 535 | } |
| 536 | |
| 537 | XnUInt64 nStartPos = TellStream(); |
| 538 | |
| 539 | //Seek to position of node added record |
| 540 | nRetVal = SeekStream(XN_OS_SEEK_SET, recordedNodeInfo.nNodeAddedPos); |
| 541 | XN_IS_STATUS_OK(nRetVal); |
| 542 | |
| 543 | // re-write this record, this time with seek data |
| 544 | NodeAddedRecord record(m_pRecordBuffer, RECORD_MAX_SIZE, FALSE); |
| 545 | record.SetNodeID(recordedNodeInfo.nNodeID); |
| 546 | record.SetNodeName(strNodeName); |
| 547 | record.SetCompression(recordedNodeInfo.compression); |
| 548 | record.SetNodeType(recordedNodeInfo.type); |
| 549 | record.SetNumberOfFrames(recordedNodeInfo.nMaxFrameNum); |
| 550 | record.SetMinTimestamp(recordedNodeInfo.nMinTimeStamp); |
| 551 | record.SetMaxTimestamp(recordedNodeInfo.nMaxTimeStamp); |
| 552 | record.SetSeekTablePosition(nSeekTablePos); |
| 553 | |
| 554 | nRetVal = record.Encode(); |
nothing calls this directly
no test coverage detected