jni/gsm/gsm_jni.c
changeset 823 2036ebfaccda
equal deleted inserted replaced
536:537ddd8aa407 823:2036ebfaccda
       
     1 
       
     2 
       
     3 /**
       
     4 extern gsm  gsm_create 	GSMJNI_P((void));
       
     5 extern void gsm_destroy GSMJNI_P((gsm));	
       
     6 
       
     7 extern int  gsm_print   GSMJNI_P((FILE *, gsm, gsm_byte  *));
       
     8 extern int  gsm_option  GSMJNI_P((gsm, int, int *));
       
     9 
       
    10 extern void gsm_encode  GSMJNI_P((gsm, gsm_signal *, gsm_byte  *));
       
    11 extern int  gsm_decode  GSMJNI_P((gsm, gsm_byte   *, gsm_signal *));
       
    12 
       
    13 extern int  gsm_explode GSMJNI_P((gsm, gsm_byte   *, gsm_signal *));
       
    14 extern void gsm_implode GSMJNI_P((gsm, gsm_signal *, gsm_byte   *));
       
    15 */
       
    16 
       
    17 
       
    18 #include <jni.h>
       
    19 
       
    20 
       
    21 #include "gsm.h"
       
    22 #include "private.h"
       
    23 #include "proto.h"
       
    24 
       
    25 jlong
       
    26 Java_org_sipdroid_media_codecs_GSMJNI_create(JNIEnv *env)
       
    27 {
       
    28 	return gsm_create();
       
    29 }
       
    30 
       
    31 void
       
    32 Java_org_sipdroid_media_codecs_GSMJNI_destroy(JNIEnv *env, jlong jgsm)
       
    33 {
       
    34 	gsm_destroy((void *)jgsm);
       
    35 }
       
    36 
       
    37 void
       
    38 Java_org_sipdroid_media_codecs_GSMJNI_encode(JNIEnv *env, jlong jgsm, jshortArray jgsmSignal, jlong jsrcPos, jbyteArray jgsmByte, jlong jdestPos)
       
    39 {
       
    40 	jshort *gsmSignal;
       
    41 	jbyte *gsmByte;
       
    42 	jboolean isCopyByte;
       
    43 	jboolean isCopySignal;
       
    44 	void *ctx = (void *) jgsm;
       
    45 
       
    46 	gsmByte = (*env)->GetByteArrayElements( env, jgsmByte, &isCopyByte);
       
    47 	gsmSignal = (*env)->GetShortArrayElements( env, jgsmSignal, &isCopySignal);
       
    48 	
       
    49 	gsm_encode(ctx, gsmSignal + jsrcPos, gsmByte + jdestPos);
       
    50 	if (isCopyByte == JNI_TRUE)
       
    51 		(*env)->ReleaseByteArrayElements(env, jgsmByte, gsmByte,0);
       
    52 	if (isCopySignal == JNI_TRUE)
       
    53 		(*env)->ReleaseShortArrayElements(env, jgsmSignal, gsmSignal,0);
       
    54 }
       
    55 
       
    56 jint
       
    57 Java_org_sipdroid_media_codecs_GSMJNI_decode(JNIEnv *env, jlong jgsm, jbyteArray jgsmByte, jlong jdestPos, jshortArray jgsmSignal, jlong jsrcPos)
       
    58 {
       
    59 	jshort *gsmSignal;
       
    60 	jbyte *gsmByte;
       
    61 	jboolean isCopyByte;
       
    62 	jboolean isCopySignal;
       
    63 	jint res;
       
    64 
       
    65 	gsmSignal = (*env)->GetShortArrayElements( env, jgsmSignal, &isCopySignal);
       
    66 	gsmByte = (*env)->GetByteArrayElements( env, jgsmByte, &isCopyByte);
       
    67 	res = gsm_decode((void *)jgsm, gsmByte + jdestPos, gsmSignal + jsrcPos);
       
    68 	if (isCopyByte == JNI_TRUE)
       
    69 		(*env)->ReleaseByteArrayElements(env, jgsmByte, gsmByte,0);
       
    70 	if (isCopySignal == JNI_TRUE)
       
    71 		(*env)->ReleaseShortArrayElements(env, jgsmSignal, gsmSignal,0);
       
    72 	return res;
       
    73 }
       
    74 
       
    75 jint
       
    76 Java_org_sipdroid_media_codecs_GSMJNI_option(JNIEnv *env, jlong jgsm, jint jopt, jintArray jval)
       
    77 {
       
    78 	jint *val;
       
    79 	jboolean isCopyVal;
       
    80 	jint res;
       
    81 
       
    82 	val = (*env)->GetIntArrayElements( env, jval, &isCopyVal);
       
    83 	res = gsm_option((void *)jgsm, jopt, val);
       
    84 	if (isCopyVal == JNI_TRUE)
       
    85 		(*env)->ReleaseIntArrayElements(env, jval, val,0);
       
    86 	return res;
       
    87 }