Max 5 API Reference
00001 00002 #include "jit.common.h" 00003 #include "jit.uyvy.h" 00004 00005 typedef struct _jit_luma2uyvy 00006 { 00007 t_object ob; 00008 } t_jit_luma2uyvy; 00009 00010 void *_jit_luma2uyvy_class; 00011 00012 t_jit_luma2uyvy *jit_luma2uyvy_new(void); 00013 void jit_luma2uyvy_free(t_jit_luma2uyvy *x); 00014 t_jit_err jit_luma2uyvy_matrix_calc(t_jit_luma2uyvy *x, void *inputs, void *outputs); 00015 void jit_luma2uyvy_calculate_ndim(t_jit_luma2uyvy *x, long dimcount, long *dim, long planecount, 00016 t_jit_matrix_info *in_minfo, char *bip, t_jit_matrix_info *out_minfo, char *bop); 00017 t_jit_err jit_luma2uyvy_init(void); 00018 00019 00020 t_jit_err jit_luma2uyvy_init(void) 00021 { 00022 long attrflags=0; 00023 t_jit_object *attr, *mop, *o; 00024 00025 _jit_luma2uyvy_class = jit_class_new("jit_luma2uyvy",(method)jit_luma2uyvy_new,(method)jit_luma2uyvy_free, 00026 sizeof(t_jit_luma2uyvy),0L); 00027 00028 //add mop 00029 mop = jit_object_new(_jit_sym_jit_mop,1,1); //#inputs,#outputs 00030 jit_mop_single_type(mop, _jit_sym_char); 00031 o=jit_object_method(mop,_jit_sym_getoutput,1); 00032 jit_attr_setlong(o,_jit_sym_dimlink,0); 00033 jit_attr_setlong(o,_jit_sym_planelink,0); 00034 jit_attr_setlong(o,_jit_sym_minplanecount,4); 00035 jit_attr_setlong(o,_jit_sym_maxplanecount,4); 00036 jit_class_addadornment(_jit_luma2uyvy_class,mop); 00037 00038 //add methods 00039 jit_class_addmethod(_jit_luma2uyvy_class, (method)jit_luma2uyvy_matrix_calc, "matrix_calc", A_CANT, 0L); 00040 00041 jit_class_register(_jit_luma2uyvy_class); 00042 00043 return JIT_ERR_NONE; 00044 } 00045 00046 00047 t_jit_err jit_luma2uyvy_matrix_calc(t_jit_luma2uyvy *x, void *inputs, void *outputs) 00048 { 00049 t_jit_err err=JIT_ERR_NONE; 00050 long in_savelock,out_savelock, dimmode; 00051 t_jit_matrix_info in_minfo,out_minfo; 00052 char *in_bp,*out_bp; 00053 long i,dimcount,planecount,dim[JIT_MATRIX_MAX_DIMCOUNT]; 00054 void *in_matrix, *out_matrix; 00055 00056 in_matrix = jit_object_method(inputs,_jit_sym_getindex,0); 00057 out_matrix = jit_object_method(outputs,_jit_sym_getindex,0); 00058 00059 if (x&&in_matrix&&out_matrix) { 00060 00061 in_savelock = (long) jit_object_method(in_matrix,_jit_sym_lock,1); 00062 00063 jit_object_method(in_matrix,_jit_sym_getinfo,&in_minfo); 00064 00065 // make output half as wide as input 00066 out_minfo = in_minfo; 00067 out_minfo.dim[0] /= 2; 00068 out_minfo.planecount = 4; 00069 jit_object_method(out_matrix,_jit_sym_setinfo,&out_minfo); 00070 00071 out_savelock = (long) jit_object_method(out_matrix,_jit_sym_lock,1); 00072 jit_object_method(out_matrix,_jit_sym_getinfo,&out_minfo); 00073 00074 jit_object_method(in_matrix,_jit_sym_getdata,&in_bp); 00075 jit_object_method(out_matrix,_jit_sym_getdata,&out_bp); 00076 00077 if (!in_bp) { err=JIT_ERR_GENERIC; goto out;} 00078 if (!out_bp) { err=JIT_ERR_GENERIC; goto out;} 00079 00080 //compatible types? 00081 if ((in_minfo.type!=_jit_sym_char)||(in_minfo.type!=out_minfo.type)) { 00082 err=JIT_ERR_MISMATCH_TYPE; 00083 goto out; 00084 } 00085 00086 //compatible planes? 00087 if ((in_minfo.planecount!=1)) { 00088 err=JIT_ERR_MISMATCH_PLANE; 00089 goto out; 00090 } 00091 00092 //get dimensions/planecount 00093 dimcount = out_minfo.dimcount; 00094 planecount = out_minfo.planecount; 00095 00096 //calculate 00097 jit_parallel_ndim_simplecalc2((method)jit_luma2uyvy_calculate_ndim, 00098 x, dimcount, out_minfo.dim, planecount, &in_minfo, in_bp, &out_minfo, out_bp, 00099 0 /* flags1 */, 0 /* flags2 */); 00100 00101 } else { 00102 return JIT_ERR_INVALID_PTR; 00103 } 00104 00105 out: 00106 jit_object_method(out_matrix,_jit_sym_lock,out_savelock); 00107 jit_object_method(in_matrix,_jit_sym_lock,in_savelock); 00108 return err; 00109 } 00110 00111 // 00112 //recursive functions to handle higher dimension matrices, by processing 2D sections at a time 00113 // 00114 00115 00116 void jit_luma2uyvy_calculate_ndim(t_jit_luma2uyvy *x, long dimcount, long *dim, long planecount, 00117 t_jit_matrix_info *in_minfo, char *bip, t_jit_matrix_info *out_minfo, char *bop) 00118 { 00119 long i,width,height; 00120 uchar *ip,*op; 00121 00122 if (dimcount<1) return; //safety 00123 00124 00125 switch(dimcount) { 00126 case 1: 00127 dim[1]=1; 00128 case 2: 00129 width = dim[0]; 00130 height = dim[1]; 00131 for (i=0;i<height;i++) { 00132 ip = (uchar *) bip + i*in_minfo->dimstride[1]; 00133 op = (uchar *) bop + i*out_minfo->dimstride[1]; 00134 // width is output dim 00135 jit_luma2uyvy_vector_char(width,ip,op); 00136 } 00137 break; 00138 default: 00139 for (i=0;i<dim[dimcount-1];i++) { 00140 ip = (uchar *) bip + i*in_minfo->dimstride[dimcount-1]; 00141 op = (uchar *) bop + i*out_minfo->dimstride[dimcount-1]; 00142 jit_luma2uyvy_calculate_ndim(x,dimcount-1,dim,planecount,in_minfo,(char *)ip,out_minfo,(char *)op); 00143 } 00144 } 00145 } 00146 00147 t_jit_luma2uyvy *jit_luma2uyvy_new(void) 00148 { 00149 t_jit_luma2uyvy *x; 00150 short i; 00151 00152 if (x=(t_jit_luma2uyvy *)jit_object_alloc(_jit_luma2uyvy_class)) { 00153 } else { 00154 x = NULL; 00155 } 00156 return x; 00157 } 00158 00159 void jit_luma2uyvy_free(t_jit_luma2uyvy *x) 00160 { 00161 //nada 00162 } 00163
Copyright © 2008, Cycling '74