diff options
Diffstat (limited to 'apps/codecs')
-rw-r--r-- | apps/codecs/a52.c | 7 | ||||
-rw-r--r-- | apps/codecs/aac.c | 8 | ||||
-rw-r--r-- | apps/codecs/adx.c | 7 | ||||
-rw-r--r-- | apps/codecs/aiff.c | 17 | ||||
-rw-r--r-- | apps/codecs/alac.c | 5 | ||||
-rw-r--r-- | apps/codecs/flac.c | 7 | ||||
-rw-r--r-- | apps/codecs/mpa.c | 10 | ||||
-rw-r--r-- | apps/codecs/mpc.c | 7 | ||||
-rw-r--r-- | apps/codecs/nsf.c | 4 | ||||
-rw-r--r-- | apps/codecs/shorten.c | 7 | ||||
-rw-r--r-- | apps/codecs/sid.c | 3 | ||||
-rw-r--r-- | apps/codecs/vorbis.c | 5 | ||||
-rw-r--r-- | apps/codecs/wav.c | 25 | ||||
-rw-r--r-- | apps/codecs/wavpack.c | 3 |
14 files changed, 50 insertions, 65 deletions
diff --git a/apps/codecs/a52.c b/apps/codecs/a52.c index 4f41bfeaf5..028dff6db5 100644 --- a/apps/codecs/a52.c +++ b/apps/codecs/a52.c | |||
@@ -35,12 +35,9 @@ unsigned long frequency; | |||
35 | /* used outside liba52 */ | 35 | /* used outside liba52 */ |
36 | static uint8_t buf[3840] IBSS_ATTR; | 36 | static uint8_t buf[3840] IBSS_ATTR; |
37 | 37 | ||
38 | void output_audio(sample_t *samples) | 38 | static inline void output_audio(sample_t *samples) |
39 | { | 39 | { |
40 | do { | 40 | ci->pcmbuf_insert(&samples[0], &samples[256], 256); |
41 | ci->yield(); | ||
42 | } while (!ci->pcmbuf_insert_split(&samples[0], &samples[256], | ||
43 | 256*sizeof(sample_t))); | ||
44 | } | 41 | } |
45 | 42 | ||
46 | void a52_decode_data(uint8_t *start, uint8_t *end) | 43 | void a52_decode_data(uint8_t *start, uint8_t *end) |
diff --git a/apps/codecs/aac.c b/apps/codecs/aac.c index 4695caab4a..7656c416fe 100644 --- a/apps/codecs/aac.c +++ b/apps/codecs/aac.c | |||
@@ -183,12 +183,8 @@ next_track: | |||
183 | 183 | ||
184 | /* Output the audio */ | 184 | /* Output the audio */ |
185 | ci->yield(); | 185 | ci->yield(); |
186 | while (!ci->pcmbuf_insert_split(decoder->time_out[0], | 186 | ci->pcmbuf_insert(decoder->time_out[0], decoder->time_out[1], |
187 | decoder->time_out[1], | 187 | frame_info.samples >> 1); |
188 | frame_info.samples * 2)) | ||
189 | { | ||
190 | ci->sleep(1); | ||
191 | } | ||
192 | 188 | ||
193 | /* Update the elapsed-time indicator */ | 189 | /* Update the elapsed-time indicator */ |
194 | sound_samples_done += sample_duration; | 190 | sound_samples_done += sample_duration; |
diff --git a/apps/codecs/adx.c b/apps/codecs/adx.c index 608d9f0a3f..85e55a4c38 100644 --- a/apps/codecs/adx.c +++ b/apps/codecs/adx.c | |||
@@ -320,9 +320,10 @@ next_track: | |||
320 | } | 320 | } |
321 | } | 321 | } |
322 | 322 | ||
323 | /* 2 bytes per sample */ | 323 | if (channels == 2) |
324 | while (!ci->pcmbuf_insert((char *)samples, sampleswritten*2)) | 324 | sampleswritten >>= 1; /* make samples/channel */ |
325 | ci->yield(); | 325 | |
326 | ci->pcmbuf_insert(samples, NULL, sampleswritten); | ||
326 | 327 | ||
327 | ci->set_elapsed( | 328 | ci->set_elapsed( |
328 | ((end_adr-start_adr)*loop_count + bufoff-chanstart)* | 329 | ((end_adr-start_adr)*loop_count + bufoff-chanstart)* |
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; |
diff --git a/apps/codecs/alac.c b/apps/codecs/alac.c index 1c1b14a0da..cfa713a29a 100644 --- a/apps/codecs/alac.c +++ b/apps/codecs/alac.c | |||
@@ -121,10 +121,7 @@ enum codec_status codec_main(void) | |||
121 | 121 | ||
122 | /* Output the audio */ | 122 | /* Output the audio */ |
123 | ci->yield(); | 123 | ci->yield(); |
124 | while(!ci->pcmbuf_insert_split(outputbuffer[0], | 124 | ci->pcmbuf_insert(outputbuffer[0], outputbuffer[1], samplesdecoded); |
125 | outputbuffer[1], | ||
126 | samplesdecoded*sizeof(int32_t))) | ||
127 | ci->yield(); | ||
128 | 125 | ||
129 | /* Update the elapsed-time indicator */ | 126 | /* Update the elapsed-time indicator */ |
130 | samplesdone+=sample_duration; | 127 | samplesdone+=sample_duration; |
diff --git a/apps/codecs/flac.c b/apps/codecs/flac.c index 649c26a6bb..738e4bb391 100644 --- a/apps/codecs/flac.c +++ b/apps/codecs/flac.c | |||
@@ -489,11 +489,8 @@ enum codec_status codec_main(void) | |||
489 | frame++; | 489 | frame++; |
490 | 490 | ||
491 | ci->yield(); | 491 | ci->yield(); |
492 | while(!ci->pcmbuf_insert_split((char*)&decoded0[fc.sample_skip], | 492 | ci->pcmbuf_insert(&decoded0[fc.sample_skip], &decoded1[fc.sample_skip], |
493 | (char*)&decoded1[fc.sample_skip], | 493 | fc.blocksize - fc.sample_skip); |
494 | (fc.blocksize-fc.sample_skip)*4)) { | ||
495 | ci->yield(); | ||
496 | } | ||
497 | 494 | ||
498 | fc.sample_skip = 0; | 495 | fc.sample_skip = 0; |
499 | 496 | ||
diff --git a/apps/codecs/mpa.c b/apps/codecs/mpa.c index 6e474c1abb..4c99778071 100644 --- a/apps/codecs/mpa.c +++ b/apps/codecs/mpa.c | |||
@@ -199,9 +199,9 @@ next_track: | |||
199 | loop we will need to process the final frame that was decoded. */ | 199 | loop we will need to process the final frame that was decoded. */ |
200 | if (framelength > 0) { | 200 | if (framelength > 0) { |
201 | /* In case of a mono file, the second array will be ignored. */ | 201 | /* In case of a mono file, the second array will be ignored. */ |
202 | ci->pcmbuf_insert_split(&synth.pcm.samples[0][samples_to_skip], | 202 | ci->pcmbuf_insert(&synth.pcm.samples[0][samples_to_skip], |
203 | &synth.pcm.samples[1][samples_to_skip], | 203 | &synth.pcm.samples[1][samples_to_skip], |
204 | framelength * 4); | 204 | framelength); |
205 | 205 | ||
206 | /* Only skip samples for the first frame added. */ | 206 | /* Only skip samples for the first frame added. */ |
207 | samples_to_skip = 0; | 207 | samples_to_skip = 0; |
@@ -244,8 +244,8 @@ next_track: | |||
244 | /* Finish the remaining decoded frame. | 244 | /* Finish the remaining decoded frame. |
245 | Cut the required samples from the end. */ | 245 | Cut the required samples from the end. */ |
246 | if (framelength > stop_skip) | 246 | if (framelength > stop_skip) |
247 | ci->pcmbuf_insert_split(synth.pcm.samples[0], synth.pcm.samples[1], | 247 | ci->pcmbuf_insert(synth.pcm.samples[0], synth.pcm.samples[1], |
248 | (framelength - stop_skip) * 4); | 248 | framelength - stop_skip); |
249 | 249 | ||
250 | stream.error = 0; | 250 | stream.error = 0; |
251 | 251 | ||
diff --git a/apps/codecs/mpc.c b/apps/codecs/mpc.c index 1075d88aa1..8aba8e50c2 100644 --- a/apps/codecs/mpc.c +++ b/apps/codecs/mpc.c | |||
@@ -168,10 +168,9 @@ next_track: | |||
168 | retval = CODEC_ERROR; | 168 | retval = CODEC_ERROR; |
169 | goto done; | 169 | goto done; |
170 | } else { | 170 | } else { |
171 | while (!ci->pcmbuf_insert_split(sample_buffer, | 171 | ci->pcmbuf_insert(sample_buffer, |
172 | sample_buffer + MPC_FRAME_LENGTH, | 172 | sample_buffer + MPC_FRAME_LENGTH, |
173 | status*sizeof(MPC_SAMPLE_FORMAT))) | 173 | status); |
174 | ci->yield(); | ||
175 | samplesdone += status; | 174 | samplesdone += status; |
176 | ci->set_elapsed(samplesdone/frequency); | 175 | ci->set_elapsed(samplesdone/frequency); |
177 | } | 176 | } |
diff --git a/apps/codecs/nsf.c b/apps/codecs/nsf.c index 77043b60ce..f138fa1e01 100644 --- a/apps/codecs/nsf.c +++ b/apps/codecs/nsf.c | |||
@@ -4445,9 +4445,7 @@ init_nsf: | |||
4445 | goto init_nsf; | 4445 | goto init_nsf; |
4446 | } | 4446 | } |
4447 | 4447 | ||
4448 | while (!ci->pcmbuf_insert((char *)samples, written)) | 4448 | ci->pcmbuf_insert(samples, NULL, written >> 1); |
4449 | ci->yield(); | ||
4450 | |||
4451 | } | 4449 | } |
4452 | 4450 | ||
4453 | print_timers(last_path,track); | 4451 | print_timers(last_path,track); |
diff --git a/apps/codecs/shorten.c b/apps/codecs/shorten.c index 1b9563a676..3c099bc031 100644 --- a/apps/codecs/shorten.c +++ b/apps/codecs/shorten.c | |||
@@ -134,11 +134,8 @@ seek_start: | |||
134 | /* Insert decoded samples in pcmbuf */ | 134 | /* Insert decoded samples in pcmbuf */ |
135 | if (nsamples) { | 135 | if (nsamples) { |
136 | ci->yield(); | 136 | ci->yield(); |
137 | while (!ci->pcmbuf_insert_split((char*)(decoded0 + sc.nwrap), | 137 | ci->pcmbuf_insert(decoded0 + sc.nwrap, decoded1 + sc.nwrap, |
138 | (char*)(decoded1 + sc.nwrap), | 138 | nsamples); |
139 | 4*nsamples)) { | ||
140 | ci->yield(); | ||
141 | } | ||
142 | 139 | ||
143 | /* Update the elapsed-time indicator */ | 140 | /* Update the elapsed-time indicator */ |
144 | samplesdone += nsamples; | 141 | samplesdone += nsamples; |
diff --git a/apps/codecs/sid.c b/apps/codecs/sid.c index 58eb725057..59683e9b6a 100644 --- a/apps/codecs/sid.c +++ b/apps/codecs/sid.c | |||
@@ -1309,8 +1309,7 @@ next_track: | |||
1309 | } | 1309 | } |
1310 | } | 1310 | } |
1311 | 1311 | ||
1312 | while (!ci->pcmbuf_insert((char *)samples, CHUNK_SIZE*4)) | 1312 | ci->pcmbuf_insert(samples, NULL, CHUNK_SIZE); |
1313 | ci->yield(); | ||
1314 | } | 1313 | } |
1315 | 1314 | ||
1316 | if (ci->request_next_track()) | 1315 | if (ci->request_next_track()) |
diff --git a/apps/codecs/vorbis.c b/apps/codecs/vorbis.c index a6a90654b5..8ab4a95faa 100644 --- a/apps/codecs/vorbis.c +++ b/apps/codecs/vorbis.c | |||
@@ -217,10 +217,7 @@ next_track: | |||
217 | } else if (n < 0) { | 217 | } else if (n < 0) { |
218 | DEBUGF("Error decoding frame\n"); | 218 | DEBUGF("Error decoding frame\n"); |
219 | } else { | 219 | } else { |
220 | while (!ci->pcmbuf_insert_split(pcm[0], pcm[1], | 220 | ci->pcmbuf_insert(pcm[0], pcm[1], n); |
221 | n*sizeof(ogg_int32_t))) { | ||
222 | ci->sleep(1); | ||
223 | } | ||
224 | ci->set_offset(ov_raw_tell(&vf)); | 221 | ci->set_offset(ov_raw_tell(&vf)); |
225 | ci->set_elapsed(ov_time_tell(&vf)); | 222 | ci->set_elapsed(ov_time_tell(&vf)); |
226 | } | 223 | } |
diff --git a/apps/codecs/wav.c b/apps/codecs/wav.c index 26cbf7f6a1..ec268a3a2b 100644 --- a/apps/codecs/wav.c +++ b/apps/codecs/wav.c | |||
@@ -212,7 +212,8 @@ enum codec_status codec_main(void) | |||
212 | int bytespersample = 0; | 212 | int bytespersample = 0; |
213 | uint16_t bitspersample; | 213 | uint16_t bitspersample; |
214 | uint32_t i; | 214 | uint32_t i; |
215 | size_t n, bufsize; | 215 | size_t n; |
216 | int bufcount; | ||
216 | int endofstream; | 217 | int endofstream; |
217 | unsigned char *buf; | 218 | unsigned char *buf; |
218 | uint8_t *wavbuf; | 219 | uint8_t *wavbuf; |
@@ -466,34 +467,39 @@ next_track: | |||
466 | (wavbuf[i + 1]<<5)|(wavbuf[i + 2]<<13)| | 467 | (wavbuf[i + 1]<<5)|(wavbuf[i + 2]<<13)| |
467 | (SE(wavbuf[i + 3])<<21); | 468 | (SE(wavbuf[i + 3])<<21); |
468 | } | 469 | } |
469 | bufsize = n; | 470 | bufcount = n >> 2; |
470 | } else if (bitspersample > 16) { | 471 | } else if (bitspersample > 16) { |
471 | for (i = 0; i < n; i += 3) { | 472 | for (i = 0; i < n; i += 3) { |
472 | samples[i/3] = (wavbuf[i]<<5)| | 473 | samples[i/3] = (wavbuf[i]<<5)| |
473 | (wavbuf[i + 1]<<13)|(SE(wavbuf[i + 2])<<21); | 474 | (wavbuf[i + 1]<<13)|(SE(wavbuf[i + 2])<<21); |
474 | } | 475 | } |
475 | bufsize = n*4/3; | 476 | bufcount = n/3; |
476 | } else if (bitspersample > 8) { | 477 | } else if (bitspersample > 8) { |
477 | for (i = 0; i < n; i += 2) { | 478 | for (i = 0; i < n; i += 2) { |
478 | samples[i/2] = (wavbuf[i]<<13)|(SE(wavbuf[i + 1])<<21); | 479 | samples[i/2] = (wavbuf[i]<<13)|(SE(wavbuf[i + 1])<<21); |
479 | } | 480 | } |
480 | bufsize = n*2; | 481 | bufcount = n >> 1; |
481 | } else { | 482 | } else { |
482 | for (i = 0; i < n; i++) { | 483 | for (i = 0; i < n; i++) { |
483 | samples[i] = (wavbuf[i] - 0x80)<<21; | 484 | samples[i] = (wavbuf[i] - 0x80)<<21; |
484 | } | 485 | } |
485 | bufsize = n*4; | 486 | bufcount = n; |
486 | } | 487 | } |
488 | |||
489 | if (channels == 2) | ||
490 | bufcount >>= 1; | ||
487 | } else if (formattag == WAVE_FORMAT_ALAW | 491 | } else if (formattag == WAVE_FORMAT_ALAW |
488 | || formattag == IBM_FORMAT_ALAW) { | 492 | || formattag == IBM_FORMAT_ALAW) { |
489 | for (i = 0; i < n; i++) | 493 | for (i = 0; i < n; i++) |
490 | samples[i] = alaw2linear16[wavbuf[i]] << 13; | 494 | samples[i] = alaw2linear16[wavbuf[i]] << 13; |
491 | bufsize = n*4; | 495 | |
496 | bufcount = (channels == 2) ? (n >> 1) : n; | ||
492 | } else if (formattag == WAVE_FORMAT_MULAW | 497 | } else if (formattag == WAVE_FORMAT_MULAW |
493 | || formattag == IBM_FORMAT_MULAW) { | 498 | || formattag == IBM_FORMAT_MULAW) { |
494 | for (i = 0; i < n; i++) | 499 | for (i = 0; i < n; i++) |
495 | samples[i] = ulaw2linear16[wavbuf[i]] << 13; | 500 | samples[i] = ulaw2linear16[wavbuf[i]] << 13; |
496 | bufsize = n*4; | 501 | |
502 | bufcount = (channels == 2) ? (n >> 1) : n; | ||
497 | } | 503 | } |
498 | else if (formattag == WAVE_FORMAT_DVI_ADPCM) { | 504 | else if (formattag == WAVE_FORMAT_DVI_ADPCM) { |
499 | unsigned int nblocks = chunksize/blockalign; | 505 | unsigned int nblocks = chunksize/blockalign; |
@@ -508,15 +514,14 @@ next_track: | |||
508 | goto done; | 514 | goto done; |
509 | } | 515 | } |
510 | } | 516 | } |
511 | bufsize = nblocks*samplesperblock*channels*4; | 517 | bufcount = nblocks*samplesperblock; |
512 | } else { | 518 | } else { |
513 | DEBUGF("CODEC_ERROR: unsupported format %x\n", formattag); | 519 | DEBUGF("CODEC_ERROR: unsupported format %x\n", formattag); |
514 | i = CODEC_ERROR; | 520 | i = CODEC_ERROR; |
515 | goto done; | 521 | goto done; |
516 | } | 522 | } |
517 | 523 | ||
518 | while (!ci->pcmbuf_insert((char *)samples, bufsize)) | 524 | ci->pcmbuf_insert(samples, NULL, bufcount); |
519 | ci->yield(); | ||
520 | 525 | ||
521 | ci->advance_buffer(n); | 526 | ci->advance_buffer(n); |
522 | bytesdone += n; | 527 | bytesdone += n; |
diff --git a/apps/codecs/wavpack.c b/apps/codecs/wavpack.c index e2c19c82e4..34616d75e9 100644 --- a/apps/codecs/wavpack.c +++ b/apps/codecs/wavpack.c | |||
@@ -118,8 +118,7 @@ enum codec_status codec_main(void) | |||
118 | if (ci->stop_codec || ci->new_track) | 118 | if (ci->stop_codec || ci->new_track) |
119 | break; | 119 | break; |
120 | 120 | ||
121 | while (!ci->pcmbuf_insert ((char *) temp_buffer, nsamples * nchans * 4)) | 121 | ci->pcmbuf_insert (temp_buffer, NULL, nsamples); |
122 | ci->sleep (1); | ||
123 | 122 | ||
124 | ci->set_elapsed (WavpackGetSampleIndex (wpc) / sr_100 * 10); | 123 | ci->set_elapsed (WavpackGetSampleIndex (wpc) / sr_100 * 10); |
125 | ci->yield (); | 124 | ci->yield (); |