首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NDK的jint问题

NDK的jint问题
EN

Stack Overflow用户
提问于 2011-03-06 23:12:07
回答 1查看 2.6K关注 0票数 1

我正在尝试用NDK创建我的第一个本机函数,但我遇到了非常基本的问题。

请考虑以下c代码:

代码语言:javascript
复制
#include <jni.h>
#include <string.h>

JNIEXPORT jint JNICALL Java_eu_elevelcbt_sm_YCrCbUtils_toARGB(
        JNIEnv* env, jbyteArray src, jintArray out, jint width, jint height){


    jbyte *c_src = (*env)->GetByteArrayElements(env, src, NULL);
    jint *c_out = (*env)->GetDirectBufferAddress(env, out);

    if (c_out==NULL)
        return -1;

    int length = width * height;
    int co;
    unsigned int color;

    for (co=0; co<length; co++) {
        color = c_src[co] & 0xFF;
        color = 0xFF000000 | (color<<16) | (color<<8) | color;
        c_out[co] = color;
    }

    (*env)->ReleaseByteArrayElements(env, src, c_src, 0);

    return 0;
}

JNIEXPORT jint JNICALL Java_eu_elevelcbt_sm_YCrCbUtils_sum(jint a, jint b){
    return a+b;
}

以及下面的Java类:

代码语言:javascript
复制
public class YCrCbUtils {

    public native int toARGB(byte[] src, int[] out, final int width, final int height);

    public native int sum(int a, int b);

    static {
        System.loadLibrary("yuv");
    }
}

问题1:如果我调用第二个函数

代码语言:javascript
复制
Log.v("DBG", "sum is: " + new YCrCbUtils().sum(10, 5));

这是我得到的:"sum is 1079199776“!为什么?!?:(

如果我像这样调用第一个函数:

代码语言:javascript
复制
int[] colors = new int[size.width * size.height]; // where width=800 and height=480
new YCrCbUtils().toARGB(data, colors, size.width, size.height); // data is a byte[]

我收到SIGSEGV错误...

请帮帮我!

PS:我的开发环境是MAC OSX Snow Leopard,NDK-r5b。我的运行时环境是Nexus One 2.3.3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 01:16:01

...ok我很愚蠢..。

我的方法签名是错误的。它们必须始终将"JNIEnv* env,jobject obj“作为前两个成员...我花了一个下午的时间在这上面,但好消息是现在我永远不会忘记它!

另外,在我的第一个方法中,我不得不改变

代码语言:javascript
复制
jint *c_out = (*env)->GetDirectBufferAddress(env, out);

使用

代码语言:javascript
复制
jint *c_out = (*env)->GetIntArrayElements(env, out, NULL);

因为前一个返回的是空指针。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5211264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档