165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/*
265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project
365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License");
565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License.
665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at
765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *      http://www.apache.org/licenses/LICENSE-2.0
965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software
1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS,
1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and
1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License.
1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "jni/jni_vertex_frame.h"
1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "jni/jni_util.h"
1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "native/core/vertex_frame.h"
2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennusing android::filterfw::VertexFrame;
2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjboolean Java_android_filterfw_core_VertexFrame_nativeAllocate(JNIEnv* env,
2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                               jobject thiz,
2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                               jint size) {
2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return ToJBool(WrapObjectInJava(new VertexFrame(size), env, thiz, true));
2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjboolean Java_android_filterfw_core_VertexFrame_nativeDeallocate(JNIEnv* env, jobject thiz) {
3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return ToJBool(DeleteNativeObject<VertexFrame>(env, thiz));
3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjboolean Java_android_filterfw_core_VertexFrame_setNativeInts(JNIEnv* env,
3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jobject thiz,
3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jintArray ints) {
3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  VertexFrame* frame = ConvertFromJava<VertexFrame>(env, thiz);
3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  if (frame && ints) {
4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    jint* int_ptr = env->GetIntArrayElements(ints, NULL);
4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    const int length = env->GetArrayLength(ints);
4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    if (int_ptr) {
4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      const bool success = frame->WriteData(reinterpret_cast<const uint8_t*>(int_ptr),
4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                            length * sizeof(jint));
4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      env->ReleaseIntArrayElements(ints, int_ptr, JNI_ABORT);
4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      return ToJBool(success);
4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  }
4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return JNI_FALSE;
5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjboolean Java_android_filterfw_core_VertexFrame_setNativeFloats(JNIEnv* env,
5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                                jobject thiz,
5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                                jfloatArray floats) {
5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  VertexFrame* frame = ConvertFromJava<VertexFrame>(env, thiz);
5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  if (frame && floats) {
5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    jfloat* float_ptr = env->GetFloatArrayElements(floats, NULL);
5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    const int length = env->GetArrayLength(floats);
5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    if (float_ptr) {
6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      const bool success = frame->WriteData(reinterpret_cast<const uint8_t*>(float_ptr),
6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                            length * sizeof(jfloat));
6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      env->ReleaseFloatArrayElements(floats, float_ptr, JNI_ABORT);
6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      return ToJBool(success);
6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  }
6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return JNI_FALSE;
6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjboolean Java_android_filterfw_core_VertexFrame_setNativeData(JNIEnv* env,
7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jobject thiz,
7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jbyteArray data,
7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jint offset,
7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                                              jint length) {
7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  VertexFrame* frame = ConvertFromJava<VertexFrame>(env, thiz);
7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  if (frame && data) {
7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    jbyte* bytes = env->GetByteArrayElements(data, NULL);
7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    if (bytes) {
7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      const bool success = frame->WriteData(reinterpret_cast<const uint8_t*>(bytes + offset),
7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                            length);
8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      env->ReleaseByteArrayElements(data, bytes, JNI_ABORT);
8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn      return ToJBool(success);
8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  }
8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return JNI_FALSE;
8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennjint Java_android_filterfw_core_VertexFrame_getNativeVboId(JNIEnv* env, jobject thiz) {
8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  VertexFrame* frame = ConvertFromJava<VertexFrame>(env, thiz);
8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  return frame ? frame->GetVboId() : -1;
9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
91