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
17using namespace android::RSC;
18
19extern "C" JNIEXPORT void JNICALL
20Java_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 = nullptr;
31    void* outputPtr = nullptr;
32
33    AndroidBitmap_lockPixels(env, jbitmapIn, &inputPtr);
34    AndroidBitmap_lockPixels(env, jbitmapOut, &outputPtr);
35
36    const char * path = env->GetStringUTFChars(pathObj, nullptr);
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