bool CExpressivePixelsStorage::SequenceReadTokenTraverse()

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;
}