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

Commit 16ad1770 authored by Jason Sams's avatar Jason Sams Committed by Android (Google) Code Review
Browse files

Merge "Add 3D LUT intrinsic java class"

parents fdc6e4a6 40f1fa6e
Loading
Loading
Loading
Loading
+90 −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 final class ScriptIntrinsic3DLUT extends ScriptIntrinsic {
    private Allocation mLUT;
    private Element mElement;

    private ScriptIntrinsic3DLUT(int id, RenderScript rs, Element e) {
        super(id, rs);
        mElement = e;
    }

    /**
     * Supported elements types are {@link Element#U8_4}
     *
     * The defaults tables are identity.
     *
     * @param rs The Renderscript context
     * @param e Element type for intputs and outputs
     *
     * @return ScriptIntrinsic3DLUT
     */
    public static ScriptIntrinsic3DLUT create(RenderScript rs, Element e) {
        int id = rs.nScriptIntrinsicCreate(8, e.getID(rs));

        if (!e.isCompatible(Element.U8_4(rs))) {
            throw new RSIllegalArgumentException("Element must be compatibile with uchar4.");
        }

        return new ScriptIntrinsic3DLUT(id, rs, e);
    }

    public void setLUT(Allocation lut) {
        final Type t = lut.getType();

        if (t.getZ() == 0) {
            throw new RSIllegalArgumentException("LUT must be 3d.");
        }

        if (!t.getElement().isCompatible(mElement)) {
            throw new RSIllegalArgumentException("LUT element type must match.");
        }

        mLUT = lut;
        setVar(0, mLUT);
    }


    /**
     * Invoke the kernel and apply the lookup to each cell of ain
     * and copy to aout.
     *
     * @param ain Input allocation
     * @param aout Output allocation
     */
    public void forEach(Allocation ain, Allocation aout) {
        forEach(0, ain, aout, null);
    }

    /**
     * Get a KernelID for this intrinsic kernel.
     *
     * @return Script.KernelID The KernelID object.
     */
    public Script.KernelID getKernelID() {
        return createKernelID(0, 3, null, null);
    }
}
+12 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.renderscript.RenderScript;
import android.renderscript.Script;
import android.renderscript.ScriptC;
import android.renderscript.ScriptGroup;
import android.renderscript.ScriptIntrinsic3DLUT;
import android.renderscript.ScriptIntrinsicColorMatrix;
import android.renderscript.Type;
import android.util.Log;
@@ -32,8 +33,11 @@ import android.util.Log;
public class ColorCube extends TestBase {
    private Allocation mCube;
    private ScriptC_colorcube mScript;
    private ScriptIntrinsic3DLUT mIntrinsic;
    private boolean mUseIntrinsic;

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

    private void initCube() {
@@ -66,16 +70,19 @@ public class ColorCube extends TestBase {

    public void createTest(android.content.res.Resources res) {
        mScript = new ScriptC_colorcube(mRS, res, R.raw.colorcube);
        mIntrinsic = ScriptIntrinsic3DLUT.create(mRS, Element.U8_4(mRS));

        initCube();
        mScript.invoke_setCube(mCube);


        //mScript.invoke_setMatrix(m);
        mIntrinsic.setLUT(mCube);
    }

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

}
+6 −2
Original line number Diff line number Diff line
@@ -292,7 +292,10 @@ public class ImageProcessingActivity extends Activity
            mTest = new WhiteBalance();
            break;
        case 36:
            mTest = new ColorCube();
            mTest = new ColorCube(false);
            break;
        case 37:
            mTest = new ColorCube(true);
            break;
        }

@@ -305,7 +308,7 @@ public class ImageProcessingActivity extends Activity
    }

    void setupTests() {
        mTestNames = new String[37];
        mTestNames = new String[38];
        mTestNames[0] = "Levels Vec3 Relaxed";
        mTestNames[1] = "Levels Vec4 Relaxed";
        mTestNames[2] = "Levels Vec3 Full";
@@ -343,6 +346,7 @@ public class ImageProcessingActivity extends Activity
        mTestNames[34] = "Exposure";
        mTestNames[35] = "White Balance";
        mTestNames[36] = "Color Cube";
        mTestNames[37] = "Color Cube (3D LUT intrinsic)";

        mTestSpinner.setAdapter(new ArrayAdapter<String>(
            this, R.layout.spinner_layout, mTestNames));