62 } 63 64 public static class GenCode { 65 public String javaCode; 66 public String nativeCode; 67 } 68 69 private static void appendGetRelease(StringBuilder get, 70 StringBuilder rel, 71 String ctype, 72 String cbufName, String jarrayName) 73 { 74 get.append("j" + ctype + " *" + cbufName + " = (j" + ctype + " *)"); 75 get.append("env->GetPrimitiveArrayCritical(" + jarrayName + ", 0);\n"); 76 get.append("if (" + cbufName + " == NULL) return;\n"); 77 rel.append("env->ReleasePrimitiveArrayCritical(" + jarrayName + ", " + cbufName + ", JNI_ABORT);\n"); 78 } 79 80 public final GenCode getGenCode(String effectName, 81 String peerName, 82 String interfaceName) 83 { 84 Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables(); 85 StringBuilder interfaceDecl = new StringBuilder(); 86 StringBuilder constants = new StringBuilder(); 87 StringBuilder samplers = new StringBuilder(); 88 StringBuilder srcRects = new StringBuilder(); 89 StringBuilder posDecls = new StringBuilder(); 90 StringBuilder pixInitY = new StringBuilder(); 91 StringBuilder pixInitX = new StringBuilder(); 92 StringBuilder posIncrY = new StringBuilder(); 93 StringBuilder posInitY = new StringBuilder(); 94 StringBuilder posIncrX = new StringBuilder(); 95 StringBuilder posInitX = new StringBuilder(); 96 StringBuilder jparams = new StringBuilder(); 97 StringBuilder jparamDecls = new StringBuilder(); 98 StringBuilder cparamDecls = new StringBuilder(); 99 StringBuilder arrayGet = new StringBuilder(); 100 StringBuilder arrayRelease = new StringBuilder(); 101 102 appendGetRelease(arrayGet, arrayRelease, "int", "dst", "dst_arr"); 103 104 // TODO: only need to declare these if pixcoord is referenced 247 posIncrX.append("pos" + i + "_x += inc" + i + "_x;\n"); 248 posIncrY.append("pos" + i + "_y += inc" + i + "_y;\n"); 249 250 jparams.append(",\n"); 251 jparams.append("src" + i + "Rect[0], src" + i + "Rect[1],\n"); 252 jparams.append("src" + i + "Rect[2], src" + i + "Rect[3],\n"); 253 jparams.append("src" + i + "w, src" + i + "h, src" + i + "scan"); 254 255 jparamDecls.append(",\n"); 256 jparamDecls.append("float src" + i + "Rect_x1, float src" + i + "Rect_y1,\n"); 257 jparamDecls.append("float src" + i + "Rect_x2, float src" + i + "Rect_y2,\n"); 258 jparamDecls.append("int src" + i + "w, int src" + i + "h, int src" + i + "scan"); 259 260 cparamDecls.append(",\n"); 261 cparamDecls.append("jfloat src" + i + "Rect_x1, jfloat src" + i + "Rect_y1,\n"); 262 cparamDecls.append("jfloat src" + i + "Rect_x2, jfloat src" + i + "Rect_y2,\n"); 263 cparamDecls.append("jint src" + i + "w, jint src" + i + "h, jint src" + i + "scan"); 264 } 265 } 266 267 if (interfaceName != null) { 268 interfaceDecl.append("implements "+interfaceName); 269 } 270 271 Reader template = new InputStreamReader(getClass().getResourceAsStream("MEJavaGlue.stg")); 272 StringTemplateGroup group = new StringTemplateGroup(template, DefaultTemplateLexer.class); 273 StringTemplate jglue = group.getInstanceOf("glue"); 274 jglue.setAttribute("effectName", effectName); 275 jglue.setAttribute("peerName", peerName); 276 jglue.setAttribute("interfaceDecl", interfaceDecl.toString()); 277 jglue.setAttribute("usercode", usercode.toString()); 278 jglue.setAttribute("samplers", samplers.toString()); 279 jglue.setAttribute("srcRects", srcRects.toString()); 280 jglue.setAttribute("constants", constants.toString()); 281 jglue.setAttribute("params", jparams.toString()); 282 jglue.setAttribute("paramDecls", jparamDecls.toString()); 283 284 template = new InputStreamReader(getClass().getResourceAsStream("MENativeGlue.stg")); 285 group = new StringTemplateGroup(template, DefaultTemplateLexer.class); 286 StringTemplate cglue = group.getInstanceOf("glue"); 287 cglue.setAttribute("peerName", peerName); 288 cglue.setAttribute("jniName", peerName.replace("_", "_1")); 289 cglue.setAttribute("paramDecls", cparamDecls.toString()); 290 cglue.setAttribute("arrayGet", arrayGet.toString()); 291 cglue.setAttribute("arrayRelease", arrayRelease.toString()); 292 cglue.setAttribute("posDecls", posDecls.toString()); 293 cglue.setAttribute("pixInitY", pixInitY.toString()); 294 cglue.setAttribute("pixInitX", pixInitX.toString()); 295 cglue.setAttribute("posIncrY", posIncrY.toString()); | 62 } 63 64 public static class GenCode { 65 public String javaCode; 66 public String nativeCode; 67 } 68 69 private static void appendGetRelease(StringBuilder get, 70 StringBuilder rel, 71 String ctype, 72 String cbufName, String jarrayName) 73 { 74 get.append("j" + ctype + " *" + cbufName + " = (j" + ctype + " *)"); 75 get.append("env->GetPrimitiveArrayCritical(" + jarrayName + ", 0);\n"); 76 get.append("if (" + cbufName + " == NULL) return;\n"); 77 rel.append("env->ReleasePrimitiveArrayCritical(" + jarrayName + ", " + cbufName + ", JNI_ABORT);\n"); 78 } 79 80 public final GenCode getGenCode(String effectName, 81 String peerName, 82 String genericsName, 83 String interfaceName) 84 { 85 Map<String, Variable> vars = parser.getSymbolTable().getGlobalVariables(); 86 StringBuilder genericsDecl = new StringBuilder(); 87 StringBuilder interfaceDecl = new StringBuilder(); 88 StringBuilder constants = new StringBuilder(); 89 StringBuilder samplers = new StringBuilder(); 90 StringBuilder srcRects = new StringBuilder(); 91 StringBuilder posDecls = new StringBuilder(); 92 StringBuilder pixInitY = new StringBuilder(); 93 StringBuilder pixInitX = new StringBuilder(); 94 StringBuilder posIncrY = new StringBuilder(); 95 StringBuilder posInitY = new StringBuilder(); 96 StringBuilder posIncrX = new StringBuilder(); 97 StringBuilder posInitX = new StringBuilder(); 98 StringBuilder jparams = new StringBuilder(); 99 StringBuilder jparamDecls = new StringBuilder(); 100 StringBuilder cparamDecls = new StringBuilder(); 101 StringBuilder arrayGet = new StringBuilder(); 102 StringBuilder arrayRelease = new StringBuilder(); 103 104 appendGetRelease(arrayGet, arrayRelease, "int", "dst", "dst_arr"); 105 106 // TODO: only need to declare these if pixcoord is referenced 249 posIncrX.append("pos" + i + "_x += inc" + i + "_x;\n"); 250 posIncrY.append("pos" + i + "_y += inc" + i + "_y;\n"); 251 252 jparams.append(",\n"); 253 jparams.append("src" + i + "Rect[0], src" + i + "Rect[1],\n"); 254 jparams.append("src" + i + "Rect[2], src" + i + "Rect[3],\n"); 255 jparams.append("src" + i + "w, src" + i + "h, src" + i + "scan"); 256 257 jparamDecls.append(",\n"); 258 jparamDecls.append("float src" + i + "Rect_x1, float src" + i + "Rect_y1,\n"); 259 jparamDecls.append("float src" + i + "Rect_x2, float src" + i + "Rect_y2,\n"); 260 jparamDecls.append("int src" + i + "w, int src" + i + "h, int src" + i + "scan"); 261 262 cparamDecls.append(",\n"); 263 cparamDecls.append("jfloat src" + i + "Rect_x1, jfloat src" + i + "Rect_y1,\n"); 264 cparamDecls.append("jfloat src" + i + "Rect_x2, jfloat src" + i + "Rect_y2,\n"); 265 cparamDecls.append("jint src" + i + "w, jint src" + i + "h, jint src" + i + "scan"); 266 } 267 } 268 269 if (genericsName != null) { 270 genericsDecl.append("<"+genericsName+">"); 271 } 272 273 if (interfaceName != null) { 274 interfaceDecl.append("implements "+interfaceName); 275 } 276 277 Reader template = new InputStreamReader(getClass().getResourceAsStream("MEJavaGlue.stg")); 278 StringTemplateGroup group = new StringTemplateGroup(template, DefaultTemplateLexer.class); 279 StringTemplate jglue = group.getInstanceOf("glue"); 280 jglue.setAttribute("effectName", effectName); 281 jglue.setAttribute("peerName", peerName); 282 jglue.setAttribute("genericsDecl", genericsDecl.toString()); 283 jglue.setAttribute("interfaceDecl", interfaceDecl.toString()); 284 jglue.setAttribute("usercode", usercode.toString()); 285 jglue.setAttribute("samplers", samplers.toString()); 286 jglue.setAttribute("srcRects", srcRects.toString()); 287 jglue.setAttribute("constants", constants.toString()); 288 jglue.setAttribute("params", jparams.toString()); 289 jglue.setAttribute("paramDecls", jparamDecls.toString()); 290 291 template = new InputStreamReader(getClass().getResourceAsStream("MENativeGlue.stg")); 292 group = new StringTemplateGroup(template, DefaultTemplateLexer.class); 293 StringTemplate cglue = group.getInstanceOf("glue"); 294 cglue.setAttribute("peerName", peerName); 295 cglue.setAttribute("jniName", peerName.replace("_", "_1")); 296 cglue.setAttribute("paramDecls", cparamDecls.toString()); 297 cglue.setAttribute("arrayGet", arrayGet.toString()); 298 cglue.setAttribute("arrayRelease", arrayRelease.toString()); 299 cglue.setAttribute("posDecls", posDecls.toString()); 300 cglue.setAttribute("pixInitY", pixInitY.toString()); 301 cglue.setAttribute("pixInitX", pixInitX.toString()); 302 cglue.setAttribute("posIncrY", posIncrY.toString()); |