XnStatus PlayerNode::HandleNodeAddedRecord(NodeAddedRecord record) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = record.Decode(); XN_IS_STATUS_OK(nRetVal); DEBUG_LOG_RECORD(record, "NodeAdded"); nRetVal = HandleNodeAddedImpl( record.GetNodeID(), record.GetNodeType(), record.GetNodeName(), record.GetCompression(), record.GetNumberOfFrames(), record.GetMinTimestamp(), record.GetMaxTimestamp()); XN_IS_STATUS_OK(nRetVal); return (XN_STATUS_OK); }
XnStatus PlayerNode::HandleNodeAddedRecord(NodeAddedRecord record) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = record.Decode(); XN_IS_STATUS_OK(nRetVal); DEBUG_LOG_RECORD(record, "NodeAdded"); nRetVal = HandleNodeAddedImpl( record.GetNodeID(), record.GetNodeType(), record.GetNodeName(), record.GetCompression(), record.GetNumberOfFrames(), record.GetMinTimestamp(), record.GetMaxTimestamp()); XN_IS_STATUS_OK(nRetVal); // get seek table (if exists) if (record.GetNumberOfFrames() > 0 && record.GetSeekTablePosition() != 0) { XnUInt32 nCurrPos = TellStream(); nRetVal = SeekStream(XN_OS_SEEK_SET, record.GetSeekTablePosition()); XN_IS_STATUS_OK(nRetVal); DataIndexRecordHeader seekTableHeader(m_pRecordBuffer, RECORD_MAX_SIZE); nRetVal = ReadRecord(seekTableHeader); XN_IS_STATUS_OK(nRetVal); nRetVal = HandleDataIndexRecord(seekTableHeader, TRUE); XN_IS_STATUS_OK(nRetVal); // and seek back nRetVal = SeekStream(XN_OS_SEEK_SET, nCurrPos); XN_IS_STATUS_OK(nRetVal); } return (XN_STATUS_OK); }
XnStatus PlayerNode::HandleNodeAdded_1_0_0_4_Record(NodeAdded_1_0_0_4_Record record) { XnStatus nRetVal = XN_STATUS_OK; nRetVal = record.Decode(); XN_IS_STATUS_OK(nRetVal); DEBUG_LOG_RECORD(record, "NodeAdded1_0_0_4"); /** BC issue **/ // NOTE: ONI files up to version 1.0.0.4 didn't had a different NodeAdded record. It did // not contain seek data (number of frames and min/max timestamp). Instead, this data was // in the DataBegin record. So we need to also find this record, and read these props from it. XnUInt32 nNodeID = record.GetNodeID(); XnChar strName[XN_MAX_NAME_LENGTH]; nRetVal = xnOSStrCopy(strName, record.GetNodeName(), XN_MAX_NAME_LENGTH); XN_IS_STATUS_OK(nRetVal); XnProductionNodeType type = record.GetNodeType(); XnCodecID compression = record.GetCompression(); XnUInt32 nNumFrames = 0; XnUInt64 nMinTimestamp = 0; XnUInt64 nMaxTimestamp = 0; if (xnIsTypeGenerator(type)) { // we need to look for the DataBegin record to have number of frames, etc. XnUInt32 nStartPos = TellStream(); // NOTE: this overwrites the current NodeAdded record buffer!!! nRetVal = SeekToRecordByType(nNodeID, RECORD_NODE_DATA_BEGIN); if (nRetVal == XN_STATUS_OK) { NodeDataBeginRecord dataBeginRecord(m_pRecordBuffer, RECORD_MAX_SIZE); nRetVal = ReadRecord(dataBeginRecord); XN_IS_STATUS_OK(nRetVal); nRetVal = dataBeginRecord.Decode(); XN_IS_STATUS_OK(nRetVal); nNumFrames = dataBeginRecord.GetNumFrames(); nMaxTimestamp = dataBeginRecord.GetMaxTimeStamp(); // also find data record for min timestamp nRetVal = SeekToRecordByType(record.GetNodeID(), RECORD_NEW_DATA); if (nRetVal == XN_STATUS_OK) { NewDataRecordHeader newDataRecord(m_pRecordBuffer, RECORD_MAX_SIZE); nRetVal = ReadRecord(newDataRecord); XN_IS_STATUS_OK(nRetVal); nRetVal = newDataRecord.Decode(); XN_IS_STATUS_OK(nRetVal); nMinTimestamp = newDataRecord.GetTimeStamp(); } // get back to start position nRetVal = SeekStream(XN_OS_SEEK_SET, nStartPos); XN_IS_STATUS_OK(nRetVal); } } nRetVal = HandleNodeAddedImpl(nNodeID, type, strName, compression, nNumFrames, nMinTimestamp, nMaxTimestamp); XN_IS_STATUS_OK(nRetVal); return XN_STATUS_OK; }