NDK内存饱和度

时间:2014-07-16 09:45:08

标签: android c android-ndk java-native-interface

我必须在我的java代码中使用NDK来调用一些音频处理函数,但我从未尝试过JNI或C / C ++编码。我试图从头开始,但我真的没有时间。所以我找到了这个库here并尝试使用它。我总是遇到fatal signal 11 (sigsegv)错误。我真的不知道从哪里开始。这是我到目前为止所做的事情:

Android活动中的

public native int transform(double[] real,double[]imag, int n);
public native int convolve(double[]xreal,double[]ximag,double[]yreal,double[]yimag,double[]outreal,double[]outim, int n);

并在同一个文件中调用它们:

transform(raw1, imag1,raw1.length);//result back into each vector
transform(raw2, imag2,raw2.length);
convolve(raw1,imag1,raw2,imag2,outre,outim,raw1.length);

在C文件中:

JNIEXPORT jint JNICALL Java_com_example_ffttest_FFTActivity_transform
(JNIEnv *env, jobject obj, jdoubleArray real, jdoubleArray imag, jint n)
    {
       if (n == 0)
           return 1;
       else if ((n & (n - 1)) == 0)  // Is power of 2
           return transform_radix2(real, imag, n);
       else  // More complicated algorithm for arbitrary sizes
           return transform_bluestein(real, imag, n);
    }

并对convolve函数进行了一些更改:

JNIEXPORT jint JNICALL Java_com_example_ffttest_FFTActivity_convolve
 (JNIEnv *env, jobject obj, jdoubleArray xreal, jdoubleArray ximag, jdoubleArray yreal,                       jdoubleArray yimag, jdoubleArray outreal, jdoubleArray outimag, jint n)
   {
    //size = n * sizeof(double);
     n = (*env)->GetArrayLength(env, xreal);

jdouble *a=(*env)->GetDoubleArrayElements(env,xreal,0);
jdouble *b=(*env)->GetDoubleArrayElements(env,ximag,0);
jdouble *c=(*env)->GetDoubleArrayElements(env,yreal,0);
jdouble *d=(*env)->GetDoubleArrayElements(env,yimag,0);
jdouble *e=(*env)->GetDoubleArrayElements(env,outreal,0);
jdouble *f=(*env)->GetDoubleArrayElements(env,outimag,0);
...

我需要知道从C到JNI的一些变化吗?

0 个答案:

没有答案