From 6626195176d7d6baee1c3a720fc8d14bbe5c54e3 Mon Sep 17 00:00:00 2001 From: Iwan Timmer Date: Tue, 7 Jan 2014 21:20:55 +0100 Subject: [PATCH] Fix for missing changes in Opus JNI code --- jni/nv_opus_dec/nv_opus_dec.c | 15 +++++++-------- jni/nv_opus_dec/nv_opus_dec.h | 4 ++-- jni/nv_opus_dec/nv_opus_dec_jni.c | 12 +++++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/jni/nv_opus_dec/nv_opus_dec.c b/jni/nv_opus_dec/nv_opus_dec.c index f52a07e..baf7b3e 100644 --- a/jni/nv_opus_dec/nv_opus_dec.c +++ b/jni/nv_opus_dec/nv_opus_dec.c @@ -2,6 +2,8 @@ #include #include "nv_opus_dec.h" +#include + OpusDecoder* decoder; #ifdef _WIN32 @@ -37,8 +39,8 @@ int nv_opus_get_channel_count(void) { } // This number assumes 2 channels at 48 KHz -int nv_opus_get_max_out_bytes(void) { - return 1024*nv_opus_get_channel_count(); +int nv_opus_get_max_out_shorts(void) { + return 512*nv_opus_get_channel_count(); } // The Opus stream is 48 KHz @@ -46,20 +48,17 @@ int nv_opus_get_sample_rate(void) { return 48000; } -// outpcmdata must be 11520*2 bytes in length +// outpcmdata must be 5760*2 shorts in length // packets must be decoded in order // a packet loss must call this function with NULL indata and 0 inlen // returns the number of decoded samples -int nv_opus_decode(unsigned char* indata, int inlen, unsigned char* outpcmdata) { +int nv_opus_decode(unsigned char* indata, int inlen, short* outpcmdata) { int err; // Decoding to 16-bit PCM with FEC off // Maximum length assuming 48KHz sample rate err = opus_decode(decoder, indata, inlen, - (opus_int16*) outpcmdata, 512, 0); + outpcmdata, 512, 0); - if (err>0) - err = err * 2; - return err; } diff --git a/jni/nv_opus_dec/nv_opus_dec.h b/jni/nv_opus_dec/nv_opus_dec.h index d96f826..c5eb7f5 100644 --- a/jni/nv_opus_dec/nv_opus_dec.h +++ b/jni/nv_opus_dec/nv_opus_dec.h @@ -1,6 +1,6 @@ int nv_opus_init(void); void nv_opus_destroy(void); int nv_opus_get_channel_count(void); -int nv_opus_get_max_out_bytes(void); +int nv_opus_get_max_out_shorts(void); int nv_opus_get_sample_rate(void); -int nv_opus_decode(unsigned char* indata, int inlen, unsigned char* outpcmdata); +int nv_opus_decode(unsigned char* indata, int inlen, short* outpcmdata); diff --git a/jni/nv_opus_dec/nv_opus_dec_jni.c b/jni/nv_opus_dec/nv_opus_dec_jni.c index 5678a56..047b1b1 100644 --- a/jni/nv_opus_dec/nv_opus_dec_jni.c +++ b/jni/nv_opus_dec/nv_opus_dec_jni.c @@ -3,6 +3,8 @@ #include #include +#include + // This function must be called before // any other decoding functions JNIEXPORT jint JNICALL @@ -25,8 +27,8 @@ Java_com_limelight_nvstream_av_audio_OpusDecoder_getChannelCount(JNIEnv *env, jo // This number assumes 2 channels at 48 KHz JNIEXPORT jint JNICALL -Java_com_limelight_nvstream_av_audio_OpusDecoder_getMaxOutputBytes(JNIEnv *env, jobject this) { - return nv_opus_get_max_out_bytes(); +Java_com_limelight_nvstream_av_audio_OpusDecoder_getMaxOutputShorts(JNIEnv *env, jobject this) { + return nv_opus_get_max_out_shorts(); } // The Opus stream is 48 KHz @@ -52,14 +54,14 @@ Java_com_limelight_nvstream_av_audio_OpusDecoder_decode( jni_pcm_data = (*env)->GetByteArrayElements(env, outpcmdata, 0); if (indata != NULL) { jni_input_data = (*env)->GetByteArrayElements(env, indata, 0); - - ret = nv_opus_decode(&jni_input_data[inoff], inlen, jni_pcm_data); + + ret = nv_opus_decode(&jni_input_data[inoff], inlen, (jshort*) jni_pcm_data); // The input data isn't changed so it can be safely aborted (*env)->ReleaseByteArrayElements(env, indata, jni_input_data, JNI_ABORT); } else { - ret = nv_opus_decode(NULL, 0, jni_pcm_data); + ret = nv_opus_decode(NULL, 0, (jshort*) jni_pcm_data); } (*env)->ReleaseByteArrayElements(env, outpcmdata, jni_pcm_data, 0);