jni/gsm/gsm_jni.c
changeset 823 2036ebfaccda
--- /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 <jni.h>
+
+
+#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;
+}