From d5592a671033c386c7c354338f61a93507e9d467 Mon Sep 17 00:00:00 2001 From: Jeffrey Goode Date: Wed, 12 Aug 2009 18:28:30 +0000 Subject: FS#10504: Make mpegplayer audio thread use correct sample count git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22280 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/mpegplayer/audio_thread.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'apps') diff --git a/apps/plugins/mpegplayer/audio_thread.c b/apps/plugins/mpegplayer/audio_thread.c index a901b721d8..d04257ac30 100644 --- a/apps/plugins/mpegplayer/audio_thread.c +++ b/apps/plugins/mpegplayer/audio_thread.c @@ -643,8 +643,8 @@ static void audio_thread(void) struct pcm_frame_header *dst_hdr = pcm_output_get_buffer(); const char *src[2] = { (char *)synth.pcm.samples[0], (char *)synth.pcm.samples[1] }; - int out_count = (synth.pcm.length * CLOCK_RATE - + (td.samplerate - 1)) / td.samplerate; + int out_count = rb->dsp_output_count(td.dsp, (synth.pcm.length * + CLOCK_RATE + (td.samplerate - 1)) / td.samplerate); ssize_t size = sizeof(*dst_hdr) + out_count*4; /* Wait for required amount of free buffer space */ @@ -657,8 +657,17 @@ static void audio_thread(void) goto message_process; } + int inp_count = rb->dsp_input_count(td.dsp, out_count); + + if (inp_count <= 0) + break; + + /* Input size has grown, no error, just don't write more than length */ + if (inp_count > synth.pcm.length) + inp_count = synth.pcm.length; + out_count = rb->dsp_process(td.dsp, dst_hdr->data, src, - synth.pcm.length); + inp_count); if (out_count <= 0) break; -- cgit v1.2.3