summaryrefslogtreecommitdiff
path: root/firmware/drivers/audio/sdl.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2013-04-12 23:35:47 -0400
committerMichael Sevakis <jethead71@rockbox.org>2013-04-15 12:02:05 -0400
commit0c7b7873984e04941c9f21fa272638018fdb9a16 (patch)
treefb6afca45d2bef0a2c91732a39ffc0b965f5c557 /firmware/drivers/audio/sdl.c
parentfd9e2568908f91b5bcf7378dc28f6ec070d6027a (diff)
downloadrockbox-0c7b7873984e04941c9f21fa272638018fdb9a16.tar.gz
rockbox-0c7b7873984e04941c9f21fa272638018fdb9a16.zip
Straighten out the mad twisted state of sound.c and related areas.
This is going right in since it's long overdue. If anything is goofed, drop me a line or just tweak it yourself if you know what's wrong. :-) Make HW/SW codec interface more uniform when emulating HW functionality on SWCODEC for functions such as "audiohw_set_pitch". The firmware-to- DSP plumbing is in firmware/drivers/audiohw-swcodec.c. "sound_XXX" APIs are all in sound.c with none in DSP code any longer. Reduce number of settings definitions needed by each codec by providing defaults for common ones like balance, channels and SW tone controls. Remove need for separate SIM code and tables and add virtual codec header for hosted targets. Change-Id: I3f23702bca054fc9bda40f49824ce681bb7f777b
Diffstat (limited to 'firmware/drivers/audio/sdl.c')
-rw-r--r--firmware/drivers/audio/sdl.c105
1 files changed, 18 insertions, 87 deletions
diff --git a/firmware/drivers/audio/sdl.c b/firmware/drivers/audio/sdl.c
index 3c7cc55ce9..eea10ad12c 100644
--- a/firmware/drivers/audio/sdl.c
+++ b/firmware/drivers/audio/sdl.c
@@ -32,107 +32,32 @@
32#ifdef HAVE_SW_VOLUME_CONTROL 32#ifdef HAVE_SW_VOLUME_CONTROL
33#include "pcm_sw_volume.h" 33#include "pcm_sw_volume.h"
34 34
35void audiohw_set_master_vol(int vol_l, int vol_r) 35void audiohw_set_volume(int vol_l, int vol_r)
36{ 36{
37 pcm_set_master_volume(vol_l, vol_r); 37 pcm_set_master_volume(vol_l, vol_r);
38} 38}
39
39#else /* ndef HAVE_SW_VOLUME_CONTROL */ 40#else /* ndef HAVE_SW_VOLUME_CONTROL */
41
40extern void pcm_set_mixer_volume(int); 42extern void pcm_set_mixer_volume(int);
41 43
42void audiohw_set_volume(int volume) 44void audiohw_set_volume(int volume)
43{ 45{
44#if CONFIG_CODEC == SWCODEC 46#if CONFIG_CODEC == SWCODEC
45#if (CONFIG_PLATFORM & PLATFORM_MAEMO5) 47#if !(CONFIG_PLATFORM & PLATFORM_MAEMO5)
48 if (volume < VOLUME_MIN)
49 volume = 0;
50 else
51 volume = SDL_MIX_MAXVOLUME * (volume - VOLUME_MIN + ONE_DB) /
52 (VOLUME_RANGE + ONE_DB);
53#endif /* !(CONFIG_PLATFORM & PLATFORM_MAEMO5) */
54
46 pcm_set_mixer_volume(volume); 55 pcm_set_mixer_volume(volume);
47#else
48 pcm_set_mixer_volume(
49 SDL_MIX_MAXVOLUME * ((volume - VOLUME_MIN) / 10) / (VOLUME_RANGE / 10));
50#endif /* (CONFIG_PLATFORM & PLATFORM_MAEMO5) */
51#else
52 (void)volume;
53#endif /* CONFIG_CODEC == SWCODEC */ 56#endif /* CONFIG_CODEC == SWCODEC */
57 (void)volume;
54} 58}
55#endif /* HAVE_SW_VOLUME_CONTROL */ 59#endif /* HAVE_SW_VOLUME_CONTROL */
56 60
57const struct sound_settings_info audiohw_settings[] = {
58 [SOUND_VOLUME] = {"dB", 0, 1, VOLUME_MIN / 10, VOLUME_MAX / 10, -25},
59/* Bass and treble tone controls */
60#ifdef AUDIOHW_HAVE_BASS
61 [SOUND_BASS] = {"dB", 0, 1, -24, 24, 0},
62#endif
63#ifdef AUDIOHW_HAVE_TREBLE
64 [SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0},
65#endif
66 [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0},
67 [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0},
68 [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100},
69#if defined(HAVE_RECORDING)
70 [SOUND_LEFT_GAIN] = {"dB", 1, 1,-128, 96, 0},
71 [SOUND_RIGHT_GAIN] = {"dB", 1, 1,-128, 96, 0},
72 [SOUND_MIC_GAIN] = {"dB", 1, 1,-128, 108, 16},
73#endif
74#if defined(AUDIOHW_HAVE_BASS_CUTOFF)
75 [SOUND_BASS_CUTOFF] = {"", 0, 1, 1, 4, 1},
76#endif
77#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF)
78 [SOUND_TREBLE_CUTOFF] = {"", 0, 1, 1, 4, 1},
79#endif
80#if defined(AUDIOHW_HAVE_DEPTH_3D)
81 [SOUND_DEPTH_3D] = {"%", 0, 1, 0, 15, 0},
82#endif
83/* Hardware EQ tone controls */
84#if defined(AUDIOHW_HAVE_EQ_BAND1)
85 [SOUND_EQ_BAND1_GAIN] = {"dB", 0, 1, -12, 12, 0},
86#endif
87#if defined(AUDIOHW_HAVE_EQ_BAND2)
88 [SOUND_EQ_BAND2_GAIN] = {"dB", 0, 1, -12, 12, 0},
89#endif
90#if defined(AUDIOHW_HAVE_EQ_BAND3)
91 [SOUND_EQ_BAND3_GAIN] = {"dB", 0, 1, -12, 12, 0},
92#endif
93#if defined(AUDIOHW_HAVE_EQ_BAND4)
94 [SOUND_EQ_BAND4_GAIN] = {"dB", 0, 1, -12, 12, 0},
95#endif
96#if defined(AUDIOHW_HAVE_EQ_BAND5)
97 [SOUND_EQ_BAND5_GAIN] = {"dB", 0, 1, -12, 12, 0},
98#endif
99#if defined(AUDIOHW_HAVE_EQ_BAND1_FREQUENCY)
100 [SOUND_EQ_BAND1_FREQUENCY] = {"", 0, 1, 1, 4, 1},
101#endif
102#if defined(AUDIOHW_HAVE_EQ_BAND2_FREQUENCY)
103 [SOUND_EQ_BAND2_FREQUENCY] = {"", 0, 1, 1, 4, 1},
104#endif
105#if defined(AUDIOHW_HAVE_EQ_BAND3_FREQUENCY)
106 [SOUND_EQ_BAND3_FREQUENCY] = {"", 0, 1, 1, 4, 1},
107#endif
108#if defined(AUDIOHW_HAVE_EQ_BAND4_FREQUENCY)
109 [SOUND_EQ_BAND4_FREQUENCY] = {"", 0, 1, 1, 4, 1},
110#endif
111#if defined(AUDIOHW_HAVE_EQ_BAND5_FREQUENCY)
112 [SOUND_EQ_BAND5_FREQUENCY] = {"", 0, 1, 1, 4, 1},
113#endif
114#if defined(AUDIOHW_HAVE_EQ_BAND2_WIDTH)
115 [SOUND_EQ_BAND2_WIDTH] = {"", 0, 1, 0, 1, 0},
116#endif
117#if defined(AUDIOHW_HAVE_EQ_BAND3_WIDTH)
118 [SOUND_EQ_BAND3_WIDTH] = {"", 0, 1, 0, 1, 0},
119#endif
120#if defined(AUDIOHW_HAVE_EQ_BAND4_WIDTH)
121 [SOUND_EQ_BAND4_WIDTH] = {"", 0, 1, 0, 1, 0},
122#endif
123
124#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
125 [SOUND_LOUDNESS] = {"dB", 0, 1, 0, 17, 0},
126 [SOUND_AVC] = {"", 0, 1, -1, 4, 0},
127 [SOUND_MDB_STRENGTH] = {"dB", 0, 1, 0, 127, 48},
128 [SOUND_MDB_HARMONICS] = {"%", 0, 1, 0, 100, 50},
129 [SOUND_MDB_CENTER] = {"Hz", 0, 10, 20, 300, 60},
130 [SOUND_MDB_SHAPE] = {"Hz", 0, 10, 50, 300, 90},
131 [SOUND_MDB_ENABLE] = {"", 0, 1, 0, 1, 0},
132 [SOUND_SUPERBASS] = {"", 0, 1, 0, 1, 0},
133#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
134};
135
136/** 61/**
137 * stubs here, for the simulator 62 * stubs here, for the simulator
138 **/ 63 **/
@@ -149,12 +74,14 @@ void audiohw_set_prescaler(int value)
149#if defined(AUDIOHW_HAVE_BALANCE) 74#if defined(AUDIOHW_HAVE_BALANCE)
150void audiohw_set_balance(int value) { (void)value; } 75void audiohw_set_balance(int value) { (void)value; }
151#endif 76#endif
77#ifndef HAVE_SW_TONE_CONTROLS
152#if defined(AUDIOHW_HAVE_BASS) 78#if defined(AUDIOHW_HAVE_BASS)
153void audiohw_set_bass(int value) { (void)value; } 79void audiohw_set_bass(int value) { (void)value; }
154#endif 80#endif
155#if defined(AUDIOHW_HAVE_TREBLE) 81#if defined(AUDIOHW_HAVE_TREBLE)
156void audiohw_set_treble(int value) { (void)value; } 82void audiohw_set_treble(int value) { (void)value; }
157#endif 83#endif
84#endif /* HAVE_SW_TONE_CONTROLS */
158#if CONFIG_CODEC != SWCODEC 85#if CONFIG_CODEC != SWCODEC
159void audiohw_set_channel(int value) { (void)value; } 86void audiohw_set_channel(int value) { (void)value; }
160void audiohw_set_stereo_width(int value){ (void)value; } 87void audiohw_set_stereo_width(int value){ (void)value; }
@@ -182,6 +109,10 @@ void audiohw_set_eq_band_width(unsigned int band, int value)
182void audiohw_set_depth_3d(int value) 109void audiohw_set_depth_3d(int value)
183 { (void)value; } 110 { (void)value; }
184#endif 111#endif
112#if defined(AUDIOHW_HAVE_LINEOUT)
113void audiohw_set_lineout_volume(int vol_l, int vol_r)
114 { (void)vol_l; (void)vol_r; }
115#endif
185 116
186void audiohw_close(void) {} 117void audiohw_close(void) {}
187 118