Mercurial > hg > dmlib
diff minijss/jssmod.c @ 1972:cedb5ca1533b
Clean up the sample conversion code a bit. Improve error handling in xm2jss.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 30 Jun 2018 18:44:59 +0300 |
parents | 6aa0897265e8 |
children | f60b4bacf6bf |
line wrap: on
line diff
--- a/minijss/jssmod.c Sat Jun 30 18:09:34 2018 +0300 +++ b/minijss/jssmod.c Sat Jun 30 18:44:59 2018 +0300 @@ -34,14 +34,14 @@ /* Encodes a given 8-bit sample */ -BOOL jssEncodeSample8(Uint8 * data, const size_t len, const int ops) +int jssEncodeSample8(Uint8 * data, const size_t len, const int ops) { - size_t count = len; - Sint8 t, value = 0; + Sint8 value = 0; while (count--) + for (size_t offs = 0; offs < len; offs++) { - t = *data; + Sint8 t = data[offs]; if (ops & jsampFlipSign) t ^= 0x80; @@ -53,7 +53,7 @@ t = n; } - *(data++) = t; + data[offs] = t; } return TRUE; @@ -62,27 +62,27 @@ /* Decodes a given 16-bit sample */ -BOOL jssEncodeSample16(Uint16 * data, const size_t len, const int ops) +int jssEncodeSample16(Uint16 * data, const size_t len, const int ops) { // "Split" the 16-bit samples into 8-bit halves if (ops & jsampSplit) { // Allocate temporary processing buffer - size_t count, bufSize = len * sizeof(Sint16); Uint8 *bp1, *bp2; - Sint16 *sdata, *tmpBuf = dmMalloc(bufSize); - if (tmpBuf == NULL) return FALSE; + size_t bufSize = len * sizeof(Sint16); + Sint16 *tmpBuf; - sdata = tmpBuf; + if ((tmpBuf = dmMalloc(bufSize)) == NULL) + return DMERR_MALLOC; + bp1 = (Uint8 *) data; bp2 = bp1 + len; - count = len; - while (count--) + for (size_t offs = 0; offs < len; offs++) { - Sint16 t = (*sdata++); - *bp1++ = t >> 8; - *bp2++ = t & 0xff; + const Sint16 t = tmpBuf[offs]; + bp1[offs] = t >> 8; + bp2[offs] = t & 0xff; } memcpy(data, tmpBuf, bufSize); @@ -92,22 +92,23 @@ } else { - Sint16 t, p, value = 0, *sdata = (Sint16 *) data; - size_t count = len; + Sint16 value = 0, *sdata = (Sint16 *) data; - while (count--) + for (size_t offs = 0; offs < len; offs++) { + Sint16 t; + if (ops & jsampSwapEndianess) { - p = *sdata; + const Sint16 p = sdata[offs]; t = ((p >> 8) & 0xff) | ((p & 0xff) << 8); } else - t = *sdata; + t = sdata[offs]; if (ops & jsampDelta) { - int n = t - value; + const int n = t - value; value = t; t = n; } @@ -115,10 +116,11 @@ if (ops & jsampFlipSign) t ^= 0x8000; - *(sdata++) = t; + sdata[offs] = t; } } - return TRUE; + + return DMERR_OK; } #endif @@ -128,12 +130,11 @@ */ int jssDecodeSample8(Uint8 * data, const size_t len, const int ops) { - size_t count = len; - Sint8 t, value = 0; + Sint8 value = 0; - while (count--) + for (size_t offs = 0; offs < len; offs++) { - t = *data; + Sint8 t = data[offs]; if (ops & jsampDelta) t = value = t + value; @@ -141,8 +142,9 @@ if (ops & jsampFlipSign) t ^= 0x80; - *(data++) = t; + data[offs] = t; } + return DMERR_OK; } @@ -153,9 +155,9 @@ { if (ops & jsampSplit) { - size_t count, bufSize = len * sizeof(Uint16); + size_t bufSize = len * sizeof(Uint16); Uint8 *bp1, *bp2; - Sint16 *tmpBuf, *sdata; + Sint16 *tmpBuf; int ret; if ((ret = jssDecodeSample8((Uint8 *) data, bufSize, ops)) != DMERR_OK) @@ -164,28 +166,30 @@ if ((tmpBuf = dmMalloc(bufSize)) == NULL) return DMERR_MALLOC; + // Copy original data to temporary buffer memcpy(tmpBuf, data, bufSize); - sdata = (Sint16 *) data; bp1 = (Uint8 *) tmpBuf; bp2 = bp1 + len; - count = len; - while (count--) + + for (size_t offs = 0; offs < len; offs++) { - *sdata++ = (*bp1++ << 8) | (*bp2++ & 0xff); + data[offs] = (bp1[offs] << 8) | (bp2[offs] & 0xff); } dmFree(tmpBuf); } else { - Sint16 t, p, value = 0, *sdata = (Sint16 *) data; - size_t count = len; - while (count--) + Sint16 value = 0, *sdata = (Sint16 *) data; + + for (size_t offs = 0; offs < len; offs++) { + Sint16 t; + if (ops & jsampSwapEndianess) { - p = *sdata; + const Sint16 p = sdata[offs]; t = ((p >> 8) & 0xff) | ((p & 0xff) << 8); } else @@ -197,9 +201,10 @@ if (ops & jsampFlipSign) t ^= 0x8000; - *(sdata++) = t; + sdata[offs] = t; } } + return DMERR_OK; } @@ -208,16 +213,15 @@ */ int jssConvertSampleTo16(void **dst, void * src, const size_t len) { - size_t count = len; Uint8 *in = (Uint8 *) src; Sint16 *out; if ((*dst = out = dmMalloc(sizeof(Sint16) * len)) == NULL) return DMERR_MALLOC; - while (count--) + for (size_t offs = 0; offs < len; offs++) { - *(out++) = (*(in++) * 256) - 32768; + out[offs] = (in[offs] * 256) - 32768; } return DMERR_OK;