annotate 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
rev   line source
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