mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-09 02:35:43 +01:00
Mux fixes...
This commit is contained in:
parent
095f7b89b3
commit
b25dbffc41
7 changed files with 149 additions and 93 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
1999-08-04 Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||||
|
|
||||||
|
* probe.c: fixed multi haven element problem.
|
||||||
|
|
||||||
|
1999-08-03 Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||||
|
|
||||||
|
* catch.c: fixed mux lock.
|
||||||
|
|
||||||
|
1999-07-30 Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||||
|
|
||||||
|
* conf_w.c: fixed case of cards[i].mixer[j].ee_n = 0.
|
||||||
|
|
||||||
1999-07-19 Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
1999-07-19 Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||||
|
|
||||||
* probe.c: fixed multi mixerdevices.
|
* probe.c: fixed multi mixerdevices.
|
||||||
|
|
9
gamix/README
Normal file
9
gamix/README
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
GTK ALSA audio mixer gamix by Fumihiko Murata <fmurata@p1.tcnet.ne.jp>
|
||||||
|
DaiCom Software
|
||||||
|
|
||||||
|
This is a mixer application for ALSA using GTK.
|
||||||
|
|
||||||
|
If you wait to use internationalized version (supported only Japanese).
|
||||||
|
Check
|
||||||
|
http://www1.tcnet.ne.jp/fmurata/linux/down/
|
||||||
|
and download lastest gamix-*.tar.gz. * is version no.
|
|
@ -13,7 +13,7 @@ static void cb_rb(void *pd ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void element_callback(void *pd,int cmd,snd_mixer_eid_t *eid) {
|
static void element_callback(void *pd,int cmd,snd_mixer_eid_t *eid) {
|
||||||
int i,j,k;
|
int i,j;
|
||||||
gint ccc;
|
gint ccc;
|
||||||
s_group *group;
|
s_group *group;
|
||||||
s_element *e;
|
s_element *e;
|
||||||
|
@ -30,6 +30,20 @@ static void element_callback(void *pd,int cmd,snd_mixer_eid_t *eid) {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
//printf("hoe '%s',%d,%d\n",eid->name,eid->index,eid->type);
|
//printf("hoe '%s',%d,%d\n",eid->name,eid->index,eid->type);
|
||||||
|
for( i=0 ; i < mixer->ee_n ; i++ ) {
|
||||||
|
ee=&mixer->ee[i];
|
||||||
|
if( strcmp(ee->e.e.eid.name,eid->name)==0 &&
|
||||||
|
ee->e.e.eid.index==eid->index ) {
|
||||||
|
snd_mixer_element_read(mixer->handle,&ee->e.e);
|
||||||
|
if( ee->enabled ) {
|
||||||
|
ccc=ee->chain;
|
||||||
|
ee->chain=FALSE;
|
||||||
|
s_e_chk(&ee->e);
|
||||||
|
ee->chain=ccc;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
for( i=0 ; i<mixer->groups.groups ; i++ ) {
|
for( i=0 ; i<mixer->groups.groups ; i++ ) {
|
||||||
group=&mixer->group[i];
|
group=&mixer->group[i];
|
||||||
for( j=0 ; j<group->g.elements ; j++ ) {
|
for( j=0 ; j<group->g.elements ; j++ ) {
|
||||||
|
@ -47,20 +61,6 @@ static void element_callback(void *pd,int cmd,snd_mixer_eid_t *eid) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for( i=0 ; i < mixer->ee_n ; i++ ) {
|
|
||||||
ee=&mixer->ee[i];
|
|
||||||
if( strcmp(ee->e.e.eid.name,eid->name)==0 &&
|
|
||||||
ee->e.e.eid.index==eid->index ) {
|
|
||||||
snd_mixer_element_read(mixer->handle,&ee->e.e);
|
|
||||||
if( ee->enabled ) {
|
|
||||||
ccc=ee->chain;
|
|
||||||
ee->chain=FALSE;
|
|
||||||
s_e_chk(&ee->e);
|
|
||||||
ee->chain=ccc;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
printf("elem hoe %d %s %d %d\n",cmd,eid->name,eid->index,eid->type);
|
printf("elem hoe %d %s %d %d\n",cmd,eid->name,eid->index,eid->type);
|
||||||
|
@ -80,14 +80,14 @@ gint time_callback(gpointer data) {
|
||||||
for( i=0 ; i<card_num ; i++ ) {
|
for( i=0 ; i<card_num ; i++ ) {
|
||||||
for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
|
for( j=0 ; j<cards[i].info.mixerdevs ; j++ ) {
|
||||||
cb_mix.private_data=(void *)&cards[i].mixer[j];
|
cb_mix.private_data=(void *)&cards[i].mixer[j];
|
||||||
snd_mixer_read(cards[i].mixer[j].handle,&cb_mix);
|
err=snd_mixer_read(cards[i].mixer[j].handle,&cb_mix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void s_e_chk( s_element *e ) {
|
void s_e_chk( s_element *e ) {
|
||||||
int i,j,err;
|
int i,j;
|
||||||
switch( e->e.eid.type ) {
|
switch( e->e.eid.type ) {
|
||||||
case SND_MIXER_ETYPE_VOLUME1:
|
case SND_MIXER_ETYPE_VOLUME1:
|
||||||
for( i=0 ; i<e->e.data.volume1.voices; i++ ) {
|
for( i=0 ; i<e->e.data.volume1.voices; i++ ) {
|
||||||
|
|
|
@ -84,7 +84,7 @@ gint conf_win( void ) {
|
||||||
GtkWidget *b;
|
GtkWidget *b;
|
||||||
GtkWidget *vbox,*box,*frame,*hbox,*hhbox,*box1,*box2;
|
GtkWidget *vbox,*box,*frame,*hbox,*hhbox,*box1,*box2;
|
||||||
GtkWidget *nb,*n_label;
|
GtkWidget *nb,*n_label;
|
||||||
unsigned char gname[256];
|
unsigned char gname[40];
|
||||||
GSList *gp;
|
GSList *gp;
|
||||||
|
|
||||||
ok_pushed=FALSE;
|
ok_pushed=FALSE;
|
||||||
|
@ -199,6 +199,7 @@ gint conf_win( void ) {
|
||||||
gtk_widget_show(b);
|
gtk_widget_show(b);
|
||||||
if( k==0 ) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b),
|
if( k==0 ) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b),
|
||||||
TRUE);
|
TRUE);
|
||||||
|
|
||||||
gp=gtk_radio_button_group(GTK_RADIO_BUTTON(b));
|
gp=gtk_radio_button_group(GTK_RADIO_BUTTON(b));
|
||||||
|
|
||||||
b=gtk_radio_button_new_with_label(gp,_("space"));
|
b=gtk_radio_button_new_with_label(gp,_("space"));
|
||||||
|
@ -262,45 +263,48 @@ gint conf_win( void ) {
|
||||||
l++;
|
l++;
|
||||||
gtk_widget_show(hbox);
|
gtk_widget_show(hbox);
|
||||||
}
|
}
|
||||||
ccard[i].m[j].ee_en=(gint *)g_malloc(cards[i].mixer[j].ee_n *
|
if( cards[i].mixer[j].ee_n ) {
|
||||||
sizeof(gint));
|
ccard[i].m[j].ee_en=(gint *)g_malloc(cards[i].mixer[j].ee_n *
|
||||||
if( cards[i].mixer[j].ee_n && ccard[i].m[j].ee_en == NULL) {
|
sizeof(gint));
|
||||||
fprintf(stderr,nomem_msg);
|
if( ccard[i].m[j].ee_en == NULL ) {
|
||||||
g_free(ccard[i].m[j].g_en);
|
fprintf(stderr,nomem_msg);
|
||||||
g_free(ccard[i].m);
|
g_free(ccard[i].m[j].g_en);
|
||||||
g_free(ccard);
|
g_free(ccard[i].m);
|
||||||
return -1;
|
g_free(ccard);
|
||||||
}
|
return -1;
|
||||||
for( k=0 ; k<cards[i].mixer[j].ee_n ; k++ ) {
|
|
||||||
ccard[i].m[j].ee_en[k]=cards[i].mixer[j].ee[k].enable;
|
|
||||||
hbox=gtk_hbox_new(FALSE,2);
|
|
||||||
b=gtk_toggle_button_new();
|
|
||||||
gtk_widget_set_usize(b,10,10);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox),b,FALSE,FALSE,0);
|
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b),
|
|
||||||
ccard[i].m[j].ee_en[k]);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(b),"toggled",
|
|
||||||
GTK_SIGNAL_FUNC(tb_callback),
|
|
||||||
(gpointer)&ccard[i].m[j].ee_en[k]);
|
|
||||||
gtk_widget_show(b);
|
|
||||||
if( cards[i].mixer[j].ee[k].e.e.eid.index > 0 ) {
|
|
||||||
sprintf(gname,"%s %d",
|
|
||||||
cards[i].mixer[j].ee[k].e.e.eid.name,
|
|
||||||
cards[i].mixer[j].ee[k].e.e.eid.index);
|
|
||||||
} else {
|
|
||||||
strcpy(gname,cards[i].mixer[j].ee[k].e.e.eid.name);
|
|
||||||
}
|
}
|
||||||
n_label=gtk_label_new(gname);
|
for( k=0 ; k<cards[i].mixer[j].ee_n ; k++ ) {
|
||||||
gtk_box_pack_start(GTK_BOX(hbox),n_label,FALSE,FALSE,0);
|
ccard[i].m[j].ee_en[k]=cards[i].mixer[j].ee[k].enable;
|
||||||
gtk_widget_show(n_label);
|
hbox=gtk_hbox_new(FALSE,2);
|
||||||
if( (l&1) ) {
|
b=gtk_toggle_button_new();
|
||||||
gtk_box_pack_start(GTK_BOX(box2),hbox,FALSE,FALSE,0);
|
gtk_widget_set_usize(b,10,10);
|
||||||
} else {
|
gtk_box_pack_start(GTK_BOX(hbox),b,FALSE,FALSE,0);
|
||||||
gtk_box_pack_start(GTK_BOX(box1),hbox,FALSE,FALSE,0);
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b),
|
||||||
|
ccard[i].m[j].ee_en[k]);
|
||||||
|
gtk_signal_connect(GTK_OBJECT(b),"toggled",
|
||||||
|
GTK_SIGNAL_FUNC(tb_callback),
|
||||||
|
(gpointer)&ccard[i].m[j].ee_en[k]);
|
||||||
|
gtk_widget_show(b);
|
||||||
|
if( cards[i].mixer[j].ee[k].e.e.eid.index > 0 ) {
|
||||||
|
sprintf(gname,"%s %d",
|
||||||
|
cards[i].mixer[j].ee[k].e.e.eid.name,
|
||||||
|
cards[i].mixer[j].ee[k].e.e.eid.index);
|
||||||
|
} else {
|
||||||
|
strcpy(gname,cards[i].mixer[j].ee[k].e.e.eid.name);
|
||||||
|
}
|
||||||
|
n_label=gtk_label_new(gname);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox),n_label,FALSE,FALSE,0);
|
||||||
|
gtk_widget_show(n_label);
|
||||||
|
if( (l&1) ) {
|
||||||
|
gtk_box_pack_start(GTK_BOX(box2),hbox,FALSE,FALSE,0);
|
||||||
|
} else {
|
||||||
|
gtk_box_pack_start(GTK_BOX(box1),hbox,FALSE,FALSE,0);
|
||||||
|
}
|
||||||
|
l++;
|
||||||
|
gtk_widget_show(hbox);
|
||||||
}
|
}
|
||||||
l++;
|
|
||||||
gtk_widget_show(hbox);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_widget_show(box1);
|
gtk_widget_show(box1);
|
||||||
gtk_widget_show(box2);
|
gtk_widget_show(box2);
|
||||||
gtk_widget_show(hhbox);
|
gtk_widget_show(hhbox);
|
||||||
|
@ -596,8 +600,6 @@ void conf_write(void) {
|
||||||
|
|
||||||
static void chk_cfile( void ) {
|
static void chk_cfile( void ) {
|
||||||
int i,j,k,err;
|
int i,j,k,err;
|
||||||
FILE *fp;
|
|
||||||
DIR *dp;
|
|
||||||
gchar *name;
|
gchar *name;
|
||||||
|
|
||||||
k=strlen(g_get_home_dir());
|
k=strlen(g_get_home_dir());
|
||||||
|
|
|
@ -19,7 +19,7 @@ static void exit_gtk(GtkWidget *w,gpointer data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main( int argc , char **argv ) {
|
int main( int argc , char **argv ) {
|
||||||
int i,j;
|
int i;
|
||||||
gchar *dirname,*filename;
|
gchar *dirname,*filename;
|
||||||
|
|
||||||
i=probe_mixer();
|
i=probe_mixer();
|
||||||
|
@ -141,7 +141,7 @@ void disp_toolbar(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sel_mctype(GtkWidget *w,gpointer n) {
|
static void sel_mctype(GtkWidget *w,gpointer n) {
|
||||||
int i,j;
|
int i;
|
||||||
GtkRequisition rq;
|
GtkRequisition rq;
|
||||||
|
|
||||||
i=(int)n;
|
i=(int)n;
|
||||||
|
@ -157,7 +157,7 @@ static void sel_mctype(GtkWidget *w,gpointer n) {
|
||||||
int disp_mixer( void ) {
|
int disp_mixer( void ) {
|
||||||
int i,j;
|
int i,j;
|
||||||
GtkWidget *n_label;
|
GtkWidget *n_label;
|
||||||
GtkWidget *sep,*frame;
|
GtkWidget *frame;
|
||||||
GtkRequisition rq;
|
GtkRequisition rq;
|
||||||
|
|
||||||
switch( conf.wmode ) {
|
switch( conf.wmode ) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ static void chain_callback2(GtkToggleButton *,s_eelements *);
|
||||||
static gint mk_element(s_element *,GtkBox *);
|
static gint mk_element(s_element *,GtkBox *);
|
||||||
|
|
||||||
static void close_callback(GtkWidget *w,s_mixer *mixer) {
|
static void close_callback(GtkWidget *w,s_mixer *mixer) {
|
||||||
int i,j,err;
|
int i;
|
||||||
s_group *g;
|
s_group *g;
|
||||||
s_eelements *ee;
|
s_eelements *ee;
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ static void volume1_callback(GtkAdjustment *adj,s_element *e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void switch1_callback(GtkToggleButton *b,s_element *e ) {
|
static void switch1_callback(GtkToggleButton *b,s_element *e ) {
|
||||||
int i,j,k,err;
|
int i,j;
|
||||||
|
|
||||||
for( i=0 ; i<e->e.data.switch1.sw; i++ ) {
|
for( i=0 ; i<e->e.data.switch1.sw; i++ ) {
|
||||||
if( b == (GtkToggleButton *)e->w[i] ) break;
|
if( b == (GtkToggleButton *)e->w[i] ) break;
|
||||||
|
@ -108,7 +108,7 @@ static void switch2_callback(GtkToggleButton *b,s_element *e ) {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
e->e.data.switch2.sw=b->active;
|
e->e.data.switch2.sw=b->active;
|
||||||
snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void chain_callback(GtkToggleButton *b,s_group *g ) {
|
static void chain_callback(GtkToggleButton *b,s_group *g ) {
|
||||||
|
@ -150,7 +150,7 @@ static void mux1_callback(GtkItem *item,s_element *e ) {
|
||||||
e->mux[no].index == e->e.data.mux1.poutput[ch].index &&
|
e->mux[no].index == e->e.data.mux1.poutput[ch].index &&
|
||||||
e->mux[no].type == e->e.data.mux1.poutput[ch].type ) return;
|
e->mux[no].type == e->e.data.mux1.poutput[ch].type ) return;
|
||||||
|
|
||||||
if( e->chain ) {
|
if( *e->chain ) {
|
||||||
for( i=0 ; i<e->e.data.mux1.output ; i++ ) {
|
for( i=0 ; i<e->e.data.mux1.output ; i++ ) {
|
||||||
e->e.data.mux1.poutput[i]=e->mux[no];
|
e->e.data.mux1.poutput[i]=e->mux[no];
|
||||||
if( ch != i ) gtk_option_menu_set_history(
|
if( ch != i ) gtk_option_menu_set_history(
|
||||||
|
@ -166,7 +166,7 @@ static void mux1_callback(GtkItem *item,s_element *e ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mux2_callback(GtkItem *item,s_element *e ) {
|
static void mux2_callback(GtkItem *item,s_element *e ) {
|
||||||
int i,no,err;
|
int no,err;
|
||||||
|
|
||||||
no=(int)gtk_object_get_data(GTK_OBJECT(item),"no");
|
no=(int)gtk_object_get_data(GTK_OBJECT(item),"no");
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ static void chain_callback2(GtkToggleButton *b,s_eelements *ee ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget *make_mixer( gint c_n , gint m_n ) {
|
GtkWidget *make_mixer( gint c_n , gint m_n ) {
|
||||||
int i,j,k,l,err;
|
int i,j,err;
|
||||||
GtkWidget *mv_box,*m_name;
|
GtkWidget *mv_box,*m_name;
|
||||||
GtkWidget *s_win;
|
GtkWidget *s_win;
|
||||||
GtkWidget *mh_box;
|
GtkWidget *mh_box;
|
||||||
|
@ -246,9 +246,9 @@ GtkWidget *make_mixer( gint c_n , gint m_n ) {
|
||||||
GtkWidget *iv_box;
|
GtkWidget *iv_box;
|
||||||
GtkWidget *ih_box;
|
GtkWidget *ih_box;
|
||||||
GtkWidget *c_l;
|
GtkWidget *c_l;
|
||||||
char gname[128];
|
char gname[40];
|
||||||
s_mixer *mixer;
|
s_mixer *mixer;
|
||||||
s_group *group;
|
s_group *group=NULL;
|
||||||
s_element *e;
|
s_element *e;
|
||||||
s_eelements *ee;
|
s_eelements *ee;
|
||||||
|
|
||||||
|
@ -440,7 +440,7 @@ GtkWidget *make_mixer( gint c_n , gint m_n ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
gint mk_element(s_element *e,GtkBox *iv_box) {
|
gint mk_element(s_element *e,GtkBox *iv_box) {
|
||||||
int i,j,k,err;
|
int i,j,k;
|
||||||
GtkWidget *ih_box;
|
GtkWidget *ih_box;
|
||||||
GtkWidget *menu,*c_l,*item;
|
GtkWidget *menu,*c_l,*item;
|
||||||
|
|
||||||
|
|
|
@ -4,19 +4,20 @@
|
||||||
int card_num,mdev_num;
|
int card_num,mdev_num;
|
||||||
s_card *cards;
|
s_card *cards;
|
||||||
|
|
||||||
|
static int search_es(snd_mixer_eid_t *,snd_mixer_elements_t *);
|
||||||
static gint ab_chk( s_mixer *,snd_mixer_eid_t * );
|
static gint ab_chk( s_mixer *,snd_mixer_eid_t * );
|
||||||
static int s_element_build(snd_mixer_t *,s_element *,snd_mixer_elements_t *,
|
static int s_element_build(snd_mixer_t *,s_element *,snd_mixer_elements_t *,
|
||||||
snd_mixer_eid_t ,int , int);
|
snd_mixer_eid_t ,int , int);
|
||||||
static gint mk_mux_lst(snd_mixer_t *,snd_mixer_elements_t *,snd_mixer_element_info_t *,snd_mixer_eid_t **);
|
static gint mk_mux_lst(snd_mixer_t *,snd_mixer_elements_t *,snd_mixer_element_info_t *,snd_mixer_eid_t **);
|
||||||
|
|
||||||
gint probe_mixer( void ) {
|
gint probe_mixer( void ) {
|
||||||
int err,i,j,k,l;
|
int err,i,j,k,l,m;
|
||||||
snd_ctl_t *p_handle;
|
snd_ctl_t *p_handle;
|
||||||
snd_mixer_t *m_handle;
|
snd_mixer_t *m_handle;
|
||||||
snd_mixer_elements_t es;
|
snd_mixer_elements_t es;
|
||||||
snd_mixer_element_t ee;
|
|
||||||
s_mixer *mixer;
|
s_mixer *mixer;
|
||||||
s_group *group;
|
s_group *group;
|
||||||
|
int *es_nums;
|
||||||
|
|
||||||
card_num=snd_cards();
|
card_num=snd_cards();
|
||||||
cards=(s_card *)g_malloc(sizeof(s_card)*card_num);
|
cards=(s_card *)g_malloc(sizeof(s_card)*card_num);
|
||||||
|
@ -121,6 +122,14 @@ gint probe_mixer( void ) {
|
||||||
snd_mixer_close(m_handle);
|
snd_mixer_close(m_handle);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
es_nums = (int *)g_malloc(es.elements * sizeof(int));
|
||||||
|
if( es_nums == NULL ) {
|
||||||
|
fprintf(stderr,nomem_msg);
|
||||||
|
snd_ctl_close(p_handle);
|
||||||
|
snd_mixer_close(m_handle);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
bzero(es_nums,es.elements * sizeof(int));
|
||||||
//printf("Card %d mixer %d\n",i,j);
|
//printf("Card %d mixer %d\n",i,j);
|
||||||
for( k=0 ; k<mixer->groups.groups ; k++ ) {
|
for( k=0 ; k<mixer->groups.groups ; k++ ) {
|
||||||
group=&mixer->group[k];
|
group=&mixer->group[k];
|
||||||
|
@ -162,6 +171,11 @@ gint probe_mixer( void ) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for( l=0 ; l<group->g.elements ; l++ ) {
|
for( l=0 ; l<group->g.elements ; l++ ) {
|
||||||
|
m=search_es( &group->g.pelements[l],&es );
|
||||||
|
if( m>-1 ) {
|
||||||
|
if( es_nums[m] ) group->g.pelements[l].type=0;
|
||||||
|
es_nums[m]++;
|
||||||
|
}
|
||||||
err=s_element_build(m_handle,&group->e[l],&es,
|
err=s_element_build(m_handle,&group->e[l],&es,
|
||||||
group->g.pelements[l],i,j);
|
group->g.pelements[l],i,j);
|
||||||
if( err<0 ) {
|
if( err<0 ) {
|
||||||
|
@ -171,6 +185,24 @@ gint probe_mixer( void ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for( k=0 ; k<es.elements ; k++ ) {
|
||||||
|
if( es_nums[k] > 1 ) {
|
||||||
|
for( l=0 ; l<mixer->groups.groups ; l++ ) {
|
||||||
|
group=&mixer->group[l];
|
||||||
|
for( m=0 ; m<group->g.elements; m++ ) {
|
||||||
|
if( strcmp( es.pelements[k].name,group->g.pelements[m].name)==0 &&
|
||||||
|
es.pelements[k].index == group->g.pelements[m].index &&
|
||||||
|
es.pelements[k].type == group->g.pelements[m].type ) {
|
||||||
|
group->e[m].e.eid.type=0;
|
||||||
|
group->e[m].info.eid.type=0;
|
||||||
|
l=mixer->groups.groups;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
l=0;
|
l=0;
|
||||||
for( k=0 ; k<es.elements ; k++ ) {
|
for( k=0 ; k<es.elements ; k++ ) {
|
||||||
/*
|
/*
|
||||||
|
@ -179,15 +211,16 @@ gint probe_mixer( void ) {
|
||||||
mixer->es.pelements[k].index,
|
mixer->es.pelements[k].index,
|
||||||
mixer->es.pelements[k].type);
|
mixer->es.pelements[k].type);
|
||||||
*/
|
*/
|
||||||
//if( mixer->es.pelements[k].type > 99 ) {
|
if( es_nums[k] == 0 || es_nums[k]>1 ) {
|
||||||
if( ab_chk(mixer,&es.pelements[k]) ) {
|
if( ab_chk(mixer,&es.pelements[k]) ) {
|
||||||
l++;
|
l++;
|
||||||
/*
|
/*
|
||||||
printf("Element '%s',%d,%d\n",
|
printf("Element '%s',%d,%d\n",
|
||||||
es.pelements[k].name,
|
es.pelements[k].name,
|
||||||
es.pelements[k].index,
|
es.pelements[k].index,
|
||||||
es.pelements[k].type);
|
es.pelements[k].type);
|
||||||
*/
|
*/
|
||||||
|
} else es_nums[k]=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mixer->ee_n=l;
|
mixer->ee_n=l;
|
||||||
|
@ -203,7 +236,7 @@ gint probe_mixer( void ) {
|
||||||
k=0;
|
k=0;
|
||||||
while(l>0) {
|
while(l>0) {
|
||||||
l--;
|
l--;
|
||||||
while( !ab_chk(mixer,&es.pelements[k]) ) k++;
|
while( es_nums[k]==1 ) k++;
|
||||||
err=s_element_build(m_handle,&mixer->ee[l].e,&es,
|
err=s_element_build(m_handle,&mixer->ee[l].e,&es,
|
||||||
es.pelements[k],i,j);
|
es.pelements[k],i,j);
|
||||||
|
|
||||||
|
@ -213,16 +246,25 @@ gint probe_mixer( void ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_free(es.pelements);
|
g_free(es.pelements);
|
||||||
|
g_free(es_nums);
|
||||||
snd_mixer_close(m_handle);
|
snd_mixer_close(m_handle);
|
||||||
}
|
}
|
||||||
snd_ctl_close(p_handle);
|
snd_ctl_close(p_handle);
|
||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int search_es(snd_mixer_eid_t *eid,snd_mixer_elements_t *es) {
|
||||||
|
int i;
|
||||||
|
for( i=0 ; i<es->elements ; i++ ) {
|
||||||
|
if( strcmp( es->pelements[i].name , eid->name ) == 0 &&
|
||||||
|
es->pelements[i].index == eid->index &&
|
||||||
|
es->pelements[i].type == eid->type ) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static gint ab_chk( s_mixer *mixer,snd_mixer_eid_t *eid ) {
|
static gint ab_chk( s_mixer *mixer,snd_mixer_eid_t *eid ) {
|
||||||
int i,j;
|
|
||||||
|
|
||||||
switch( eid->type ) {
|
switch( eid->type ) {
|
||||||
case SND_MIXER_ETYPE_SWITCH1:
|
case SND_MIXER_ETYPE_SWITCH1:
|
||||||
|
@ -238,16 +280,6 @@ static gint ab_chk( s_mixer *mixer,snd_mixer_eid_t *eid ) {
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
for( i=0 ; i<mixer->groups.groups ; i++ ) {
|
|
||||||
if( strncmp(mixer->groups.pgroups[i].name,eid->name,2) == 0 ) {
|
|
||||||
for( j=0 ; j<mixer->group[i].g.elements ; j++ ) {
|
|
||||||
if( strcmp(mixer->group[i].e[j].e.eid.name , eid->name) == 0 &&
|
|
||||||
mixer->group[i].e[j].e.eid.index == eid->index &&
|
|
||||||
mixer->group[i].e[j].e.eid.type == eid->type ) return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +292,8 @@ static int s_element_build(snd_mixer_t *handle,s_element *e,
|
||||||
e->e.eid = eid;
|
e->e.eid = eid;
|
||||||
e->info.eid = eid;
|
e->info.eid = eid;
|
||||||
if( eid.type != SND_MIXER_ETYPE_SWITCH1 &&
|
if( eid.type != SND_MIXER_ETYPE_SWITCH1 &&
|
||||||
eid.type != SND_MIXER_ETYPE_SWITCH2 ) {
|
eid.type != SND_MIXER_ETYPE_SWITCH2 &&
|
||||||
|
eid.type > 0 ) {
|
||||||
err=snd_mixer_element_info_build(handle,&e->info);
|
err=snd_mixer_element_info_build(handle,&e->info);
|
||||||
if( err<0 ) {
|
if( err<0 ) {
|
||||||
preid(eid);
|
preid(eid);
|
||||||
|
|
Loading…
Reference in a new issue