标签: renderscript

是否可以为Android编程GPU

我现在在Android上编程,我想知道我们现在是否可以使用GPGPU for Android?我曾经听说Renderscript将来可能会在GPGPU上执行.但我想知道我们现在是否有可能在GPGPU上进行编程?如果我可以在Android GPGPU上编程,我在哪里可以找到一些教程或示例程序?感谢您的帮助和建议.

到目前为止,我知道OpenGL ES库现在加速使用GPU,但我想使用GPU进行计算.我想要做的是加速计算,以便我希望使用一些API库,如OpenCL.

android gpu renderscript

14
推荐指数
1
解决办法
1万
查看次数

使用renderscript将相机YUV数据转换为ARGB

我的问题是:我在Android中设置了一个摄像头并通过使用onPreviewFrame监听器接收预览数据,该监听器向我传递一个包含默认android YUV格式的图像数据的byte []数组(设备不支持R5G6B5-格式).每个像素由12位组成,这使得事情有点棘手.现在我想要做的是将YUV数据转换为ARGB数据,以便用它进行图像处理.这必须使用renderscript来完成,以保持高性能.

我的想法是在一个元素中传递两个像素(这将是24位= 3个字节),然后返回两个ARGB像素.问题是,在Renderscript中,u8_3(三维8位向量)存储在32位,这意味着最后8位未使用.但是当将图像数据复制到分配中时,使用了所有32位,因此最后8位丢失.即使我使用32位输入数据,最后8位也没用,因为它们只有2/3像素.在定义包含3字节数组的元素时,它实际上具有3个字节的实际大小.但是然后Allocation.copyFrom() - 方法没有用数据填充in-Allocation,认为它没有用byte []填充正确的数据类型.

renderscript文档指出,有一个ScriptIntrinsicYuvToRGB应该在API级别17中完全执行.但实际上该类不存在.我已经下载了API Level 17,即使它似乎不再可以下载了.有没有人有任何关于它的信息?有没有人尝试过ScriptIntrinsic?

总而言之,我的问题是:如何快速,快速地将摄像机数据转换为ARGB数据?

这是在Dalvik VM中如何做到这一点(在网上找到代码,它的工作原理):

@SuppressWarnings("unused")
private void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) {  
    final int frameSize = width * height;  
    for (int j = 0, yp = 0; j < height; j++) {
        int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;  
        for (int i = 0; i < width; i++, yp++) {  
            int y = (0xff & ((int) yuv420sp[yp])) …
Run Code Online (Sandbox Code Playgroud)

android renderscript android-camera

14
推荐指数
2
解决办法
9241
查看次数

在2.3模拟器上使用RenderScript时,"无法加载RSSupport:findLibrary返回null"

RenderScript无法在Android 2.3模拟器上运行.

04-04 15:37:39.146: W/dalvikvm(863): Unable to resolve superclass of Landroid/support/v8/renderscript/RenderScript$2; (316)
04-04 15:37:39.146: W/dalvikvm(863): Link of class 'Landroid/support/v8/renderscript/RenderScript$2;' failed
04-04 15:37:39.146: E/dalvikvm(863): Could not find class 'android.support.v8.renderscript.RenderScript$2', referenced from method android.support.v8.renderscript.RenderScript.setErrorHandler
04-04 15:37:39.146: W/dalvikvm(863): VFY: unable to resolve new-instance 890 (Landroid/support/v8/renderscript/RenderScript$2;) in Landroid/support/v8/renderscript/RenderScript;
04-04 15:37:39.146: D/dalvikvm(863): VFY: replacing opcode 0x22 at 0x0009
04-04 15:37:39.146: D/dalvikvm(863): VFY: dead code 0x000b-0012 in Landroid/support/v8/renderscript/RenderScript;.setErrorHandler (Landroid/support/v8/renderscript/RenderScript$RSErrorHandler;)V
04-04 15:37:39.146: W/dalvikvm(863): Unable to resolve superclass of Landroid/support/v8/renderscript/RenderScript$1; (317)
04-04 15:37:39.146: W/dalvikvm(863): Link of class 'Landroid/support/v8/renderscript/RenderScript$1;' …
Run Code Online (Sandbox Code Playgroud)

android renderscript android-support-library

14
推荐指数
1
解决办法
1152
查看次数

Android ScriptIntrinsicBlur不会模糊整个图像并生成透明边缘

我对RenderScript ScriptIntrinsic Blur有一些问题 - 在某些设备上它不会模糊整个图像.我缩小输入图像的尺寸并确保宽度是4的倍数(因为它是由Roman Nurik建议的:https://plus.google.com/+RomanNurik/posts/TLkVQC3M6jW)

@SuppressLint("NewApi")
private Bitmap blurRenderScript(Bitmap smallBitmap) {

    Bitmap output = Bitmap.createBitmap(smallBitmap.getWidth(), smallBitmap.getHeight(), smallBitmap.getConfig());

    RenderScript rs = RenderScript.create(getContext());
    ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    Allocation inAlloc = Allocation.createFromBitmap(rs, smallBitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_GRAPHICS_TEXTURE);
    Allocation outAlloc = Allocation.createFromBitmap(rs, output);
    script.setRadius(BLUR_RADIUS);
    script.setInput(inAlloc);
    script.forEach(outAlloc);
    outAlloc.copyTo(output);

    rs.destroy();

    MutableBitmap.delete(smallBitmap);

    return output;
}
Run Code Online (Sandbox Code Playgroud)

它正在开发Nexus 4:

Nexus 4模糊之前Nexus 4模糊后

但在Galaxy S4上,右侧有透明边缘:

Galaxy S4在模糊之前模糊后的Galaxy S4

我希望你能看出我的意思 - 如果你用gimp打开图片,或者你可以更好地看到它.它不依赖于图片大小.我也尝试了越来越大的图像,结果总是一样的.例如,它也发生在Nexus 7 2012上.此外,透明工件有时位于bottem或左边缘.在此先感谢您的帮助!

Nexus 4:4.4.2/Build Number KOT49H Galaxy S4:4.2.2/Build Number JDQ39.I9505XXUDMGG

android blur transparent artifact renderscript

13
推荐指数
1
解决办法
5745
查看次数

三星Galaxy S8上的RenderScript性能低下

语境

我有一个Android应用,需要一个图象,模糊的图像,去除模糊基于掩模和施加最终层(不相关)。最后两个步骤(基于蒙版消除模糊并应用最后一层)重复进行,每次使用一个新蒙版(150个蒙版)。

输出get绘制在画布(SurfaceView)上。这样,应用程序可以有效地创建具有动画模糊效果的图像视图。

技术细节和代码

所有这些图像处理步骤都是使用RenderScript实现的。

我将第1步的代码省略掉,使图片模糊,因为这与我要面对的问题无关。

步骤2:消除基于蒙版的模糊

我有一个自定义内核,该内核in Allocation作为参数并包含2个全局变量,这也是Allocations

这3个分配都使用Allocation.copyFrom(bitmap)从位图获取数据。

第三步:应用最后一层

在这里,我还有一个自定义内核,该内核in Allocation作为参数并包含3个全局变量,其中1是和Allocation,2是浮点数

这些内核的工作方式与这个问题无关,但是为了确保我在下面包括了一些简化的片段。

还要注意的另一件事是,我正在遵循所有最佳实践,以确保有关分配,RenderScript和我的SurfaceView的性能达到最佳状态。

因此,可以忽略常见的错误,例如每次创建一个新的RenderScript实例,不尽可能重用Allocations。

blurMask.rs

#pragma version(1)
#pragma rs java_package_name(com.example.rs)
#pragma rs_fp_relaxed

// Extra allocations
rs_allocation allocBlur;
rs_allocation allocBlurMask;

/*
 * RenderScript kernel that performs a masked blur manipulation.
 * Blur Pseudo: out = original * blurMask + …
Run Code Online (Sandbox Code Playgroud)

performance animation android renderscript samsung-s8

13
推荐指数
0
解决办法
148
查看次数

用AndroidX打破Renderscript?

由于我已经迁移到androidx,我无法运行Renderscript.我得到以下异常:

2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] JNI在应用程序中检测到错误:JNI NewGlobalRef调用挂起异常java.lang.ClassNotFoundException:没有在路径上找到类"android.support.v8.renderscript.RenderScript":DexPathList [[zip文件"/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk"],nativeLibraryDirectories=[/data /app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/lib/arm64,/data/app/pl.qus.xenoamp2-xHJAddeg9oM-uGSxlvMp7A==/base.apk!/lib/arm64-v8a,/ system/lib64,/ system/vendor/lib64]] 2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.Class dalvik.system.BaseDexClassLoader java.lang上的.findClass(java.lang.String)(BaseDexClassLoader.java:93)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504].类java.lang.ClassLoader.loadClass(java.lang.String,boolean)(ClassLoader.java:379)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote6 4:java_vm_ext.cc:504] java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String)(ClassLoader.java:312)2018-10-12 16:27:58.328 27195-27195/pl .qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String,java.lang.ClassLoader,java.lang.String)(Runtime.java : - )2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at java.lang.String java.lang.Runtime.doLoad(java.lang .string,java.lang.ClassLoader)(Runtime.java:1099)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504] at void java.lang .Runtime.loadLibrary0(java.lang.ClassLoader,java.lang.String)(Runtime.java:1014)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc void 504.在void java.lang.System.loadLibrary(java.lang.String)(System.java:1657)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext .cc:504]在androidx.renderscript.RenderScript androidx.renderscript .RenderScript.internalCreate(android.content.Context,int,androidx.renderscript.RenderScript $ ContextType,int)(RenderScript.java:1408)2018-10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504]在androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context,int,androidx.renderscript.RenderScript $ ContextType,int)(RenderScript.java:1599)2018- 10-12 16:27:58.328 27195-27195/pl.qus.xenoamp2 A/zygote64:java_vm_ext.cc:504]在androidx.renderscript.RenderScript androidx.renderscript.RenderScript.create(android.content.Context,androidx.renderscript .RenderScript $ ContextType,int)(RenderScript.java:1549)2018-10-12 …

android renderscript android-renderscript

12
推荐指数
3
解决办法
2512
查看次数

关于RenderScript

最近,我搜索有关renderscript的文章,但似乎没有.任何人都可以给我一些谈论renderscript的文章吗?

3d scripting android renderscript

11
推荐指数
2
解决办法
4915
查看次数

在Renderscript Compute中将数组传递给rsForEach

我发现在RenderScript中缺少良好的文档,因为我知道,forEach在RS中,为分配中的每个项目执行root().

我正在尝试为Renderscript创建一个图像处理库,作为一个起点,我达到了这个很好的答案.但问题在于,模糊操作在每个像素上,并且每个像素需要另一个循环(n具有模糊宽度)的计算.尽管在多核上运行,但它仍然有点太慢.

我试图修改它以允许(两次通过)盒式过滤器,但这需要处理单行或列而不是单元格.那么,有没有办法让foreach将数组发送到root()?

foreach android image-processing blur renderscript

11
推荐指数
1
解决办法
6403
查看次数

为什么rsDebug不起作用?

我在Android RenderScript示例"Fountain"中插入了一个rsDebug方法,但是我没有从logcat中获取任何消息.

这是一个代码片段,用于演示我尝试过的内容:

int root() {
    float dt = min(rsGetDt(), 0.1f);
    rsDebug("dt", dt);
    ...
}
Run Code Online (Sandbox Code Playgroud)

android renderscript

11
推荐指数
1
解决办法
1136
查看次数

来自支持库的ScriptIntrinsicBlur对图像的缺陷

我试图使用RenderScript支持库中的ScriptIntrinsicBlur模糊图像.我正在使用gradle,我使用这种方法来使用RenderScript的支持库版本.

在我的Nexus 4上,一切正常并且速度非常快,但是当我在搭载Android 2.3.3的三星Galaxy S上试用它时,我得到的图片看起来像这样:

嘈杂的图像

我正在使用Roman Nurik的提示将位图宽度设置为4的倍数,但我不认为这是我的问题的原因.我的模糊代码看起来与这篇文章完全一样.谢谢你的建议.

这是我的代码:

获取视图的位图并重新缩放位图:

public static Bitmap loadBitmapFromView(View v) {
        v.setDrawingCacheEnabled(false);
        v.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
        v.setDrawingCacheEnabled(true);
        Bitmap b = v.getDrawingCache();
        return b;
    }

public static Bitmap scaledBitmap(Bitmap dest, float scale) {
        int scaledWidth = (int) (scale * dest.getWidth());
        if (scaledWidth % 4 != 0) { //workaround for bug explained here https://plus.google.com/+RomanNurik/posts/TLkVQC3M6jW
            scaledWidth = (scaledWidth / 4) * 4;
        }
        return Bitmap.createScaledBitmap(dest, scaledWidth, (int) (scale * dest.getHeight()), true);
    }
Run Code Online (Sandbox Code Playgroud)

Renderscript代码:

Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); …
Run Code Online (Sandbox Code Playgroud)

android renderscript android-support-library

11
推荐指数
1
解决办法
2606
查看次数