繁体   English   中英

RenderScript自定义ScriptC比本征慢

[英]RenderScript custom ScriptC slower than Intrinsics

我创建了一个非常简单的灰度脚本,它花费的时间比内部模糊效果要多。 为什么呢

grayscale.rs:

#pragma version(1)
#pragma rs java_package_name(com.nanotapsoft.cartooncamera)

#pragma rs_fp_relaxed

uchar4 __attribute__((kernel)) grayscale(uchar4 pixelIn, uint32_t x, uint32_t y) {
    uchar grayscale = (pixelIn.r + pixelIn.g + pixelIn.b) / 3;  // simple average
    //uchar grayscale = pixelIn.r * 0.299 + pixelIn.g * 0.587 + pixelIn.b * 0.114;

    uchar4 pixelOut;
    pixelOut.a = pixelIn.a;
    pixelOut.r = grayscale;
    pixelOut.g = grayscale;
    pixelOut.b = grayscale;

    return pixelOut;
}

调用java:

    t1 = System.currentTimeMillis();

    iBmp.copyFrom(tmpbmp);

    blurscript.setInput(iBmp);
    blurscript.forEach(oBmp);

    oBmp.copyTo(tmpbmp);

    t2 = System.currentTimeMillis();
    System.out.println("Blur: " + (t2-t1));

    t1 = System.currentTimeMillis();

    iBmp.copyFrom(tmpbmp);
    grayscaleScript.forEach_grayscale(iBmp, oBmp);
    oBmp.copyTo(tmpbmp);

    t2 = System.currentTimeMillis();
    System.out.println("Grayscale: " + (t2-t1));

我得到的平均模糊时间为12毫秒,灰度为28毫秒

对于那些想要更快的灰度渲染脚本的人,如果您使用YUV数据,则可以快5倍:

#pragma version(1)
#pragma rs java_package_name(com.nanotapsoft.cartooncamera)

#pragma rs_fp_relaxed

rs_allocation ain;
rs_allocation aout;

rs_script grayscaleYUVScript;

void root(const uchar *v_in, uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y) {

    uchar yp = rsGetElementAtYuv_uchar_Y(ain, x, y) & 0xff;
    v_out->r = yp;
    v_out->g = yp;
    v_out->b = yp;
    v_out->a = 0xff;
}

void filter()
{
    rs_allocation ignored;
    #if !defined(RS_VERSION) || (RS_VERSION < 14)
        rsForEach(grayscaleYUVScript, ignored, aout, 0);
    #else
        rsForEach(grayscaleYUVScript, ignored, aout);
    #endif
}

对于与我使用的第一个脚本相同的输入大小,该脚本的平均执行时间约为7毫秒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM