summaryrefslogtreecommitdiff
path: root/apps/plugins/mpegplayer/mpeg_settings.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-02-01 02:25:15 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-02-01 02:25:15 +0000
commitf90cbcb652af3bf794ec61d7f7ec3de00c8b7cb2 (patch)
tree62c13ffdeb5112181897103a6a015cfc1fab98ae /apps/plugins/mpegplayer/mpeg_settings.c
parent7e402d8202af409a0ea8f3f2676a2e6f501af05b (diff)
downloadrockbox-f90cbcb652af3bf794ec61d7f7ec3de00c8b7cb2.tar.gz
rockbox-f90cbcb652af3bf794ec61d7f7ec3de00c8b7cb2.zip
mpegplayer: Use the core DSP to process audio. Removes the sample rate restriction on audio and any mpeg audio samplerate may be used. Use the global sound settings for audio output with the option to force any one of the processing stages off. All are forced off by default. I didn't personally care to fully duplicate the Sound Settings menu which would have been needed since using the core one would affect settings globally and exactly the same configuration probably isn't desired since the CPU load for video playback is much greater. Rebalance the threading to compensate with some expense to buffering speed.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16194 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/mpegplayer/mpeg_settings.c')
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c174
1 files changed, 174 insertions, 0 deletions
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index fa8fad8b4c..fc99460d74 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -109,6 +109,11 @@ static struct configdata config[] =
109 {TYPE_INT, 0, INT_MAX, &settings.displayoptions, "Display options", 109 {TYPE_INT, 0, INT_MAX, &settings.displayoptions, "Display options",
110 NULL, NULL}, 110 NULL, NULL},
111#endif 111#endif
112 {TYPE_INT, 0, 2, &settings.tone_controls, "Tone controls", NULL, NULL},
113 {TYPE_INT, 0, 2, &settings.channel_modes, "Channel modes", NULL, NULL},
114 {TYPE_INT, 0, 2, &settings.crossfeed, "Crossfeed", NULL, NULL},
115 {TYPE_INT, 0, 2, &settings.equalizer, "Equalizer", NULL, NULL},
116 {TYPE_INT, 0, 2, &settings.dithering, "Dithering", NULL, NULL},
112}; 117};
113 118
114static const struct opt_items noyes[2] = { 119static const struct opt_items noyes[2] = {
@@ -121,6 +126,11 @@ static const struct opt_items enabledisable[2] = {
121 { "Enable", -1 }, 126 { "Enable", -1 },
122}; 127};
123 128
129static const struct opt_items globaloff[2] = {
130 { "Force off", -1 },
131 { "Use sound setting", -1 },
132};
133
124static long mpeg_menu_sysevent_id; 134static long mpeg_menu_sysevent_id;
125 135
126void mpeg_menu_sysevent_clear(void) 136void mpeg_menu_sysevent_clear(void)
@@ -184,6 +194,70 @@ static bool mpeg_set_option(const char* string,
184 return usb; 194 return usb;
185} 195}
186 196
197/* Sync a particular audio setting to global or mpegplayer forced off */
198static void sync_audio_setting(int setting, bool global)
199{
200 int val0, val1;
201
202 switch (setting)
203 {
204 case MPEG_AUDIO_TONE_CONTROLS:
205 if (global || settings.tone_controls)
206 {
207 val0 = rb->global_settings->bass;
208 val1 = rb->global_settings->treble;
209 }
210 else
211 {
212 val0 = rb->sound_default(SOUND_BASS);
213 val1 = rb->sound_default(SOUND_TREBLE);
214 }
215 rb->sound_set(SOUND_BASS, val0);
216 rb->sound_set(SOUND_TREBLE, val1);
217 break;
218
219 case MPEG_AUDIO_CHANNEL_MODES:
220 val0 = (global || settings.channel_modes) ?
221 rb->global_settings->channel_config :
222 SOUND_CHAN_STEREO;
223 rb->sound_set(SOUND_CHANNELS, val0);
224 break;
225
226 case MPEG_AUDIO_CROSSFEED:
227 rb->dsp_set_crossfeed((global || settings.crossfeed) ?
228 rb->global_settings->crossfeed : false);
229 break;
230
231 case MPEG_AUDIO_EQUALIZER:
232 rb->dsp_set_eq((global || settings.equalizer) ?
233 rb->global_settings->eq_enabled : false);
234 break;
235
236 case MPEG_AUDIO_DITHERING:
237 rb->dsp_dither_enable((global || settings.dithering) ?
238 rb->global_settings->dithering_enabled : false);
239 break;
240 }
241}
242
243/* Sync all audio settings to global or mpegplayer forced off */
244static void sync_audio_settings(bool global)
245{
246 static const int setting_index[] =
247 {
248 MPEG_AUDIO_TONE_CONTROLS,
249 MPEG_AUDIO_CHANNEL_MODES,
250 MPEG_AUDIO_CROSSFEED,
251 MPEG_AUDIO_EQUALIZER,
252 MPEG_AUDIO_DITHERING,
253 };
254 unsigned i;
255
256 for (i = 0; i < ARRAYLEN(setting_index); i++)
257 {
258 sync_audio_setting(setting_index[i], global);
259 }
260}
187 261
188#ifndef HAVE_LCD_COLOR 262#ifndef HAVE_LCD_COLOR
189/* Cheapo splash implementation for the grey surface */ 263/* Cheapo splash implementation for the grey surface */
@@ -736,6 +810,79 @@ static void display_options(void)
736 menu_exit(menu_id); 810 menu_exit(menu_id);
737} 811}
738 812
813static void audio_options(void)
814{
815 int result;
816 int menu_id;
817 bool menu_quit = false;
818
819 static const struct menu_item items[] = {
820 [MPEG_AUDIO_TONE_CONTROLS] =
821 { "Tone Controls", NULL },
822 [MPEG_AUDIO_CHANNEL_MODES] =
823 { "Channel Modes", NULL },
824 [MPEG_AUDIO_CROSSFEED] =
825 { "Crossfeed", NULL },
826 [MPEG_AUDIO_EQUALIZER] =
827 { "Equalizer", NULL },
828 [MPEG_AUDIO_DITHERING] =
829 { "Dithering", NULL },
830 };
831
832 menu_id = menu_init(rb, items, ARRAYLEN(items),
833 mpeg_menu_sysevent_callback, NULL, NULL, NULL);
834
835 rb->button_clear_queue();
836
837 while (!menu_quit)
838 {
839 mpeg_menu_sysevent_clear();
840 result = menu_show(menu_id);
841
842 switch (result)
843 {
844 case MPEG_AUDIO_TONE_CONTROLS:
845 mpeg_set_option("Tone Controls", &settings.tone_controls, INT,
846 globaloff, 2, NULL);
847 sync_audio_setting(result, false);
848 break;
849
850 case MPEG_AUDIO_CHANNEL_MODES:
851 mpeg_set_option("Channel Modes", &settings.channel_modes,
852 INT, globaloff, 2, NULL);
853 sync_audio_setting(result, false);
854 break;
855
856 case MPEG_AUDIO_CROSSFEED:
857 mpeg_set_option("Crossfeed", &settings.crossfeed, INT,
858 globaloff, 2, NULL);
859 sync_audio_setting(result, false);
860 break;
861
862 case MPEG_AUDIO_EQUALIZER:
863 mpeg_set_option("Equalizer", &settings.equalizer, INT,
864 globaloff, 2, NULL);
865 sync_audio_setting(result, false);
866 break;
867
868 case MPEG_AUDIO_DITHERING:
869 mpeg_set_option("Dithering", &settings.dithering, INT,
870 globaloff, 2, NULL);
871 sync_audio_setting(result, false);
872 break;
873
874 default:
875 menu_quit = true;
876 break;
877 }
878
879 if (mpeg_menu_sysevent() != 0)
880 menu_quit = true;
881 }
882
883 menu_exit(menu_id);
884}
885
739static void resume_options(void) 886static void resume_options(void)
740{ 887{
741 static const struct opt_items items[MPEG_RESUME_NUM_OPTIONS] = { 888 static const struct opt_items items[MPEG_RESUME_NUM_OPTIONS] = {
@@ -775,6 +922,8 @@ int mpeg_menu(unsigned flags)
775 struct menu_item items[] = { 922 struct menu_item items[] = {
776 [MPEG_MENU_DISPLAY_SETTINGS] = 923 [MPEG_MENU_DISPLAY_SETTINGS] =
777 { "Display Options", NULL }, 924 { "Display Options", NULL },
925 [MPEG_MENU_AUDIO_SETTINGS] =
926 { "Audio Options", NULL },
778 [MPEG_MENU_ENABLE_START_MENU] = 927 [MPEG_MENU_ENABLE_START_MENU] =
779 { "Resume Options", NULL }, 928 { "Resume Options", NULL },
780 [MPEG_MENU_CLEAR_RESUMES] = 929 [MPEG_MENU_CLEAR_RESUMES] =
@@ -809,6 +958,10 @@ int mpeg_menu(unsigned flags)
809 display_options(); 958 display_options();
810 break; 959 break;
811 960
961 case MPEG_MENU_AUDIO_SETTINGS:
962 audio_options();
963 break;
964
812 case MPEG_MENU_ENABLE_START_MENU: 965 case MPEG_MENU_ENABLE_START_MENU:
813 resume_options(); 966 resume_options();
814 break; 967 break;
@@ -849,6 +1002,11 @@ void init_settings(const char* filename)
849#if MPEG_OPTION_DITHERING_ENABLED 1002#if MPEG_OPTION_DITHERING_ENABLED
850 settings.displayoptions = 0; /* No visual effects */ 1003 settings.displayoptions = 0; /* No visual effects */
851#endif 1004#endif
1005 settings.tone_controls = false;
1006 settings.channel_modes = false;
1007 settings.crossfeed = false;
1008 settings.equalizer = false;
1009 settings.dithering = false;
852 1010
853 configfile_init(rb); 1011 configfile_init(rb);
854 1012
@@ -886,6 +1044,9 @@ void init_settings(const char* filename)
886 { 1044 {
887 settings.resume_time = 0; 1045 settings.resume_time = 0;
888 } 1046 }
1047
1048 /* Set our audio options */
1049 sync_audio_settings(false);
889} 1050}
890 1051
891void save_settings(void) 1052void save_settings(void)
@@ -911,4 +1072,17 @@ void save_settings(void)
911 configfile_update_entry(SETTINGS_FILENAME, "Display options", 1072 configfile_update_entry(SETTINGS_FILENAME, "Display options",
912 settings.displayoptions); 1073 settings.displayoptions);
913#endif 1074#endif
1075 configfile_update_entry(SETTINGS_FILENAME, "Tone controls",
1076 settings.tone_controls);
1077 configfile_update_entry(SETTINGS_FILENAME, "Channel modes",
1078 settings.channel_modes);
1079 configfile_update_entry(SETTINGS_FILENAME, "Crossfeed",
1080 settings.crossfeed);
1081 configfile_update_entry(SETTINGS_FILENAME, "Equalizer",
1082 settings.equalizer);
1083 configfile_update_entry(SETTINGS_FILENAME, "Dithering",
1084 settings.dithering);
1085
1086 /* Restore audio options */
1087 sync_audio_settings(true);
914} 1088}