1
0
Fork 0
forked from len0rd/rockbox

Bring consistency to pcm implementation and samplerate handling. Less low-level duplication. A small test_sampr fix so it works on coldfire again.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19400 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2008-12-12 11:01:07 +00:00
parent 0ad97d13fc
commit e69d567d9e
37 changed files with 316 additions and 449 deletions

View file

@ -33,7 +33,6 @@
#include "SDL.h"
static int cvt_status = -1;
static unsigned long pcm_frequency = SAMPR_44;
static Uint8* pcm_data;
static size_t pcm_data_size;
@ -67,28 +66,26 @@ void pcm_play_unlock(void)
SDL_UnlockAudio();
}
static void pcm_apply_settings_nolock(void)
static void pcm_dma_apply_settings_nolock(void)
{
cvt_status = SDL_BuildAudioCVT(&cvt, AUDIO_S16SYS, 2, pcm_frequency,
cvt_status = SDL_BuildAudioCVT(&cvt, AUDIO_S16SYS, 2, pcm_sampr,
obtained.format, obtained.channels, obtained.freq);
pcm_curr_sampr = pcm_frequency;
if (cvt_status < 0) {
cvt.len_ratio = (double)obtained.freq / (double)pcm_curr_sampr;
cvt.len_ratio = (double)obtained.freq / (double)pcm_sampr;
}
}
void pcm_apply_settings(void)
void pcm_dma_apply_settings(void)
{
pcm_play_lock();
pcm_apply_settings_nolock();
pcm_dma_apply_settings_nolock();
pcm_play_unlock();
}
void pcm_play_dma_start(const void *addr, size_t size)
{
pcm_apply_settings_nolock();
pcm_dma_apply_settings_nolock();
pcm_data = (Uint8 *) addr;
pcm_data_size = size;
@ -114,30 +111,6 @@ size_t pcm_get_bytes_waiting(void)
return pcm_data_size;
}
void pcm_set_frequency(unsigned int frequency)
{
switch (frequency)
{
HW_HAVE_8_( case SAMPR_8:)
HW_HAVE_11_(case SAMPR_11:)
HW_HAVE_12_(case SAMPR_12:)
HW_HAVE_16_(case SAMPR_16:)
HW_HAVE_22_(case SAMPR_22:)
HW_HAVE_24_(case SAMPR_24:)
HW_HAVE_32_(case SAMPR_32:)
HW_HAVE_44_(case SAMPR_44:)
HW_HAVE_48_(case SAMPR_48:)
HW_HAVE_64_(case SAMPR_64:)
HW_HAVE_88_(case SAMPR_88:)
HW_HAVE_96_(case SAMPR_96:)
break;
default:
frequency = SAMPR_44;
}
pcm_frequency = frequency;
}
extern int sim_volume; /* in firmware/sound.c */
void write_to_soundcard(struct pcm_udata *udata) {
if (cvt.needed) {
@ -357,7 +330,7 @@ void pcm_play_dma_init(void)
pcm_sample_bytes = obtained.channels * pcm_channel_bytes;
pcm_apply_settings_nolock();
pcm_dma_apply_settings_nolock();
}
void pcm_postinit(void)