change matrix dimensions from inside custom external

volker böhm's icon

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;
    }
}