ScriptIntrinsic3DLUT.java revision 02d56d90e01e20db8424de94a14fe59dc94f19c0
140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams/* 240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Copyright (C) 2012 The Android Open Source Project 340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * you may not use this file except in compliance with the License. 640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * You may obtain a copy of the License at 740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 1040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Unless required by applicable law or agreed to in writing, software 1140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * See the License for the specific language governing permissions and 1440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * limitations under the License. 1540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams */ 1640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 1740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Samspackage android.renderscript; 1840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 1940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Samsimport android.util.Log; 2040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 2140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams/** 2240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 2302d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * Intrinsic for converting RGB to RGBA by using a 3D lookup table. The 2402d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * incoming r,g,b values are use as normalized x,y,z coordinates into a 3D 2502d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * allocation. The 8 nearest values are sampled and linearly interpolated. The 2602d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * result is placed in the output. 2702d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * 2840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams **/ 2940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Samspublic final class ScriptIntrinsic3DLUT extends ScriptIntrinsic { 3040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams private Allocation mLUT; 3140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams private Element mElement; 3240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 3340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams private ScriptIntrinsic3DLUT(int id, RenderScript rs, Element e) { 3440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams super(id, rs); 3540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams mElement = e; 3640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 3740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 3840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams /** 3940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Supported elements types are {@link Element#U8_4} 4040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 4140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * The defaults tables are identity. 4240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 4340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @param rs The Renderscript context 4440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @param e Element type for intputs and outputs 4540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 4640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @return ScriptIntrinsic3DLUT 4740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams */ 4840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams public static ScriptIntrinsic3DLUT create(RenderScript rs, Element e) { 4940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams int id = rs.nScriptIntrinsicCreate(8, e.getID(rs)); 5040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 5140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams if (!e.isCompatible(Element.U8_4(rs))) { 521e645d29250731c6e34040940c59f1033213ad3eJason Sams throw new RSIllegalArgumentException("Element must be compatible with uchar4."); 5340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 5440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 5540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams return new ScriptIntrinsic3DLUT(id, rs, e); 5640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 5740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 5840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams public void setLUT(Allocation lut) { 5940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams final Type t = lut.getType(); 6040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 6140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams if (t.getZ() == 0) { 6240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams throw new RSIllegalArgumentException("LUT must be 3d."); 6340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 6440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 6540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams if (!t.getElement().isCompatible(mElement)) { 6640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams throw new RSIllegalArgumentException("LUT element type must match."); 6740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 6840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 6940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams mLUT = lut; 7040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams setVar(0, mLUT); 7140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 7240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 7340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 7440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams /** 7540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Invoke the kernel and apply the lookup to each cell of ain 7640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * and copy to aout. 7740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 7840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @param ain Input allocation 7940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @param aout Output allocation 8040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams */ 8140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams public void forEach(Allocation ain, Allocation aout) { 8240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams forEach(0, ain, aout, null); 8340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 8440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 8540f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams /** 8640f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * Get a KernelID for this intrinsic kernel. 8740f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * 8840f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams * @return Script.KernelID The KernelID object. 8940f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams */ 9040f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams public Script.KernelID getKernelID() { 9140f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams return createKernelID(0, 3, null, null); 9240f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams } 9340f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams} 9440f1fa6ed699b885e3270faf88085ed78f54a2f4Jason Sams 95