Home | History | Annotate | Download | only in libhellocomputendk
      1 #include <jni.h>
      2 #include <android/log.h>
      3 #include <android/bitmap.h>
      4 
      5 #include <stdio.h>
      6 #include <stdlib.h>
      7 #include <math.h>
      8 
      9 #include <RenderScript.h>
     10 
     11 #include "ScriptC_mono.h"
     12 
     13 #define  LOG_TAG    "HelloComputeNDK"
     14 #define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
     15 #define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
     16 
     17 using namespace android::RSC;
     18 
     19 extern "C" JNIEXPORT void JNICALL
     20 Java_com_example_android_rs_hellocomputendk_HelloComputeNDK_nativeMono(JNIEnv * env,
     21                                                                        jclass,
     22                                                                        jstring pathObj,
     23                                                                        jint X,
     24                                                                        jint Y,
     25                                                                        jobject jbitmapIn,
     26                                                                        jobject jbitmapOut
     27                                                                        )
     28 {
     29 
     30     void* inputPtr = NULL;
     31     void* outputPtr = NULL;
     32 
     33     AndroidBitmap_lockPixels(env, jbitmapIn, &inputPtr);
     34     AndroidBitmap_lockPixels(env, jbitmapOut, &outputPtr);
     35 
     36     const char * path = env->GetStringUTFChars(pathObj, NULL);
     37     sp<RS> rs = new RS();
     38     rs->init(path);
     39     env->ReleaseStringUTFChars(pathObj, path);
     40 
     41     sp<const Element> e = Element::RGBA_8888(rs);
     42 
     43     sp<const Type> t = Type::create(rs, e, X, Y, 0);
     44 
     45     sp<Allocation> inputAlloc = Allocation::createTyped(rs, t, RS_ALLOCATION_MIPMAP_NONE,
     46                                                         RS_ALLOCATION_USAGE_SHARED | RS_ALLOCATION_USAGE_SCRIPT,
     47                                                         inputPtr);
     48     sp<Allocation> outputAlloc = Allocation::createTyped(rs, t, RS_ALLOCATION_MIPMAP_NONE,
     49                                                          RS_ALLOCATION_USAGE_SHARED | RS_ALLOCATION_USAGE_SCRIPT,
     50                                                          outputPtr);
     51 
     52 
     53     inputAlloc->copy2DRangeFrom(0, 0, X, Y, inputPtr);
     54     ScriptC_mono* sc = new ScriptC_mono(rs);
     55     sc->forEach_root(inputAlloc, outputAlloc);
     56     outputAlloc->copy2DRangeTo(0, 0, X, Y, outputPtr);
     57 
     58 
     59     AndroidBitmap_unlockPixels(env, jbitmapIn);
     60     AndroidBitmap_unlockPixels(env, jbitmapOut);
     61 
     62 }
     63