jni/g722/g722_jni.c
changeset 839 0e5b95573614
parent 823 2036ebfaccda
equal deleted inserted replaced
822:696b2880c994 839:0e5b95573614
       
     1 /**
       
     2 
       
     3 g722_encode_state_t *g722_encode_init(g722_encode_state_t *s, int rate, int options);
       
     4 int g722_encode_release(g722_encode_state_t *s);
       
     5 int g722_encode(g722_encode_state_t *s, uint8_t g722_data[], const int16_t amp[], int len);
       
     6 
       
     7 g722_decode_state_t *g722_decode_init(g722_decode_state_t *s, int rate, int options);
       
     8 int g722_decode_release(g722_decode_state_t *s);
       
     9 int g722_decode(g722_decode_state_t *s, int16_t amp[], const uint8_t g722_data[], int len);
       
    10 
       
    11 */
       
    12 
       
    13 #include <jni.h>
       
    14 #include "g722.h"
       
    15 
       
    16 jlong
       
    17 Java_org_sipdroid_media_codecs_G722JNI_encodeInit(JNIEnv *env, jlong jg722State, jint rate, jint options)
       
    18 {
       
    19 	return g722_encode_init((void *) jg722State, rate, options);
       
    20 }
       
    21 
       
    22 jint
       
    23 Java_org_sipdroid_media_codecs_G722JNI_encodeRelease(JNIEnv *env, jlong jg722State)
       
    24 {
       
    25 	return g722_encode_release((void *) jg722State);
       
    26 }
       
    27 
       
    28 jint
       
    29 Java_org_sipdroid_media_codecs_G722JNI_encode(JNIEnv *env, jlong  jg722State, jshortArray jsignal, jlong jsrcPos, jbyteArray jg722Byte, jlong jdestPos, jint len)
       
    30 {
       
    31 	jshort *signal;
       
    32 	jbyte *g722Byte;
       
    33 	jboolean isCopyByte;
       
    34 	jboolean isCopySignal;
       
    35 	void *ctx = (void *) jg722State;
       
    36 	jint res;
       
    37 
       
    38 	g722Byte = (*env)->GetByteArrayElements(env, jg722Byte, &isCopyByte);
       
    39 	signal = (*env)->GetShortArrayElements(env, jsignal, &isCopySignal);
       
    40 
       
    41 	res = g722_encode(ctx, g722Byte + jdestPos, signal + jsrcPos, len);
       
    42 	if (isCopyByte == JNI_TRUE)
       
    43 		(*env)->ReleaseByteArrayElements(env, jg722Byte, g722Byte, 0);
       
    44 	if (isCopySignal == JNI_TRUE)
       
    45 		(*env)->ReleaseShortArrayElements(env, jsignal, signal, 0);
       
    46 	return res;
       
    47 }
       
    48 
       
    49 jlong
       
    50 Java_org_sipdroid_media_codecs_G722JNI_decodeInit(JNIEnv *env, jlong jg722State, jint rate, jint options)
       
    51 {
       
    52 	return g722_decode_init((void *) jg722State, rate, options);
       
    53 }
       
    54 
       
    55 jint
       
    56 Java_org_sipdroid_media_codecs_G722JNI_decodeRelease(JNIEnv *env, jlong jg722State)
       
    57 {
       
    58 	return g722_decode_release((void *) jg722State);
       
    59 }
       
    60 
       
    61 jint
       
    62 Java_org_sipdroid_media_codecs_G722JNI_decode(JNIEnv *env, jlong  jg722State, jbyteArray jg722Byte, jlong jsrcPos, jshortArray jsignal, jlong jdestPos, jint len)
       
    63 {
       
    64 	jshort *signal;
       
    65 	jbyte *g722Byte;
       
    66 	jboolean isCopyByte;
       
    67 	jboolean isCopySignal;
       
    68 	void *ctx = (void *) jg722State;
       
    69 	jint res;
       
    70 
       
    71 	g722Byte = (*env)->GetByteArrayElements(env, jg722Byte, &isCopyByte);
       
    72 	signal = (*env)->GetShortArrayElements(env, jsignal, &isCopySignal);
       
    73 
       
    74 	res = g722_decode(ctx, signal + jdestPos, g722Byte + jsrcPos, len);
       
    75 	if (isCopyByte == JNI_TRUE)
       
    76 		(*env)->ReleaseByteArrayElements(env, jg722Byte, g722Byte, 0);
       
    77 	if (isCopySignal == JNI_TRUE)
       
    78 		(*env)->ReleaseShortArrayElements(env, jsignal, signal, 0);
       
    79 	return res;
       
    80 }