Hello, In that case it *might* help if you create RS context and script intrinsic blur *only once* and call invoke as many times you need to.
If recreating RS context and/script is the cause, it is something you could test rather easily since the crash would happen on second call to your blur method. -- H On May 25, 2014 10:43 AM, "Chang Sheng-Dean 章聖典" <[email protected]> wrote: > I call this method two consecutive times because I needed a blur radius of > 40px, but the SDK limitation was only 25px, so I thought I would just blur > it twice with 20px. > > > On Fri, May 23, 2014 at 1:18 PM, Harri Smatt <[email protected]> wrote: > >> 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 a topic in the >> Google Groups "Android Developers" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/android-developers/kGxHq3bcBdc/unsubscribe >> . >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Thank you for your time. > > Yours truly, > Sheng-Dean Chang 章聖典 > ([email protected], [email protected]) > > -- > 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.

