diff --git a/extensions/opus/src/main/jni/opus_jni.cc b/extensions/opus/src/main/jni/opus_jni.cc index 48c1bd5e6d..0ba9675484 100644 --- a/extensions/opus/src/main/jni/opus_jni.cc +++ b/extensions/opus/src/main/jni/opus_jni.cc @@ -59,6 +59,7 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) { } static const int kBytesPerSample = 2; // opus fixed point uses 16 bit samples. +static const int kMaxOpusOutputPacketSizeSamples = 960 * 6;// Maximum packet size used in Xiph's opusdec. static int channelCount; static int errorCode; @@ -101,7 +102,7 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs, const int32_t inputSampleCount = opus_packet_get_nb_samples(inputBuffer, inputSize, sampleRate); - const jint outputSize = inputSampleCount * kBytesPerSample * channelCount; + const jint outputSize = kMaxOpusOutputPacketSizeSamples * kBytesPerSample * channelCount; env->CallObjectMethod(jOutputBuffer, outputBufferInit, jTimeUs, outputSize); const jobject jOutputBufferData = env->CallObjectMethod(jOutputBuffer, @@ -110,7 +111,7 @@ DECODER_FUNC(jint, opusDecode, jlong jDecoder, jlong jTimeUs, int16_t* outputBufferData = reinterpret_cast( env->GetDirectBufferAddress(jOutputBufferData)); int sampleCount = opus_multistream_decode(decoder, inputBuffer, inputSize, - outputBufferData, outputSize, 0); + outputBufferData, kMaxOpusOutputPacketSizeSamples, 0); // record error code errorCode = (sampleCount < 0) ? sampleCount : 0; return (sampleCount < 0) ? sampleCount