comparison bindings/java/ext/libAudioDB_JNI.c @ 724:11fd16e1d8b3

* Initial code for status call (populating Status) * Storing adb handle within Java object
author mas01mj
date Wed, 14 Jul 2010 17:21:24 +0000
parents 56e97aa9d0ae
children 7e1fa27b67ee
comparison
equal deleted inserted replaced
723:ca11b72f92b6 724:11fd16e1d8b3
1 #include "org_omras2_AudioDB.h" 1 #include "org_omras2_AudioDB.h"
2 #include "org_omras2_AudioDB_Mode.h" 2 #include "org_omras2_AudioDB_Mode.h"
3 #include <jni.h> 3 #include <jni.h>
4 #include "audioDB_API.h" 4 #include "audioDB_API.h"
5 5 #include <stdlib.h>
6 6
7 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1create (JNIEnv *env, jobject obj, jstring path, jint datasize, jint ntracks, jint datadim) 7 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1create (JNIEnv *env, jobject obj, jstring path, jint datasize, jint ntracks, jint datadim)
8 { 8 {
9 char buf[256]; 9 char buf[256];
10 const char *str; 10 const char *str;
14 14
15 adb_t *handle; 15 adb_t *handle;
16 handle = audiodb_create(str, datasize, ntracks, datadim); 16 handle = audiodb_create(str, datasize, ntracks, datadim);
17 if(!handle) 17 if(!handle)
18 return JNI_FALSE; 18 return JNI_FALSE;
19 19
20 jclass adbClass = (*env)->GetObjectClass(env, obj);
21 jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
22 if(fid == NULL) {
23 return;
24 }
25 (*env)->SetLongField(env, obj, fid, (long)handle);
26 (*env)->DeleteLocalRef(env, adbClass);
20 (*env)->ReleaseStringUTFChars(env, path, str); 27 (*env)->ReleaseStringUTFChars(env, path, str);
21 return JNI_TRUE; 28 return JNI_TRUE;
22 } 29 }
23 30
24 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1open (JNIEnv *env, jobject obj, jstring path, jobject mode) 31 JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1open (JNIEnv *env, jobject obj, jstring path, jobject mode)
37 44
38 JNIEXPORT void JNICALL Java_org_omras2_AudioDB_query(JNIEnv *env, jobject obj) 45 JNIEXPORT void JNICALL Java_org_omras2_AudioDB_query(JNIEnv *env, jobject obj)
39 { 46 {
40 } 47 }
41 48
42 JNIEXPORT void JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj) 49 JNIEXPORT jobject JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj)
43 { 50 {
51
52 // Fetch the adb pointer
53
54 adb_t *handle;
55
56 jclass adbClass = (*env)->GetObjectClass(env, obj);
57 jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J");
58 if(fid == NULL) {
59 return;
60 }
61
62 handle = (adb_t*)((*env)->GetLongField(env, obj, fid));
63 (*env)->DeleteLocalRef(env, adbClass);
64
65 adb_status_t *status;
66 status = (adb_status_t *)malloc(sizeof(adb_status_t));
67 int flags = audiodb_status(handle, status);
68
69 jclass statusClass = (*env)->FindClass(env, "org/omras2/Status");
70 if(statusClass == NULL) {
71 return NULL;
72 }
73 jmethodID cid = (*env)->GetMethodID(env, statusClass, "<init>", "()V");
74 if(cid == NULL) {
75 return NULL;
76 }
77
78 jobject result = (*env)->NewObject(env, statusClass, cid);
79
80 fid = (*env)->GetFieldID(env, statusClass, "numFiles", "I");
81 if(fid == NULL) {
82 return;
83 }
84 (*env)->SetIntField(env, result, fid, status->numFiles);
85
86 (*env)->DeleteLocalRef(env, statusClass);
87
88 return result;
44 } 89 }
45 90