JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_codec_audio_g722_JNIEncoder_g722_1encoder_1process (JNIEnv *jniEnv, jclass clazz, jlong encoder, jbyteArray input, jint inputOffset, jbyteArray output, jint outputOffset, jint outputLength) { jbyte *outputPtr = (*jniEnv)->GetByteArrayElements(jniEnv, output, NULL); if (outputPtr) { jbyte *inputPtr = (*jniEnv)->GetPrimitiveArrayCritical(jniEnv, input, NULL); if (inputPtr) { g722_encode( (g722_encode_state_t *) (intptr_t) encoder, (uint8_t *) (outputPtr + outputOffset), (const int16_t *) (inputPtr + inputOffset), 2 * (outputLength / sizeof(uint8_t))); (*jniEnv)->ReleasePrimitiveArrayCritical( jniEnv, input, inputPtr, JNI_ABORT); } (*jniEnv)->ReleaseByteArrayElements(jniEnv, output, outputPtr, 0); } }
int CTG722::encodeFrame(short *pIn,unsigned char *pOut) { if(!estate){ estate=g722_encode_init(NULL,BPS,iSampleRate==8000?G722_SAMPLE_RATE_8000|G722_PACKED:G722_PACKED); if(!estate)return 0; } // for(int i=0;i<iCodecFrameSizeDec/2;i++)pIn[i]>>=1; int r=g722_encode((g722_encode_state_t*)estate,pOut,pIn,iCodecFrameSizeDec/2); //printf(" re=%d %d\n",r,iCodecFrameSizeEnc); //iCodecFrameSizeEnc=r; return r; }
static int lintog722_framein(struct ast_trans_pvt *pvt, struct ast_frame *f) { struct g722_encoder_pvt *tmp = pvt->pvt; int outlen; outlen = g722_encode(&tmp->g722, (&pvt->outbuf.ui8[pvt->datalen]), (int16_t *) f->data.ptr, f->samples); pvt->samples += outlen * 2; pvt->datalen += outlen; return 0; }
static int lintog722_framein(struct cw_translator_pvt *pvt, struct cw_frame *f) { struct g722_encoder_pvt *tmp = (struct g722_encoder_pvt *) pvt; if ((tmp->tail + f->datalen/(2*sizeof(int16_t)) + 1) > BUFFER_SIZE) { cw_log(LOG_WARNING, "Out of buffer space\n"); return -1; } tmp->tail += g722_encode(&(tmp->g722_state), tmp->outbuf + tmp->tail, f->data, f->datalen/sizeof(int16_t)); return 0; }
static switch_status_t switch_g722_encode(switch_codec_t *codec, switch_codec_t *other_codec, void *decoded_data, uint32_t decoded_data_len, uint32_t decoded_rate, void *encoded_data, uint32_t *encoded_data_len, uint32_t *encoded_rate, unsigned int *flag) { struct g722_context *context = codec->private_info; if (!context) { return SWITCH_STATUS_FALSE; } *encoded_data_len = g722_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2); return SWITCH_STATUS_SUCCESS; }