diff options
Diffstat (limited to 'apps/codecs/demac/demac.c')
-rw-r--r-- | apps/codecs/demac/demac.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/apps/codecs/demac/demac.c b/apps/codecs/demac/demac.c index da132ff248..5e9893687d 100644 --- a/apps/codecs/demac/demac.c +++ b/apps/codecs/demac/demac.c | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | demac - A Monkey's Audio decoder | 3 | demac - A Monkey's Audio decoder |
4 | 4 | ||
5 | $Id:$ | 5 | $Id$ |
6 | 6 | ||
7 | Copyright (C) Dave Chapman 2007 | 7 | Copyright (C) Dave Chapman 2007 |
8 | 8 | ||
@@ -180,17 +180,27 @@ int ape_decode(char* infile, char* outfile) | |||
180 | 180 | ||
181 | /* Convert the output samples to WAV format and write to output file */ | 181 | /* Convert the output samples to WAV format and write to output file */ |
182 | p = wavbuffer; | 182 | p = wavbuffer; |
183 | if (ape_ctx.bps == 16) { | 183 | if (ape_ctx.bps == 8) { |
184 | for (i = 0 ; i < blockstodecode ; i++) | ||
185 | { | ||
186 | /* 8 bit WAV uses unsigned samples */ | ||
187 | *(p++) = (decoded0[i] + 0x80) & 0xff; | ||
188 | |||
189 | if (ape_ctx.channels == 2) { | ||
190 | *(p++) = (decoded1[i] + 0x80) & 0xff; | ||
191 | } | ||
192 | } | ||
193 | } else if (ape_ctx.bps == 16) { | ||
184 | for (i = 0 ; i < blockstodecode ; i++) | 194 | for (i = 0 ; i < blockstodecode ; i++) |
185 | { | 195 | { |
186 | sample16 = decoded0[i]; | 196 | sample16 = decoded0[i]; |
187 | *(p++) = sample16 & 0xff; | 197 | *(p++) = sample16 & 0xff; |
188 | *(p++) = (sample16&0xff00) >> 8; | 198 | *(p++) = (sample16 >> 8) & 0xff; |
189 | 199 | ||
190 | if (ape_ctx.channels == 2) { | 200 | if (ape_ctx.channels == 2) { |
191 | sample16 = decoded1[i]; | 201 | sample16 = decoded1[i]; |
192 | *(p++) = sample16 & 0xff; | 202 | *(p++) = sample16 & 0xff; |
193 | *(p++) = (sample16&0xff00) >> 8; | 203 | *(p++) = (sample16 >> 8) & 0xff; |
194 | } | 204 | } |
195 | } | 205 | } |
196 | } else if (ape_ctx.bps == 24) { | 206 | } else if (ape_ctx.bps == 24) { |
@@ -198,14 +208,14 @@ int ape_decode(char* infile, char* outfile) | |||
198 | { | 208 | { |
199 | sample32 = decoded0[i]; | 209 | sample32 = decoded0[i]; |
200 | *(p++) = sample32 & 0xff; | 210 | *(p++) = sample32 & 0xff; |
201 | *(p++) = (sample32&0xff00) >> 8; | 211 | *(p++) = (sample32 >> 8) & 0xff; |
202 | *(p++) = (sample32&0xff0000) >> 16; | 212 | *(p++) = (sample32 >> 16) & 0xff; |
203 | 213 | ||
204 | if (ape_ctx.channels == 2) { | 214 | if (ape_ctx.channels == 2) { |
205 | sample32 = decoded1[i]; | 215 | sample32 = decoded1[i]; |
206 | *(p++) = sample32 & 0xff; | 216 | *(p++) = sample32 & 0xff; |
207 | *(p++) = (sample32&0xff00) >> 8; | 217 | *(p++) = (sample32 >> 8) & 0xff; |
208 | *(p++) = (sample32&0xff0000) >> 16; | 218 | *(p++) = (sample32 >> 16) & 0xff; |
209 | } | 219 | } |
210 | } | 220 | } |
211 | } | 221 | } |