c/c++语言开发共享如何在NDK上使用Android上的C函数

我想在Android应用程序中使用C语言编写的函数。 该function取自此处 。 我已经学会了android NDK的一些基础知识,我可以设法在我的Java源码中使用该函数,但是当我调用它时应用程序冻结,而不是等到android让我杀死应用程序。

JNI签名是这样的:

JNIEXPORT void JNICALL Java_pda_lupa_callbacks_MySurfaceCallback_NativeYuv2rgb (JNIEnv *env, jclass clazz, jbyteArray imageIn, jint widthIn, jint heightIn, jobject imageOut, jint widthOut, jint heightOut) { jbyte *cImageIn = (*env)->GetByteArrayElements(env, imageIn, NULL); jbyte *cImageOut = (jbyte*)(*env)->GetDirectBufferAddress(env, imageOut); toRGB565((unsigned short*)cImageIn, widthIn, heightIn, (unsigned int*)cImageOut, widthOut, heightOut); (*env)->ReleaseByteArrayElements(env, imageIn, cImageIn, JNI_ABORT); } 

然后我像这样在Java中加载它:

 static { System.loadLibrary("rgb"); } public native void NativeYuv2rgb(byte[] imageIn, int widthIn, int heightIn, java.nio.Buffer imageOut, int widthOut, int heightOut); 

当我打电话给它时,应用程序冻结(我没有收到任何错误):

 NativeYuv2rgb(this.cameraFrame, this.prevX, this.prevY, this.rgb, this.prevX, this.prevY); 

我想我可能会为imageIn和imageOut使用错误的变量类型,但我不知道……

谢谢你的帮助!

编辑:这是GDB的输出:

 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 4731] 0x8083f0b0 in ?? () 

    好。 分段错误,是指针操作不良的标志。 将代码更改为以下示例,并测试以确定它是否适合您:您应该更改所有内容

     jbyte *cImageIn = env->GetByteArrayElements(env, imageIn, NULL); jbyte *cImageOut = (jbyte*) env->GetDirectBufferAddress(env, imageOut); ... env->ReleaseByteArrayElements(env, imageIn, cImageIn, JNI_ABORT); 

      以上就是c/c++开发分享如何在NDK上使用Android上的C函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522126.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐