diff -r 537ddd8aa407 -r 2036ebfaccda jni/g722/g722_jni.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jni/g722/g722_jni.c Fri Nov 20 19:29:42 2009 +0100 @@ -0,0 +1,80 @@ +/** + +g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options); +int g722_encode_release(g722_encode_state_t *s); +int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len); + +g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options); +int g722_decode_release(g722_decode_state_t *s); +int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len); + +*/ + +#include +#include "g722.h" + +jlong +Java_org_sipdroid_media_codecs_G722JNI_encodeInit(JNIEnv *env, jlong jg722State, jint rate, jint options) +{ + return g722_encode_init((void *) jg722State, rate, options); +} + +jint +Java_org_sipdroid_media_codecs_G722JNI_encodeRelease(JNIEnv *env, jlong jg722State) +{ + return g722_encode_release((void *) jg722State); +} + +jint +Java_org_sipdroid_media_codecs_G722JNI_encode(JNIEnv *env, jlong jg722State, jshortArray jsignal, jlong jsrcPos, jbyteArray jg722Byte, jlong jdestPos, jint len) +{ + jshort *signal; + jbyte *g722Byte; + jboolean isCopyByte; + jboolean isCopySignal; + void *ctx = (void *) jg722State; + jint res; + + g722Byte = (*env)->GetByteArrayElements(env, jg722Byte, &isCopyByte); + signal = (*env)->GetShortArrayElements(env, jsignal, &isCopySignal); + + res = g722_encode(ctx, g722Byte + jdestPos, signal + jsrcPos, len); + if (isCopyByte == JNI_TRUE) + (*env)->ReleaseByteArrayElements(env, jg722Byte, g722Byte, 0); + if (isCopySignal == JNI_TRUE) + (*env)->ReleaseShortArrayElements(env, jsignal, signal, 0); + return res; +} + +jlong +Java_org_sipdroid_media_codecs_G722JNI_decodeInit(JNIEnv *env, jlong jg722State, jint rate, jint options) +{ + return g722_decode_init((void *) jg722State, rate, options); +} + +jint +Java_org_sipdroid_media_codecs_G722JNI_decodeRelease(JNIEnv *env, jlong jg722State) +{ + return g722_decode_release((void *) jg722State); +} + +jint +Java_org_sipdroid_media_codecs_G722JNI_decode(JNIEnv *env, jlong jg722State, jbyteArray jg722Byte, jlong jsrcPos, jshortArray jsignal, jlong jdestPos, jint len) +{ + jshort *signal; + jbyte *g722Byte; + jboolean isCopyByte; + jboolean isCopySignal; + void *ctx = (void *) jg722State; + jint res; + + g722Byte = (*env)->GetByteArrayElements(env, jg722Byte, &isCopyByte); + signal = (*env)->GetShortArrayElements(env, jsignal, &isCopySignal); + + res = g722_decode(ctx, signal + jdestPos, g722Byte + jsrcPos, len); + if (isCopyByte == JNI_TRUE) + (*env)->ReleaseByteArrayElements(env, jg722Byte, g722Byte, 0); + if (isCopySignal == JNI_TRUE) + (*env)->ReleaseShortArrayElements(env, jsignal, signal, 0); + return res; +}