标签: renderscript

确定 Renderscript 是否在 CPU/GPU 上运行以及线程数

我似乎找不到任何关于如何检查 RenderScript 是否真正并行化代码的文档。我想知道是否正在使用 CPU 或 GPU 以及调度的线程数。

我唯一发现的是这个错误报告:http : //code.google.com/p/android/issues/detail?id=28662

作者提到将 rsForEach 放在脚本中导致它通过指向以下调试输出而被序列化:

01-02 00:21:59.960: D/RenderScript(1256): = 0  0x0
01-02 00:21:59.976: D/RenderScript(1256): = 1  0x1
Run Code Online (Sandbox Code Playgroud)

我尝试在 LogCat 中搜索类似的字符串,但找不到匹配项。

有什么想法吗?

更新:其实我似乎已经想通了。似乎我的 LogCat foo 没有应有的好。我通过我的应用程序信息过滤了调试输出,发现一行是这样的:

02-26 22:30:05.657: V/RenderScript(26113): rsContextCreate dev=0x5cec0458
02-26 22:30:05.735: V/RenderScript(26113): 0x5d9f63b8 Launching thread(s), CPUs 2
Run Code Online (Sandbox Code Playgroud)

renderscript

5
推荐指数
1
解决办法
1864
查看次数

Android RenderScript FinalizerWatchdogDaemon 致命异常

我在应用程序中使用 RenderScript 来执行多项图像处理任务。

有时,我会随机得到以下异常:

10-10 15:27:04.479: E/AndroidRuntime(2113): FATAL EXCEPTION: FinalizerWatchdogDaemon
10-10 15:27:04.479: E/AndroidRuntime(2113): java.util.concurrent.TimeoutException: android.renderscript.Type.finalize() timed out after 10 seconds
10-10 15:27:04.479: E/AndroidRuntime(2113):     at android.renderscript.RenderScript.nObjDestroy(RenderScript.java:216)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at android.renderscript.BaseObj.finalize(BaseObj.java:116)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Thread.run(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)

我的所有 RenderScript 调用都包含在信号量中,以防止同一脚本并行运行。谁能告诉我这条消息的含义以及如何防止它?

java android renderscript

5
推荐指数
1
解决办法
5217
查看次数

如何使用具有多个输入分配的 RenderScript?

最近,我发现渲染脚本是 Android 上图像处理的更好选择。表演很精彩。但关于它的文献并不多。我想知道是否可以通过渲染脚本将多张照片合并为结果照片。

http://developer.android.com/guide/topics/renderscript/compute.html说:

内核可能有输入Allocation、输出Allocation或两者都有。一个内核不能有超过一个输入或一个输出Allocation。如果需要多个输入或输出,这些对象应绑定到脚本全局变量,并通过或rs_allocation从内核或可调用函数访问。rsGetElementAt_type()rsSetElementAt_type()

这个问题有代码示例吗?

android renderscript

5
推荐指数
2
解决办法
1896
查看次数

关于如何使用renderscript实现fft的指导

我正在研究使用Renderscript在大型复杂输入数组上执行FFT.FFT是相当标准的,因为它涉及三个循环,但内循环执行FFT中蝶形运算.因为每个butterfly使用数组的不同部分,所以没有一种明显的简单方法来分区输入分配中的元素.

所以,我的两个问题是:

  1. 将整个FFT算法放入Renderscript并将输入分配作为数组的各个元素是否有意义?
  2. 如果(1)的答案为否,那么分割元素的最佳方法是什么,即我应该在renderscript之外执行一些预处理来创建基本上是蝴蝶的各个元素的数组元素.

我在C中有工作代码,但还没有开始实现renderscript版本,所以没有任何代码可以发布.

在此先感谢您的帮助.

fft renderscript

5
推荐指数
1
解决办法
540
查看次数

Android 实时傅里叶变换 - Renderscript

我正在尝试对传入的预览相机帧应用 2D 傅立叶变换。所以这是我在每个上执行的 renderScript 代码onSurfaceTextureUpdated

#pragma version(1)
#pragma rs java_package_name(foo.camerarealtimefilters)

rs_allocation inPixels;
int height;
int width;

void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {

    float3 fourierPixel;
    for(int k=0; k<=width; k++){
        for(int l=0; l<=height; l++){
            float3 pixel = convert_float4(rsGetElementAt_uchar4(inPixels, k, l)).rgb;
            float greyOrigPixel = (pixel.r + pixel.g + pixel.b)/3;
            float angle = 2 * M_PI * ( ((x * k) / width) + ((y * l) / height) );
            fourierPixel.rgb = greyOrigPixel*cos(angle);
        };
    };

    out->xyz = …
Run Code Online (Sandbox Code Playgroud)

java math android renderscript

5
推荐指数
1
解决办法
618
查看次数

RenderScript无法正确渲染ScriptIntrinsicBlur,导致ScriptIntrinsicBlur呈现彩虹色

使用滑动android库我将图像作为位图(参见滑动文档),然后我尝试使用renderscript和ScriptIntrinsicBlur模糊位图,这是一个高斯模糊.(取自此stackoverflow帖子)

 Glide.with(getApplicationContext())
    .load(ImageUrl)
    .asBitmap()
    .into(new SimpleTarget<Bitmap>(300,200) {
        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {

            RenderScript rs = RenderScript.create(mContext); // context = this. this referring to the activity

            final Allocation input = Allocation.createFromBitmap( rs, resource, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT );
            final Allocation output = Allocation.createTyped( rs, input.getType() );
            final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create( rs, Element.U8_4( rs ) );
            script.setRadius(8f);
            script.setInput(input);
            script.forEach(output);
            output.copyTo(resource);

            mImageView.setImageBitmap(resource); 
        }
    });
Run Code Online (Sandbox Code Playgroud)

问题是这是输出,而不是模糊的图像: 在此输入图像描述

任何帮助将非常感谢谢谢.:)

android bitmap imageview renderscript

5
推荐指数
2
解决办法
1011
查看次数

android studio 不再运行/调试(安装)RenderScript 应用程序到移动设备

这个问题是在我使用现有的 RenderScript 项目将 Android Studio 从 2.1.2 更新到 2.3.3 之后开始的。我得到的错误信息是:

错误:任务“:app:mergeDebugResources”的执行失败。
错误:java.io.FileNotFoundException:C:\<项目位置>\app\build\generated\res\rs\debug\raw\bc64(访问被拒绝)

该项目来自 Android Studio 2.1.2,后来由 2.3.3 打开。没有提示版本号不正确,所以它应该可以正常工作。但是现在我无法在移动设备上运行/调试应用程序。

当我尝试在启用 RenderScript 的情况下创建一个新的空白屏幕项目时,它能够运行/调试。

怎么解决?

java android renderscript android-studio

5
推荐指数
1
解决办法
821
查看次数

Android ABI 拆分迁移到 App Bundle

我计划从 ABI 拆分迁移到 App Bundle 功能。目前我正在使用此代码:

def versionCodesAbi = ['x86': 1, 'x86_64': 2, 'armeabi-v7a': 3, 'arm64-v8a': 4]

    splits {
        abi {
            enable true
            reset()
            include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
            // "armeabi", "mips", "mips64" last three not needed and not supported currently
            universalApk true
        }
    }

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def abi = versionCodesAbi.get(output.getFilter(OutputFile.ABI))
            if (abi != null) {
                output.versionCodeOverride =
                        abi * 1000 + variant.versionCode
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

每个 ABI 提供 4 个 APK(+ 通用一个)。使用此代码的原因是为了减少应用程序的大小,因为PanoWidget …

android abi renderscript android-app-bundle

5
推荐指数
1
解决办法
2085
查看次数

使用 RenderScript 为纵向模式旋转 YUV 图像数据

对于视频图像处理项目,我必须旋转传入的 YUV 图像数据,以便数据不是水平显示而是垂直显示。我使用了这个项目,它让我深入了解了如何将 YUV 图像数据转换为 ARGB 以实时处理它们。该项目的唯一缺点是它仅在景观中。没有纵向模式选项(我不知道为什么 Google 的人提供了一个仅处理横向的示例示例)。我想改变这一点。

因此,我决定使用自定义的 YUV 转 RGB 脚本来旋转数据,使其以纵向模式显示。以下 GIF 演示了应用程序如何在我应用任何旋转之前显示数据。

在此处输入图片说明

你必须知道,在 Android 中,即使设备处于纵向模式,YUV 图像数据也会以横向呈现(我在开始这个项目之前不知道。同样,我不明白为什么没有可用的方法可用于通过一次调用来旋转帧)。这意味着即使设备处于纵向模式,起点也在左下角。但是在纵向模式下,每一帧的起点应该在左上角。我对字段使用矩阵表示法(例如 (0,0)、(0,1) 等)。注意:我从这里拿了草图: 在此处输入图片说明

要旋转横向框架,我们必须重新组织字段。这是我对草图(见上文)所做的映射,它显示了yuv_420横向模式下的单个帧。映射应将框架旋转 90 度:

first column starting from the bottom-left corner and going upwards:
(0,0) -> (0,5)       // (0,0) should be at (0,5)
(0,1) -> (1,5)       // (0,1) should be at (1,5)
(0,2) -> (2,5)       // and so on ..
(0,3) -> (3,5)
(0,4) -> (4,5)
(0,5) -> (5,5)

2nd column starting at …
Run Code Online (Sandbox Code Playgroud)

android yuv renderscript landscape-portrait android-camera2

5
推荐指数
1
解决办法
727
查看次数

android.renderscript.RSRuntimeException 致命错误 4097

我从 android 上的渲染脚本中得到以下崩溃: 在此处输入图片说明

100% 的崩溃发生在 android 11 上,96% 的崩溃发生在三星设备上。我删除了 renderscript 的所有实例,但此崩溃仍在发生,因此可能是我的依赖项之一。

我发现这在 note4有 android.renderscript.RSRuntimeException ,它说 4097 意味着致命的驱动程序错误,但没有提供有关如何修复它的任何详细信息。

有谁知道我如何解决这个崩溃?

更新:当我在我的应用程序中搜索“renderscript”时,除非我把它放在范围内然后有一堆对它的引用,否则什么都不会出现。我不明白他们来自哪里 在此处输入图片说明

更新:明确地说,我已经从我的应用程序中删除了对 renderscript 的所有引用,但似乎我的一个或多个依赖项仍在使用它。我需要帮助隔离这些依赖项。一个叫做 android-30 的东西正在使用渲染脚本。这是 api 30 库还是什么?然后称为 support/v8 的东西正在使用渲染脚本。这是支持库吗?(我确实启用了支持库)

在此处输入图片说明 在此处输入图片说明

android renderscript

5
推荐指数
1
解决办法
136
查看次数