X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibimage_sif.so_src%2Fmain.c;h=c4c59d4d52840a8ae6a64377590bed0a6b97efe4;hb=510431249326d5a44fc502ed5cf798b79a442ce8;hp=7b076a3be982a432974c64d511b76ec4ca893132;hpb=d5834686ad14b66420060192445f06bce85db389;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libimage_sif.so_src/main.c b/Usermode/Libraries/libimage_sif.so_src/main.c index 7b076a3b..c4c59d4d 100644 --- a/Usermode/Libraries/libimage_sif.so_src/main.c +++ b/Usermode/Libraries/libimage_sif.so_src/main.c @@ -6,6 +6,18 @@ #include #include //#include +#include // _SysDebug + +// === STRUCTURES === +struct sHeader +{ + uint16_t Magic; + uint16_t Flags; + uint16_t Width; + uint16_t Height; +}; + +// === CONSTANTS === // === CODE === int SoMain(void) @@ -17,8 +29,6 @@ int SoMain(void) */ tImage *Image_SIF_Parse(void *Buffer, size_t Size) { - uint16_t magic; - uint16_t flags; uint16_t w, h; int ofs, i; tImage *ret; @@ -26,25 +36,31 @@ tImage *Image_SIF_Parse(void *Buffer, size_t Size) int fileOfs = 0; int comp, fmt; int sampleSize = 4; + struct sHeader *hdr = Buffer; + + _SysDebug("Image_SIF_Parse: (Buffer=%p, Size=0x%x)", Buffer, Size); // Get magic word and determine byte ordering - magic = *(uint16_t*)Buffer+fileOfs; fileOfs += 2; - if(magic == 0x51F0) + if(hdr->Magic == 0x51F0) // Little Endian bRevOrder = 0; - else if(magic == 0xF051) + else if(hdr->Magic == 0xF051) // Big Endian bRevOrder = 1; else { + _SysDebug(" Image_SIF_Parse: Magic invalid (0x%x)", hdr->Magic); return NULL; } + _SysDebug(" Image_SIF_Parse: bRevOrder = %i", bRevOrder); + // Read flags - flags = *(uint16_t*)Buffer+fileOfs; fileOfs += 2; - comp = flags & 7; - fmt = (flags >> 3) & 7; + comp = hdr->Flags & 7; + fmt = (hdr->Flags >> 3) & 7; // Read dimensions - w = *(uint16_t*)Buffer+fileOfs; fileOfs += 2; - h = *(uint16_t*)Buffer+fileOfs; fileOfs += 2; + w = hdr->Width; + h = hdr->Height; + + _SysDebug(" Image_SIF_Parse: Dimensions %ix%i", w, h); // Get image format switch(fmt) @@ -58,10 +74,13 @@ tImage *Image_SIF_Parse(void *Buffer, size_t Size) sampleSize = 3; break; default: - free(ret); return NULL; } + _SysDebug(" Image_SIF_Parse: sampleSize = %i, fmt = %i", sampleSize, fmt); + + fileOfs = sizeof(struct sHeader); + // Allocate space ret = calloc(1, sizeof(tImage) + w * h * sampleSize); ret->Width = w;