130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni/* 230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Copyright (C) 2011 The Android Open Source Project 330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Licensed under the Apache License, Version 2.0 (the "License"); 530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * you may not use this file except in compliance with the License. 630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * You may obtain a copy of the License at 730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * http://www.apache.org/licenses/LICENSE-2.0 930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * 1030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Unless required by applicable law or agreed to in writing, software 1130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * distributed under the License is distributed on an "AS IS" BASIS, 1230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * See the License for the specific language governing permissions and 1430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * limitations under the License. 1530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni */ 1630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 17e9912de34684f1b8deaf36bcf77686152d33765dEino-Ville Talvala#ifndef ANDROID_FILTEFW_JNI_NATIVE_BUFFER_H 18e9912de34684f1b8deaf36bcf77686152d33765dEino-Ville Talvala#define ANDROID_FILTEFW_JNI_NATIVE_BUFFER_H 1930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 2030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#include <jni.h> 2130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 22cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn// Internal Buffer Unwrapping functions //////////////////////////////////////////////////////////// 23cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn/** 24cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * Given a Java NativeBuffer instance, get access to the underlying C pointer and its size. The 25cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * size argument may be NULL, in which case the object is not queried for its size. 26cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn **/ 27cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Rennchar* GetJBufferData(JNIEnv* env, jobject buffer, int* size); 28cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn 29cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn/** 30cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * Attach a given C data buffer and its size to a given allocated Java NativeBuffer instance. After 31cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * this call, the java instance will have the given C buffer as its backing. Note, that the Java 32cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * instance contains the flag on whether or not it owns the buffer or not, so make sure it is what 33cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn * you expect. 34cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn **/ 35cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Rennbool AttachDataToJBuffer(JNIEnv* env, jobject buffer, char* data, int size); 36cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn 3730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#ifdef __cplusplus 3830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniextern "C" { 3930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#endif 4030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 41cfda0a38d6f394724e0cbd831ec9bc71d951fc74Marius Renn// JNI Wrappers //////////////////////////////////////////////////////////////////////////////////// 4230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJNIEXPORT jboolean JNICALL 4330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJava_android_filterfw_core_NativeBuffer_allocate(JNIEnv* env, jobject thiz, jint size); 4430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 4530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJNIEXPORT jboolean JNICALL 4630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJava_android_filterfw_core_NativeBuffer_deallocate(JNIEnv* env, jobject thiz, jboolean owns_data); 4730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 4830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJNIEXPORT jboolean JNICALL 4930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo CarceroniJava_android_filterfw_core_NativeBuffer_nativeCopyTo(JNIEnv* env, jobject thiz, jobject new_buffer); 5030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 5130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#ifdef __cplusplus 5230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni} 5330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni#endif 5430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni 55e9912de34684f1b8deaf36bcf77686152d33765dEino-Ville Talvala#endif // ANDROID_FILTEFW_JNI_NATIVE_BUFFER_H 56