Info library loading implemeneted.

This commit is contained in:
Alexander Smorkalov 2012-12-04 16:34:53 +04:00
parent 9823b7cd08
commit 0f64f847b2
2 changed files with 83 additions and 12 deletions

View File

@ -1,37 +1,108 @@
#include "OpenCVLibraryInfo.h" #include "OpenCVLibraryInfo.h"
#include "EngineCommon.h"
#include <utils/Log.h>
#include <dlfcn.h>
JNIEXPORT jlong JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_open JNIEXPORT jlong JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_open
(JNIEnv * env, jobject, jstring) (JNIEnv * env, jobject, jstring str)
{ {
return 255; const char* infoLibPath = env->GetStringUTFChars(str, NULL);
if (infoLibPath == NULL)
return 0;
LOGD("Trying to load info library \"%s\"", infoLibPath);
void* handle;
handle = dlopen(infoLibPath, RTLD_LAZY);
if (handle == NULL)
LOGI("Info library not found by path \"%s\"", infoLibPath);
return (jlong)handle;
} }
JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getPackageName JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getPackageName
(JNIEnv* env, jobject, jlong) (JNIEnv* env, jobject, jlong handle)
{ {
return env->NewStringUTF("org.opencv.lib_v24_tegra3"); const char* (*info_func)();
const char* result;
const char* error;
dlerror();
*(void **) (&info_func) = dlsym((void*)handle, "GetPackageName");
if ((error = dlerror()) == NULL)
result = (*info_func)();
else
{
LOGE("dlsym error: \"%s\"", error);
result = "unknown";
}
return env->NewStringUTF(result);
} }
JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getPublicName JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getPublicName
(JNIEnv* env, jobject, jlong) (JNIEnv* env, jobject, jlong)
{ {
return env->NewStringUTF("OpenCV library for Tegra3"); const char* (*info_func)();
const char* result;
const char* error;
dlerror();
*(void **) (&info_func) = dlsym((void*)handle, "GetPublicName");
if ((error = dlerror()) == NULL)
result = (*info_func)();
else
{
LOGE("dlsym error: \"%s\"", error);
result = "unknown";
}
return env->NewStringUTF(result);
} }
JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getLibraryList JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getLibraryList
(JNIEnv* env, jobject, jlong) (JNIEnv* env, jobject, jlong handle)
{ {
return env->NewStringUTF(""); const char* (*info_func)();
const char* result;
const char* error;
dlerror();
*(void **) (&info_func) = dlsym((void*)handle, "GetLibraryList");
if ((error = dlerror()) == NULL)
result = (*info_func)();
else
{
LOGE("dlsym error: \"%s\"", error);
result = "unknown";
}
return env->NewStringUTF(result);
} }
JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getVersionName JNIEXPORT jstring JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_getVersionName
(JNIEnv* env, jobject, jlong) (JNIEnv* env, jobject, jlong handle)
{ {
return env->NewStringUTF("9.9"); const char* (*info_func)();
const char* result;
const char* error;
dlerror();
*(void **) (&info_func) = dlsym((void*)handle, "GetRevision");
if ((error = dlerror()) == NULL)
result = (*info_func)();
else
{
LOGE("dlsym error: \"%s\"", error);
result = "unknown";
}
return env->NewStringUTF(result);
} }
JNIEXPORT void JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_close JNIEXPORT void JNICALL Java_org_opencv_engine_OpenCVLibraryInfo_close
(JNIEnv* env, jobject, jlong) (JNIEnv*, jobject, jlong handle)
{ {
dlclose((void*)handle);
} }

View File

@ -2,7 +2,7 @@ package org.opencv.engine;
public class OpenCVLibraryInfo { public class OpenCVLibraryInfo {
public OpenCVLibraryInfo(String packagePath) { public OpenCVLibraryInfo(String packagePath) {
mNativeObj = open(packagePath); mNativeObj = open(packagePath + "/libopencv_info.so");
if (mNativeObj != 0) { if (mNativeObj != 0) {
mPackageName = getPackageName(mNativeObj); mPackageName = getPackageName(mNativeObj);
mLibraryList = getLibraryList(mNativeObj); mLibraryList = getLibraryList(mNativeObj);