diff options
Diffstat (limited to 'apps/codecs/aiff.c')
-rw-r--r-- | apps/codecs/aiff.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/apps/codecs/aiff.c b/apps/codecs/aiff.c index d1bb14aa64..628f9948ea 100644 --- a/apps/codecs/aiff.c +++ b/apps/codecs/aiff.c | |||
@@ -51,7 +51,8 @@ enum codec_status codec_main(void) | |||
51 | uint16_t sample_size = 0; | 51 | uint16_t sample_size = 0; |
52 | uint32_t sample_rate = 0; | 52 | uint32_t sample_rate = 0; |
53 | uint32_t i; | 53 | uint32_t i; |
54 | size_t n, bufsize; | 54 | size_t n; |
55 | int bufcount; | ||
55 | int endofstream; | 56 | int endofstream; |
56 | unsigned char *buf; | 57 | unsigned char *buf; |
57 | uint8_t *aifbuf; | 58 | uint8_t *aifbuf; |
@@ -229,25 +230,27 @@ next_track: | |||
229 | samples[i/4] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13) | 230 | samples[i/4] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13) |
230 | |(aifbuf[i + 2]<<5)|(aifbuf[i + 3]>>3); | 231 | |(aifbuf[i + 2]<<5)|(aifbuf[i + 3]>>3); |
231 | } | 232 | } |
232 | bufsize = n; | 233 | bufcount = n >> 2; |
233 | } else if (sample_size > 16) { | 234 | } else if (sample_size > 16) { |
234 | for (i = 0; i < n; i += 3) { | 235 | for (i = 0; i < n; i += 3) { |
235 | samples[i/3] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13) | 236 | samples[i/3] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13) |
236 | |(aifbuf[i + 2]<<5); | 237 | |(aifbuf[i + 2]<<5); |
237 | } | 238 | } |
238 | bufsize = n*4/3; | 239 | bufcount = n/3; |
239 | } else if (sample_size > 8) { | 240 | } else if (sample_size > 8) { |
240 | for (i = 0; i < n; i += 2) | 241 | for (i = 0; i < n; i += 2) |
241 | samples[i/2] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13); | 242 | samples[i/2] = (SE(aifbuf[i])<<21)|(aifbuf[i + 1]<<13); |
242 | bufsize = n*2; | 243 | bufcount = n >> 1; |
243 | } else { | 244 | } else { |
244 | for (i = 0; i < n; i++) | 245 | for (i = 0; i < n; i++) |
245 | samples[i] = SE(aifbuf[i]) << 21; | 246 | samples[i] = SE(aifbuf[i]) << 21; |
246 | bufsize = n*4; | 247 | bufcount = n; |
247 | } | 248 | } |
248 | 249 | ||
249 | while (!ci->pcmbuf_insert((char *)samples, bufsize)) | 250 | if (num_channels == 2) |
250 | ci->yield(); | 251 | bufcount >>= 1; |
252 | |||
253 | ci->pcmbuf_insert(samples, NULL, bufcount); | ||
251 | 254 | ||
252 | ci->advance_buffer(n); | 255 | ci->advance_buffer(n); |
253 | bytesdone += n; | 256 | bytesdone += n; |