Beispiel #1
0
void max_jit_3m_mproc(t_max_jit_3m *x, void *mop)
{
	t_jit_err err;
	
	if (err=(t_jit_err) jit_object_method(
		max_jit_obex_jitob_get(x),
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 
	} else {
		max_jit_3m_bang(x);
	}
}
void max_jit_submatrix_mproc(t_max_jit_submatrix *x, void *mop)
{
	t_jit_err err;


	if (err=(t_jit_err) jit_object_method(
				max_jit_obex_jitob_get(x),
				_jit_sym_matrix_calc,
				jit_object_method(mop,_jit_sym_getinputlist),
				jit_object_method(mop,_jit_sym_getoutputlist)))
	{
		jit_error_code(x,err);
	} else {
		max_jit_mop_outputmatrix(x);
		jit_object_method(max_jit_mop_getoutput(x,1),_jit_sym_data,NULL);
	}
}
void max_jit_ys_pixelweightmat_mproc(t_max_jit_ys_pixelweightmat *x, void *mop)
{
	t_jit_err err;
	void *o;
	
	o=max_jit_obex_jitob_get(x);
	if (err=(t_jit_err) jit_object_method(
		o,
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 
	} else {
		// bang method
		max_jit_ys_pixelweightmat_bang(x);
	}
}
void max_jit_tml_particleFlow_mproc(t_max_jit_tml_particleFlow *x, void *mop)
{
	t_jit_err err;
	void *o;
	
	o=max_jit_obex_jitob_get(x);
	if (err=(t_jit_err) jit_object_method(
		o,
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 
	} else {
		// bang method
		max_jit_tml_particleFlow_bang(x);
	}
}
void max_ta_jit_kinect2_outputmatrix(t_max_ta_jit_kinect2 *x)
{
    void *mop=max_jit_obex_adornment_get(x,_jit_sym_jit_mop);
    t_jit_err err;
    
    if (mop) { //always output
        if (err=(t_jit_err)jit_object_method(max_jit_obex_jitob_get(x),
                                             _jit_sym_matrix_calc,
                                             jit_object_method(mop,_jit_sym_getinputlist),
                                             jit_object_method(mop,_jit_sym_getoutputlist)))
        {
            jit_error_code(x,err);
        }
        else {
            max_jit_mop_outputmatrix(x);
        }
    }
}
Beispiel #6
0
void
PenizeMaxMProc(
	msobPenize*	me,
	void*				mop)
	
	{
	t_jit_err err = (t_jit_err) jit_object_method(
										max_jit_obex_jitob_get(me),
										_jit_sym_matrix_calc,
										jit_object_method(mop, _jit_sym_getinputlist),
										jit_object_method(mop, _jit_sym_getoutputlist)
										);
	
	if (err == JIT_ERR_NONE)
		 PenizeBang(me);
	else jit_error_code(me, err); 
	
	}
Beispiel #7
0
void max_jit_op_mproc(t_max_jit_op *x, void *mop)
{
	t_jit_err err;
	t_jit_matrix_info tmpinfo;
	void *o;
	long changed=0,i;
	
	if (x->last==OP_LAST_VAL) {
		tmpinfo = x->lastinfo;
		o = max_jit_mop_getinput(x,2);
		jit_object_method(o,_jit_sym_getinfo,&x->lastinfo);
		if (tmpinfo.type!=x->lastinfo.type)
			changed = TRUE;
		else if (tmpinfo.planecount!=x->lastinfo.planecount)
			changed = TRUE;
		/* Already handled by resampling
		else if (tmpinfo.dimcount!=x->lastinfo.dimcount)
			changed = TRUE;
		else {
			for (i=0;i<tmpinfo.dimcount;i++) {
				if (tmpinfo.dim[i]!=x->lastinfo.dim[i])
					changed=TRUE;
			}
		}
		*/
		if (changed)
			jit_object_method(o,_jit_sym_setall,0L,x->valcount,x->val);		
	}
	
	if (err=(t_jit_err) jit_object_method(
		max_jit_obex_jitob_get(x),
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 
	} else {
		max_jit_mop_outputmatrix(x);
	}
}
void max_jit_SDIF_buffer_outputmatrix(t_max_jit_SDIF_buffer *x){
	t_atom a;
	long outputmode=max_jit_mop_getoutputmode(x);
	void *mop=max_jit_obex_adornment_get(x,_jit_sym_jit_mop);
	t_jit_err err;	
	
	if (outputmode&&mop) { //always output unless output mode is none
		if (outputmode==1) {
			if (err=(t_jit_err)jit_object_method(
				max_jit_obex_jitob_get(x), 
				_jit_sym_matrix_calc,
				jit_object_method(mop,_jit_sym_getinputlist),
				jit_object_method(mop,_jit_sym_getoutputlist),
				x->t_matrix))
			{
				jit_error_code(x,err); 
			} else {
				max_jit_mop_outputmatrix(x);
			}
		}
	}	
}
void max_jit_findbounds_mproc(t_max_jit_findbounds *x, void *mop)
{
	t_jit_err err;
	long ac=0;
	t_atom *av=NULL;
	void *o;
	
	o=max_jit_obex_jitob_get(x);
	if (err=(t_jit_err) jit_object_method(
		o,
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 
	} else {
		jit_object_method(o,ps_getboundmax,&ac,&av);
		switch(ac) {
		case 1:
			outlet_float(x->maxout,jit_atom_getfloat(av));
			break;
		default:		
			outlet_anything(x->maxout,_jit_sym_list,ac,av);
			break;
		}
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;
		jit_object_method(o,ps_getboundmin,&ac,&av);
		switch(ac) {
		case 1:
			outlet_float(x->minout,jit_atom_getfloat(av));
			break;
		default:		
			outlet_anything(x->minout,_jit_sym_list,ac,av);
			break;
		}
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
	}
}
Beispiel #10
0
t_jit_err max_jit_str_op_jit_matrix(void *x, t_symbol *s, long argc, t_atom *argv)
{
	void *matrix,*matrixout,*mop,*o,*p,*m;
	t_atom a;
	t_symbol *matrixname;
	long err=JIT_ERR_NONE,inlet,i;
	method ioproc,mproc;
	
	if (!(mop=max_jit_obex_adornment_get(x,_jit_sym_jit_mop)))
		return JIT_ERR_GENERIC;
	
	if (argc&&argv) {
		//find matrix
		matrixname = jit_atom_getsym(argv);
		matrix = jit_object_findregistered(matrixname);
		if (matrix&&jit_object_method(matrix, _jit_sym_class_jit_matrix)) {
			if (inlet=max_jit_obex_inletnumber_get(x)) {
				//right inputs
				if ((p=jit_object_method(mop,_jit_sym_getinput,inlet+1)) &&
					(m=jit_object_method(p,_jit_sym_getmatrix))) 
				{
					if (ioproc=(method)jit_object_method(p,_jit_sym_getioproc))
						(*ioproc)(mop,p,matrix);
					else
						jit_object_method(m,_jit_sym_frommatrix,matrix,NULL);
				} else {
					err=JIT_ERR_GENERIC;
				}
			} else {
				//calculate
				switch (jit_attr_getlong(mop,_jit_sym_outputmode)) {
				case 0: //nada
					break;
				case 2: //input(no calc)
					//pass input through leftmost output
					if ((p=jit_object_method(mop,_jit_sym_getoutput,1)) &&
						(o=max_jit_mop_io_getoutlet(p))) 
					{
						outlet_anything(o,_jit_sym_jit_matrix,1,argv);
					}
					break; 
				case 3: //output(no calc)
					max_jit_mop_outputmatrix(x);
					break; 
				default: //calc
					//if adapt, resize
//					if (jit_attr_getlong(mop,_jit_sym_adapt))
//						max_jit_mop_adapt_matrix_all(x,matrix);
					if ((p=jit_object_method(mop,_jit_sym_getoutput,1))&&
						(ioproc=(method)jit_object_method(p,_jit_sym_getioproc)))
					{	
						(*ioproc)(mop,p,matrix);
					}
					p = jit_object_method(mop,_jit_sym_getinput,1);
					jit_object_method(p,_jit_sym_matrix,matrix);
					jit_attr_setsym(p,_jit_sym_matrixname,matrixname);
//					if (mproc=(method)max_jit_mop_getmproc(mop)) {
					max_jit_str_op_mproc(x,mop);
/*					} else {
						if (err=(t_jit_err) jit_object_method(
							max_jit_obex_jitob_get(x),
							_jit_sym_matrix_calc,
							jit_object_method(mop,_jit_sym_getinputlist),
							jit_object_method(mop,_jit_sym_getoutputlist))) 
						{
							jit_error_code(x,err); 
						} else {
							max_jit_mop_outputmatrix(x);
						}
					}*/
					break; 
				}
			}
		} else {
			jit_error_code(x,JIT_ERR_MATRIX_UNKNOWN); 
		}
	}
	
	return err;	
}
Beispiel #11
0
void max_jit_openni_outputmatrix(t_max_jit_openni *x)
{
	long outputmode = max_jit_mop_getoutputmode(x);
	void *mop = max_jit_obex_adornment_get(x,_jit_sym_jit_mop);
	t_jit_openni *pJit_OpenNI = (t_jit_openni *)max_jit_obex_jitob_get(x);
	t_jit_err err;	
	t_atom osc_argv[16];			// max number of atoms/values after the message selector
	char osc_string[MAX_LENGTH_STR_JOINT_NAME + 10];	// max joint string + 9 for "/skel/xx/" + terminating null
	char *msg_selector_string;
	int i, j, k;
	const char strSkelFormatOutput[3][12] = { "/skel/%u/%s", "skel", "/joint" };		// switchable skeleton output format selectors
	// the [2] format string below should be an unsigned %u, however OSCeleton codebase incorrectly uses %d so I also use it here for compatibility
	const char strUserCoMFormatOutput[3][9] = { "/user/%u", "user", "/user/%d" };		// switchable user CoM output format selectors
	const char strFloorFormatOutput[3][7] = { "/floor", "floor", "/floor" };			// switchable floor output format selectors
		
	LOG_DEBUG("starting custom outputmatrix()");
	if (outputmode && mop)
	{
		//always output unless output mode is none
		if (outputmode==2) // pass input case, but since jit.openni has no input then this means no output
		{
			LOG_DEBUG("bypassing matrix_calc(), bypassing outputmatrix()");
			return;
		}

		if (outputmode==1)
		{
			LOG_DEBUG("about to call matrix_calc from custom outputmatrix");
			if (err = (t_jit_err)jit_object_method(max_jit_obex_jitob_get(x), _jit_sym_matrix_calc,
				  jit_object_method(mop,_jit_sym_getinputlist),
				  jit_object_method(mop,_jit_sym_getoutputlist)))
			{
				if (err != JIT_ERR_HW_UNAVAILABLE) jit_error_code(x,err);
				return;
			}
		}

		// output floor from scene generator
		if (pJit_OpenNI->hProductionNode[SCENE_GEN_INDEX] && pJit_OpenNI->bOutputSceneFloor)
		{
			msg_selector_string = (char *)strFloorFormatOutput[x->chrSkeletonOutputFormat];
			atom_setfloat(&(osc_argv[0]), pJit_OpenNI->planeFloor.ptPoint.X);
			atom_setfloat(&(osc_argv[1]), pJit_OpenNI->planeFloor.ptPoint.Y);
			atom_setfloat(&(osc_argv[2]), pJit_OpenNI->planeFloor.ptPoint.Z);
			atom_setfloat(&(osc_argv[3]), pJit_OpenNI->planeFloor.vNormal.X);
			atom_setfloat(&(osc_argv[4]), pJit_OpenNI->planeFloor.vNormal.Y);
			atom_setfloat(&(osc_argv[5]), pJit_OpenNI->planeFloor.vNormal.Z);
			outlet_anything(x->osc_outlet, gensym(msg_selector_string), 6, osc_argv);
		}

		// output seen users' centers of mass and skeletons
		for (i=0; i<pJit_OpenNI->iNumUsersSeen; i++)
		{
			short iNumAtoms = 0;
			
			// output user center of mass
			switch (x->chrSkeletonOutputFormat)
			{
			case 0:	// default jit.openni skeleton OSC output format
			case 2: // legacy OSCeleton format
				snprintf_zero(osc_string, sizeof(osc_string), strUserCoMFormatOutput[x->chrSkeletonOutputFormat], pJit_OpenNI->pUserSkeletonJoints[i].userID);
				msg_selector_string = osc_string;
				break;
			case 1: // native max route compatible format
				msg_selector_string = (char *)strUserCoMFormatOutput[1];
				atom_setlong(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userID);
				break;
			}
			atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userCoM.X);
			atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userCoM.Y);
			atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userCoM.Z);
			outlet_anything(x->osc_outlet, gensym(msg_selector_string), iNumAtoms, osc_argv);

			// output skeletons
			if (pJit_OpenNI->pUserSkeletonJoints[i].bUserSkeletonTracked)
			{
				for (j=1; j<= NUM_OF_SKELETON_JOINT_TYPES; j++)
				{
					if (pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].position.fConfidence >= pJit_OpenNI->fPositionConfidenceFilter &&
							( pJit_OpenNI->bOutputSkeletonOrientation ?
							(pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.fConfidence >= pJit_OpenNI->fOrientConfidenceFilter) : true))
					{
						iNumAtoms = 0;

						switch (x->chrSkeletonOutputFormat)
						{
						case 0:	// default jit.openni skeleton output format "/skel/%u/%s"
							snprintf_zero(osc_string, sizeof(osc_string), strSkelFormatOutput[0], pJit_OpenNI->pUserSkeletonJoints[i].userID, strJointNames[j]);
							msg_selector_string = osc_string;
							break;
						case 1: // skeleton output "skel %u %s" to easily use with standard max route object
							msg_selector_string = (char *)strSkelFormatOutput[1];
							atom_setlong(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userID);
							atom_setsym(osc_argv + (iNumAtoms++), gensym(strJointNames[j]));
							break;
						case 2: // skeleton output "/joint %s %u" same format as OSCeleton's default output with no orientation and no OSCeleton's legacy "normalized" values
							msg_selector_string = (char *)strSkelFormatOutput[2];
							atom_setsym(osc_argv + (iNumAtoms++), gensym(strJointNames[j]));
							atom_setlong(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].userID);
							break;
						}
						atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].position.position.X);
						atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].position.position.Y);
						atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].position.position.Z);

						if (x->chrSkeletonOutputFormat != 2)
						{						
							atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].position.fConfidence);
						}

						if (pJit_OpenNI->bOutputSkeletonOrientation && (x->chrSkeletonOutputFormat != 2))
						{
							// General belief and https://groups.google.com/forum/#!topic/openni-dev/-ib1yX-o0lk say that OpenNI stores the
							// orientation matrix in row-major order.
							// X axis = (elements[0], elements[3], elements[6])
							// Y axis = (elements[1], elements[4], elements[7])
							// Z axis = (elements[2], elements[5], elements[8])
							// Just in case, column major order is easy to substitute with: for (k=0; k<9; k++) atom_setfloat(osc_argv + iAtomOffset + 4 + k, pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.orientation.elements[k]);
							for (k=0; k<3; k++)
							{
								atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.orientation.elements[k]);
								atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.orientation.elements[k+3]);
								atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.orientation.elements[k+6]);
							}
							if (x->chrSkeletonOutputFormat != 2)
							{
								atom_setfloat(osc_argv + (iNumAtoms++), pJit_OpenNI->pUserSkeletonJoints[i].jointTransform[j].orientation.fConfidence);
							}
						}
						outlet_anything(x->osc_outlet, gensym(msg_selector_string), iNumAtoms, osc_argv);
					}
				}
			}
		}

		LOG_DEBUG("now calling outputmatrix()");
		max_jit_mop_outputmatrix(x);
		LOG_DEBUG("called outputmatrix()");
	}	
}
void max_jit_human_mproc(t_max_jit_human *x, void *mop)
{
	t_jit_err err;
	long ac=0;
	t_atom *av=NULL;
	void *o;
//	t_atom temp[4];
	
//	av = temp;
	
	
	o=max_jit_obex_jitob_get(x);

	if (err=(t_jit_err) jit_object_method(
		o,
		_jit_sym_matrix_calc,
		jit_object_method(mop,_jit_sym_getinputlist),
		jit_object_method(mop,_jit_sym_getoutputlist))) 
	{
		jit_error_code(x,err); 

	} else {

//		ac = 2;

		jit_object_method(o,ps_getstate,&ac,&av);
		outlet_int(x->out_state,jit_atom_getlong(av));
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;


		jit_object_method(o,ps_getfoot_right,&ac,&av);
		outlet_anything(x->out_foot_right,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

		jit_object_method(o,ps_getfoot_left,&ac,&av);
		outlet_anything(x->out_foot_left,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

//		ac = 2;
		jit_object_method(o,ps_gethead,&ac,&av);
		outlet_anything(x->out_head,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

//		ac = 2;
		jit_object_method(o,ps_getarm_right,&ac,&av);
		outlet_anything(x->out_arm_right,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

//		ac = 2;
		jit_object_method(o,ps_getarm_left,&ac,&av);
		outlet_anything(x->out_arm_left,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

//		ac = 4;
		jit_object_method(o,ps_getbox_coords,&ac,&av);
		outlet_anything(x->out_box_coords,_jit_sym_list,ac,av);
		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
		av=NULL; ac=0;

//		switch(ac) {
//		case 1:
//			outlet_float(x->maxout,jit_atom_getfloat(av));
//			break;
//		default:		
//			outlet_anything(x->maxout,_jit_sym_list,ac,av);
//			break;
//		}
//		if (av) jit_freebytes(av,(ac)*sizeof(t_atom));
//		av=NULL; ac=0;
	}
}