in Firmware/ExpressivePixelsCore/EPXApp_CStorage.cpp [349:414]
bool CExpressivePixelsStorage::SequenceReadTokenTraverse(void *pFile, uint8_t tokenType, uint32_t originalFileSize, uint32_t *pFileSize, uint32_t *pSkipBytes)
{
size_t bytesRead;
uint8_t skip8Len = 0;
uint16_t skip16Len = 0;
uint32_t skip32Len = 0;
switch (tokenType)
{
case SEQUENCETOKEN_NAMELEN:
if (!ReadBytes(pFile, pFileSize, &skip8Len, sizeof(skip8Len)))
return false;
*pSkipBytes = skip8Len;
break;
case SEQUENCETOKEN_GUIDLEN:
if (!ReadBytes(pFile, pFileSize, &skip8Len, sizeof(skip8Len)))
return false;
*pSkipBytes = skip8Len;
break;
case SEQUENCETOKEN_PALLETESIZE:
if (!ReadBytes(pFile, pFileSize, (uint8_t *)&skip16Len, sizeof(skip16Len)))
return false;
*pSkipBytes = skip16Len * sizeof(PALETTE_ENTRY);
break;
case SEQUENCETOKEN_FRAMESBYTELEN:
if (!ReadBytes(pFile, pFileSize, (uint8_t *)&skip32Len, sizeof(skip32Len)))
return false;
*pSkipBytes = skip32Len;
break;
case SEQUENCETOKEN_FRAMECOUNT:
if (!ReadBytes(pFile, pFileSize, (uint8_t *)&skip16Len, sizeof(skip16Len)))
return false;
break;
case SEQUENCETOKEN_FRAMERATE:
if (!ReadBytes(pFile, pFileSize, &skip8Len, sizeof(skip8Len)))
return false;
break;
case SEQUENCETOKEN_LOOPCOUNT:
if (!ReadBytes(pFile, pFileSize, &skip8Len, sizeof(skip8Len)))
return false;
break;
case SEQUENCETOKEN_UTCTIMESTAMP:
if (!ReadBytes(pFile, pFileSize, (uint8_t *)&skip32Len, sizeof(skip32Len)))
return false;
break;
default:
if (*pSkipBytes > 0)
{
int currentPos = originalFileSize - (*pFileSize);
currentPos += (*pSkipBytes);
CStorage::Seek(pFile, currentPos);
(*pFileSize) -= (*pSkipBytes);
*pSkipBytes = 0;
}
break;
}
return true;
}