Unifying the code
This commit is contained in:
parent
372fdf4e43
commit
a2859583f7
60
src/mixer.c
60
src/mixer.c
|
@ -53,6 +53,13 @@ typedef struct _MixerClass
|
||||||
} MixerClass;
|
} MixerClass;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct _MixerProperties
|
||||||
|
{
|
||||||
|
char name[32];
|
||||||
|
char version[16];
|
||||||
|
char device[16];
|
||||||
|
} MixerProperties;
|
||||||
|
|
||||||
struct _Mixer
|
struct _Mixer
|
||||||
{
|
{
|
||||||
/* widgets */
|
/* widgets */
|
||||||
|
@ -61,6 +68,7 @@ struct _Mixer
|
||||||
GtkWidget * about;
|
GtkWidget * about;
|
||||||
|
|
||||||
/* internals */
|
/* internals */
|
||||||
|
char * device;
|
||||||
#ifdef AUDIO_MIXER_DEVINFO
|
#ifdef AUDIO_MIXER_DEVINFO
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
@ -129,6 +137,7 @@ static int _mixer_error(Mixer * mixer, char const * message, int ret);
|
||||||
#ifdef AUDIO_MIXER_DEVINFO
|
#ifdef AUDIO_MIXER_DEVINFO
|
||||||
static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev);
|
static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev);
|
||||||
#endif
|
#endif
|
||||||
|
static int _mixer_get_properties(Mixer * mixer, MixerProperties * properties);
|
||||||
|
|
||||||
|
|
||||||
/* public */
|
/* public */
|
||||||
|
@ -167,6 +176,7 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
||||||
return NULL;
|
return NULL;
|
||||||
if(device == NULL)
|
if(device == NULL)
|
||||||
device = "/dev/mixer";
|
device = "/dev/mixer";
|
||||||
|
mixer->device = strdup(device);
|
||||||
mixer->fd = open(device, O_RDWR);
|
mixer->fd = open(device, O_RDWR);
|
||||||
mixer->window = NULL;
|
mixer->window = NULL;
|
||||||
mixer->properties = NULL;
|
mixer->properties = NULL;
|
||||||
|
@ -175,7 +185,7 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
||||||
mixer->mc = NULL;
|
mixer->mc = NULL;
|
||||||
mixer->mc_cnt = 0;
|
mixer->mc_cnt = 0;
|
||||||
#endif
|
#endif
|
||||||
if(mixer->fd < 0)
|
if(mixer->device == NULL || mixer->fd < 0)
|
||||||
{
|
{
|
||||||
_mixer_error(NULL, device, 0);
|
_mixer_error(NULL, device, 0);
|
||||||
mixer_delete(mixer);
|
mixer_delete(mixer);
|
||||||
|
@ -439,6 +449,8 @@ void mixer_delete(Mixer * mixer)
|
||||||
{
|
{
|
||||||
if(mixer->fd >= 0)
|
if(mixer->fd >= 0)
|
||||||
close(mixer->fd);
|
close(mixer->fd);
|
||||||
|
if(mixer->device != NULL)
|
||||||
|
free(mixer->device);
|
||||||
if(mixer->window != NULL)
|
if(mixer->window != NULL)
|
||||||
gtk_widget_destroy(mixer->window);
|
gtk_widget_destroy(mixer->window);
|
||||||
free(mixer);
|
free(mixer);
|
||||||
|
@ -578,22 +590,19 @@ static gboolean _properties_on_closex(GtkWidget * widget);
|
||||||
|
|
||||||
void mixer_properties(Mixer * mixer)
|
void mixer_properties(Mixer * mixer)
|
||||||
{
|
{
|
||||||
#ifdef AUDIO_MIXER_DEVINFO
|
|
||||||
audio_device_t ad;
|
|
||||||
GtkSizeGroup * left;
|
GtkSizeGroup * left;
|
||||||
GtkSizeGroup * right;
|
GtkSizeGroup * right;
|
||||||
GtkWidget * vbox;
|
GtkWidget * vbox;
|
||||||
GtkWidget * hbox;
|
GtkWidget * hbox;
|
||||||
GtkWidget * widget;
|
GtkWidget * widget;
|
||||||
#endif
|
MixerProperties mp;
|
||||||
|
|
||||||
if(mixer->properties != NULL)
|
if(mixer->properties != NULL)
|
||||||
{
|
{
|
||||||
gtk_widget_show(mixer->properties);
|
gtk_widget_show(mixer->properties);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef AUDIO_MIXER_DEVINFO
|
if(_mixer_get_properties(mixer, &mp) != 0)
|
||||||
if(ioctl(mixer->fd, AUDIO_GETDEV, &ad) != 0)
|
|
||||||
{
|
{
|
||||||
_mixer_error(mixer, "AUDIO_GETDEV", 1);
|
_mixer_error(mixer, "AUDIO_GETDEV", 1);
|
||||||
return;
|
return;
|
||||||
|
@ -618,7 +627,7 @@ void mixer_properties(Mixer * mixer)
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(left, widget);
|
gtk_size_group_add_widget(left, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
widget = gtk_label_new(ad.name);
|
widget = gtk_label_new(mp.name);
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(right, widget);
|
gtk_size_group_add_widget(right, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
|
@ -628,24 +637,23 @@ void mixer_properties(Mixer * mixer)
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(left, widget);
|
gtk_size_group_add_widget(left, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
widget = gtk_label_new(ad.version);
|
widget = gtk_label_new(mp.version);
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(right, widget);
|
gtk_size_group_add_widget(right, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
||||||
hbox = gtk_hbox_new(FALSE, 0);
|
hbox = gtk_hbox_new(FALSE, 0);
|
||||||
widget = gtk_label_new(_("Config: "));
|
widget = gtk_label_new(_("Device: "));
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(left, widget);
|
gtk_size_group_add_widget(left, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
widget = gtk_label_new(ad.config);
|
widget = gtk_label_new(mp.device);
|
||||||
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
gtk_misc_set_alignment(GTK_MISC(widget), 0, 0);
|
||||||
gtk_size_group_add_widget(right, widget);
|
gtk_size_group_add_widget(right, widget);
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 2);
|
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 2);
|
||||||
gtk_widget_show_all(vbox);
|
gtk_widget_show_all(vbox);
|
||||||
gtk_widget_show(mixer->properties);
|
gtk_widget_show(mixer->properties);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean _properties_on_closex(GtkWidget * widget)
|
static gboolean _properties_on_closex(GtkWidget * widget)
|
||||||
|
@ -795,3 +803,33 @@ static mixer_ctrl_t * _mixer_get(Mixer * mixer, int dev)
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* mixer_get_properties */
|
||||||
|
static int _mixer_get_properties(Mixer * mixer, MixerProperties * properties)
|
||||||
|
{
|
||||||
|
#ifdef AUDIO_MIXER_DEVINFO
|
||||||
|
audio_device_t ad;
|
||||||
|
|
||||||
|
if(ioctl(mixer->fd, AUDIO_GETDEV, &ad) != 0)
|
||||||
|
return -1;
|
||||||
|
snprintf(properties->name, sizeof(properties->name), "%s", ad.name);
|
||||||
|
snprintf(properties->version, sizeof(properties->version), "%s",
|
||||||
|
ad.version);
|
||||||
|
snprintf(properties->device, sizeof(properties->device), "%s",
|
||||||
|
ad.config);
|
||||||
|
#else
|
||||||
|
struct mixer_info mi;
|
||||||
|
int version;
|
||||||
|
|
||||||
|
if(ioctl(mixer->fd, SOUND_MIXER_INFO, &mi) != 0
|
||||||
|
|| ioctl(mixer->fd, OSS_GETVERSION, &version) != 0)
|
||||||
|
return -1;
|
||||||
|
snprintf(properties->name, sizeof(properties->name), "%s", mi.name);
|
||||||
|
snprintf(properties->version, sizeof(properties->version), "%u.%u",
|
||||||
|
(version >> 16) & 0xffff, version & 0xffff);
|
||||||
|
snprintf(properties->device, sizeof(properties->device), "%s",
|
||||||
|
mixer->device);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user