diff -r 537ddd8aa407 -r 2036ebfaccda jni/gsm/gsm_jni.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jni/gsm/gsm_jni.c Fri Nov 20 19:29:42 2009 +0100 @@ -0,0 +1,87 @@ + + +/** +extern gsm gsm_create GSMJNI_P((void)); +extern void gsm_destroy GSMJNI_P((gsm)); + +extern int gsm_print GSMJNI_P((FILE *, gsm, gsm_byte *)); +extern int gsm_option GSMJNI_P((gsm, int, int *)); + +extern void gsm_encode GSMJNI_P((gsm, gsm_signal *, gsm_byte *)); +extern int gsm_decode GSMJNI_P((gsm, gsm_byte *, gsm_signal *)); + +extern int gsm_explode GSMJNI_P((gsm, gsm_byte *, gsm_signal *)); +extern void gsm_implode GSMJNI_P((gsm, gsm_signal *, gsm_byte *)); +*/ + + +#include + + +#include "gsm.h" +#include "private.h" +#include "proto.h" + +jlong +Java_org_sipdroid_media_codecs_GSMJNI_create(JNIEnv *env) +{ + return gsm_create(); +} + +void +Java_org_sipdroid_media_codecs_GSMJNI_destroy(JNIEnv *env, jlong jgsm) +{ + gsm_destroy((void *)jgsm); +} + +void +Java_org_sipdroid_media_codecs_GSMJNI_encode(JNIEnv *env, jlong jgsm, jshortArray jgsmSignal, jlong jsrcPos, jbyteArray jgsmByte, jlong jdestPos) +{ + jshort *gsmSignal; + jbyte *gsmByte; + jboolean isCopyByte; + jboolean isCopySignal; + void *ctx = (void *) jgsm; + + gsmByte = (*env)->GetByteArrayElements( env, jgsmByte, &isCopyByte); + gsmSignal = (*env)->GetShortArrayElements( env, jgsmSignal, &isCopySignal); + + gsm_encode(ctx, gsmSignal + jsrcPos, gsmByte + jdestPos); + if (isCopyByte == JNI_TRUE) + (*env)->ReleaseByteArrayElements(env, jgsmByte, gsmByte,0); + if (isCopySignal == JNI_TRUE) + (*env)->ReleaseShortArrayElements(env, jgsmSignal, gsmSignal,0); +} + +jint +Java_org_sipdroid_media_codecs_GSMJNI_decode(JNIEnv *env, jlong jgsm, jbyteArray jgsmByte, jlong jdestPos, jshortArray jgsmSignal, jlong jsrcPos) +{ + jshort *gsmSignal; + jbyte *gsmByte; + jboolean isCopyByte; + jboolean isCopySignal; + jint res; + + gsmSignal = (*env)->GetShortArrayElements( env, jgsmSignal, &isCopySignal); + gsmByte = (*env)->GetByteArrayElements( env, jgsmByte, &isCopyByte); + res = gsm_decode((void *)jgsm, gsmByte + jdestPos, gsmSignal + jsrcPos); + if (isCopyByte == JNI_TRUE) + (*env)->ReleaseByteArrayElements(env, jgsmByte, gsmByte,0); + if (isCopySignal == JNI_TRUE) + (*env)->ReleaseShortArrayElements(env, jgsmSignal, gsmSignal,0); + return res; +} + +jint +Java_org_sipdroid_media_codecs_GSMJNI_option(JNIEnv *env, jlong jgsm, jint jopt, jintArray jval) +{ + jint *val; + jboolean isCopyVal; + jint res; + + val = (*env)->GetIntArrayElements( env, jval, &isCopyVal); + res = gsm_option((void *)jgsm, jopt, val); + if (isCopyVal == JNI_TRUE) + (*env)->ReleaseIntArrayElements(env, jval, val,0); + return res; +}