Articles of renderscript

RenderScript绑定指针与分配

RenderScript是否保证内存布局或跨越从Java层绑定的全局指针? 我在某处读到最好使用rsGetElementAt / rsSetElementAt函数,因为不保证布局。 但在其他地方 ,据说在针对GPU优化时会避免这些,而绑定指针则可以。 在我的特定情况下,我需要内核来访问许多周围像素的值。 到目前为止,我已经完成了从Java层绑定的浮点指针。 Java的: script.set_width(inputWidth); script.bind_input(inputAllocation); RS: int width; float *input; void root(const float *v_in, float *v_out, uint32_t x, uint32_t y) { int current = x + width * y; int above = current – width; int below = current + width; *v_out = input[above – 1] + input[above ] […]

RenderScript没有正确渲染ScriptIntrinsicBlur,导致ScriptIntrinsicBlur呈现彩虹色

使用glide android库我将图像作为位图( 参见滑动文档 ),然后我尝试使用renderscript和ScriptIntrinsicBlur模糊位图,这是一个高斯模糊。 ( 取自此stackoverflowpost ) Glide.with(getApplicationContext()) .load(ImageUrl) .asBitmap() .into(new SimpleTarget(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 […]

RenderScript支持库在x86设备上崩溃

我正在使用x86设备Razor i上运行android.support.v8.renderscript.* FATAL EXCEPTION。 如果我使用android.renderscript.* ,问题就会消失android.renderscript.* ARM设备也没有问题。 这是例外: 03-03 18:35:26.009 25011-25011/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.MainActivity}: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1306]: 143 cannot locate ‘__strlen_chk’… at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2153) at android.app.ActivityThread.access$700(ActivityThread.java:137) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5031) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) […]

加载RS jni库时出错:UnsatisfiedLinkError:无法加载RSSupport:findLibrary返回null

将RenderScript与支持库一起使用时,我在Motorola iRazr(Android 4.1.2)上出现此错误 Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn’t load RSSupport: findLibrary returned null 三星Galaxy S3上的一切正常。 Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap); RenderScript rs = RenderScript.create(ctx); ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap); Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap); theIntrinsic.setRadius(BLUR_RADIUS); theIntrinsic.setInput(tmpIn); theIntrinsic.forEach(tmpOut); tmpOut.copyTo(outputBitmap); 我使用的支持库jar是 build-tools/19.0.1/renderscript/lib/renderscript-v8.jar 任何帮助深表感谢。 编辑: 我将这些文件复制到libs文件夹中并validation了so文件是否在设备上的data / data / lib文件夹中。 librsjni.so和libRSSupport.so存在于设备上…… 编辑: […]

加载ScriptC脚本失败 – android渲染脚本

这个问题已经讨论了好几次,但是我无法让它发挥作用。 我试过构建工具v23,甚至没有编译,所以我转移到编译脚本代码的21版本。 ScriptC_rotator类现在在app \ build \ generated \ source \ rs \ debug \ com \ models中生成。 但是,现在我得到运行时’加载ScriptC脚本’。 不知道如何解决这个问题。 public Bitmap rotate(Bitmap bitmap) { Bitmap target = null; try { RenderScript rs = RenderScript.create(activity); ScriptC_rotator script = new ScriptC_rotator(rs); // this is where the error occur. script.set_inWidth(bitmap.getWidth()); script.set_inHeight(bitmap.getHeight()); Allocation sourceAllocation = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT); […]

RenderScript错误地操作内核的输出

我正在尝试使用Android的RenderScript在图像后面渲染一个半透明的圆圈,但是从RenderScript内核返回一个值时会出现问题。 这是我的内核: #pragma version(1) #pragma rs java_package_name(be.abyx.aurora) // We don’t need very high precision floating points #pragma rs_fp_relaxed // Center position of the circle int centerX = 0; int centerY = 0; // Radius of the circle int radius = 0; // Destination colour of the background can be set here. float destinationR; float destinationG; […]

Renderscript支持库存在问题

我正在尝试在API 16及更高版本的设备上使用Android Renderscript支持库,遵循此处描述的步骤。 到目前为止事情并不顺利。 我的Renderscript代码如下所示。 #pragma version(1) #pragma rs java_package_name(com.xxx.renderscript.test) #include “rs_time.rsh” rs_script flipScript; rs_allocation gIn; rs_allocation gOut; int width; int height; int direction = 0; void root(uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y) { if(direction == 0) { // flip horizontally const uchar4 *element = rsGetElementAt(gIn, width – x, y); float4 color […]

渲染脚本渲染比Android上的OpenGL渲染要慢得多

背景: 我想根据Android相机应用程序的代码添加实时filter。 但Android相机应用程序的架构基于OpenGL ES 1.x. 我需要使用着色器来自定义我们的filter实现。 但是,将相机应用程序更新为OpenGL ES 2.0非常困难。 然后我必须find一些其他方法来实现实时filter而不是OpenGL。 经过一些研究,我决定使用渲染脚本。 问题: 我已经通过渲染脚本编写了一个简单filter的演示。 它表明fps远低于OpenGL实现它。 大约5 fps vs 15 fps。 问题: Android官方异地说:RenderScript运行时将并行处理设备上可用的所有处理器(如多核CPU,GPU或DSP)的工作,使您可以专注于expression算法而不是调度工作或负载平衡。 那为什么渲染脚本实现较慢? 如果渲染脚本不能满足我的要求,有没有更好的方法? 代码详情: 嗨,我和提问者在同一个团队中。 我们想要编写一个基于渲染脚本的实时滤镜相机。 在我们的测试演示项目中,我们使用了一个简单的filter:添加了覆盖filterScriptC脚本的YuvToRGB IntrinsicScript。 在OpenGL版本中,我们将相机数据设置为纹理,并使用着色器执行image-filter-procss。 喜欢这个: GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureYHandle); GLES20.glUniform1i(shader.uniforms.get(“uTextureY”), 0); GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, mTextureWidth, mTextureHeight, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, mPixelsYBuffer.position(0)); 在RenderScript版本中,我们将相机数据设置为Allocation,并使用script-kernals执行image-filter-procss。 喜欢这个: // The belowing code is from onPreviewFrame(byte[] data, Camera […]

如果USAGE_SHARED,则启用GPU的驱动程序上的Renderscript失败

我们使用renderscript进行音频dsp处理。 它很简单,并且对我们的用例显着提高了性能。 但是,在具有启用GPU执行的自定义驱动程序的设备上, USAGE_SHARED遇到了令人讨厌的问题。 您可能知道, USAGE_SHARED标志使USAGE_SHARED分配重用给定的内存,而不必创建它的副本。 因此,它不仅可以节省内存,在我们的情况下,可以将性能提高到所需的水平。 以下代码与USAGE_SHARED在默认的libRSDriver.so驱动程序( libRSDriver.so )上正常工作。 使用自定义驱动程序( libRSDriver_adreno.so ), USAGE_SHARED不会重用给定的内存,因此也不会重用数据。 这是使用USAGE_SHARED并调用USAGE_SHARED内核的代码 void process(float* in1, float* in2, float* out, size_t size) { sp rs = new RS(); rs->init(app_cache_dir); sp e = Element::F32(rs); sp t = Type::create(rs, e, size, 0, 0); sp in1Alloc = Allocation::createTyped( rs, t, RS_ALLOCATION_MIPMAP_NONE, RS_ALLOCATION_USAGE_SCRIPT | RS_ALLOCATION_USAGE_SHARED, in1); sp […]

如何在Android Studio上创建Renderscript脚本,并让它们运行?

背景 我想研究一下在Android和Renderscript上创建Renderscript脚本,在过去的一年里,Android-Studio成为Google支持Android应用程序开发的唯一IDE。 问题 为此,我find了多个网站,如下: https://developer.android.com/guide/topics/renderscript/compute.html#writing-an-rs-kernel 如何在Gradle中使用Renderscript支持库 http://developer.android.com/guide/topics/renderscript/compute.html https://futurestud.io/blog/how-to-use-the-renderscript-support-library-with-gradle-based-android-projects/ http://developer.android.com/guide/topics/renderscript/advanced.html 事实上,我见过的所有教程和示例都是针对Eclipse的,他们说我需要做的就是在“raw”文件夹中创建一个“rs”文件(也在“src”文件夹中尝试,在“MainActivity.java”文件的相同文件夹),它将为我自动生成所需的Java文件,前缀为“ScriptC_”。 但它对我不起作用。 我试过的 我已经从我发现的一些样本(对于Eclipse)中创建了一个名为“julia.rs”的文件。 这是代码: #pragma version(1) #pragma rs java_package_name(lb.com.myapplication) float cx; float cy; float width; float height; float zoom; int precision; uchar *color; void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { float fx = (x + 0.5f) / width * (4.f / […]