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.

Reply via email to