parent
c38754401b
commit
40475b15e8
@ -1,274 +0,0 @@ |
|||||||
#include "sample.hpp" |
|
||||||
|
|
||||||
namespace audio { |
|
||||||
|
|
||||||
namespace sample { |
|
||||||
|
|
||||||
void siconv(int* dst, uint8_t* src, int bits, int skip, int count) { |
|
||||||
int i, v, s, b; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(int) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = 0; |
|
||||||
i = b; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
v = src[--i]; |
|
||||||
case 3: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
case 2: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
case 1: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
} |
|
||||||
*dst++ = v << s; |
|
||||||
src += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void Siconv(int* dst, uint8_t* src, int bits, int skip, int count) { |
|
||||||
int i, v, s, b; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(int) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = 0; |
|
||||||
i = 0; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
v = src[i++]; |
|
||||||
case 3: |
|
||||||
v = (v << 8) | src[i++]; |
|
||||||
case 2: |
|
||||||
v = (v << 8) | src[i++]; |
|
||||||
case 1: |
|
||||||
v = (v << 8) | src[i]; |
|
||||||
} |
|
||||||
*dst++ = v << s; |
|
||||||
src += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void uiconv(int* dst, uint8_t* src, int bits, int skip, int count) { |
|
||||||
int i, s, b; |
|
||||||
uint32_t v; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(uint32_t) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = 0; |
|
||||||
i = b; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
v = src[--i]; |
|
||||||
case 3: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
case 2: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
case 1: |
|
||||||
v = (v << 8) | src[--i]; |
|
||||||
} |
|
||||||
*dst++ = (v << s) - (~0UL >> 1); |
|
||||||
src += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void Uiconv(int* dst, uint8_t* src, int bits, int skip, int count) { |
|
||||||
int i, s, b; |
|
||||||
uint32_t v; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(uint32_t) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = 0; |
|
||||||
i = 0; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
v = src[i++]; |
|
||||||
case 3: |
|
||||||
v = (v << 8) | src[i++]; |
|
||||||
case 2: |
|
||||||
v = (v << 8) | src[i++]; |
|
||||||
case 1: |
|
||||||
v = (v << 8) | src[i]; |
|
||||||
} |
|
||||||
*dst++ = (v << s) - (~0UL >> 1); |
|
||||||
src += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void ficonv(int* dst, uint8_t* src, int bits, int skip, int count) { |
|
||||||
if (bits == 32) { |
|
||||||
while (count--) { |
|
||||||
float f; |
|
||||||
|
|
||||||
f = *((float*)src), src += skip; |
|
||||||
if (f > 1.0) |
|
||||||
*dst++ = INT32_MAX; |
|
||||||
else if (f < -1.0) |
|
||||||
*dst++ = INT32_MIN; |
|
||||||
else |
|
||||||
*dst++ = f * ((float)INT32_MAX); |
|
||||||
} |
|
||||||
} else { |
|
||||||
while (count--) { |
|
||||||
double d; |
|
||||||
|
|
||||||
d = *((double*)src), src += skip; |
|
||||||
if (d > 1.0) |
|
||||||
*dst++ = INT32_MAX; |
|
||||||
else if (d < -1.0) |
|
||||||
*dst++ = INT32_MIN; |
|
||||||
else |
|
||||||
*dst++ = d * ((double)INT32_MAX); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void aiconv(int* dst, uint8_t* src, int, int skip, int count) { |
|
||||||
int t, seg; |
|
||||||
uint8_t a; |
|
||||||
|
|
||||||
while (count--) { |
|
||||||
a = *src, src += skip; |
|
||||||
a ^= 0x55; |
|
||||||
t = (a & 0xf) << 4; |
|
||||||
seg = (a & 0x70) >> 4; |
|
||||||
switch (seg) { |
|
||||||
case 0: |
|
||||||
t += 8; |
|
||||||
break; |
|
||||||
case 1: |
|
||||||
t += 0x108; |
|
||||||
break; |
|
||||||
default: |
|
||||||
t += 0x108; |
|
||||||
t <<= seg - 1; |
|
||||||
} |
|
||||||
t = (a & 0x80) ? t : -t; |
|
||||||
*dst++ = t << (sizeof(int) * 8 - 16); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void µiconv(int* dst, uint8_t* src, int, int skip, int count) { |
|
||||||
int t; |
|
||||||
uint8_t u; |
|
||||||
|
|
||||||
while (count--) { |
|
||||||
u = *src, src += skip; |
|
||||||
u = ~u; |
|
||||||
t = ((u & 0xf) << 3) + 0x84; |
|
||||||
t <<= (u & 0x70) >> 4; |
|
||||||
t = u & 0x80 ? 0x84 - t : t - 0x84; |
|
||||||
*dst++ = t << (sizeof(int) * 8 - 16); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void soconv(int* src, uint8_t* dst, int bits, int skip, int count) { |
|
||||||
int i, v, s, b; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(int) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = *src++ >> s; |
|
||||||
i = 0; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 3: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 2: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 1: |
|
||||||
dst[i] = v; |
|
||||||
} |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void Soconv(int* src, uint8_t* dst, int bits, int skip, int count) { |
|
||||||
int i, v, s, b; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(int) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = *src++ >> s; |
|
||||||
i = b; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 3: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 2: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 1: |
|
||||||
dst[--i] = v; |
|
||||||
} |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void uoconv(int* src, uint8_t* dst, int bits, int skip, int count) { |
|
||||||
int i, s, b; |
|
||||||
uint32_t v; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(uint32_t) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = ((~0UL >> 1) + *src++) >> s; |
|
||||||
i = 0; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 3: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 2: |
|
||||||
dst[i++] = v, v >>= 8; |
|
||||||
case 1: |
|
||||||
dst[i] = v; |
|
||||||
} |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void Uoconv(int* src, uint8_t* dst, int bits, int skip, int count) { |
|
||||||
int i, s, b; |
|
||||||
uint32_t v; |
|
||||||
|
|
||||||
b = (bits + 7) / 8; |
|
||||||
s = sizeof(uint32_t) * 8 - bits; |
|
||||||
while (count--) { |
|
||||||
v = ((~0UL >> 1) + *src++) >> s; |
|
||||||
i = b; |
|
||||||
switch (b) { |
|
||||||
case 4: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 3: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 2: |
|
||||||
dst[--i] = v, v >>= 8; |
|
||||||
case 1: |
|
||||||
dst[--i] = v; |
|
||||||
} |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void foconv(int* src, uint8_t* dst, int bits, int skip, int count) { |
|
||||||
if (bits == 32) { |
|
||||||
while (count--) { |
|
||||||
*((float*)dst) = *src++ / ((float)INT32_MAX); |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} else { |
|
||||||
while (count--) { |
|
||||||
*((double*)dst) = *src++ / ((double)INT32_MAX); |
|
||||||
dst += skip; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} // namespace sample
|
|
||||||
|
|
||||||
} // namespace audio
|
|
Loading…
Reference in new issue