JNIEXPORT jint JNICALL Java_org_sipdroid_codecs_G729_encode (JNIEnv *env, jobject obj, jshortArray lin, jint offset, jbyteArray encoded, jint size) { Word16 speech[L_FRAME]; UWord8 serial[BITSTREAM_SIZE]; int i; int frsz=L_FRAME; unsigned int lin_pos = 0; if (!codec_open) return 0; if(hEncoder == NULL) return 0; for (i = 0; (i + L_FRAME) <= size; i+=frsz) { env->GetShortArrayRegion(lin, offset + i,frsz, speech); g729a_enc_process(hEncoder, speech, (unsigned char*)serial); env->SetByteArrayRegion(encoded, RTP_HDR_SIZE+ lin_pos, BITSTREAM_SIZE, (jbyte *)serial); lin_pos += BITSTREAM_SIZE; } return (jint)lin_pos; }
int G729CodecNative::Encode(Word16 *pcm, int size, UWord8 *bitstream) { if(!_bOpened) return false; //int frameSize = L_FRAME; int pcmOffset = 0; int g729Offset = 0; for (; pcmOffset < size;) { memcpy(_speechBuff, pcm + pcmOffset, PCM_BIT_STREAM_SIZE * 2); g729a_enc_process(_hEncoder, _speechBuff, _g729Buff); memcpy(bitstream + g729Offset, _g729Buff, G729_BIT_STREAM_SIZE); pcmOffset += PCM_BIT_STREAM_SIZE; g729Offset += G729_BIT_STREAM_SIZE; } return g729Offset; // return true; }