Here is my audioDeviceIOCallback code
void AudioIOCallbackImpl::audioDeviceIOCallback(const float **inputChannelData,
int numInputChannels, float **outputChannelData,
int numOutputChannels, int numSamples) {
const ScopedWriteLock writelock(lock);
Logger::outputDebugString(
"audioDeviceIOCallback: numInputChannels = " + String(numInputChannels) +
", numSample = " + String(numSamples));
// ostringstream str;
// for (int i = 0; i < numInputChannels; i++) {
// for (int j = 0; j < numSamples; j++) {
// str << inputChannelData[i][j] << ", ";
// }
// }
if (numInputChannels < 1) {
return;
}
int64 now = Time::currentTimeMillis();
Logger::outputDebugString("audioDeviceIOCallback time cost:" + String(now - time));
time = now;
JNIEnv *env;
if (javaVM == nullptr) {
Logger::outputDebugString("JavaVM Null");
return;
}
javaVM->AttachCurrentThread(&env, nullptr);
if (env == nullptr) {
Logger::outputDebugString("JNIEnv Null");
return;
}
jfloatArray fArr = env->NewFloatArray(numSamples);
env->SetFloatArrayRegion(fArr, 0, numSamples, inputChannelData[0]);
jclass class_JuceJNIHelper = env->FindClass("org/cocos2dx/cpp/JuceJNIHelper");
if (class_JuceJNIHelper == nullptr) {
Logger::outputDebugString("class_JuceJNIHelper Null");
return;
}
jmethodID method_JuceJNIHelper_reciveRecordData = env->GetStaticMethodID(class_JuceJNIHelper,
"reciveRecordData",
"([FJ)V");
if (method_JuceJNIHelper_reciveRecordData == nullptr) {
Logger::outputDebugString("method_JuceJNIHelper_reciveRecordData Null");
env->DeleteLocalRef(fArr);
return;
}
env->CallStaticVoidMethod(class_JuceJNIHelper, method_JuceJNIHelper_reciveRecordData, fArr,
now - timeDelay);
env->DeleteLocalRef(fArr);
}
And I got Ndk-Stack Crash Dump:
********** Crash dump: **********
Build fingerprint: 'Huawei/C8818/hwC8818:4.4.4/HuaweiC8818/C92B203:user/ota-rel-keys,release-keys'
pid: 20518, tid: 20735, name: OpenSL >>> com.blw.guitar2dx <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc 0002236c /system/lib/libc.so (tgkill+12)
Stack frame #01 pc 000133c1 /system/lib/libc.so (pthread_kill+48)
Stack frame #02 pc 000135d5 /system/lib/libc.so (raise+10)
Stack frame #03 pc 0001230b /system/lib/libc.so
Stack frame #04 pc 00021c20 /system/lib/libc.so (abort+4)
Stack frame #05 pc 00048e0f /system/lib/libdvm.so (dvmAbort+78)
Stack frame #06 pc 0004c2db /system/lib/libdvm.so
Stack frame #07 pc 000511d5 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+124)
Stack frame #08 pc 00029aa0 /system/lib/libdvm.so
Stack frame #09 pc 00030f5c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
Stack frame #10 pc 0002e5f4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
Stack frame #11 pc 00063761 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
Stack frame #12 pc 0004cea7 /system/lib/libdvm.so
Stack frame #13 pc 004e4e7f /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+34): Routine _JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...) at /Volumes/MAC/android-ndk-r10e/platforms/android-15/arch-arm/usr/include/jni.h:807
Stack frame #14 pc 004e5167 /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (AudioIOCallbackImpl::audioDeviceIOCallback(float const**, int, float**, int, int)+610): Routine AudioIOCallbackImpl::audioDeviceIOCallback(float const**, int, float**, int, int) at /Volumes/MAC/project/JuceAudioTestProj/Builds/AndroidStudio/app/src/main/jni/Source/AudioIOCallbackImpl.cpp:54
Stack frame #00 pc 0002236c /system/lib/libc.so (tgkill+12) }{stackFuzzy, #00 pc 0002236c /system/lib/libc.so (tgkill+12),#01 pc 000133c1 /system/lib/libc.so (pthread_kill+48),#02 pc 000135d5 /system/lib/libc.so (raise+10),#03 pc 0001230b /system/lib/libc.so,#04 pc 00021c20 /system/lib/libc.so (abort+4),#05 pc 00048e0f /system/lib/libdvm.so (dvmAbort+78),#06 pc 0004c2db /system/lib/libdvm.so,#07 pc 000511d5 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+124),#08 pc 00029aa0 /system/lib/libdvm.so,#09 pc 00030f5c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76),#10 pc 0002e5f4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184),#11 pc 00063761 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336),#12 pc 0004cea7 /system/lib/libdvm.so,#13 pc 004e4e7f /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+34),#14 pc 004e5167 /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (AudioIOCallbackImpl::audioDeviceIOCallback(float const**, int, float**, int, int)+610) }
Stack frame #00 pc 0002236c /system/lib/libc.so (tgkill+12);#01 pc 000133c1 /system/lib/libc.so (pthread_kill+48);#02 pc 000135d5 /system/lib/libc.so (raise+10);#03 pc 0001230b /system/lib/libc.so;#04 pc 00021c20 /system/lib/libc.so (abort+4);#05 pc 00048e0f /system/lib/libdvm.so (dvmAbort+78);#06 pc 0004c2db /system/lib/libdvm.so;#07 pc 000511d5 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+124);#08 pc 00029aa0 /system/lib/libdvm.so;#09 pc 00030f5c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76);#10 pc 0002e5f4 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184);#11 pc 00063761 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336);#12 pc 0004cea7 /system/lib/libdvm.so;#13 pc 004e4e7f /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+34);#14 pc 004e5167 /data/app-lib/com.blw.guitar2dx-2/libjuce_jni.so (AudioIOCallbackImpl::audioDeviceIOCallback(float const**, int, float**, int, int)+610); version_number=null module_name=com.blw.guitar2dx time_stamp=20160510183034 size=0 test_mode=NORMAL
The error line code is:
env->CallStaticVoidMethod(class_JuceJNIHelper, method_JuceJNIHelper_reciveRecordData, fArr,
now - timeDelay);
I guess it’s maybe a multi thread error.but I don’t know how to solve this problem.
It’s not got this error every time after callback audioDeviceIOCallback.
Only got this error after I run some time,maybe 1min or longer.
Please help me,is it a thread problem or release memory problem?