2013-10-24 24 views
0

我在返回行發生錯誤。我的代碼:jni SAMPLETYPE到jbyteArray

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; 
} 

錯誤:

Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 5980 (Thread-753)

感謝

+0

還有這個錯誤之前警告:「12月10日至24日:37:07.149:W/dalvikvm(5893):無效間接引用0x49deb9b0在decodeIndirectRef「 –

+0

你好!哇。你有沒有用SoundTouch寫過工作項目?尊重!你可以分享一些測試項目(設置pcm數據(字節或短褲),音高轉換,並取回數據在AudioTrack中播放)[email protected] TY! – 2014-01-09 15:59:52

+0

對不起,我無法與您分享項目代碼,因爲它是封閉源代碼和商業產品。不過,如果您遇到問題,我很樂意爲您提供幫助。乾杯!! –

回答

0

我固定我的問題。

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