summaryrefslogtreecommitdiff
path: root/uisimulator/sdl/sound.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-12-12 11:01:07 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-12-12 11:01:07 +0000
commite69d567d9ebf7d236ff9663b11ac396cc71dcd75 (patch)
tree093b9d1bc979d79be1fcd0daac1d8daf8ac55503 /uisimulator/sdl/sound.c
parent0ad97d13fc52b28de566dc0ddaf7245583eec2cc (diff)
downloadrockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.tar.gz
rockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.zip
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
Diffstat (limited to 'uisimulator/sdl/sound.c')
-rw-r--r--uisimulator/sdl/sound.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/uisimulator/sdl/sound.c b/uisimulator/sdl/sound.c
index 5f061695a8..39abc85aca 100644
--- a/uisimulator/sdl/sound.c
+++ b/uisimulator/sdl/sound.c
@@ -33,7 +33,6 @@
33#include "SDL.h" 33#include "SDL.h"
34 34
35static int cvt_status = -1; 35static int cvt_status = -1;
36static unsigned long pcm_frequency = SAMPR_44;
37 36
38static Uint8* pcm_data; 37static Uint8* pcm_data;
39static size_t pcm_data_size; 38static size_t pcm_data_size;
@@ -67,28 +66,26 @@ void pcm_play_unlock(void)
67 SDL_UnlockAudio(); 66 SDL_UnlockAudio();
68} 67}
69 68
70static void pcm_apply_settings_nolock(void) 69static void pcm_dma_apply_settings_nolock(void)
71{ 70{
72 cvt_status = SDL_BuildAudioCVT(&cvt, AUDIO_S16SYS, 2, pcm_frequency, 71 cvt_status = SDL_BuildAudioCVT(&cvt, AUDIO_S16SYS, 2, pcm_sampr,
73 obtained.format, obtained.channels, obtained.freq); 72 obtained.format, obtained.channels, obtained.freq);
74 73
75 pcm_curr_sampr = pcm_frequency;
76
77 if (cvt_status < 0) { 74 if (cvt_status < 0) {
78 cvt.len_ratio = (double)obtained.freq / (double)pcm_curr_sampr; 75 cvt.len_ratio = (double)obtained.freq / (double)pcm_sampr;
79 } 76 }
80} 77}
81 78
82void pcm_apply_settings(void) 79void pcm_dma_apply_settings(void)
83{ 80{
84 pcm_play_lock(); 81 pcm_play_lock();
85 pcm_apply_settings_nolock(); 82 pcm_dma_apply_settings_nolock();
86 pcm_play_unlock(); 83 pcm_play_unlock();
87} 84}
88 85
89void pcm_play_dma_start(const void *addr, size_t size) 86void pcm_play_dma_start(const void *addr, size_t size)
90{ 87{
91 pcm_apply_settings_nolock(); 88 pcm_dma_apply_settings_nolock();
92 89
93 pcm_data = (Uint8 *) addr; 90 pcm_data = (Uint8 *) addr;
94 pcm_data_size = size; 91 pcm_data_size = size;
@@ -114,30 +111,6 @@ size_t pcm_get_bytes_waiting(void)
114 return pcm_data_size; 111 return pcm_data_size;
115} 112}
116 113
117void pcm_set_frequency(unsigned int frequency)
118{
119 switch (frequency)
120 {
121 HW_HAVE_8_( case SAMPR_8:)
122 HW_HAVE_11_(case SAMPR_11:)
123 HW_HAVE_12_(case SAMPR_12:)
124 HW_HAVE_16_(case SAMPR_16:)
125 HW_HAVE_22_(case SAMPR_22:)
126 HW_HAVE_24_(case SAMPR_24:)
127 HW_HAVE_32_(case SAMPR_32:)
128 HW_HAVE_44_(case SAMPR_44:)
129 HW_HAVE_48_(case SAMPR_48:)
130 HW_HAVE_64_(case SAMPR_64:)
131 HW_HAVE_88_(case SAMPR_88:)
132 HW_HAVE_96_(case SAMPR_96:)
133 break;
134 default:
135 frequency = SAMPR_44;
136 }
137
138 pcm_frequency = frequency;
139}
140
141extern int sim_volume; /* in firmware/sound.c */ 114extern int sim_volume; /* in firmware/sound.c */
142void write_to_soundcard(struct pcm_udata *udata) { 115void write_to_soundcard(struct pcm_udata *udata) {
143 if (cvt.needed) { 116 if (cvt.needed) {
@@ -357,7 +330,7 @@ void pcm_play_dma_init(void)
357 330
358 pcm_sample_bytes = obtained.channels * pcm_channel_bytes; 331 pcm_sample_bytes = obtained.channels * pcm_channel_bytes;
359 332
360 pcm_apply_settings_nolock(); 333 pcm_dma_apply_settings_nolock();
361} 334}
362 335
363void pcm_postinit(void) 336void pcm_postinit(void)