52 |
} |
} |
53 |
|
|
54 |
void Decompress16(int compressionmode, const unsigned char* params, |
void Decompress16(int compressionmode, const unsigned char* params, |
55 |
int srcStep, const unsigned char* pSrc, int16_t* pDst, |
int srcStep, int dstStep, |
56 |
|
const unsigned char* pSrc, int16_t* pDst, |
57 |
unsigned long currentframeoffset, |
unsigned long currentframeoffset, |
58 |
unsigned long copysamples) |
unsigned long copysamples) |
59 |
{ |
{ |
62 |
pSrc += currentframeoffset * srcStep; |
pSrc += currentframeoffset * srcStep; |
63 |
while (copysamples) { |
while (copysamples) { |
64 |
*pDst = get16(pSrc); |
*pDst = get16(pSrc); |
65 |
pDst += 2; |
pDst += dstStep; |
66 |
pSrc += srcStep; |
pSrc += srcStep; |
67 |
copysamples--; |
copysamples--; |
68 |
} |
} |
81 |
dy -= int8_t(*pSrc); |
dy -= int8_t(*pSrc); |
82 |
y -= dy; |
y -= dy; |
83 |
*pDst = y; |
*pDst = y; |
84 |
pDst += 2; |
pDst += dstStep; |
85 |
pSrc += srcStep; |
pSrc += srcStep; |
86 |
copysamples--; |
copysamples--; |
87 |
} |
} |
90 |
} |
} |
91 |
|
|
92 |
void Decompress24(int compressionmode, const unsigned char* params, |
void Decompress24(int compressionmode, const unsigned char* params, |
93 |
const unsigned char* pSrc, int16_t* pDst, |
int dstStep, const unsigned char* pSrc, int16_t* pDst, |
94 |
unsigned long currentframeoffset, |
unsigned long currentframeoffset, |
95 |
unsigned long copysamples) |
unsigned long copysamples) |
96 |
{ |
{ |
122 |
#define COPY_ONE(x) \ |
#define COPY_ONE(x) \ |
123 |
SKIP_ONE(x); \ |
SKIP_ONE(x); \ |
124 |
*pDst = y >> 9; \ |
*pDst = y >> 9; \ |
125 |
pDst += 2 |
pDst += dstStep |
126 |
|
|
127 |
switch (compressionmode) { |
switch (compressionmode) { |
128 |
case 2: // 24 bit uncompressed |
case 2: // 24 bit uncompressed |
129 |
pSrc += currentframeoffset * 3; |
pSrc += currentframeoffset * 3; |
130 |
while (copysamples) { |
while (copysamples) { |
131 |
*pDst = get24(pSrc) >> 8; |
*pDst = get24(pSrc) >> 8; |
132 |
pDst += 2; |
pDst += dstStep; |
133 |
pSrc += 3; |
pSrc += 3; |
134 |
copysamples--; |
copysamples--; |
135 |
} |
} |
832 |
const unsigned char* const param_r = pSrc; |
const unsigned char* const param_r = pSrc; |
833 |
if (mode_r != 2) pSrc += 12; |
if (mode_r != 2) pSrc += 12; |
834 |
|
|
835 |
Decompress24(mode_l, param_l, pSrc, pDst, skipsamples, copysamples); |
Decompress24(mode_l, param_l, 2, pSrc, pDst, skipsamples, copysamples); |
836 |
Decompress24(mode_r, param_r, pSrc + rightChannelOffset, pDst + 1, |
Decompress24(mode_r, param_r, 2, pSrc + rightChannelOffset, pDst + 1, |
837 |
skipsamples, copysamples); |
skipsamples, copysamples); |
838 |
pDst += copysamples << 1; |
pDst += copysamples << 1; |
839 |
} |
} |
840 |
else { // Mono |
else { // Mono |
841 |
Decompress24(mode_l, param_l, pSrc, pDst, skipsamples, copysamples); |
Decompress24(mode_l, param_l, 1, pSrc, pDst, skipsamples, copysamples); |
842 |
pDst += copysamples; |
pDst += copysamples; |
843 |
} |
} |
844 |
} |
} |
851 |
if (mode_r) pSrc += 4; |
if (mode_r) pSrc += 4; |
852 |
|
|
853 |
step = (2 - mode_l) + (2 - mode_r); |
step = (2 - mode_l) + (2 - mode_r); |
854 |
Decompress16(mode_l, param_l, step, pSrc, pDst, skipsamples, copysamples); |
Decompress16(mode_l, param_l, step, 2, pSrc, pDst, skipsamples, copysamples); |
855 |
Decompress16(mode_r, param_r, step, pSrc + (2 - mode_l), pDst + 1, |
Decompress16(mode_r, param_r, step, 2, pSrc + (2 - mode_l), pDst + 1, |
856 |
skipsamples, copysamples); |
skipsamples, copysamples); |
857 |
pDst += copysamples << 1; |
pDst += copysamples << 1; |
858 |
} |
} |
859 |
else { // Mono |
else { // Mono |
860 |
step = 2 - mode_l; |
step = 2 - mode_l; |
861 |
Decompress16(mode_l, param_l, step, pSrc, pDst, skipsamples, copysamples); |
Decompress16(mode_l, param_l, step, 1, pSrc, pDst, skipsamples, copysamples); |
862 |
pDst += copysamples; |
pDst += copysamples; |
863 |
} |
} |
864 |
} |
} |