mas01mj@722
|
1 #include "org_omras2_AudioDB.h"
|
mas01mj@722
|
2 #include "org_omras2_AudioDB_Mode.h"
|
mas01mj@722
|
3 #include <jni.h>
|
mas01mj@722
|
4 #include "audioDB_API.h"
|
mas01mj@724
|
5 #include <stdlib.h>
|
mas01mj@722
|
6
|
mas01mj@722
|
7 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1create (JNIEnv *env, jobject obj, jstring path, jint datasize, jint ntracks, jint datadim)
|
mas01mj@722
|
8 {
|
mas01mj@722
|
9 char buf[256];
|
mas01mj@722
|
10 const char *str;
|
mas01mj@722
|
11 str = (*env)->GetStringUTFChars(env, path, NULL);
|
mas01mj@722
|
12 if (str == NULL)
|
mas01mj@722
|
13 return;
|
mas01mj@722
|
14
|
mas01mj@722
|
15 adb_t *handle;
|
mas01mj@722
|
16 handle = audiodb_create(str, datasize, ntracks, datadim);
|
mas01mj@722
|
17 if(!handle)
|
mas01mj@722
|
18 return JNI_FALSE;
|
mas01mj@724
|
19
|
mas01mj@724
|
20 jclass adbClass = (*env)->GetObjectClass(env, obj);
|
mas01mj@724
|
21 jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
|
mas01mj@724
|
22 if(fid == NULL) {
|
mas01mj@724
|
23 return;
|
mas01mj@724
|
24 }
|
mas01mj@724
|
25 (*env)->SetLongField(env, obj, fid, (long)handle);
|
mas01mj@724
|
26 (*env)->DeleteLocalRef(env, adbClass);
|
mas01mj@722
|
27 (*env)->ReleaseStringUTFChars(env, path, str);
|
mas01mj@722
|
28 return JNI_TRUE;
|
mas01mj@722
|
29 }
|
mas01mj@722
|
30
|
mas01mj@722
|
31 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1open (JNIEnv *env, jobject obj, jstring path, jobject mode)
|
mas01mj@722
|
32 {
|
mas01mj@722
|
33 jclass modeClass = (*env)->FindClass(env, "org/omras2/AudioDB$Mode");
|
mas01mj@722
|
34 jmethodID getNameMethod = (*env)->GetMethodID(env, modeClass, "name", "()Ljava/lang/String;");
|
mas01mj@722
|
35 jstring value = (jstring)(*env)->CallObjectMethod(env, mode, getNameMethod);
|
mas01mj@722
|
36 const char* openMode = (*env)->GetStringUTFChars(env, value, 0);
|
mas01mj@722
|
37
|
mas01mj@722
|
38 return JNI_TRUE;
|
mas01mj@722
|
39 }
|
mas01mj@722
|
40
|
mas01mj@722
|
41 JNIEXPORT void JNICALL Java_org_omras2_AudioDB_insert(JNIEnv *env, jobject obj)
|
mas01mj@722
|
42 {
|
mas01mj@722
|
43 }
|
mas01mj@722
|
44
|
mas01mj@722
|
45 JNIEXPORT void JNICALL Java_org_omras2_AudioDB_query(JNIEnv *env, jobject obj)
|
mas01mj@722
|
46 {
|
mas01mj@722
|
47 }
|
mas01mj@722
|
48
|
mas01mj@724
|
49 JNIEXPORT jobject JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj)
|
mas01mj@722
|
50 {
|
mas01mj@724
|
51
|
mas01mj@724
|
52 // Fetch the adb pointer
|
mas01mj@724
|
53
|
mas01mj@724
|
54 adb_t *handle;
|
mas01mj@724
|
55
|
mas01mj@724
|
56 jclass adbClass = (*env)->GetObjectClass(env, obj);
|
mas01mj@724
|
57 jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
|
mas01mj@724
|
58 if(fid == NULL) {
|
mas01mj@724
|
59 return;
|
mas01mj@724
|
60 }
|
mas01mj@724
|
61
|
mas01mj@724
|
62 handle = (adb_t*)((*env)->GetLongField(env, obj, fid));
|
mas01mj@724
|
63 (*env)->DeleteLocalRef(env, adbClass);
|
mas01mj@724
|
64
|
mas01mj@724
|
65 adb_status_t *status;
|
mas01mj@724
|
66 status = (adb_status_t *)malloc(sizeof(adb_status_t));
|
mas01mj@724
|
67 int flags = audiodb_status(handle, status);
|
mas01mj@724
|
68
|
mas01mj@724
|
69 jclass statusClass = (*env)->FindClass(env, "org/omras2/Status");
|
mas01mj@724
|
70 if(statusClass == NULL) {
|
mas01mj@724
|
71 return NULL;
|
mas01mj@724
|
72 }
|
mas01mj@724
|
73 jmethodID cid = (*env)->GetMethodID(env, statusClass, "<init>", "()V");
|
mas01mj@724
|
74 if(cid == NULL) {
|
mas01mj@724
|
75 return NULL;
|
mas01mj@724
|
76 }
|
mas01mj@724
|
77
|
mas01mj@724
|
78 jobject result = (*env)->NewObject(env, statusClass, cid);
|
mas01mj@724
|
79
|
mas01mj@724
|
80 fid = (*env)->GetFieldID(env, statusClass, "numFiles", "I");
|
mas01mj@724
|
81 if(fid == NULL) {
|
mas01mj@724
|
82 return;
|
mas01mj@724
|
83 }
|
mas01mj@724
|
84 (*env)->SetIntField(env, result, fid, status->numFiles);
|
mas01mj@724
|
85
|
mas01mj@724
|
86 (*env)->DeleteLocalRef(env, statusClass);
|
mas01mj@724
|
87
|
mas01mj@724
|
88 return result;
|
mas01mj@722
|
89 }
|
mas01mj@722
|
90
|