From 5a501b6b47d20996a7548dc635cff75dc4234ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Wed, 12 Jan 2011 18:14:37 +0000 Subject: fix bug with reading audio params Pd will eventually fill in garbage when querying audio params, which is actually (in)validated with the "naudio*dev". svn path=/trunk/externals/iem/mediasettings/; revision=14720 --- audiosettings.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/audiosettings.c b/audiosettings.c index 2a90f01..043586c 100644 --- a/audiosettings.c +++ b/audiosettings.c @@ -17,6 +17,7 @@ #include "m_pd.h" #include "s_stuff.h" #include +#include #define MAXNDEV 20 #define DEVDESCSIZE 80 @@ -137,6 +138,8 @@ static int as_getdriverid(const t_symbol*id) { static void as_params_print(t_as_params*parms) { int i=0; + post("\n=================================<"); + post("indevs: %d", parms->naudioindev); for(i=0; iaudioindev[i], parms->chindev[i]); @@ -148,19 +151,30 @@ static void as_params_print(t_as_params*parms) { post("rate=%d", parms->rate); post("advance=%d", parms->advance); post("callback=%d", parms->callback); + post(">=================================\n"); } static void as_params_get(t_as_params*parms) { + int i=0; memset(parms, 0, sizeof(t_as_params)); + parms->callback=-1; sys_get_audio_params(&parms->naudioindev, parms->audioindev, parms->chindev, &parms->naudiooutdev, parms->audiooutdev, parms->choutdev, &parms->rate, &parms->advance, &parms->callback); - post("\n================================="); + for(i=parms->naudioindev; iaudioindev[i]=0; + parms->chindev[i]=0; + } + for(i=parms->naudiooutdev; iaudiooutdev[i]=0; + parms->choutdev[i]=0; + } + + as_params_print(parms); - post("=================================\n"); } @@ -340,7 +354,7 @@ typedef enum { PARAM_OUTPUT, PARAM_INVALID } t_paramtype; -static t_paramtype audiosettings_setparams_id(t_audiosettings*x, t_symbol*s) { +static t_paramtype audiosettings_setparams_id(t_symbol*s) { if(gensym("@rate")==s) { return PARAM_RATE; } else if(gensym("@samplerate")==s) { @@ -360,7 +374,7 @@ static t_paramtype audiosettings_setparams_id(t_audiosettings*x, t_symbol*s) { } /* find the beginning of the next parameter in the list */ -static int audiosettings_setparams_next(t_audiosettings*x, int argc, t_atom*argv) { +static int audiosettings_setparams_next(int argc, t_atom*argv) { int i=0; for(i=0; i0) { argv+=advance; - param=audiosettings_setparams_id(x, atom_getsymbol(argv)); + s=atom_getsymbol(argv); + param=audiosettings_setparams_id(s); argv++; argc--; @@ -452,7 +467,7 @@ static void audiosettings_setparams(t_audiosettings *x, t_symbol*s, int argc, t_ argc-=advance; argv+=advance; - advance=audiosettings_setparams_next(x, argc, argv); + advance=audiosettings_setparams_next(argc, argv); } if(apply) { audiosettings_params_apply(x); @@ -532,7 +547,7 @@ static void *audiosettings_new(void) void audiosettings_setup(void) { - s_pdsym=gensym("pda"); + s_pdsym=gensym("pd"); post("audiosettings: audio settings manager"); post(" Copyright (C) 2010 IOhannes m zmoelnig"); @@ -561,17 +576,16 @@ void audiosettings_setup(void) } - - - - - static void audiosettings_testdevices(t_audiosettings *x) { int i; char indevlist[MAXNDEV][DEVDESCSIZE], outdevlist[MAXNDEV][DEVDESCSIZE]; int indevs = 0, outdevs = 0, canmulti = 0, cancallback = 0; + + if(0) { + pd_error(x, "this should never happen"); + } sys_get_audio_devs((char*)indevlist, &indevs, (char*)outdevlist, &outdevs, &canmulti, &cancallback, MAXNDEV, DEVDESCSIZE); -- cgit v1.2.1