|
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 } |