JD2022-TU1/main/extern/Camcam/LIBS/Input/PALT.cpp

71 lines
1.7 KiB
C++

#include "TRACK.h"
#include "MEDIA.h"
class PALT_Grabber:public INPUT_IO
{
public:
int INIT (class WORLD*){return 0;};
int FRAME (void){return 0;};
int END (void){return 0;};
IOTYPE GetType() {return IOtype_PALT;};
};
INPUT_IO *PALT_CREATE(char *Filename)
{
u32 SX,SY,NBZones;
INPUT_IO *Ret;
Ret = (INPUT_IO *)new(PALT_Grabber);
SX = SY = NBZones = 0;
u32 NBX, NBY;
u32 *tabPtr;
u32 tab4[4] = { 0x000000, 0xFF0000, 0x00FF00, 0x0000FF };
u32 tab16[16] = { 0x000000, 0xFF0000, 0x00FF00, 0x0000FF, 0xBFBFBF, 0xFFFF00, 0xFF00FF, 0x00FFFF,
0xFFFFFF, 0xFF7F7F, 0x7FFF7F, 0x7F7FFF, 0x3F3F3F, 0xFFFF7F, 0xFF7FFF, 0x7FFFFF};
tabPtr = NULL;
while (*Filename && (!IsDeci(*Filename))) Filename++;
while (*Filename && (IsDeci(*Filename))) {SX *= 10; SX += IsDeci(*Filename++) - 1;};
while (*Filename && (!IsDeci(*Filename))) Filename++;
while (*Filename && (IsDeci(*Filename))) {SY *= 10; SY += IsDeci(*Filename++) - 1;};
while (*Filename && (!IsDeci(*Filename))) Filename++;
while (*Filename && (IsDeci(*Filename))) {NBZones*= 10; NBZones += IsDeci(*Filename++) - 1;};
strcpy((char*)Ret->MediaName,Filename);
if (SX > 512) SX = 512;
if (SY > 512) SY = 512;
if (SX < 4) SX = 4;
if (SY < 4) SY = 4;
Ret->Image.SetSize(SX, SY);
Ret->dTotalTime = 0;
Ret->dAvgFramePerSecond = 30.0;
if (NBZones == 4)
{
tabPtr = tab4;
NBX = NBY = 2;
}
if (NBZones == 16)
{
tabPtr = tab16;
NBX = NBY = 4;
}
s32 *pBASE = Ret->Image.GetBase();
if (tabPtr != NULL)
{
for (u32 counterY=0; counterY<SY; counterY++) {
for (u32 counterX=0; counterX<SX; counterX++) {
pBASE[counterX + (SY - counterY - 1)*SX] = tabPtr[counterX*NBX/SX + counterY*NBY/SY*NBX];
}
}
}
return (INPUT_IO *)Ret;
};