jintArray Java_android_filterfw_core_GLFrame_getNativeInts(JNIEnv* env, jobject thiz) { GLFrame* frame = ConvertFromJava<GLFrame>(env, thiz); if (frame && frame->Size() > 0 && (frame->Size() % sizeof(jint) == 0)) { jintArray result = env->NewIntArray(frame->Size() / sizeof(jint)); jint* data = env->GetIntArrayElements(result, NULL); frame->CopyDataTo(reinterpret_cast<uint8_t*>(data), frame->Size()); env->ReleaseIntArrayElements(result, data, 0); return result; } return NULL; }
jbyteArray Java_android_filterfw_core_GLFrame_getNativeData(JNIEnv* env, jobject thiz) { GLFrame* frame = ConvertFromJava<GLFrame>(env, thiz); if (frame && frame->Size() > 0) { jbyteArray result = env->NewByteArray(frame->Size()); jbyte* data = env->GetByteArrayElements(result, NULL); frame->CopyDataTo(reinterpret_cast<uint8_t*>(data), frame->Size()); env->ReleaseByteArrayElements(result, data, 0); return result; } return NULL; }
jfloatArray Java_android_filterfw_core_GLFrame_getNativeFloats(JNIEnv* env, jobject thiz) { GLFrame* frame = ConvertFromJava<GLFrame>(env, thiz); if (frame && frame->Size() > 0) { // Create the result array jfloatArray result = env->NewFloatArray(frame->Size()); jfloat* float_array = env->GetFloatArrayElements(result, NULL); // Read the frame pixels uint8_t* pixels = new uint8_t[frame->Size()]; frame->CopyDataTo(pixels, frame->Size()); // Convert them to floats ConvertRGBAToFloats(pixels, frame->Size(), float_array); // Clean-up delete[] pixels; env->ReleaseFloatArrayElements(result, float_array, 0); return result; } return NULL; }
jboolean Java_android_filterfw_core_GLFrame_getNativeBitmap(JNIEnv* env, jobject thiz, jobject bitmap) { GLFrame* frame = ConvertFromJava<GLFrame>(env, thiz); if (frame && bitmap) { uint8_t* pixels; const int result = AndroidBitmap_lockPixels(env, bitmap, reinterpret_cast<void**>(&pixels)); if (result == ANDROID_BITMAP_RESUT_SUCCESS) { frame->CopyDataTo(pixels, frame->Size()); return (AndroidBitmap_unlockPixels(env, bitmap) == ANDROID_BITMAP_RESUT_SUCCESS); } } return JNI_FALSE; }