mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2026-04-20 15:20:34 +00:00
Use byte buffer for audio to minimize buffer copy's
This commit is contained in:
@@ -37,8 +37,8 @@ int nv_opus_get_channel_count(void) {
|
||||
}
|
||||
|
||||
// This number assumes 2 channels at 48 KHz
|
||||
int nv_opus_get_max_out_shorts(void) {
|
||||
return 512*nv_opus_get_channel_count();
|
||||
int nv_opus_get_max_out_bytes(void) {
|
||||
return 1024*nv_opus_get_channel_count();
|
||||
}
|
||||
|
||||
// The Opus stream is 48 KHz
|
||||
@@ -46,17 +46,20 @@ int nv_opus_get_sample_rate(void) {
|
||||
return 48000;
|
||||
}
|
||||
|
||||
// outpcmdata must be 5760*2 shorts in length
|
||||
// outpcmdata must be 11520*2 bytes 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, short* outpcmdata) {
|
||||
int nv_opus_decode(unsigned char* indata, int inlen, unsigned char* outpcmdata) {
|
||||
int err;
|
||||
|
||||
// Decoding to 16-bit PCM with FEC off
|
||||
// Maximum length assuming 48KHz sample rate
|
||||
err = opus_decode(decoder, indata, inlen,
|
||||
outpcmdata, 512, 0);
|
||||
(opus_int16*) outpcmdata, 512, 0);
|
||||
|
||||
if (err>0)
|
||||
err = err * 2;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -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_shorts(void);
|
||||
int nv_opus_get_max_out_bytes(void);
|
||||
int nv_opus_get_sample_rate(void);
|
||||
int nv_opus_decode(unsigned char* indata, int inlen, short* outpcmdata);
|
||||
int nv_opus_decode(unsigned char* indata, int inlen, unsigned char* outpcmdata);
|
||||
|
||||
@@ -25,8 +25,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_getMaxOutputShorts(JNIEnv *env, jobject this) {
|
||||
return nv_opus_get_max_out_shorts();
|
||||
Java_com_limelight_nvstream_av_audio_OpusDecoder_getMaxOutputBytes(JNIEnv *env, jobject this) {
|
||||
return nv_opus_get_max_out_bytes();
|
||||
}
|
||||
|
||||
// The Opus stream is 48 KHz
|
||||
@@ -43,13 +43,13 @@ JNIEXPORT jint JNICALL
|
||||
Java_com_limelight_nvstream_av_audio_OpusDecoder_decode(
|
||||
JNIEnv *env, jobject this, // JNI parameters
|
||||
jbyteArray indata, jint inoff, jint inlen, // Input parameters
|
||||
jshortArray outpcmdata) // Output parameter
|
||||
jbyteArray outpcmdata) // Output parameter
|
||||
{
|
||||
jint ret;
|
||||
jbyte* jni_input_data;
|
||||
jshort* jni_pcm_data;
|
||||
jbyte* jni_pcm_data;
|
||||
|
||||
jni_pcm_data = (*env)->GetShortArrayElements(env, outpcmdata, 0);
|
||||
jni_pcm_data = (*env)->GetByteArrayElements(env, outpcmdata, 0);
|
||||
if (indata != NULL) {
|
||||
jni_input_data = (*env)->GetByteArrayElements(env, indata, 0);
|
||||
|
||||
@@ -62,7 +62,7 @@ Java_com_limelight_nvstream_av_audio_OpusDecoder_decode(
|
||||
ret = nv_opus_decode(NULL, 0, jni_pcm_data);
|
||||
}
|
||||
|
||||
(*env)->ReleaseShortArrayElements(env, outpcmdata, jni_pcm_data, 0);
|
||||
(*env)->ReleaseByteArrayElements(env, outpcmdata, jni_pcm_data, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user