Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81509410 authored by Jason Sams's avatar Jason Sams
Browse files

Add single channel blur test.

Change-Id: Iec63132ab4d88290ae1bf0d71431d4fe6ec6dd25
parent ee168214
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ public final class ScriptIntrinsicBlur extends ScriptIntrinsic {
     * @return ScriptIntrinsicBlur
     */
    public static ScriptIntrinsicBlur create(RenderScript rs, Element e) {
        if (e != Element.U8_4(rs)) {
        if ((e != Element.U8_4(rs)) && e != (Element.U8(rs))) {
            throw new RSIllegalArgumentException("Unsuported element type.");
        }
        int id = rs.nScriptIntrinsicCreate(5, e.getID(rs));
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.rs.image;

import java.lang.Math;

import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.renderscript.Type;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.TextView;

public class Blur25G extends TestBase {
    private final int MAX_RADIUS = 25;
    private float mRadius = MAX_RADIUS;

    private ScriptIntrinsicBlur mIntrinsic;

    private ScriptC_greyscale mScript;
    private Allocation mScratchPixelsAllocation1;
    private Allocation mScratchPixelsAllocation2;


    public Blur25G() {
    }

    public boolean onBar1Setup(SeekBar b, TextView t) {
        t.setText("Radius");
        b.setProgress(100);
        return true;
    }


    public void onBar1Changed(int progress) {
        mRadius = ((float)progress) / 100.0f * MAX_RADIUS;
        if (mRadius <= 0.10f) {
            mRadius = 0.10f;
        }
        mIntrinsic.setRadius(mRadius);
    }


    public void createTest(android.content.res.Resources res) {
        int width = mInPixelsAllocation.getType().getX();
        int height = mInPixelsAllocation.getType().getY();

        Type.Builder tb = new Type.Builder(mRS, Element.U8(mRS));
        tb.setX(width);
        tb.setY(height);
        mScratchPixelsAllocation1 = Allocation.createTyped(mRS, tb.create());
        mScratchPixelsAllocation2 = Allocation.createTyped(mRS, tb.create());

        mScript = new ScriptC_greyscale(mRS);
        mScript.forEach_toU8(mInPixelsAllocation, mScratchPixelsAllocation1);

        mIntrinsic = ScriptIntrinsicBlur.create(mRS, Element.U8(mRS));
        mIntrinsic.setRadius(MAX_RADIUS);
        mIntrinsic.setInput(mScratchPixelsAllocation1);
    }

    public void runTest() {
        mIntrinsic.forEach(mScratchPixelsAllocation2);
    }

    public void setupBenchmark() {
        mIntrinsic.setRadius(MAX_RADIUS);
    }

    public void exitBenchmark() {
        mIntrinsic.setRadius(mRadius);
    }

    public void updateBitmap(Bitmap b) {
        mScript.forEach_toU8_4(mScratchPixelsAllocation2, mOutPixelsAllocation);
        mOutPixelsAllocation.copyTo(b);
    }

}
+5 −1
Original line number Diff line number Diff line
@@ -270,6 +270,9 @@ public class ImageProcessingActivity extends Activity
        case 28:
            mTest = new Blend();
            break;
        case 29:
            mTest = new Blur25G();
            break;
        }

        mTest.createBaseTest(this, mBitmapIn, mBitmapIn2);
@@ -281,7 +284,7 @@ public class ImageProcessingActivity extends Activity
    }

    void setupTests() {
        mTestNames = new String[29];
        mTestNames = new String[30];
        mTestNames[0] = "Levels Vec3 Relaxed";
        mTestNames[1] = "Levels Vec4 Relaxed";
        mTestNames[2] = "Levels Vec3 Full";
@@ -311,6 +314,7 @@ public class ImageProcessingActivity extends Activity
        mTestNames[26] = "Intrinsics Convolve 5x5";
        mTestNames[27] = "Mandelbrot";
        mTestNames[28] = "Intrinsics Blend";
        mTestNames[29] = "Intrinsics Blur 25 uchar";

        mTestSpinner.setAdapter(new ArrayAdapter<String>(
            this, R.layout.spinner_layout, mTestNames));
+0 −1
Original line number Diff line number Diff line
@@ -125,7 +125,6 @@ public class TestBase {

    // Must override
    public void createTest(android.content.res.Resources res) {
        android.util.Log.e("img", "implement createTest");
    }

    // Must override
+8 −0
Original line number Diff line number Diff line
@@ -27,4 +27,12 @@ uchar4 __attribute__((kernel)) root(uchar4 v_in) {
    return rsPackColorTo8888(mono);
}

uchar __attribute__((kernel)) toU8(uchar4 v_in) {
    float4 f4 = convert_float4(v_in);
    return (uchar)dot(f4.rgb, gMonoMult);
}

uchar4 __attribute__((kernel)) toU8_4(uchar v_in) {
    return (uchar4)v_in;
}