xref: /aosp_15_r20/frameworks/rs/toolkit/JniEntryPoints.cpp (revision e1eccf28f96817838ad6867f7f39d2351ec11f56)
1*e1eccf28SAndroid Build Coastguard Worker /*
2*e1eccf28SAndroid Build Coastguard Worker  * Copyright (C) 2021 The Android Open Source Project
3*e1eccf28SAndroid Build Coastguard Worker  *
4*e1eccf28SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e1eccf28SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e1eccf28SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e1eccf28SAndroid Build Coastguard Worker  *
8*e1eccf28SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e1eccf28SAndroid Build Coastguard Worker  *
10*e1eccf28SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e1eccf28SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e1eccf28SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e1eccf28SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e1eccf28SAndroid Build Coastguard Worker  * limitations under the License.
15*e1eccf28SAndroid Build Coastguard Worker  */
16*e1eccf28SAndroid Build Coastguard Worker 
17*e1eccf28SAndroid Build Coastguard Worker #include <android/bitmap.h>
18*e1eccf28SAndroid Build Coastguard Worker #include <assert.h>
19*e1eccf28SAndroid Build Coastguard Worker #include <jni.h>
20*e1eccf28SAndroid Build Coastguard Worker 
21*e1eccf28SAndroid Build Coastguard Worker #include "RenderScriptToolkit.h"
22*e1eccf28SAndroid Build Coastguard Worker #include "Utils.h"
23*e1eccf28SAndroid Build Coastguard Worker 
24*e1eccf28SAndroid Build Coastguard Worker #define LOG_TAG "renderscript.toolkit.JniEntryPoints"
25*e1eccf28SAndroid Build Coastguard Worker 
26*e1eccf28SAndroid Build Coastguard Worker using namespace android::renderscript;
27*e1eccf28SAndroid Build Coastguard Worker 
28*e1eccf28SAndroid Build Coastguard Worker /**
29*e1eccf28SAndroid Build Coastguard Worker  * I compared using env->GetPrimitiveArrayCritical vs. env->GetByteArrayElements to get access
30*e1eccf28SAndroid Build Coastguard Worker  * to the underlying data. On Pixel 4, it's actually faster to not use critical. The code is left
31*e1eccf28SAndroid Build Coastguard Worker  * here if you want to experiment. Note that USE_CRITICAL could block the garbage collector.
32*e1eccf28SAndroid Build Coastguard Worker  */
33*e1eccf28SAndroid Build Coastguard Worker // #define USE_CRITICAL
34*e1eccf28SAndroid Build Coastguard Worker 
35*e1eccf28SAndroid Build Coastguard Worker class ByteArrayGuard {
36*e1eccf28SAndroid Build Coastguard Worker    private:
37*e1eccf28SAndroid Build Coastguard Worker     JNIEnv* env;
38*e1eccf28SAndroid Build Coastguard Worker     jbyteArray array;
39*e1eccf28SAndroid Build Coastguard Worker     jbyte* data;
40*e1eccf28SAndroid Build Coastguard Worker 
41*e1eccf28SAndroid Build Coastguard Worker    public:
ByteArrayGuard(JNIEnv * env,jbyteArray array)42*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard(JNIEnv* env, jbyteArray array) : env{env}, array{array} {
43*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
44*e1eccf28SAndroid Build Coastguard Worker         data = reinterpret_cast<jbyte*>(env->GetPrimitiveArrayCritical(array, nullptr));
45*e1eccf28SAndroid Build Coastguard Worker #else
46*e1eccf28SAndroid Build Coastguard Worker         data = env->GetByteArrayElements(array, nullptr);
47*e1eccf28SAndroid Build Coastguard Worker #endif
48*e1eccf28SAndroid Build Coastguard Worker     }
~ByteArrayGuard()49*e1eccf28SAndroid Build Coastguard Worker     ~ByteArrayGuard() {
50*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
51*e1eccf28SAndroid Build Coastguard Worker         env->ReleasePrimitiveArrayCritical(array, data, 0);
52*e1eccf28SAndroid Build Coastguard Worker #else
53*e1eccf28SAndroid Build Coastguard Worker         env->ReleaseByteArrayElements(array, data, 0);
54*e1eccf28SAndroid Build Coastguard Worker #endif
55*e1eccf28SAndroid Build Coastguard Worker     }
get()56*e1eccf28SAndroid Build Coastguard Worker     uint8_t* get() { return reinterpret_cast<uint8_t*>(data); }
57*e1eccf28SAndroid Build Coastguard Worker };
58*e1eccf28SAndroid Build Coastguard Worker 
59*e1eccf28SAndroid Build Coastguard Worker class IntArrayGuard {
60*e1eccf28SAndroid Build Coastguard Worker    private:
61*e1eccf28SAndroid Build Coastguard Worker     JNIEnv* env;
62*e1eccf28SAndroid Build Coastguard Worker     jintArray array;
63*e1eccf28SAndroid Build Coastguard Worker     jint* data;
64*e1eccf28SAndroid Build Coastguard Worker 
65*e1eccf28SAndroid Build Coastguard Worker    public:
IntArrayGuard(JNIEnv * env,jintArray array)66*e1eccf28SAndroid Build Coastguard Worker     IntArrayGuard(JNIEnv* env, jintArray array) : env{env}, array{array} {
67*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
68*e1eccf28SAndroid Build Coastguard Worker         data = reinterpret_cast<jint*>(env->GetPrimitiveArrayCritical(array, nullptr));
69*e1eccf28SAndroid Build Coastguard Worker #else
70*e1eccf28SAndroid Build Coastguard Worker         data = env->GetIntArrayElements(array, nullptr);
71*e1eccf28SAndroid Build Coastguard Worker #endif
72*e1eccf28SAndroid Build Coastguard Worker     }
~IntArrayGuard()73*e1eccf28SAndroid Build Coastguard Worker     ~IntArrayGuard() {
74*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
75*e1eccf28SAndroid Build Coastguard Worker         env->ReleasePrimitiveArrayCritical(array, data, 0);
76*e1eccf28SAndroid Build Coastguard Worker #else
77*e1eccf28SAndroid Build Coastguard Worker         env->ReleaseIntArrayElements(array, data, 0);
78*e1eccf28SAndroid Build Coastguard Worker #endif
79*e1eccf28SAndroid Build Coastguard Worker     }
get()80*e1eccf28SAndroid Build Coastguard Worker     int* get() { return reinterpret_cast<int*>(data); }
81*e1eccf28SAndroid Build Coastguard Worker };
82*e1eccf28SAndroid Build Coastguard Worker 
83*e1eccf28SAndroid Build Coastguard Worker class FloatArrayGuard {
84*e1eccf28SAndroid Build Coastguard Worker    private:
85*e1eccf28SAndroid Build Coastguard Worker     JNIEnv* env;
86*e1eccf28SAndroid Build Coastguard Worker     jfloatArray array;
87*e1eccf28SAndroid Build Coastguard Worker     jfloat* data;
88*e1eccf28SAndroid Build Coastguard Worker 
89*e1eccf28SAndroid Build Coastguard Worker    public:
FloatArrayGuard(JNIEnv * env,jfloatArray array)90*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard(JNIEnv* env, jfloatArray array) : env{env}, array{array} {
91*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
92*e1eccf28SAndroid Build Coastguard Worker         data = reinterpret_cast<jfloat*>(env->GetPrimitiveArrayCritical(array, nullptr));
93*e1eccf28SAndroid Build Coastguard Worker #else
94*e1eccf28SAndroid Build Coastguard Worker         data = env->GetFloatArrayElements(array, nullptr);
95*e1eccf28SAndroid Build Coastguard Worker #endif
96*e1eccf28SAndroid Build Coastguard Worker     }
~FloatArrayGuard()97*e1eccf28SAndroid Build Coastguard Worker     ~FloatArrayGuard() {
98*e1eccf28SAndroid Build Coastguard Worker #ifdef USE_CRITICAL
99*e1eccf28SAndroid Build Coastguard Worker         env->ReleasePrimitiveArrayCritical(array, data, 0);
100*e1eccf28SAndroid Build Coastguard Worker #else
101*e1eccf28SAndroid Build Coastguard Worker         env->ReleaseFloatArrayElements(array, data, 0);
102*e1eccf28SAndroid Build Coastguard Worker #endif
103*e1eccf28SAndroid Build Coastguard Worker     }
get()104*e1eccf28SAndroid Build Coastguard Worker     float* get() { return reinterpret_cast<float*>(data); }
105*e1eccf28SAndroid Build Coastguard Worker };
106*e1eccf28SAndroid Build Coastguard Worker 
107*e1eccf28SAndroid Build Coastguard Worker class BitmapGuard {
108*e1eccf28SAndroid Build Coastguard Worker    private:
109*e1eccf28SAndroid Build Coastguard Worker     JNIEnv* env;
110*e1eccf28SAndroid Build Coastguard Worker     jobject bitmap;
111*e1eccf28SAndroid Build Coastguard Worker     AndroidBitmapInfo info;
112*e1eccf28SAndroid Build Coastguard Worker     int bytesPerPixel;
113*e1eccf28SAndroid Build Coastguard Worker     void* bytes;
114*e1eccf28SAndroid Build Coastguard Worker     bool valid;
115*e1eccf28SAndroid Build Coastguard Worker 
116*e1eccf28SAndroid Build Coastguard Worker    public:
BitmapGuard(JNIEnv * env,jobject jBitmap)117*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard(JNIEnv* env, jobject jBitmap) : env{env}, bitmap{jBitmap}, bytes{nullptr} {
118*e1eccf28SAndroid Build Coastguard Worker         valid = false;
119*e1eccf28SAndroid Build Coastguard Worker         if (AndroidBitmap_getInfo(env, bitmap, &info) != ANDROID_BITMAP_RESULT_SUCCESS) {
120*e1eccf28SAndroid Build Coastguard Worker             ALOGE("AndroidBitmap_getInfo failed");
121*e1eccf28SAndroid Build Coastguard Worker             return;
122*e1eccf28SAndroid Build Coastguard Worker         }
123*e1eccf28SAndroid Build Coastguard Worker         if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888 &&
124*e1eccf28SAndroid Build Coastguard Worker             info.format != ANDROID_BITMAP_FORMAT_A_8) {
125*e1eccf28SAndroid Build Coastguard Worker             ALOGE("AndroidBitmap in the wrong format");
126*e1eccf28SAndroid Build Coastguard Worker             return;
127*e1eccf28SAndroid Build Coastguard Worker         }
128*e1eccf28SAndroid Build Coastguard Worker         bytesPerPixel = info.stride / info.width;
129*e1eccf28SAndroid Build Coastguard Worker         if (bytesPerPixel != 1 && bytesPerPixel != 4) {
130*e1eccf28SAndroid Build Coastguard Worker             ALOGE("Expected a vector size of 1 or 4. Got %d. Extra padding per line not currently "
131*e1eccf28SAndroid Build Coastguard Worker                   "supported",
132*e1eccf28SAndroid Build Coastguard Worker                   bytesPerPixel);
133*e1eccf28SAndroid Build Coastguard Worker             return;
134*e1eccf28SAndroid Build Coastguard Worker         }
135*e1eccf28SAndroid Build Coastguard Worker         if (AndroidBitmap_lockPixels(env, bitmap, &bytes) != ANDROID_BITMAP_RESULT_SUCCESS) {
136*e1eccf28SAndroid Build Coastguard Worker             ALOGE("AndroidBitmap_lockPixels failed");
137*e1eccf28SAndroid Build Coastguard Worker             return;
138*e1eccf28SAndroid Build Coastguard Worker         }
139*e1eccf28SAndroid Build Coastguard Worker         valid = true;
140*e1eccf28SAndroid Build Coastguard Worker     }
~BitmapGuard()141*e1eccf28SAndroid Build Coastguard Worker     ~BitmapGuard() {
142*e1eccf28SAndroid Build Coastguard Worker         if (valid) {
143*e1eccf28SAndroid Build Coastguard Worker             AndroidBitmap_unlockPixels(env, bitmap);
144*e1eccf28SAndroid Build Coastguard Worker         }
145*e1eccf28SAndroid Build Coastguard Worker     }
get() const146*e1eccf28SAndroid Build Coastguard Worker     uint8_t* get() const {
147*e1eccf28SAndroid Build Coastguard Worker         assert(valid);
148*e1eccf28SAndroid Build Coastguard Worker         return reinterpret_cast<uint8_t*>(bytes);
149*e1eccf28SAndroid Build Coastguard Worker     }
width() const150*e1eccf28SAndroid Build Coastguard Worker     int width() const { return info.width; }
height() const151*e1eccf28SAndroid Build Coastguard Worker     int height() const { return info.height; }
vectorSize() const152*e1eccf28SAndroid Build Coastguard Worker     int vectorSize() const { return bytesPerPixel; }
153*e1eccf28SAndroid Build Coastguard Worker };
154*e1eccf28SAndroid Build Coastguard Worker 
155*e1eccf28SAndroid Build Coastguard Worker /**
156*e1eccf28SAndroid Build Coastguard Worker  * Copies the content of Kotlin Range2d object into the equivalent C++ struct.
157*e1eccf28SAndroid Build Coastguard Worker  */
158*e1eccf28SAndroid Build Coastguard Worker class RestrictionParameter {
159*e1eccf28SAndroid Build Coastguard Worker    private:
160*e1eccf28SAndroid Build Coastguard Worker     bool isNull;
161*e1eccf28SAndroid Build Coastguard Worker     Restriction restriction;
162*e1eccf28SAndroid Build Coastguard Worker 
163*e1eccf28SAndroid Build Coastguard Worker    public:
RestrictionParameter(JNIEnv * env,jobject jRestriction)164*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter(JNIEnv* env, jobject jRestriction) : isNull{jRestriction == nullptr} {
165*e1eccf28SAndroid Build Coastguard Worker         if (isNull) {
166*e1eccf28SAndroid Build Coastguard Worker             return;
167*e1eccf28SAndroid Build Coastguard Worker         }
168*e1eccf28SAndroid Build Coastguard Worker         /* TODO Measure how long FindClass and related functions take. Consider passing the
169*e1eccf28SAndroid Build Coastguard Worker          * four values instead. This would also require setting the default when Range2D is null.
170*e1eccf28SAndroid Build Coastguard Worker          */
171*e1eccf28SAndroid Build Coastguard Worker         jclass restrictionClass = env->FindClass("android/renderscript/toolkit/Range2d");
172*e1eccf28SAndroid Build Coastguard Worker         if (restrictionClass == nullptr) {
173*e1eccf28SAndroid Build Coastguard Worker             ALOGE("RenderScriptToolit. Internal error. Could not find the Kotlin Range2d class.");
174*e1eccf28SAndroid Build Coastguard Worker             isNull = true;
175*e1eccf28SAndroid Build Coastguard Worker             return;
176*e1eccf28SAndroid Build Coastguard Worker         }
177*e1eccf28SAndroid Build Coastguard Worker         jfieldID startXId = env->GetFieldID(restrictionClass, "startX", "I");
178*e1eccf28SAndroid Build Coastguard Worker         jfieldID startYId = env->GetFieldID(restrictionClass, "startY", "I");
179*e1eccf28SAndroid Build Coastguard Worker         jfieldID endXId = env->GetFieldID(restrictionClass, "endX", "I");
180*e1eccf28SAndroid Build Coastguard Worker         jfieldID endYId = env->GetFieldID(restrictionClass, "endY", "I");
181*e1eccf28SAndroid Build Coastguard Worker         restriction.startX = env->GetIntField(jRestriction, startXId);
182*e1eccf28SAndroid Build Coastguard Worker         restriction.startY = env->GetIntField(jRestriction, startYId);
183*e1eccf28SAndroid Build Coastguard Worker         restriction.endX = env->GetIntField(jRestriction, endXId);
184*e1eccf28SAndroid Build Coastguard Worker         restriction.endY = env->GetIntField(jRestriction, endYId);
185*e1eccf28SAndroid Build Coastguard Worker     }
get()186*e1eccf28SAndroid Build Coastguard Worker     Restriction* get() { return isNull ? nullptr : &restriction; }
187*e1eccf28SAndroid Build Coastguard Worker };
188*e1eccf28SAndroid Build Coastguard Worker 
189*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT jlong JNICALL
Java_android_renderscript_toolkit_Toolkit_createNative(JNIEnv *,jobject)190*e1eccf28SAndroid Build Coastguard Worker Java_android_renderscript_toolkit_Toolkit_createNative(JNIEnv* /*env*/, jobject /*thiz*/) {
191*e1eccf28SAndroid Build Coastguard Worker     return reinterpret_cast<jlong>(new RenderScriptToolkit());
192*e1eccf28SAndroid Build Coastguard Worker }
193*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_destroyNative(JNIEnv *,jobject,jlong native_handle)194*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_destroyNative(
195*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* /*env*/, jobject /*thiz*/, jlong native_handle) {
196*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
197*e1eccf28SAndroid Build Coastguard Worker     delete toolkit;
198*e1eccf28SAndroid Build Coastguard Worker }
199*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeBlend(JNIEnv * env,jobject,jlong native_handle,jint jmode,jbyteArray source_array,jbyteArray dest_array,jint size_x,jint size_y,jobject restriction)200*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeBlend(
201*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jint jmode, jbyteArray source_array,
202*e1eccf28SAndroid Build Coastguard Worker         jbyteArray dest_array, jint size_x, jint size_y, jobject restriction) {
203*e1eccf28SAndroid Build Coastguard Worker     auto toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
204*e1eccf28SAndroid Build Coastguard Worker     auto mode = static_cast<RenderScriptToolkit::BlendingMode>(jmode);
205*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
206*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard source{env, source_array};
207*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard dest{env, dest_array};
208*e1eccf28SAndroid Build Coastguard Worker 
209*e1eccf28SAndroid Build Coastguard Worker     toolkit->blend(mode, source.get(), dest.get(), size_x, size_y, restrict.get());
210*e1eccf28SAndroid Build Coastguard Worker }
211*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeBlendBitmap(JNIEnv * env,jobject,jlong native_handle,jint jmode,jobject source_bitmap,jobject dest_bitmap,jobject restriction)212*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeBlendBitmap(
213*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jint jmode, jobject source_bitmap,
214*e1eccf28SAndroid Build Coastguard Worker         jobject dest_bitmap, jobject restriction) {
215*e1eccf28SAndroid Build Coastguard Worker     auto toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
216*e1eccf28SAndroid Build Coastguard Worker     auto mode = static_cast<RenderScriptToolkit::BlendingMode>(jmode);
217*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
218*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard source{env, source_bitmap};
219*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard dest{env, dest_bitmap};
220*e1eccf28SAndroid Build Coastguard Worker 
221*e1eccf28SAndroid Build Coastguard Worker     toolkit->blend(mode, source.get(), dest.get(), source.width(), source.height(), restrict.get());
222*e1eccf28SAndroid Build Coastguard Worker }
223*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeBlur(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint vectorSize,jint size_x,jint size_y,jint radius,jbyteArray output_array,jobject restriction)224*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeBlur(
225*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array, jint vectorSize,
226*e1eccf28SAndroid Build Coastguard Worker         jint size_x, jint size_y, jint radius, jbyteArray output_array, jobject restriction) {
227*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
228*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
229*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
230*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
231*e1eccf28SAndroid Build Coastguard Worker 
232*e1eccf28SAndroid Build Coastguard Worker     toolkit->blur(input.get(), output.get(), size_x, size_y, vectorSize, radius, restrict.get());
233*e1eccf28SAndroid Build Coastguard Worker }
234*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeBlurBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jint radius,jobject restriction)235*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeBlurBitmap(
236*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
237*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jint radius, jobject restriction) {
238*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
239*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
240*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
241*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
242*e1eccf28SAndroid Build Coastguard Worker 
243*e1eccf28SAndroid Build Coastguard Worker     toolkit->blur(input.get(), output.get(), input.width(), input.height(), input.vectorSize(),
244*e1eccf28SAndroid Build Coastguard Worker                   radius, restrict.get());
245*e1eccf28SAndroid Build Coastguard Worker }
246*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeColorMatrix(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint input_vector_size,jint size_x,jint size_y,jbyteArray output_array,jint output_vector_size,jfloatArray jmatrix,jfloatArray add_vector,jobject restriction)247*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeColorMatrix(
248*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
249*e1eccf28SAndroid Build Coastguard Worker         jint input_vector_size, jint size_x, jint size_y, jbyteArray output_array,
250*e1eccf28SAndroid Build Coastguard Worker         jint output_vector_size, jfloatArray jmatrix, jfloatArray add_vector, jobject restriction) {
251*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
252*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
253*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
254*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
255*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard matrix{env, jmatrix};
256*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard add{env, add_vector};
257*e1eccf28SAndroid Build Coastguard Worker 
258*e1eccf28SAndroid Build Coastguard Worker     toolkit->colorMatrix(input.get(), output.get(), input_vector_size, output_vector_size, size_x,
259*e1eccf28SAndroid Build Coastguard Worker                          size_y, matrix.get(), add.get(), restrict.get());
260*e1eccf28SAndroid Build Coastguard Worker }
261*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeColorMatrixBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jfloatArray jmatrix,jfloatArray add_vector,jobject restriction)262*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeColorMatrixBitmap(
263*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
264*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jfloatArray jmatrix, jfloatArray add_vector, jobject restriction) {
265*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
266*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
267*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
268*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
269*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard matrix{env, jmatrix};
270*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard add{env, add_vector};
271*e1eccf28SAndroid Build Coastguard Worker 
272*e1eccf28SAndroid Build Coastguard Worker     toolkit->colorMatrix(input.get(), output.get(), input.vectorSize(), output.vectorSize(),
273*e1eccf28SAndroid Build Coastguard Worker                          input.width(), input.height(), matrix.get(), add.get(), restrict.get());
274*e1eccf28SAndroid Build Coastguard Worker }
275*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeConvolve(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint vectorSize,jint size_x,jint size_y,jbyteArray output_array,jfloatArray coefficients,jobject restriction)276*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeConvolve(
277*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array, jint vectorSize,
278*e1eccf28SAndroid Build Coastguard Worker         jint size_x, jint size_y, jbyteArray output_array, jfloatArray coefficients,
279*e1eccf28SAndroid Build Coastguard Worker         jobject restriction) {
280*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
281*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
282*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
283*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
284*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard coeffs{env, coefficients};
285*e1eccf28SAndroid Build Coastguard Worker 
286*e1eccf28SAndroid Build Coastguard Worker     switch (env->GetArrayLength(coefficients)) {
287*e1eccf28SAndroid Build Coastguard Worker         case 9:
288*e1eccf28SAndroid Build Coastguard Worker             toolkit->convolve3x3(input.get(), output.get(), vectorSize, size_x, size_y,
289*e1eccf28SAndroid Build Coastguard Worker                                  coeffs.get(), restrict.get());
290*e1eccf28SAndroid Build Coastguard Worker             break;
291*e1eccf28SAndroid Build Coastguard Worker         case 25:
292*e1eccf28SAndroid Build Coastguard Worker             toolkit->convolve5x5(input.get(), output.get(), vectorSize, size_x, size_y,
293*e1eccf28SAndroid Build Coastguard Worker                                  coeffs.get(), restrict.get());
294*e1eccf28SAndroid Build Coastguard Worker             break;
295*e1eccf28SAndroid Build Coastguard Worker     }
296*e1eccf28SAndroid Build Coastguard Worker }
297*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeConvolveBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jfloatArray coefficients,jobject restriction)298*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeConvolveBitmap(
299*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
300*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jfloatArray coefficients, jobject restriction) {
301*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
302*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
303*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
304*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
305*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard coeffs{env, coefficients};
306*e1eccf28SAndroid Build Coastguard Worker 
307*e1eccf28SAndroid Build Coastguard Worker     switch (env->GetArrayLength(coefficients)) {
308*e1eccf28SAndroid Build Coastguard Worker         case 9:
309*e1eccf28SAndroid Build Coastguard Worker             toolkit->convolve3x3(input.get(), output.get(), input.vectorSize(), input.width(),
310*e1eccf28SAndroid Build Coastguard Worker                                  input.height(), coeffs.get(), restrict.get());
311*e1eccf28SAndroid Build Coastguard Worker             break;
312*e1eccf28SAndroid Build Coastguard Worker         case 25:
313*e1eccf28SAndroid Build Coastguard Worker             toolkit->convolve5x5(input.get(), output.get(), input.vectorSize(), input.width(),
314*e1eccf28SAndroid Build Coastguard Worker                                  input.height(), coeffs.get(), restrict.get());
315*e1eccf28SAndroid Build Coastguard Worker             break;
316*e1eccf28SAndroid Build Coastguard Worker     }
317*e1eccf28SAndroid Build Coastguard Worker }
318*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeHistogram(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint vector_size,jint size_x,jint size_y,jintArray output_array,jobject restriction)319*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeHistogram(
320*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
321*e1eccf28SAndroid Build Coastguard Worker         jint vector_size, jint size_x, jint size_y, jintArray output_array, jobject restriction) {
322*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
323*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
324*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
325*e1eccf28SAndroid Build Coastguard Worker     IntArrayGuard output{env, output_array};
326*e1eccf28SAndroid Build Coastguard Worker 
327*e1eccf28SAndroid Build Coastguard Worker     toolkit->histogram(input.get(), output.get(), size_x, size_y, vector_size, restrict.get());
328*e1eccf28SAndroid Build Coastguard Worker }
329*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeHistogramBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jintArray output_array,jobject restriction)330*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeHistogramBitmap(
331*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
332*e1eccf28SAndroid Build Coastguard Worker         jintArray output_array, jobject restriction) {
333*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
334*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
335*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
336*e1eccf28SAndroid Build Coastguard Worker     IntArrayGuard output{env, output_array};
337*e1eccf28SAndroid Build Coastguard Worker 
338*e1eccf28SAndroid Build Coastguard Worker     toolkit->histogram(input.get(), output.get(), input.width(), input.height(), input.vectorSize(),
339*e1eccf28SAndroid Build Coastguard Worker                        restrict.get());
340*e1eccf28SAndroid Build Coastguard Worker }
341*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeHistogramDot(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint vector_size,jint size_x,jint size_y,jintArray output_array,jfloatArray coefficients,jobject restriction)342*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeHistogramDot(
343*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
344*e1eccf28SAndroid Build Coastguard Worker         jint vector_size, jint size_x, jint size_y, jintArray output_array,
345*e1eccf28SAndroid Build Coastguard Worker         jfloatArray coefficients, jobject restriction) {
346*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
347*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
348*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
349*e1eccf28SAndroid Build Coastguard Worker     IntArrayGuard output{env, output_array};
350*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard coeffs{env, coefficients};
351*e1eccf28SAndroid Build Coastguard Worker 
352*e1eccf28SAndroid Build Coastguard Worker     toolkit->histogramDot(input.get(), output.get(), size_x, size_y, vector_size, coeffs.get(),
353*e1eccf28SAndroid Build Coastguard Worker                           restrict.get());
354*e1eccf28SAndroid Build Coastguard Worker }
355*e1eccf28SAndroid Build Coastguard Worker 
356*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT
Java_android_renderscript_toolkit_Toolkit_nativeHistogramDotBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jintArray output_array,jfloatArray coefficients,jobject restriction)357*e1eccf28SAndroid Build Coastguard Worker void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeHistogramDotBitmap(
358*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
359*e1eccf28SAndroid Build Coastguard Worker         jintArray output_array, jfloatArray coefficients, jobject restriction) {
360*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
361*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
362*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
363*e1eccf28SAndroid Build Coastguard Worker     IntArrayGuard output{env, output_array};
364*e1eccf28SAndroid Build Coastguard Worker     FloatArrayGuard coeffs{env, coefficients};
365*e1eccf28SAndroid Build Coastguard Worker 
366*e1eccf28SAndroid Build Coastguard Worker     toolkit->histogramDot(input.get(), output.get(), input.width(), input.height(),
367*e1eccf28SAndroid Build Coastguard Worker                           input.vectorSize(), coeffs.get(), restrict.get());
368*e1eccf28SAndroid Build Coastguard Worker }
369*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeLut(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jbyteArray output_array,jint size_x,jint size_y,jbyteArray red_table,jbyteArray green_table,jbyteArray blue_table,jbyteArray alpha_table,jobject restriction)370*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeLut(
371*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
372*e1eccf28SAndroid Build Coastguard Worker         jbyteArray output_array, jint size_x, jint size_y, jbyteArray red_table,
373*e1eccf28SAndroid Build Coastguard Worker         jbyteArray green_table, jbyteArray blue_table, jbyteArray alpha_table,
374*e1eccf28SAndroid Build Coastguard Worker         jobject restriction) {
375*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
376*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
377*e1eccf28SAndroid Build Coastguard Worker 
378*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
379*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
380*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard red{env, red_table};
381*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard green{env, green_table};
382*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard blue{env, blue_table};
383*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard alpha{env, alpha_table};
384*e1eccf28SAndroid Build Coastguard Worker 
385*e1eccf28SAndroid Build Coastguard Worker     toolkit->lut(input.get(), output.get(), size_x, size_y, red.get(), green.get(), blue.get(),
386*e1eccf28SAndroid Build Coastguard Worker                  alpha.get(), restrict.get());
387*e1eccf28SAndroid Build Coastguard Worker }
388*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeLutBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jbyteArray red_table,jbyteArray green_table,jbyteArray blue_table,jbyteArray alpha_table,jobject restriction)389*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeLutBitmap(
390*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
391*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jbyteArray red_table, jbyteArray green_table, jbyteArray blue_table,
392*e1eccf28SAndroid Build Coastguard Worker         jbyteArray alpha_table, jobject restriction) {
393*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
394*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
395*e1eccf28SAndroid Build Coastguard Worker 
396*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
397*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
398*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard red{env, red_table};
399*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard green{env, green_table};
400*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard blue{env, blue_table};
401*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard alpha{env, alpha_table};
402*e1eccf28SAndroid Build Coastguard Worker 
403*e1eccf28SAndroid Build Coastguard Worker     toolkit->lut(input.get(), output.get(), input.width(), input.height(), red.get(), green.get(),
404*e1eccf28SAndroid Build Coastguard Worker                  blue.get(), alpha.get(), restrict.get());
405*e1eccf28SAndroid Build Coastguard Worker }
406*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeLut3d(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jbyteArray output_array,jint size_x,jint size_y,jbyteArray cube_values,jint cubeSizeX,jint cubeSizeY,jint cubeSizeZ,jobject restriction)407*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeLut3d(
408*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
409*e1eccf28SAndroid Build Coastguard Worker         jbyteArray output_array, jint size_x, jint size_y, jbyteArray cube_values, jint cubeSizeX,
410*e1eccf28SAndroid Build Coastguard Worker         jint cubeSizeY, jint cubeSizeZ, jobject restriction) {
411*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
412*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
413*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
414*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
415*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard cube{env, cube_values};
416*e1eccf28SAndroid Build Coastguard Worker 
417*e1eccf28SAndroid Build Coastguard Worker     toolkit->lut3d(input.get(), output.get(), size_x, size_y, cube.get(), cubeSizeX, cubeSizeY,
418*e1eccf28SAndroid Build Coastguard Worker                    cubeSizeZ, restrict.get());
419*e1eccf28SAndroid Build Coastguard Worker }
420*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeLut3dBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jbyteArray cube_values,jint cubeSizeX,jint cubeSizeY,jint cubeSizeZ,jobject restriction)421*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeLut3dBitmap(
422*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
423*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jbyteArray cube_values, jint cubeSizeX, jint cubeSizeY,
424*e1eccf28SAndroid Build Coastguard Worker         jint cubeSizeZ, jobject restriction) {
425*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
426*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
427*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
428*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
429*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard cube{env, cube_values};
430*e1eccf28SAndroid Build Coastguard Worker 
431*e1eccf28SAndroid Build Coastguard Worker     toolkit->lut3d(input.get(), output.get(), input.width(), input.height(), cube.get(), cubeSizeX,
432*e1eccf28SAndroid Build Coastguard Worker                    cubeSizeY, cubeSizeZ, restrict.get());
433*e1eccf28SAndroid Build Coastguard Worker }
434*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeResize(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint vector_size,jint input_size_x,jint input_size_y,jbyteArray output_array,jint output_size_x,jint output_size_y,jobject restriction)435*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeResize(
436*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
437*e1eccf28SAndroid Build Coastguard Worker         jint vector_size, jint input_size_x, jint input_size_y, jbyteArray output_array,
438*e1eccf28SAndroid Build Coastguard Worker         jint output_size_x, jint output_size_y, jobject restriction) {
439*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
440*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
441*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
442*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
443*e1eccf28SAndroid Build Coastguard Worker 
444*e1eccf28SAndroid Build Coastguard Worker     toolkit->resize(input.get(), output.get(), input_size_x, input_size_y, vector_size,
445*e1eccf28SAndroid Build Coastguard Worker                     output_size_x, output_size_y, restrict.get());
446*e1eccf28SAndroid Build Coastguard Worker }
447*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeResizeBitmap(JNIEnv * env,jobject,jlong native_handle,jobject input_bitmap,jobject output_bitmap,jobject restriction)448*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeResizeBitmap(
449*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jobject input_bitmap,
450*e1eccf28SAndroid Build Coastguard Worker         jobject output_bitmap, jobject restriction) {
451*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
452*e1eccf28SAndroid Build Coastguard Worker     RestrictionParameter restrict {env, restriction};
453*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard input{env, input_bitmap};
454*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
455*e1eccf28SAndroid Build Coastguard Worker 
456*e1eccf28SAndroid Build Coastguard Worker     toolkit->resize(input.get(), output.get(), input.width(), input.height(), input.vectorSize(),
457*e1eccf28SAndroid Build Coastguard Worker                     output.width(), output.height(), restrict.get());
458*e1eccf28SAndroid Build Coastguard Worker }
459*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeYuvToRgb(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jbyteArray output_array,jint size_x,jint size_y,jint format)460*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeYuvToRgb(
461*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array,
462*e1eccf28SAndroid Build Coastguard Worker         jbyteArray output_array, jint size_x, jint size_y, jint format) {
463*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
464*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
465*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard output{env, output_array};
466*e1eccf28SAndroid Build Coastguard Worker 
467*e1eccf28SAndroid Build Coastguard Worker     toolkit->yuvToRgb(input.get(), output.get(), size_x, size_y,
468*e1eccf28SAndroid Build Coastguard Worker                       static_cast<RenderScriptToolkit::YuvFormat>(format));
469*e1eccf28SAndroid Build Coastguard Worker }
470*e1eccf28SAndroid Build Coastguard Worker 
Java_android_renderscript_toolkit_Toolkit_nativeYuvToRgbBitmap(JNIEnv * env,jobject,jlong native_handle,jbyteArray input_array,jint size_x,jint size_y,jobject output_bitmap,jint format)471*e1eccf28SAndroid Build Coastguard Worker extern "C" JNIEXPORT void JNICALL Java_android_renderscript_toolkit_Toolkit_nativeYuvToRgbBitmap(
472*e1eccf28SAndroid Build Coastguard Worker         JNIEnv* env, jobject /*thiz*/, jlong native_handle, jbyteArray input_array, jint size_x,
473*e1eccf28SAndroid Build Coastguard Worker         jint size_y, jobject output_bitmap, jint format) {
474*e1eccf28SAndroid Build Coastguard Worker     RenderScriptToolkit* toolkit = reinterpret_cast<RenderScriptToolkit*>(native_handle);
475*e1eccf28SAndroid Build Coastguard Worker     BitmapGuard output{env, output_bitmap};
476*e1eccf28SAndroid Build Coastguard Worker     ByteArrayGuard input{env, input_array};
477*e1eccf28SAndroid Build Coastguard Worker 
478*e1eccf28SAndroid Build Coastguard Worker     toolkit->yuvToRgb(input.get(), output.get(), size_x, size_y,
479*e1eccf28SAndroid Build Coastguard Worker                       static_cast<RenderScriptToolkit::YuvFormat>(format));
480*e1eccf28SAndroid Build Coastguard Worker }
481