[PATCH] allow choosing any OSS slider in standard OSS plugin
Michael Leuchtenburg <[email protected]>
| Newsgroups | gmane.comp.multimedia.xmms.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a patch that allows the user to set the volume slider to any OSS slider, instead of only allowing a toggle between Master and PCM. I find it useful on my SB Live because I use Pcm2 to control dsp2, where I send music. -- michael
xmms_volume_patch.diff
(text/plain, 4.5 KB)
diff -r xmms-1.2.7/Output/OSS/configure.c xmms-1.2.7-patched/Output/OSS/configure.c
23c23
< static GtkWidget *mixer_usemaster_check, *buffer_size_spin, *buffer_pre_spin;
---
> static GtkWidget *mixer_output_channel_entry, *buffer_size_spin, *buffer_pre_spin;
26c26
< static gint audio_device, mixer_device;
---
> static gint audio_device, mixer_device, mixer_output_channel;
38,39c38
< oss_cfg.use_master =
< gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mixer_usemaster_check));
---
> oss_cfg.mixer_output_channel = mixer_output_channel;
67c66
< xmms_cfg_write_boolean(cfgfile,"OSS","use_master",oss_cfg.use_master);
---
> xmms_cfg_write_int(cfgfile,"OSS","mixer_output_channel",oss_cfg.mixer_output_channel);
77a77,81
> static void configure_win_mixer_channel_cb(GtkWidget * widget, gint oss_index)
> {
> mixer_output_channel = oss_index;
> }
>
158a163,215
> static char* get_mixer_device(void)
> {
> char *name;
>
> if (oss_cfg.use_alt_mixer_device && oss_cfg.alt_mixer_device)
> name = g_strdup(oss_cfg.alt_mixer_device);
> else if (oss_cfg.mixer_device > 0)
> name = g_strdup_printf("%s%d", DEV_MIXER, oss_cfg.mixer_device);
> else
> name = g_strdup(DEV_MIXER);
>
> return name;
> }
>
> static void build_channel_menu(gint preset, GtkWidget * channel_menu, GtkSignalFunc sigfunc)
> {
> GtkWidget *menu, *item;
> gint menu_index, oss_index, history_index;
> gchar *devname;
> int fd, devs;
> char *dev_labels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS;
>
> devname = get_mixer_device();
> fd = open(devname, O_RDONLY);
> g_free(devname);
>
> menu = gtk_menu_new();
>
> if(fd != -1) {
> ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
> menu_index = 0;
> for (oss_index = 0; oss_index < SOUND_MIXER_NRDEVICES; oss_index++) {
> if ((1 << oss_index) & devs) {
> item = gtk_menu_item_new_with_label(dev_labels[oss_index]);
> gtk_signal_connect(GTK_OBJECT(item), "activate", sigfunc, (gpointer) oss_index);
> gtk_widget_show(item);
> gtk_menu_append(GTK_MENU(menu), item);
> if (preset == oss_index) {
> history_index = menu_index;
> }
> menu_index++;
> }
> }
> }
> else {
> item = gtk_menu_item_new_with_label("Current");
> gtk_widget_show(item);
> gtk_menu_append(GTK_MENU(menu), item);
> }
> gtk_option_menu_set_menu(GTK_OPTION_MENU(channel_menu), menu);
> gtk_option_menu_set_history(GTK_OPTION_MENU(channel_menu), history_index);
> }
>
293c350
< mixer_frame = gtk_frame_new(_("Mixer Settings:"));
---
> mixer_frame = gtk_frame_new(_("Output Channel:"));
298,301c355
< mixer_usemaster_check=gtk_check_button_new_with_label(_("Volume controls Master not PCM"));
< gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mixer_usemaster_check),oss_cfg.use_master);
< gtk_table_attach_defaults(GTK_TABLE(mixer_table), mixer_usemaster_check, 0, 1, 0, 1);
< gtk_notebook_append_page(GTK_NOTEBOOK(notebook), mixer_frame, gtk_label_new(_("Mixer")));
---
> mixer_output_channel_entry=gtk_option_menu_new();
302a357,360
> build_channel_menu(oss_cfg.mixer_output_channel, mixer_output_channel_entry, configure_win_mixer_channel_cb);
>
> gtk_table_attach_defaults(GTK_TABLE(mixer_table), mixer_output_channel_entry, 0, 1, 0, 1);
> gtk_notebook_append_page(GTK_NOTEBOOK(notebook), mixer_frame, gtk_label_new(_("Mixer")));
diff -r xmms-1.2.7/Output/OSS/init.c xmms-1.2.7-patched/Output/OSS/init.c
35c35
< oss_cfg.use_master=0;
---
> oss_cfg.mixer_output_channel = SOUND_MIXER_PCM;
43c43
< xmms_cfg_read_boolean(cfgfile, "OSS", "use_master", &oss_cfg.use_master);
---
> xmms_cfg_read_int(cfgfile, "OSS", "mixer_output_channel", &oss_cfg.mixer_output_channel);
Only in xmms-1.2.7-patched/Output/OSS/: Makefile
diff -r xmms-1.2.7/Output/OSS/mixer.c xmms-1.2.7-patched/Output/OSS/mixer.c
51,54c51,52
< if ((devs & SOUND_MASK_PCM) && (oss_cfg.use_master==0))
< cmd = SOUND_MIXER_READ_PCM;
< else if ((devs & SOUND_MASK_VOLUME) && (oss_cfg.use_master==1))
< cmd = SOUND_MIXER_READ_VOLUME;
---
> if (devs & (1 << oss_cfg.mixer_output_channel))
> cmd = MIXER_READ(oss_cfg.mixer_output_channel);
78,81c76,77
< if ((devs & SOUND_MASK_PCM) && (oss_cfg.use_master==0))
< cmd = SOUND_MIXER_WRITE_PCM;
< else if ((devs & SOUND_MASK_VOLUME) && (oss_cfg.use_master==1))
< cmd = SOUND_MIXER_WRITE_VOLUME;
---
> if (devs & (1 << oss_cfg.mixer_output_channel))
> cmd = MIXER_WRITE(oss_cfg.mixer_output_channel);
diff -r xmms-1.2.7/Output/OSS/OSS.h xmms-1.2.7-patched/Output/OSS/OSS.h
60c60
< gboolean use_master;
---
> gint mixer_output_channel;