From 640b339a805ffdfeda4b3ab58ca8089aeff9e6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Mon, 25 Feb 2013 14:09:06 +0100 Subject: [PATCH] mixer: factorise get/free channels info and names E_Mixer_Channel_Info allocated in subsystems, then freed in generic functions in e_mod_mixer.c --- src/modules/mixer/app_mixer.c | 54 ++------------------------------- src/modules/mixer/conf_gadget.c | 4 +-- src/modules/mixer/e_mod_mixer.c | 41 +++++++++++++++++++++++-- src/modules/mixer/e_mod_mixer.h | 10 +++--- src/modules/mixer/sys_alsa.c | 24 +++++---------- src/modules/mixer/sys_dummy.c | 21 +++++-------- src/modules/mixer/sys_pulse.c | 21 +++++-------- 7 files changed, 70 insertions(+), 105 deletions(-) diff --git a/src/modules/mixer/app_mixer.c b/src/modules/mixer/app_mixer.c index 13abff2ae..8579c751a 100644 --- a/src/modules/mixer/app_mixer.c +++ b/src/modules/mixer/app_mixer.c @@ -203,54 +203,6 @@ _cb_channel_selected(void *data) _populate_channel_editor(app); } -static int -_channel_info_cmp(const void *data_a, const void *data_b) -{ - const E_Mixer_Channel_Info *a = data_a, *b = data_b; - - if (a->has_capture < b->has_capture) - return -1; - else if (a->has_capture > b->has_capture) - return 1; - - return strcmp(a->name, b->name); -} - -static Eina_List * -_channels_info_new(E_Mixer_System *sys) -{ - Eina_List *channels, *channels_infos, *l; - - channels = e_mod_mixer_channels_get(sys); - channels_infos = NULL; - for (l = channels; l; l = l->next) - { - E_Mixer_Channel_Info *info; - - info = malloc(sizeof(*info)); - info->id = l->data; - info->name = e_mod_mixer_channel_name_get(sys, info->id); - info->has_capture = e_mod_mixer_capture_get(sys, info->id); - - channels_infos = eina_list_append(channels_infos, info); - } - e_mod_mixer_channels_free(channels); - - return eina_list_sort(channels_infos, -1, _channel_info_cmp); -} - -static void -_channels_info_free(Eina_List *list) -{ - E_Mixer_Channel_Info *info; - - EINA_LIST_FREE(list, info) - { - eina_stringshare_del(info->name); - free(info); - } -} - static int _cb_system_update(void *data, E_Mixer_System *sys __UNUSED__) { @@ -289,8 +241,8 @@ _populate_channels(E_Mixer_App_Dialog_Data *app) app->channel_name = e_mod_mixer_channel_default_name_get(app->sys); if (app->channels_infos) - _channels_info_free(app->channels_infos); - app->channels_infos = _channels_info_new(app->sys); + e_mod_mixer_channels_info_free(app->channels_infos); + app->channels_infos = e_mod_mixer_channels_info_get(app->sys); if (app->channels_infos) { @@ -490,7 +442,7 @@ _mixer_app_dialog_del(E_Dialog *dialog, E_Mixer_App_Dialog_Data *app) if (app->cards) e_mod_mixer_cards_free(app->cards); if (app->channels_infos) - _channels_info_free(app->channels_infos); + e_mod_mixer_channels_info_free(app->channels_infos); e_mod_mixer_del(app->sys); e_util_defer_object_del(E_OBJECT(dialog)); diff --git a/src/modules/mixer/conf_gadget.c b/src/modules/mixer/conf_gadget.c index 795bbc295..238f8d381 100644 --- a/src/modules/mixer/conf_gadget.c +++ b/src/modules/mixer/conf_gadget.c @@ -136,7 +136,7 @@ _free_data(E_Config_Dialog *dialog, E_Config_Dialog_Data *cfdata) eina_stringshare_del(card); if (cfdata->channels_names) - e_mod_mixer_channels_free(cfdata->channels_names); + e_mod_mixer_channels_names_free(cfdata->channels_names); if (cfdata->cards) e_mod_mixer_cards_free(cfdata->cards); @@ -293,7 +293,7 @@ _card_change(void *data, Evas_Object *obj, void *event __UNUSED__) eina_stringshare_del(cfdata->card); - e_mod_mixer_channels_free(cfdata->channels_names); + e_mod_mixer_channels_names_free(cfdata->channels_names); eina_stringshare_del(cfdata->channel_name); diff --git a/src/modules/mixer/e_mod_mixer.c b/src/modules/mixer/e_mod_mixer.c index 7c7e5b09c..6123a2de5 100644 --- a/src/modules/mixer/e_mod_mixer.c +++ b/src/modules/mixer/e_mod_mixer.c @@ -15,7 +15,6 @@ E_Mixer_Cb e_mod_mixer_channel_get_by_name; E_Mixer_Cb e_mod_mixer_channel_name_get; E_Mixer_Cb e_mod_mixer_channel_del; E_Mixer_Cb e_mod_mixer_channel_free; -E_Mixer_Cb e_mod_mixer_channels_free; E_Mixer_Cb e_mod_mixer_channels_get; E_Mixer_Cb e_mod_mixer_channels_names_get; E_Mixer_Cb e_mod_mixer_card_name_get; @@ -39,7 +38,6 @@ e_mixer_default_setup(void) e_mod_mixer_channel_get_by_name = (void *)e_mixer_system_get_channel_by_name; e_mod_mixer_channel_name_get = (void *)e_mixer_system_get_channel_name; e_mod_mixer_channel_del = (void *)e_mixer_system_channel_del; - e_mod_mixer_channels_free = (void *)e_mixer_system_free_channels; e_mod_mixer_channels_get = (void *)e_mixer_system_get_channels; e_mod_mixer_channels_names_get = (void *)e_mixer_system_get_channels_names; e_mod_mixer_card_name_get = (void *)e_mixer_system_get_card_name; @@ -65,7 +63,6 @@ e_mixer_pulse_setup() e_mod_mixer_channel_get_by_name = (void *)e_mixer_pulse_get_channel_by_name; e_mod_mixer_channel_name_get = (void *)e_mixer_pulse_get_channel_name; e_mod_mixer_channel_del = (void *)e_mixer_pulse_channel_del; - e_mod_mixer_channels_free = (void *)e_mixer_pulse_free_channels; e_mod_mixer_channels_get = (void *)e_mixer_pulse_get_channels; e_mod_mixer_channels_names_get = (void *)e_mixer_pulse_get_channels_names; e_mod_mixer_card_name_get = (void *)e_mixer_pulse_get_card_name; @@ -75,3 +72,41 @@ e_mixer_pulse_setup() _mixer_using_default = EINA_FALSE; } +static int +_channel_info_cmp(const void *data_a, const void *data_b) +{ + const E_Mixer_Channel_Info *a = data_a, *b = data_b; + + if (a->has_capture < b->has_capture) + return -1; + else if (a->has_capture > b->has_capture) + return 1; + + return strcmp(a->name, b->name); +} + +Eina_List * +e_mod_mixer_channels_info_get(E_Mixer_System *sys) +{ + return eina_list_sort(e_mod_mixer_channels_get(sys), -1, _channel_info_cmp); +} + +void +e_mod_mixer_channels_info_free(Eina_List *list) +{ + E_Mixer_Channel_Info *info; + + EINA_LIST_FREE(list, info) + { + eina_stringshare_del(info->name); + free(info); + } +} + +void +e_mod_mixer_channels_names_free(Eina_List *list) +{ + const char *str; + EINA_LIST_FREE(list, str) + eina_stringshare_del(str); +} diff --git a/src/modules/mixer/e_mod_mixer.h b/src/modules/mixer/e_mod_mixer.h index 86655d979..3436285db 100644 --- a/src/modules/mixer/e_mod_mixer.h +++ b/src/modules/mixer/e_mod_mixer.h @@ -45,14 +45,16 @@ extern E_Mixer_Cb e_mod_mixer_channel_get_by_name; extern E_Mixer_Cb e_mod_mixer_channel_name_get; extern E_Mixer_Cb e_mod_mixer_channel_del; extern E_Mixer_Cb e_mod_mixer_channel_free; -extern E_Mixer_Cb e_mod_mixer_channels_free; -extern E_Mixer_Cb e_mod_mixer_channels_get; extern E_Mixer_Cb e_mod_mixer_channels_names_get; extern E_Mixer_Cb e_mod_mixer_card_name_get; extern E_Mixer_Cb e_mod_mixer_cards_get; extern E_Mixer_Cb e_mod_mixer_cards_free; extern E_Mixer_Cb e_mod_mixer_card_default_get; +Eina_List *e_mod_mixer_channels_info_get(E_Mixer_System *sys); +void e_mod_mixer_channels_info_free(Eina_List*); +void e_mod_mixer_channels_names_free(Eina_List*); + void e_mixer_default_setup(void); void e_mixer_pulse_setup(); @@ -69,9 +71,7 @@ const char *e_mixer_system_get_card_name(const char *card); const char *e_mixer_system_get_channel_name(E_Mixer_System *self, E_Mixer_Channel *channel); Eina_List *e_mixer_system_get_channels(E_Mixer_System *self); -void e_mixer_system_free_channels(Eina_List *channels); Eina_List *e_mixer_system_get_channels_names(E_Mixer_System *self); -void e_mixer_system_free_channels_names(Eina_List *channels_names); const char *e_mixer_system_get_default_channel_name(E_Mixer_System *self); E_Mixer_Channel *e_mixer_system_get_channel_by_name(E_Mixer_System *self, const char *name); @@ -102,9 +102,7 @@ const char *e_mixer_pulse_get_card_name(const char *card); const char *e_mixer_pulse_get_channel_name(E_Mixer_System *self, E_Mixer_Channel *channel); Eina_List *e_mixer_pulse_get_channels(E_Mixer_System *self); -void e_mixer_pulse_free_channels(Eina_List *channels); Eina_List *e_mixer_pulse_get_channels_names(E_Mixer_System *self); -void e_mixer_pulse_free_channels_names(Eina_List *channels_names); const char *e_mixer_pulse_get_default_channel_name(E_Mixer_System *self); E_Mixer_Channel *e_mixer_pulse_get_channel_by_name(E_Mixer_System *self, const char *name); diff --git a/src/modules/mixer/sys_alsa.c b/src/modules/mixer/sys_alsa.c index 308a8473d..953085241 100644 --- a/src/modules/mixer/sys_alsa.c +++ b/src/modules/mixer/sys_alsa.c @@ -321,18 +321,19 @@ e_mixer_system_get_channels(E_Mixer_System *self) (!snd_mixer_selem_has_playback_volume(elem))) continue; - channels = eina_list_append(channels, elem); + E_Mixer_Channel_Info *ch_info; + + ch_info = malloc(sizeof(*ch_info)); + ch_info->id = elem; + ch_info->name = eina_stringshare_add(snd_mixer_selem_get_name(elem)); + ch_info->has_capture = snd_mixer_selem_has_capture_switch(elem) || snd_mixer_selem_has_capture_volume(elem); + + channels = eina_list_append(channels, ch_info); } return channels; } -void -e_mixer_system_free_channels(Eina_List *channels) -{ - eina_list_free(channels); -} - Eina_List * e_mixer_system_get_channels_names(E_Mixer_System *self) { @@ -363,15 +364,6 @@ e_mixer_system_get_channels_names(E_Mixer_System *self) return channels; } -void -e_mixer_system_free_channels_names(Eina_List *channels_names) -{ - const char *channel; - - EINA_LIST_FREE(channels_names, channel) - eina_stringshare_del(channel); -} - const char * e_mixer_system_get_default_channel_name(E_Mixer_System *self) { diff --git a/src/modules/mixer/sys_dummy.c b/src/modules/mixer/sys_dummy.c index 9d5a069a3..cf1809257 100644 --- a/src/modules/mixer/sys_dummy.c +++ b/src/modules/mixer/sys_dummy.c @@ -67,13 +67,14 @@ e_mixer_system_get_card_name(const char *card) Eina_List * e_mixer_system_get_channels(E_Mixer_System *self __UNUSED__) { - return eina_list_append(NULL, (void *)-2); -} + E_Mixer_Channel_Info *ch_info; -void -e_mixer_system_free_channels(Eina_List *channels) -{ - eina_list_free(channels); + ch_info = malloc(sizeof(*ch_info)); + ch_info->id = (void*)-2; + ch_info->name = eina_stringshare_ref(_name); + ch_info->has_capture = 0; + + return eina_list_append(NULL, ch_info); } Eina_List * @@ -81,13 +82,7 @@ e_mixer_system_get_channels_names(E_Mixer_System *self __UNUSED__) { _e_mixer_dummy_set(); - return eina_list_append(NULL, _name); -} - -void -e_mixer_system_free_channels_names(Eina_List *channels_names) -{ - eina_list_free(channels_names); + return eina_list_append(NULL, eina_stringshare_ref(_name)); } const char * diff --git a/src/modules/mixer/sys_pulse.c b/src/modules/mixer/sys_pulse.c index 34fbd808e..fdc37970d 100644 --- a/src/modules/mixer/sys_pulse.c +++ b/src/modules/mixer/sys_pulse.c @@ -477,13 +477,14 @@ e_mixer_pulse_get_card_name(const char *card) Eina_List * e_mixer_pulse_get_channels(E_Mixer_System *self EINA_UNUSED) { - return eina_list_append(NULL, (void *)(1)); -} + E_Mixer_Channel_Info *ch_info; -void -e_mixer_pulse_free_channels(Eina_List *channels) -{ - eina_list_free(channels); + ch_info = malloc(sizeof(*ch_info)); + ch_info->id = (void*)1; + ch_info->name = eina_stringshare_ref(_name); + ch_info->has_capture = 0; + + return eina_list_append(NULL, ch_info); } Eina_List * @@ -492,14 +493,6 @@ e_mixer_pulse_get_channels_names(E_Mixer_System *self EINA_UNUSED) return eina_list_append(NULL, eina_stringshare_ref(_name)); } -void -e_mixer_pulse_free_channels_names(Eina_List *channels_names) -{ - const char *str; - EINA_LIST_FREE(channels_names, str) - eina_stringshare_del(str); -} - const char * e_mixer_pulse_get_default_channel_name(E_Mixer_System *self EINA_UNUSED) {