Я получаю сообщение об ошибке на обратной линии. Мой код:
extern "C" DLL_PUBLIC jbyteArray Java_com_ngochoang_playerdemo_AudioNativeLib_navProcessBytes(JNIEnv *env, jobject thiz, jbyteArray data, jint size)
{
LOGV("JNI call soundtouch.navProcessBytes");
int bufferSize = size*5;
SAMPLETYPE sampleBuffer[bufferSize];
pSoundTouch.putSamples((SAMPLETYPE*)data, size);
TotalNSamples = pSoundTouch.receiveSamples(sampleBuffer, bufferSize);
LOGV("JNI call soundtouch.navProcessBytes END");
return (jbyteArray)sampleBuffer;
}
Ошибка:
Фатальный сигнал 11 (SIGSEGV) в 0xdeadd00d (код = 1), нить 5980 (нить-753)
Спасибо
Я исправил свою проблему.
extern "C" DLL_PUBLIC jbyteArray Java_com_ngochoang_playerdemo_AudioNativeLib_navProcessBytes(JNIEnv *env, jobject thiz, jbyteArray data, jint size)
{
LOGV("JNI call soundtouch.navProcessBytes");
int bufferSize = size*5;
SAMPLETYPE sampleBuffer[bufferSize];
pSoundTouch.putSamples((SAMPLETYPE*)data, size);
TotalNSamples = pSoundTouch.receiveSamples(sampleBuffer, bufferSize);
jbyteArray ret = env->NewByteArray(bufferSize);
env->SetByteArrayRegion(ret, 0, bufferSize, (jbyte *)sampleBuffer);
LOGV("JNI call soundtouch.navProcessBytes END");
return ret;
}
необходимо скопировать в jbyteArray с помощью функции JNI SetByteArrayRegion
Других решений пока нет …