Hi, How frequently do you call this method? I mean, you re-create both RenderScript and IntrinsicBlur objects on every call. And I am wondering how the underlying native implementation copes with this if the method is called twice or more within short a period.
-- H On May 20, 2014 10:08 PM, "littledot" <[email protected]> wrote: > I am implementing Gaussian blurring using the ScriptIntrinsicBlur class. > However, I have faced an intermittent issue where sometimes > ScriptIntrinsicBlur.create() throws RSRuntimeException: Internal error: > Object id 0. > > Here is the most stacktrace that I can post: > > android.renderscript.RSRuntimeException: Internal error: Object id 0. > > > at android.renderscript.BaseObj.getID(BaseObj.java:57) > > > at android.renderscript.Script.setVar(Script.java:202) > > > at > android.renderscript.ScriptIntrinsicBlur.setRadius(ScriptIntrinsicBlur.java:80) > > > at > android.renderscript.ScriptIntrinsicBlur.create(ScriptIntrinsicBlur.java:54) > > > The bitmap that is being blurred is usually around 300*300 ~ 400*400 > pixels and the blurRadius is set to 20. > > private static Bitmap blurBitmap(Context context, Bitmap bm, float > blurRadius) { > if (context == null || bm == null || blurRadius < 0) { > return null; > } > > try { > /* Make image width a multiple of 4. This is to avoid a bug in > the > * implementation of ScriptIntrinsicBlur that causes visual > * artifacts Source: > * https://plus.google.com/+RomanNurik/posts/TLkVQC3M6jW */ > if (bm.getWidth() % 4 != 0) { > bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth() - > (bm.getWidth() % 4), bm.getHeight()); > } > > final RenderScript rs = RenderScript.create(context); > final Allocation input = Allocation.createFromBitmap(rs, bm, > 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(blurRadius); > script.setInput(input); > script.forEach(output); > output.copyTo(bm); > > } catch (RSRuntimeException e) { > /* Throws android.renderscript.RSRuntimeException: Internal > error: > * Object id 0. */ > } > return bm; > } > > The exception is being thrown when create() is being called. I traced the > ScriptIntrinsicBlur.create() method and it am guessing that my problem > starts here: > > int id = rs.nScriptIntrinsicCreate(5, e.getID(rs)); > ScriptIntrinsicBlur sib = new ScriptIntrinsicBlur(id, rs); > sib.setRadius(5.f); > > I am guessing that the native method nScriptIntrinsicCreate() may be > returning 0, which is passed to the constructor, then when setRadius() is > called it does a check and throws the exception. My questions are: > 1. What does nScriptIntrinsicCreate() do and what can cause > nScriptIntrinsicCreate() to return 0? > 2. How do you go about debugging native methods? > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Android Developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

