summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/a52.c7
-rw-r--r--apps/codecs/aac.c8
-rw-r--r--apps/codecs/adx.c7
-rw-r--r--apps/codecs/aiff.c17
-rw-r--r--apps/codecs/alac.c5
-rw-r--r--apps/codecs/flac.c7
-rw-r--r--apps/codecs/mpa.c10
-rw-r--r--apps/codecs/mpc.c7
-rw-r--r--apps/codecs/nsf.c4
-rw-r--r--apps/codecs/shorten.c7
-rw-r--r--apps/codecs/sid.c3
-rw-r--r--apps/codecs/vorbis.c5
-rw-r--r--apps/codecs/wav.c25
-rw-r--r--apps/codecs/wavpack.c3
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 */
36static uint8_t buf[3840] IBSS_ATTR; 36static uint8_t buf[3840] IBSS_ATTR;
37 37
38void output_audio(sample_t *samples) 38static 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
46void a52_decode_data(uint8_t *start, uint8_t *end) 43void 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 ();