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.

Reply via email to