jeyzu pushed a commit to branch devs/jeyzu/mixer.

commit a907e1d8abfd00c3e64b82ea5cbcf92edd6292c0
Author: Jérémy Zurcher <[email protected]>
Date:   Wed Feb 27 15:24:30 2013 +0100

    mixer: use E_Mixer_Channel_Info as subsystem fct param
    
    E_Mixer_Channel is only used within audio subsystems
    e_mod_mixer_channel_info_get_by_name returns a E_Mixer_Channel_Info
    use e_mod_mixer_channel_info_free to free a single channel_info
---
 src/modules/mixer/app_mixer.c   | 16 +++----
 src/modules/mixer/e_mod_main.c  |  8 ++--
 src/modules/mixer/e_mod_main.h  |  2 +-
 src/modules/mixer/e_mod_mixer.c | 17 +++++---
 src/modules/mixer/e_mod_mixer.h | 63 +++++++++++++--------------
 src/modules/mixer/sys_alsa.c    | 95 +++++++++++++++++++++--------------------
 src/modules/mixer/sys_dummy.c   | 40 +++++++++--------
 src/modules/mixer/sys_pulse.c   | 37 ++++++++--------
 8 files changed, 145 insertions(+), 133 deletions(-)

diff --git a/src/modules/mixer/app_mixer.c b/src/modules/mixer/app_mixer.c
index c9133be..5374680 100644
--- a/src/modules/mixer/app_mixer.c
+++ b/src/modules/mixer/app_mixer.c
@@ -65,7 +65,7 @@ _cb_changed_left(void *data, Evas_Object *obj __UNUSED__)
                                       state->right);
      }
 
-   e_mod_mixer_volume_set(app->sys, app->channel_info->id,
+   e_mod_mixer_volume_set(app->sys, app->channel_info,
                           state->left, state->right);
 }
 
@@ -83,7 +83,7 @@ _cb_changed_right(void *data, Evas_Object *obj __UNUSED__)
                                       state->left);
      }
 
-   e_mod_mixer_volume_set(app->sys, app->channel_info->id,
+   e_mod_mixer_volume_set(app->sys, app->channel_info,
                           state->left, state->right);
 }
 
@@ -92,7 +92,7 @@ _cb_changed_mute(void *data, Evas_Object *obj __UNUSED__)
 {
    E_Mixer_App_Dialog_Data *app = data;
 
-   e_mod_mixer_mute_set(app->sys, app->channel_info->id, app->state.mute);
+   e_mod_mixer_mute_set(app->sys, app->channel_info, app->state.mute);
 }
 
 static void
@@ -112,7 +112,7 @@ _cb_changed_lock_sliders(void *data, Evas_Object *obj 
__UNUSED__)
 
    e_widget_slider_value_int_set(app->ui.channel_editor.left, state->left);
    e_widget_slider_value_int_set(app->ui.channel_editor.right, state->right);
-   e_mod_mixer_volume_set(app->sys, app->channel_info->id,
+   e_mod_mixer_volume_set(app->sys, app->channel_info,
                           state->left, state->right);
 }
 
@@ -148,7 +148,7 @@ _update_channel_editor_state(E_Mixer_App_Dialog_Data *app, 
const E_Mixer_Channel
    e_widget_slider_value_int_set(ui->left, state.left);
    e_widget_slider_value_int_set(ui->right, state.right);
 
-   if (e_mod_mixer_mutable_get(app->sys, app->channel_info->id))
+   if (e_mod_mixer_mutable_get(app->sys, app->channel_info))
      {
         e_widget_disabled_set(ui->mute, 0);
         e_widget_check_checked_set(ui->mute, state.mute);
@@ -180,12 +180,12 @@ _populate_channel_editor(E_Mixer_App_Dialog_Data *app)
 
    e_widget_entry_text_set(ui->channel, app->channel_name);
 
-   if (e_mod_mixer_capture_get(app->sys, app->channel_info->id))
+   if (e_mod_mixer_capture_get(app->sys, app->channel_info))
      e_widget_entry_text_set(ui->type, _("Capture"));
    else
      e_widget_entry_text_set(ui->type, _("Playback"));
 
-   e_mod_mixer_state_get(app->sys, app->channel_info->id, &state);
+   e_mod_mixer_state_get(app->sys, app->channel_info, &state);
    _update_channel_editor_state(app, state);
 
    app->lock_sliders = (state.left == state.right);
@@ -212,7 +212,7 @@ _cb_system_update(void *data, E_Mixer_System *sys 
__UNUSED__)
    if ((!app->sys) || (!app->channel_info))
      return 1;
 
-   e_mod_mixer_state_get(app->sys, app->channel_info->id, &state);
+   e_mod_mixer_state_get(app->sys, app->channel_info, &state);
    _update_channel_editor_state(app, state);
 
    return 1;
diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c
index 2b1a7fd..99991fa 100644
--- a/src/modules/mixer/e_mod_main.c
+++ b/src/modules/mixer/e_mod_main.c
@@ -783,7 +783,7 @@ _mixer_sys_setup(E_Mixer_Instance *inst)
         return 0;
      }
 
-   inst->channel = e_mod_mixer_channel_get_by_name(inst->sys, 
conf->channel_name);
+   inst->channel = e_mod_mixer_channel_info_get_by_name(inst->sys, 
conf->channel_name);
    return !!inst->channel;
 }
 
@@ -855,7 +855,7 @@ _mixer_sys_setup_default_channel(E_Mixer_Instance *inst)
    if (!channel_name)
      goto error;
 
-   inst->channel = e_mod_mixer_channel_get_by_name(inst->sys, channel_name);
+   inst->channel = e_mod_mixer_channel_info_get_by_name(inst->sys, 
channel_name);
    if (!inst->channel)
      goto system_error;
 
@@ -915,7 +915,7 @@ e_mod_mixer_pulse_ready(Eina_Bool ready)
      {
         EINA_LIST_FOREACH(ctxt->instances, l, inst)
           {
-             e_mod_mixer_channel_del(inst->channel);
+             e_mod_mixer_channel_info_free(inst->channel);
              e_mod_mixer_del(inst->sys);
              inst->channel = NULL;
              inst->sys = NULL;
@@ -1074,7 +1074,7 @@ _gc_shutdown(E_Gadcon_Client *gcc)
    inst->conf->state.left = inst->mixer_state.left;
    inst->conf->state.right = inst->mixer_state.right;
    evas_object_del(inst->ui.gadget);
-   e_mod_mixer_channel_del(inst->channel);
+   e_mod_mixer_channel_info_free(inst->channel);
    e_mod_mixer_del(inst->sys);
 
    inst->conf->instance = NULL;
diff --git a/src/modules/mixer/e_mod_main.h b/src/modules/mixer/e_mod_main.h
index a7af108..5781426 100644
--- a/src/modules/mixer/e_mod_main.h
+++ b/src/modules/mixer/e_mod_main.h
@@ -50,7 +50,7 @@ typedef struct E_Mixer_Instance
    } ui;
 
    E_Mixer_System *sys;
-   E_Mixer_Channel *channel;
+   E_Mixer_Channel_Info *channel;
    E_Mixer_Channel_State mixer_state;
    E_Mixer_Gadget_Config *conf;
 
diff --git a/src/modules/mixer/e_mod_mixer.c b/src/modules/mixer/e_mod_mixer.c
index 67a3f28..76037d4 100644
--- a/src/modules/mixer/e_mod_mixer.c
+++ b/src/modules/mixer/e_mod_mixer.c
@@ -11,10 +11,8 @@ E_Mixer_Capture_Cb e_mod_mixer_capture_get;
 E_Mixer_Cb e_mod_mixer_new;
 E_Mixer_Cb e_mod_mixer_del;
 E_Mixer_Cb e_mod_mixer_channel_default_name_get;
-E_Mixer_Cb e_mod_mixer_channel_get_by_name;
+E_Mixer_Cb e_mod_mixer_channel_info_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_get;
 E_Mixer_Cb e_mod_mixer_channel_names_get;
 E_Mixer_Cb e_mod_mixer_card_name_get;
@@ -34,9 +32,8 @@ e_mixer_default_setup(void)
    e_mod_mixer_new = (void *)e_mixer_system_new;
    e_mod_mixer_del = (void *)e_mixer_system_del;
    e_mod_mixer_channel_default_name_get = (void 
*)e_mixer_system_get_default_channel_name;
-   e_mod_mixer_channel_get_by_name = (void 
*)e_mixer_system_get_channel_by_name;
+   e_mod_mixer_channel_info_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_get = (void *)e_mixer_system_get_channels;
    e_mod_mixer_channel_names_get = (void *)e_mixer_system_get_channel_names;
    e_mod_mixer_card_name_get = (void *)e_mixer_system_get_card_name;
@@ -58,9 +55,8 @@ e_mixer_pulse_setup()
    e_mod_mixer_new = (void *)e_mixer_pulse_new;
    e_mod_mixer_del = (void *)e_mixer_pulse_del;
    e_mod_mixer_channel_default_name_get = (void 
*)e_mixer_pulse_get_default_channel_name;
-   e_mod_mixer_channel_get_by_name = (void *)e_mixer_pulse_get_channel_by_name;
+   e_mod_mixer_channel_info_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_get = (void *)e_mixer_pulse_get_channels;
    e_mod_mixer_channel_names_get = (void *)e_mixer_pulse_get_channel_names;
    e_mod_mixer_card_name_get = (void *)e_mixer_pulse_get_card_name;
@@ -82,6 +78,13 @@ _channel_info_cmp(const void *data_a, const void *data_b)
    return strcmp(a->name, b->name);
 }
 
+void e_mod_mixer_channel_info_free(E_Mixer_Channel_Info* info)
+{
+   if (!info) return;
+   eina_stringshare_del(info->name);
+   free(info);
+}
+
 Eina_List *
 e_mod_mixer_channel_infos_get(E_Mixer_System *sys)
 {
diff --git a/src/modules/mixer/e_mod_mixer.h b/src/modules/mixer/e_mod_mixer.h
index 41f57ca..3e8abf9 100644
--- a/src/modules/mixer/e_mod_mixer.h
+++ b/src/modules/mixer/e_mod_mixer.h
@@ -22,12 +22,12 @@ typedef struct _E_Mixer_Channel_Info
    E_Mixer_App             *app;
 } E_Mixer_Channel_Info;
 
-typedef int (*E_Mixer_Volume_Set_Cb)(E_Mixer_System *, E_Mixer_Channel *, int, 
int);
-typedef int (*E_Mixer_Volume_Get_Cb)(E_Mixer_System *, E_Mixer_Channel *, int 
*, int *);
-typedef int (*E_Mixer_Mute_Get_Cb)(E_Mixer_System *, E_Mixer_Channel *, int *);
-typedef int (*E_Mixer_Mute_Set_Cb)(E_Mixer_System *, E_Mixer_Channel *, int);
-typedef int (*E_Mixer_State_Get_Cb)(E_Mixer_System *, E_Mixer_Channel *, 
E_Mixer_Channel_State *);
-typedef int (*E_Mixer_Capture_Cb)(E_Mixer_System *, E_Mixer_Channel *);
+typedef int (*E_Mixer_Volume_Set_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *, 
int, int);
+typedef int (*E_Mixer_Volume_Get_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *, 
int *, int *);
+typedef int (*E_Mixer_Mute_Get_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *, 
int *);
+typedef int (*E_Mixer_Mute_Set_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *, 
int);
+typedef int (*E_Mixer_State_Get_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *, 
E_Mixer_Channel_State *);
+typedef int (*E_Mixer_Capture_Cb)(E_Mixer_System *, E_Mixer_Channel_Info *);
 typedef void *(*E_Mixer_Cb)();
 
 extern Eina_Bool _mixer_using_default;
@@ -41,15 +41,14 @@ extern E_Mixer_Capture_Cb e_mod_mixer_capture_get;
 extern E_Mixer_Cb e_mod_mixer_new;
 extern E_Mixer_Cb e_mod_mixer_del;
 extern E_Mixer_Cb e_mod_mixer_channel_default_name_get;
-extern E_Mixer_Cb e_mod_mixer_channel_get_by_name;
+extern E_Mixer_Cb e_mod_mixer_channel_info_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_channel_names_get;
 extern E_Mixer_Cb e_mod_mixer_card_name_get;
 extern E_Mixer_Cb e_mod_mixer_card_names_get;
 extern E_Mixer_Cb e_mod_mixer_card_default_get;
 
+void e_mod_mixer_channel_info_free(E_Mixer_Channel_Info*);
 Eina_List *e_mod_mixer_channel_infos_get(E_Mixer_System *sys);
 void e_mod_mixer_channel_infos_free(Eina_List*);
 void e_mod_mixer_channel_names_free(Eina_List*);
@@ -67,23 +66,22 @@ void e_mixer_system_del(E_Mixer_System *self);
 Eina_List *e_mixer_system_get_cards(void);
 const char *e_mixer_system_get_default_card(void);
 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);
+const char *e_mixer_system_get_channel_name(E_Mixer_System *self, 
E_Mixer_Channel_Info *channel);
 
 Eina_List *e_mixer_system_get_channels(E_Mixer_System *self);
 Eina_List *e_mixer_system_get_channel_names(E_Mixer_System *self);
 
 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);
-void e_mixer_system_channel_del(E_Mixer_Channel *channel);
-
-int e_mixer_system_has_capture(E_Mixer_System *self, E_Mixer_Channel *channel);
-int e_mixer_system_get_volume(E_Mixer_System *self, E_Mixer_Channel *channel, 
int *left, int *right);
-int e_mixer_system_set_volume(E_Mixer_System *self, E_Mixer_Channel *channel, 
int left, int right);
-int e_mixer_system_can_mute(E_Mixer_System *self, E_Mixer_Channel *channel);
-int e_mixer_system_get_mute(E_Mixer_System *self, E_Mixer_Channel *channel, 
int *mute);
-int e_mixer_system_set_mute(E_Mixer_System *self, E_Mixer_Channel *channel, 
int mute);
-int e_mixer_system_get_state(E_Mixer_System *self, E_Mixer_Channel *channel, 
E_Mixer_Channel_State *state);
-int e_mixer_system_set_state(E_Mixer_System *self, E_Mixer_Channel *channel, 
const E_Mixer_Channel_State *state);
+E_Mixer_Channel_Info *e_mixer_system_get_channel_by_name(E_Mixer_System *self, 
const char *name);
+
+int e_mixer_system_has_capture(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel);
+int e_mixer_system_get_volume(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int *left, int *right);
+int e_mixer_system_set_volume(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int left, int right);
+int e_mixer_system_can_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel);
+int e_mixer_system_get_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int *mute);
+int e_mixer_system_set_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int mute);
+int e_mixer_system_get_state(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, E_Mixer_Channel_State *state);
+int e_mixer_system_set_state(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, const E_Mixer_Channel_State *state);
 
 /* PULSE */
 int pulse_init(void);
@@ -97,23 +95,22 @@ void e_mixer_pulse_del(E_Mixer_System *self);
 Eina_List *e_mixer_pulse_get_cards(void);
 const char *e_mixer_pulse_get_default_card(void);
 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);
+const char *e_mixer_pulse_get_channel_name(E_Mixer_System *self, 
E_Mixer_Channel_Info *channel);
 
 Eina_List *e_mixer_pulse_get_channels(E_Mixer_System *self);
 Eina_List *e_mixer_pulse_get_channel_names(E_Mixer_System *self);
 
 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);
-void e_mixer_pulse_channel_del(E_Mixer_Channel *channel);
-
-int e_mixer_pulse_has_capture(E_Mixer_System *self, E_Mixer_Channel *channel);
-int e_mixer_pulse_get_volume(E_Mixer_System *self, E_Mixer_Channel *channel, 
int *left, int *right);
-int e_mixer_pulse_set_volume(E_Mixer_System *self, E_Mixer_Channel *channel, 
int left, int right);
-int e_mixer_pulse_can_mute(E_Mixer_System *self, E_Mixer_Channel *channel);
-int e_mixer_pulse_get_mute(E_Mixer_System *self, E_Mixer_Channel *channel, int 
*mute);
-int e_mixer_pulse_set_mute(E_Mixer_System *self, E_Mixer_Channel *channel, int 
mute);
-int e_mixer_pulse_get_state(E_Mixer_System *self, E_Mixer_Channel *channel, 
E_Mixer_Channel_State *state);
-int e_mixer_pulse_set_state(E_Mixer_System *self, E_Mixer_Channel *channel, 
const E_Mixer_Channel_State *state);
+E_Mixer_Channel_Info *e_mixer_pulse_get_channel_by_name(E_Mixer_System *self, 
const char *name);
+
+int e_mixer_pulse_has_capture(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel);
+int e_mixer_pulse_get_volume(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int *left, int *right);
+int e_mixer_pulse_set_volume(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int left, int right);
+int e_mixer_pulse_can_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel);
+int e_mixer_pulse_get_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int *mute);
+int e_mixer_pulse_set_mute(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, int mute);
+int e_mixer_pulse_get_state(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, E_Mixer_Channel_State *state);
+int e_mixer_pulse_set_state(E_Mixer_System *self, E_Mixer_Channel_Info 
*channel, const E_Mixer_Channel_State *state);
 
 /**
  * @addtogroup Optional_Devices
diff --git a/src/modules/mixer/sys_alsa.c b/src/modules/mixer/sys_alsa.c
index 4b02968..bd1e53b 100644
--- a/src/modules/mixer/sys_alsa.c
+++ b/src/modules/mixer/sys_alsa.c
@@ -383,12 +383,13 @@ e_mixer_system_get_default_channel_name(E_Mixer_System 
*self)
    return NULL;
 }
 
-E_Mixer_Channel *
+E_Mixer_Channel_Info *
 e_mixer_system_get_channel_by_name(E_Mixer_System *self,
                                    const char *name)
 {
    snd_mixer_elem_t *elem;
    snd_mixer_selem_id_t *sid;
+   E_Mixer_Channel_Info *ch_info;
 
    if ((!self) || (!name))
      return NULL;
@@ -406,29 +407,31 @@ e_mixer_system_get_channel_by_name(E_Mixer_System *self,
         snd_mixer_selem_get_id(elem, sid);
         n = snd_mixer_selem_id_get_name(sid);
         if (n && (strcmp(n, name) == 0))
-          return elem;
+          {
+             ch_info = malloc(sizeof(*ch_info));
+             ch_info->id = elem;
+             ch_info->name = eina_stringshare_add(n);
+             ch_info->has_capture = snd_mixer_selem_has_capture_switch(elem) 
|| snd_mixer_selem_has_capture_volume(elem);
+
+             return ch_info;
+          }
      }
 
    return NULL;
 }
 
-void
-e_mixer_system_channel_del(E_Mixer_Channel *channel __UNUSED__)
-{
-}
-
 const char *
 e_mixer_system_get_channel_name(E_Mixer_System *self,
-                                E_Mixer_Channel *channel)
+                                E_Mixer_Channel_Info *channel)
 {
    snd_mixer_selem_id_t *sid;
    const char *name;
 
-   if ((!self) || (!channel))
+   if ((!self) || (!channel) || (!channel->id) )
      return NULL;
 
    snd_mixer_selem_id_alloca(&sid);
-   snd_mixer_selem_get_id(channel, sid);
+   snd_mixer_selem_get_id(channel->id, sid);
    name = eina_stringshare_add(snd_mixer_selem_id_get_name(sid));
 
    return name;
@@ -436,33 +439,33 @@ e_mixer_system_get_channel_name(E_Mixer_System *self,
 
 int
 e_mixer_system_get_volume(E_Mixer_System *self,
-                          E_Mixer_Channel *channel,
+                          E_Mixer_Channel_Info *channel,
                           int *left,
                           int *right)
 {
    long lvol, rvol, range, min, max;
 
-   if ((!self) || (!channel) || (!left) || (!right))
+   if ((!self) || (!channel) || (!channel->id) || (!left) || (!right))
      return 0;
 
    snd_mixer_handle_events(self);
-   snd_mixer_selem_get_playback_volume_range(channel, &min, &max);
+   snd_mixer_selem_get_playback_volume_range(channel->id, &min, &max);
    range = max - min;
    if (range < 1)
      return 0;
 
-   if (snd_mixer_selem_has_playback_channel(channel, 0))
-     snd_mixer_selem_get_playback_volume(channel, 0, &lvol);
+   if (snd_mixer_selem_has_playback_channel(channel->id, 0))
+     snd_mixer_selem_get_playback_volume(channel->id, 0, &lvol);
    else
      lvol = min;
 
-   if (snd_mixer_selem_has_playback_channel(channel, 1))
-     snd_mixer_selem_get_playback_volume(channel, 1, &rvol);
+   if (snd_mixer_selem_has_playback_channel(channel->id, 1))
+     snd_mixer_selem_get_playback_volume(channel->id, 1, &rvol);
    else
      rvol = min;
 
-   if (snd_mixer_selem_is_playback_mono(channel) ||
-       snd_mixer_selem_has_playback_volume_joined(channel))
+   if (snd_mixer_selem_is_playback_mono(channel->id) ||
+       snd_mixer_selem_has_playback_volume_joined(channel->id))
      rvol = lvol;
 
    *left = rint((double)(lvol - min) * 100 / (double)range);
@@ -473,18 +476,18 @@ e_mixer_system_get_volume(E_Mixer_System *self,
 
 int
 e_mixer_system_set_volume(E_Mixer_System *self,
-                          E_Mixer_Channel *channel,
+                          E_Mixer_Channel_Info *channel,
                           int left,
                           int right)
 {
    long range, min, max, divide;
    int mode;
 
-   if ((!self) || (!channel))
+   if ((!self) || (!channel) || (!channel->id))
      return 0;
 
    snd_mixer_handle_events(self);
-   snd_mixer_selem_get_playback_volume_range(channel, &min, &max);
+   snd_mixer_selem_get_playback_volume_range(channel->id, &min, &max);
    divide = 100 + min;
    if (divide == 0)
      {
@@ -510,14 +513,14 @@ e_mixer_system_set_volume(E_Mixer_System *self,
      }
 
    if (mode & 1)
-     snd_mixer_selem_set_playback_volume(channel, 0, left);
+     snd_mixer_selem_set_playback_volume(channel->id, 0, left);
 
-   if ((!snd_mixer_selem_is_playback_mono(channel)) &&
-       (!snd_mixer_selem_has_playback_volume_joined(channel)) &&
+   if ((!snd_mixer_selem_is_playback_mono(channel->id)) &&
+       (!snd_mixer_selem_has_playback_volume_joined(channel->id)) &&
        (mode & 2))
      {
-        if (snd_mixer_selem_has_playback_channel(channel, 1))
-          snd_mixer_selem_set_playback_volume(channel, 1, right);
+        if (snd_mixer_selem_has_playback_channel(channel->id, 1))
+          snd_mixer_selem_set_playback_volume(channel->id, 1, right);
      }
 
    return 1;
@@ -525,34 +528,34 @@ e_mixer_system_set_volume(E_Mixer_System *self,
 
 int
 e_mixer_system_can_mute(E_Mixer_System *self,
-                        E_Mixer_Channel *channel)
+                        E_Mixer_Channel_Info *channel)
 {
-   if ((!self) || (!channel))
+   if ((!self) || (!channel) || (!channel->id))
      return 0;
 
    snd_mixer_handle_events(self);
-   return snd_mixer_selem_has_playback_switch(channel) ||
-          snd_mixer_selem_has_playback_switch_joined(channel);
+   return snd_mixer_selem_has_playback_switch(channel->id) ||
+          snd_mixer_selem_has_playback_switch_joined(channel->id);
 }
 
 int
 e_mixer_system_get_mute(E_Mixer_System *self,
-                        E_Mixer_Channel *channel,
+                        E_Mixer_Channel_Info *channel,
                         int *mute)
 {
-   if ((!self) || (!channel) || (!mute))
+   if ((!self) || (!channel) || (!channel->id) || (!mute))
      return 0;
 
    snd_mixer_handle_events(self);
-   if (snd_mixer_selem_has_playback_switch(channel) ||
-       snd_mixer_selem_has_playback_switch_joined(channel))
+   if (snd_mixer_selem_has_playback_switch(channel->id) ||
+       snd_mixer_selem_has_playback_switch_joined(channel->id))
      {
         int m;
 
         /* XXX: not checking for return, always returns 0 even if it worked.
          * alsamixer also don't check it. Bug?
          */
-        snd_mixer_selem_get_playback_switch(channel, 0, &m);
+        snd_mixer_selem_get_playback_switch(channel->id, 0, &m);
         *mute = !m;
      }
    else
@@ -563,23 +566,23 @@ e_mixer_system_get_mute(E_Mixer_System *self,
 
 int
 e_mixer_system_set_mute(E_Mixer_System *self,
-                        E_Mixer_Channel *channel,
+                        E_Mixer_Channel_Info *channel,
                         int mute)
 {
-   if ((!self) || (!channel))
+   if ((!self) || (!channel) || (!channel->id))
      return 0;
 
    snd_mixer_handle_events(self);
-   if (snd_mixer_selem_has_playback_switch(channel) ||
-       snd_mixer_selem_has_playback_switch_joined(channel))
-     return snd_mixer_selem_set_playback_switch_all(channel, !mute);
+   if (snd_mixer_selem_has_playback_switch(channel->id) ||
+       snd_mixer_selem_has_playback_switch_joined(channel->id))
+     return snd_mixer_selem_set_playback_switch_all(channel->id, !mute);
    else
      return 0;
 }
 
 int
 e_mixer_system_get_state(E_Mixer_System *self,
-                         E_Mixer_Channel *channel,
+                         E_Mixer_Channel_Info *channel,
                          E_Mixer_Channel_State *state)
 {
    int r;
@@ -594,7 +597,7 @@ e_mixer_system_get_state(E_Mixer_System *self,
 
 int
 e_mixer_system_set_state(E_Mixer_System *self,
-                         E_Mixer_Channel *channel,
+                         E_Mixer_Channel_Info *channel,
                          const E_Mixer_Channel_State *state)
 {
    int r;
@@ -609,11 +612,11 @@ e_mixer_system_set_state(E_Mixer_System *self,
 
 int
 e_mixer_system_has_capture(E_Mixer_System *self,
-                           E_Mixer_Channel *channel)
+                           E_Mixer_Channel_Info *channel)
 {
-   if ((!self) || (!channel))
+   if ((!self) || (!channel) || (!channel->id))
      return 0;
 
-   return snd_mixer_selem_has_capture_switch(channel) || 
snd_mixer_selem_has_capture_volume(channel);
+   return snd_mixer_selem_has_capture_switch(channel->id) || 
snd_mixer_selem_has_capture_volume(channel->id);
 }
 
diff --git a/src/modules/mixer/sys_dummy.c b/src/modules/mixer/sys_dummy.c
index 44345fc..59ece7d 100644
--- a/src/modules/mixer/sys_dummy.c
+++ b/src/modules/mixer/sys_dummy.c
@@ -90,35 +90,41 @@ e_mixer_system_get_default_channel_name(E_Mixer_System 
*self __UNUSED__)
    return eina_stringshare_ref(_name);
 }
 
-E_Mixer_Channel *
+E_Mixer_Channel_Info *
 e_mixer_system_get_channel_by_name(E_Mixer_System *self __UNUSED__, const char 
*name)
 {
+   E_Mixer_Channel_Info *ch_info;
+
    _e_mixer_dummy_set();
 
    if (name == _name || strcmp(name, _name) == 0)
-     return (E_Mixer_Channel *)-2;
+     {
+        ch_info = malloc(sizeof(*ch_info));
+        ch_info->id = (void*)-2;
+        ch_info->name = eina_stringshare_ref(_name);
+        ch_info->has_capture = 0;
+
+        return ch_info;
+     }
    else
      return NULL;
 }
 
-void
-e_mixer_system_channel_del(E_Mixer_Channel *channel __UNUSED__)
-{
-}
-
 const char *
-e_mixer_system_get_channel_name(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel *channel)
+e_mixer_system_get_channel_name(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel_Info *channel)
 {
    _e_mixer_dummy_set();
 
-   if (channel == (E_Mixer_Channel *)-2)
+   if (!channel)
+     return NULL;
+   if (channel->id == (E_Mixer_Channel *)-2)
      return eina_stringshare_ref(_name);
    else
      return NULL;
 }
 
 int
-e_mixer_system_get_volume(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, int *left, int *right)
+e_mixer_system_get_volume(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel_Info *channel __UNUSED__, int *left, int *right)
 {
    if (left)
      *left = 0;
@@ -129,19 +135,19 @@ e_mixer_system_get_volume(E_Mixer_System *self 
__UNUSED__, E_Mixer_Channel *chan
 }
 
 int
-e_mixer_system_set_volume(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, int left __UNUSED__, int right __UNUSED__)
+e_mixer_system_set_volume(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel_Info *channel __UNUSED__, int left __UNUSED__, int right 
__UNUSED__)
 {
    return 0;
 }
 
 int
-e_mixer_system_can_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__)
+e_mixer_system_can_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__)
 {
    return 1;
 }
 
 int
-e_mixer_system_get_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, int *mute)
+e_mixer_system_get_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__, int *mute)
 {
    if (mute)
      *mute = 1;
@@ -150,13 +156,13 @@ e_mixer_system_get_mute(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel *channe
 }
 
 int
-e_mixer_system_set_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, int mute __UNUSED__)
+e_mixer_system_set_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__, int mute __UNUSED__)
 {
    return 0;
 }
 
 int
-e_mixer_system_get_state(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, E_Mixer_Channel_State *state)
+e_mixer_system_get_state(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__, E_Mixer_Channel_State *state)
 {
    const E_Mixer_Channel_State def = {1, 0, 0};
 
@@ -167,13 +173,13 @@ e_mixer_system_get_state(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel *chann
 }
 
 int
-e_mixer_system_set_state(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__, const E_Mixer_Channel_State *state __UNUSED__)
+e_mixer_system_set_state(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__, const E_Mixer_Channel_State *state __UNUSED__)
 {
    return 0;
 }
 
 int
-e_mixer_system_has_capture(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__)
+e_mixer_system_has_capture(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel_Info *channel __UNUSED__)
 {
    return 0;
 }
diff --git a/src/modules/mixer/sys_pulse.c b/src/modules/mixer/sys_pulse.c
index 881766f..0113323 100644
--- a/src/modules/mixer/sys_pulse.c
+++ b/src/modules/mixer/sys_pulse.c
@@ -297,11 +297,12 @@ static Eina_Bool
 _pulse_queue_process(const Eina_Hash *h EINA_UNUSED, const char *key, 
E_Mixer_Channel_State *state, void *d EINA_UNUSED)
 {
    Eina_List *l, *list[2] = {sinks, sources};
-   void *s, *ch;
+   E_Mixer_Channel_Info ch;
+   void *s;
    int x;
 
    if ((state->mute == -1) && (state->left == -1) && (state->right == -1)) 
return EINA_TRUE;
-   ch = (void*)1;
+   ch.id = (void*)1;
    for (x = 0; x < 2; x++)
      EINA_LIST_FOREACH(list[x], l, s)
        {
@@ -493,26 +494,28 @@ e_mixer_pulse_get_default_channel_name(E_Mixer_System 
*self EINA_UNUSED)
    return eina_stringshare_ref(_name);
 }
 
-E_Mixer_Channel *
+E_Mixer_Channel_Info *
 e_mixer_pulse_get_channel_by_name(E_Mixer_System *self EINA_UNUSED, const char 
*name EINA_UNUSED)
 {
-   return (E_Mixer_Channel *)1;
-}
+   E_Mixer_Channel_Info *ch_info;
 
-void
-e_mixer_pulse_channel_del(E_Mixer_Channel *channel __UNUSED__)
-{
+   ch_info = malloc(sizeof(*ch_info));
+   ch_info->id = (void*)1;
+   ch_info->name = eina_stringshare_ref(_name);
+   ch_info->has_capture = 0;
+
+   return ch_info;
 }
 
 const char *
-e_mixer_pulse_get_channel_name(E_Mixer_System *self EINA_UNUSED, 
E_Mixer_Channel *channel)
+e_mixer_pulse_get_channel_name(E_Mixer_System *self EINA_UNUSED, 
E_Mixer_Channel_Info *channel)
 {
    if (!channel) return NULL;
    return eina_stringshare_ref(_name);
 }
 
 int
-e_mixer_pulse_get_volume(E_Mixer_System *self, E_Mixer_Channel *channel, int 
*left, int *right)
+e_mixer_pulse_get_volume(E_Mixer_System *self, E_Mixer_Channel_Info *channel, 
int *left, int *right)
 {
    double volume;
    int x, n;
@@ -536,7 +539,7 @@ e_mixer_pulse_get_volume(E_Mixer_System *self, 
E_Mixer_Channel *channel, int *le
 }
 
 int
-e_mixer_pulse_set_volume(E_Mixer_System *self, E_Mixer_Channel *channel, int 
left, int right)
+e_mixer_pulse_set_volume(E_Mixer_System *self, E_Mixer_Channel_Info *channel, 
int left, int right)
 {
    uint32_t id = 0;
    int x, n;
@@ -573,20 +576,20 @@ e_mixer_pulse_set_volume(E_Mixer_System *self, 
E_Mixer_Channel *channel, int lef
 }
 
 int
-e_mixer_pulse_can_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__)
+e_mixer_pulse_can_mute(E_Mixer_System *self __UNUSED__, E_Mixer_Channel_Info 
*channel __UNUSED__)
 {
    return 1;
 }
 
 int
-e_mixer_pulse_get_mute(E_Mixer_System *self, E_Mixer_Channel *channel 
__UNUSED__, int *mute)
+e_mixer_pulse_get_mute(E_Mixer_System *self, E_Mixer_Channel_Info *channel 
__UNUSED__, int *mute)
 {
    if (mute) *mute = pulse_sink_muted_get((void *)self);
    return 1;
 }
 
 int
-e_mixer_pulse_set_mute(E_Mixer_System *self, E_Mixer_Channel *channel 
__UNUSED__, int mute)
+e_mixer_pulse_set_mute(E_Mixer_System *self, E_Mixer_Channel_Info *channel 
__UNUSED__, int mute)
 {
    uint32_t id;
    Eina_Bool source = EINA_FALSE;
@@ -605,7 +608,7 @@ e_mixer_pulse_set_mute(E_Mixer_System *self, 
E_Mixer_Channel *channel __UNUSED__
 }
 
 int
-e_mixer_pulse_get_state(E_Mixer_System *self, E_Mixer_Channel *channel, 
E_Mixer_Channel_State *state)
+e_mixer_pulse_get_state(E_Mixer_System *self, E_Mixer_Channel_Info *channel, 
E_Mixer_Channel_State *state)
 {
    if (!state) return 0;
    if (!channel) return 0;
@@ -615,7 +618,7 @@ e_mixer_pulse_get_state(E_Mixer_System *self, 
E_Mixer_Channel *channel, E_Mixer_
 }
 
 int
-e_mixer_pulse_set_state(E_Mixer_System *self, E_Mixer_Channel *channel, const 
E_Mixer_Channel_State *state)
+e_mixer_pulse_set_state(E_Mixer_System *self, E_Mixer_Channel_Info *channel, 
const E_Mixer_Channel_State *state)
 {
    e_mixer_pulse_set_volume(self, channel, state->left, state->right);
    e_mixer_pulse_set_mute(self, channel, state->mute);
@@ -623,7 +626,7 @@ e_mixer_pulse_set_state(E_Mixer_System *self, 
E_Mixer_Channel *channel, const E_
 }
 
 int
-e_mixer_pulse_has_capture(E_Mixer_System *self __UNUSED__, E_Mixer_Channel 
*channel __UNUSED__)
+e_mixer_pulse_has_capture(E_Mixer_System *self __UNUSED__, 
E_Mixer_Channel_Info *channel __UNUSED__)
 {
    return 0;
 }

-- 

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb

Reply via email to