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

Commit a2fd0f7f authored by Jason Sams's avatar Jason Sams Committed by Android Git Automerger
Browse files

am 0353efc1: am 1e26a8b3: Merge "LUT intrinsic and CrossProcess test. 5x5...

am 0353efc1: am 1e26a8b3: Merge "LUT intrinsic and CrossProcess test. 5x5 convolve and test Gauss blur and test" into jb-mr1-dev

* commit '0353efc1':
  LUT intrinsic and CrossProcess test. 5x5 convolve and test Gauss blur and test
parents a25bbca8 0353efc1
Loading
Loading
Loading
Loading
+66 −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 android.renderscript;

import android.content.Context;
import android.content.res.Resources;
import android.util.Log;

/**
 * @hide
 **/
public class ScriptIntrinsicBlur extends ScriptIntrinsic {
    private float[] mValues = new float[9];
    private Allocation mInput;

    ScriptIntrinsicBlur(int id, RenderScript rs) {
        super(id, rs);
    }

    /**
     * Supported elements types are float, float4, uchar, uchar4
     *
     *
     * @param rs
     * @param e
     *
     * @return ScriptIntrinsicConvolve3x3
     */
    public static ScriptIntrinsicBlur create(RenderScript rs, Element e) {
        int id = rs.nScriptIntrinsicCreate(5, e.getID(rs));
        return new ScriptIntrinsicBlur(id, rs);

    }

    public void setInput(Allocation ain) {
        mInput = ain;
        bindAllocation(ain, 1);
    }

    public void setRadius(float v) {
        if (v < 0 || v > 25) {
            throw new RSIllegalArgumentException("Radius out of range (0-25).");
        }
        setVar(0, v);
    }

    public void forEach(Allocation aout) {
        forEach(0, null, aout, null);
    }

}
+66 −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 android.renderscript;

import android.util.Log;

/**
 * @hide
 **/
public class ScriptIntrinsicConvolve5x5 extends ScriptIntrinsic {
    private float[] mValues = new float[25];
    private Allocation mInput;

    ScriptIntrinsicConvolve5x5(int id, RenderScript rs) {
        super(id, rs);
    }

    /**
     * Supported elements types are float, float4, uchar, uchar4
     *
     *
     * @param rs
     * @param e
     *
     * @return ScriptIntrinsicConvolve5x5
     */
    public static ScriptIntrinsicConvolve5x5 create(RenderScript rs, Element e) {
        int id = rs.nScriptIntrinsicCreate(4, e.getID(rs));
        return new ScriptIntrinsicConvolve5x5(id, rs);

    }

    public void setInput(Allocation ain) {
        mInput = ain;
        bindAllocation(ain, 1);
    }

    public void setCoefficients(float v[]) {
        FieldPacker fp = new FieldPacker(25*4);
        for (int ct=0; ct < mValues.length; ct++) {
            mValues[ct] = v[ct];
            fp.addF32(mValues[ct]);
        }
        setVar(0, fp);
    }

    public void forEach(Allocation aout) {
        forEach(0, null, aout, null);
    }

}
+110 −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 android.renderscript;

import android.content.Context;
import android.content.res.Resources;
import android.util.Log;


/**
 * @hide
 **/
public class ScriptIntrinsicLUT extends ScriptIntrinsic {
    private Matrix4f mMatrix = new Matrix4f();
    private Allocation mTables;
    private byte mCache[] = new byte[1024];
    private boolean mDirty = true;

    ScriptIntrinsicLUT(int id, RenderScript rs) {
        super(id, rs);
        mTables = Allocation.createSized(rs, Element.U8(rs), 1024);
        for (int ct=0; ct < 256; ct++) {
            mCache[ct] = (byte)ct;
            mCache[ct + 256] = (byte)ct;
            mCache[ct + 512] = (byte)ct;
            mCache[ct + 768] = (byte)ct;
        }
        bindAllocation(mTables, 0);
    }

    /**
     * Supported elements types are uchar4
     *
     * @param rs
     * @param e
     *
     * @return ScriptIntrinsicColorMatrix
     */
    public static ScriptIntrinsicLUT create(RenderScript rs, Element e) {
        int id = rs.nScriptIntrinsicCreate(3, e.getID(rs));
        return new ScriptIntrinsicLUT(id, rs);

    }


    private void validate(int index, int value) {
        if (index < 0 || index > 255) {
            throw new RSIllegalArgumentException("Index out of range (0-255).");
        }
        if (value < 0 || value > 255) {
            throw new RSIllegalArgumentException("Value out of range (0-255).");
        }
    }

    public void setRed(int index, int value) {
        validate(index, value);
        mCache[index] = (byte)value;
        mDirty = true;
    }

    public void setGreen(int index, int value) {
        validate(index, value);
        mCache[index+256] = (byte)value;
        mDirty = true;
    }

    public void setBlue(int index, int value) {
        validate(index, value);
        mCache[index+512] = (byte)value;
        mDirty = true;
    }

    public void setAlpha(int index, int value) {
        validate(index, value);
        mCache[index+768] = (byte)value;
        mDirty = true;
    }


    /**
     * Invoke the kernel and apply the matrix to each cell of ain and copy to
     * aout.
     *
     * @param ain Input allocation
     * @param aout Output allocation
     */
    public void forEach(Allocation ain, Allocation aout) {
        if (mDirty) {
            mDirty = false;
            mTables.copyFromUnchecked(mCache);
        }
        forEach(0, ain, aout, null);
    }

}
+48 −23
Original line number Diff line number Diff line
@@ -21,14 +21,16 @@ import java.lang.Math;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.Script;
import android.renderscript.ScriptC;
import android.renderscript.ScriptIntrinsicBlur;
import android.renderscript.Type;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.TextView;

public class Blur25 extends TestBase {
    private boolean mUseIntrinsic = false;
    private ScriptIntrinsicBlur mIntrinsic;

    private int MAX_RADIUS = 25;
    private ScriptC_threshold mScript;
    private ScriptC_vertical_blur mScriptVBlur;
@@ -39,6 +41,10 @@ public class Blur25 extends TestBase {
    private Allocation mScratchPixelsAllocation2;


    public Blur25(boolean useIntrinsic) {
        mUseIntrinsic = useIntrinsic;
    }

    public boolean onBar1Setup(SeekBar b, TextView t) {
        t.setText("Radius");
        b.setProgress(100);
@@ -67,6 +73,12 @@ public class Blur25 extends TestBase {
        int width = mInPixelsAllocation.getType().getX();
        int height = mInPixelsAllocation.getType().getY();

        if (mUseIntrinsic) {
            mIntrinsic = ScriptIntrinsicBlur.create(mRS, Element.U8_4(mRS));
            mIntrinsic.setRadius(25.f);
            mIntrinsic.setInput(mInPixelsAllocation);
        } else {

            Type.Builder tb = new Type.Builder(mRS, Element.F32_4(mRS));
            tb.setX(width);
            tb.setY(height);
@@ -91,16 +103,29 @@ public class Blur25 extends TestBase {
            mScript.set_vBlurScript(mScriptVBlur);
            mScript.set_hBlurScript(mScriptHBlur);
        }
    }

    public void runTest() {
        if (mUseIntrinsic) {
            mIntrinsic.forEach(mOutPixelsAllocation);
        } else {
            mScript.invoke_filter();
        }
    }

    public void setupBenchmark() {
        if (mUseIntrinsic) {
            mIntrinsic.setRadius(MAX_RADIUS);
        } else {
            mScript.set_radius(MAX_RADIUS);
        }
    }

    public void exitBenchmark() {
        if (mUseIntrinsic) {
            mIntrinsic.setRadius(mRadius);
        } else {
            mScript.set_radius(mRadius);
        }
    }
}
+76 −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.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.Matrix4f;
import android.renderscript.RenderScript;
import android.renderscript.Script;
import android.renderscript.ScriptC;
import android.renderscript.ScriptGroup;
import android.renderscript.ScriptIntrinsicConvolve5x5;
import android.renderscript.Type;
import android.util.Log;

public class Convolve5x5 extends TestBase {
    private ScriptC_convolve5x5 mScript;
    private ScriptIntrinsicConvolve5x5 mIntrinsic;

    private int mWidth;
    private int mHeight;
    private boolean mUseIntrinsic;

    public Convolve5x5(boolean useIntrinsic) {
        mUseIntrinsic = useIntrinsic;
    }

    public void createTest(android.content.res.Resources res) {
        mWidth = mInPixelsAllocation.getType().getX();
        mHeight = mInPixelsAllocation.getType().getY();

        float f[] = new float[25];
        f[0] = 0.012f; f[1] = 0.025f; f[2] = 0.031f; f[3] = 0.025f; f[4] = 0.012f;
        f[5] = 0.025f; f[6] = 0.057f; f[7] = 0.075f; f[8] = 0.057f; f[9] = 0.025f;
        f[10]= 0.031f; f[11]= 0.075f; f[12]= 0.095f; f[13]= 0.075f; f[14]= 0.031f;
        f[15]= 0.025f; f[16]= 0.057f; f[17]= 0.075f; f[18]= 0.057f; f[19]= 0.025f;
        f[20]= 0.012f; f[21]= 0.025f; f[22]= 0.031f; f[23]= 0.025f; f[24]= 0.012f;

        if (mUseIntrinsic) {
            mIntrinsic = ScriptIntrinsicConvolve5x5.create(mRS, Element.U8_4(mRS));
            mIntrinsic.setCoefficients(f);
            mIntrinsic.setInput(mInPixelsAllocation);
        } else {
            mScript = new ScriptC_convolve5x5(mRS, res, R.raw.convolve5x5);
            mScript.set_gCoeffs(f);
            mScript.set_gIn(mInPixelsAllocation);
            mScript.set_gWidth(mWidth);
            mScript.set_gHeight(mHeight);
        }
    }

    public void runTest() {
        if (mUseIntrinsic) {
            mIntrinsic.forEach(mOutPixelsAllocation);
        } else {
            mScript.forEach_root(mOutPixelsAllocation);
        }
    }

}
Loading