MCPcopy Create free account
hub / github.com/OpenNI/OpenNI / UpdateNodeSeekInfo

Method UpdateNodeSeekInfo

Source/Modules/nimRecorder/RecorderNode.cpp:497–566  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

495}
496
497XnStatus 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();

Callers

nothing calls this directly

Calls 14

xnGetStatusStringFunction · 0.85
SetNodeIDMethod · 0.80
SetPayloadSizeMethod · 0.80
EncodeMethod · 0.80
SetNodeNameMethod · 0.80
SetCompressionMethod · 0.80
SetNodeTypeMethod · 0.80
SetNumberOfFramesMethod · 0.80
SetMinTimestampMethod · 0.80
SetMaxTimestampMethod · 0.80
SetSeekTablePositionMethod · 0.80
xnOSMemSetFunction · 0.50

Tested by

no test coverage detected