在函数内部调用Renderscrip内核

问题描述 投票:0回答:2

我试图在同一个Renderscript文件中的函数内调用Renderscript内核,但我不知道该怎么做(而且Google文档并没有真正帮助)。

所以我想调用这个内核:

uchar __attribute__((kernel)) nextPixel(uint32_t x) {
    tImgIndexB = (uint32_t) (lBlackX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lBlackY[rsGetElementAt_uchar(num, x)] + lY);
    tImgIndexW = (uint32_t) (lWhiteX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lWhiteY[rsGetElementAt_uchar(num, x)] + lY);
    if (tImg[tImgIndexB] == 0 && tImg[tImgIndexW] == 1) {
        output = 1;
        tImg[lX*426+lY] = 3;
        //lX += lBlackX[rsGetElementAt_uchar(num, x)];
        //lY += lBlackY[rsGetElementAt_uchar(num, x)];
    } else {
        output = 0;
    }
    return output;
}

进入这样的函数:

void function() {
    // call kernel 'nextPixel'
}

先感谢您。

android renderscript android-renderscript
2个回答
1
投票

这并不是真正意图如何使用RS。 RS引擎使用适当的数据调用内核,内核可以调用其他函数。但是,在RS代码调用RS内核中使用函数并不是一般情况。


0
投票

我从相机上得到一个框架,上面有一条线(从底边的某处开始)。我需要将线的左右边缘的每个像素都放在两个数组中(一个用于左边缘,一个用于右边缘),数组的第一个元素是底边的像素,最后一个数组中的元素是左边,上边或右边的像素。

我从相机获得的帧是YUV。所以我用Renderscript(可以工作)将它转换为二进制图像(黑色线条,白色背景)。

我可以将处理后的帧发送回Java,将其设置为位图,然后对位图进行线检测。但是,读取和写入位图的数据很慢(我需要它尽可能快),所以我试图在Renderscript中做所有事情。在我的第一篇文章中发布的内核会查找该行中的下一个像素(有8种可能性,所以我想并行查看8种可能性)。

© www.soinside.com 2019 - 2024. All rights reserved.