change matrix dimensions from inside custom external
hi there
i'm working on an external that does phase vocoder analysis of buffer based audio data and stores the results into a user specified jitter matrix. as i don't know the length of the audio data before hand, i need to be able to change the matrix dimensions before starting to write into it.
i found a very easy way to do this, but i'm not sure whether it's safe!
basically i'm filling out a t_jit_matrix_info with the dimensions i need and apply it to the matrix in question through _jit_sym_setinfo (see code below).
obviously there's some memory (re)allocation going on under the hood - do i need to watch out for something?
so far it seems to work just fine.
thanks,
volker.
int myObj_checkDims(t_myObj *x, long dim0, long dim1, long pc)
{
t_jit_matrix_info minfo;
void *matrix;
long savelock;
matrix = jit_object_findregistered(x->matrix_name);
if (matrix&&jit_object_method(matrix, _jit_sym_class_jit_matrix)) {
savelock = (long) jit_object_method(matrix,_jit_sym_lock,1);
jit_object_method(matrix,_jit_sym_getinfo,&minfo);
// check if dimensions changed
if(minfo.dim[0]!=dim0 || minfo.dim[1]!=dim1 || minfo.planecount!=pc) {
minfo.dim[0] = dim0;
minfo.dim[1] = dim1;
minfo.planecount = pc;
// set correct matrix dims and planecount...
jit_object_method(matrix,_jit_sym_setinfo,&minfo);
}
jit_object_method(matrix,_jit_sym_lock,savelock);
return 1;
} else {
jit_error_sym(x,_jit_sym_err_calculate);
return 0;
}
}