Mercurial > hg > audiodb
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 |