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

Method SeekToTimeStampAbsolute

Source/Modules/nimRecorder/PlayerNode.cpp:1537–1642  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1535}
1536
1537XnStatus PlayerNode::SeekToTimeStampAbsolute(XnUInt64 nDestTimeStamp)
1538{
1539 XnStatus nRetVal = XN_STATUS_OK;
1540 XnUInt64 nRecordTimeStamp = 0LL;
1541 XnUInt64 nStartPos = TellStream(); //We'll revert to this in case nDestTimeStamp is beyond end of stream
1542 XN_IS_STATUS_OK(nRetVal);
1543
1544 if (nDestTimeStamp < m_nTimeStamp)
1545 {
1546 nRetVal = Rewind();
1547 }
1548 else if (nDestTimeStamp == m_nTimeStamp)
1549 {
1550 //Nothing to do
1551 return XN_STATUS_OK;
1552 }
1553 else if (nDestTimeStamp > m_nGlobalMaxTimeStamp)
1554 {
1555 nDestTimeStamp = m_nGlobalMaxTimeStamp;
1556 }
1557
1558 Record record(m_pRecordBuffer, RECORD_MAX_SIZE, m_bIs32bitFileFormat);
1559 XnBool bEnd = FALSE;
1560 XnUInt32 nBytesRead = 0;
1561
1562 while ((nRecordTimeStamp < nDestTimeStamp) && !bEnd)
1563 {
1564 nRetVal = ReadRecordHeader(record);
1565 XN_IS_STATUS_OK(nRetVal);
1566 switch (record.GetType())
1567 {
1568 case RECORD_NEW_DATA:
1569 {
1570 //We already read Record::HEADER_SIZE, now read the rest of the new data record header
1571 nRetVal = Read(m_pRecordBuffer + record.HEADER_SIZE,
1572 NewDataRecordHeader::MAX_SIZE - record.HEADER_SIZE,
1573 nBytesRead);
1574 XN_IS_STATUS_OK(nRetVal);
1575 if (nBytesRead < NewDataRecordHeader::MAX_SIZE - record.HEADER_SIZE)
1576 {
1577 return XN_STATUS_CORRUPT_FILE;
1578 }
1579 NewDataRecordHeader newDataRecordHeader(record);
1580 nRetVal = newDataRecordHeader.Decode();
1581 XN_IS_STATUS_OK(nRetVal);
1582 //Save record time stamp
1583 nRecordTimeStamp = newDataRecordHeader.GetTimeStamp();
1584
1585 if (nRecordTimeStamp >= nDestTimeStamp)
1586 {
1587 //We're done - move back to beginning of record
1588 nRetVal = SeekStream(XN_OS_SEEK_CUR, -XnInt32(nBytesRead));
1589 XN_IS_STATUS_OK(nRetVal);
1590 }
1591 else
1592 {
1593 //Skip to next record
1594 nRetVal = SeekStream(XN_OS_SEEK_CUR,

Callers

nothing calls this directly

Calls 5

ReadFunction · 0.85
GetTypeMethod · 0.80
DecodeMethod · 0.80
GetTimeStampMethod · 0.80
GetSizeMethod · 0.45

Tested by

no test coverage detected