Qt JNI: недопустимая косвенная ссылка 0x61382e48 в decodeIndirectRef
Я пытаюсь проект Qt, который захватывает аудиоданные с микрофона на Android. Я рецензировал эту статью: пример Android AudioRecord и записал ее в код Qt.
int recorderSampleRate = 44100;
int recorderChannels = QAndroidJniObject::getStaticField<jint>("android/media/AudioFormat", "CHANNEL_IN_MONO");
int recorderAudioEncoding = QAndroidJniObject::getStaticField<jint>("android/media/AudioFormat", "ENCODING_PCM_16BIT");
int sourceType = QAndroidJniObject::getStaticField<jint>("android/media/MediaRecorder$AudioSource", "MIC");
int bsize = QAndroidJniObject::callStaticMethod<int>("android/media/AudioRecord", "getMinBufferSize", "(III)I", recorderSampleRate, recorderChannels, recorderAudioEncoding);
mAudioRecorder = new QAndroidJniObject("android/media/AudioRecord", "(IIIII)V", sourceType, recorderSampleRate, recorderChannels, recorderAudioEncoding, BufferElements2Rec * BytesPerElement);
// starting capture.
mAudioRecorder->callMethod<void>("startRecording", "()V");
// ready buffer.
jint size = BufferElements2Rec * BytesPerElement;
jbyte buffers[size * 2];
qDebug() << "start capture";
while(true)
{
{
jint offset = 0;
// read cached audio data from AudioRecord
int result = mAudioRecorder->callMethod<jint>("read", "([BII)I", buffers, offset, size);
qDebug() << "readed byte size " << result;
}
// wait a bit for new audio data.
msleep(10);
}
Но в этой строке int result = mAudioRecorder->callMethod("read", "([BII)I", buffers, offset, size)); приложение упало и вывело следующий журнал.
W/dalvikvm(24772): Invalid indirect reference 0x61382e48 in decodeIndirectRef
E/dalvikvm(24772): VM aborting
F/libc (24772): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 24975 (ldAndroidCaptur)
Я предположил, что эта ошибка была причиной неправильного вызова JNI, но я не мог найти причину.
Дополнение: я нашел 0x61382e48 это адрес массива буферов
РЕДАКТИРОВАТЬ: руководство Android для AudioRecord здесь.
Приветствую любые советы.