1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspackage android.support.v8.renderscript; 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsimport android.content.Context; 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsimport android.content.res.Resources; 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samsimport android.util.Log; 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/** 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Intrinsic Gausian blur filter. Applies a gaussian blur of the 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * specified radius to all elements of an allocation. 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams **/ 29ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murraypublic class ScriptIntrinsicBlur extends ScriptIntrinsic { 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private final float[] mValues = new float[9]; 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private Allocation mInput; 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 33ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray protected ScriptIntrinsicBlur(int id, RenderScript rs) { 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams super(id, rs); 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Create an intrinsic for applying a blur to an allocation. The 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * default radius is 5.0. 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Supported elements types are {@link Element#U8_4} 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 437d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param rs The RenderScript context 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param e Element type for inputs and outputs 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return ScriptIntrinsicBlur 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public static ScriptIntrinsicBlur create(RenderScript rs, Element e) { 49ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (rs.isNative) { 50ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker) rs; 51ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return ScriptIntrinsicBlurThunker.create(rs, e); 52ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 537d435ae5ba100be5710b685653cc351cab159c11Stephen Hines if ((!e.isCompatible(Element.U8_4(rs))) && (!e.isCompatible(Element.U8(rs)))) { 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSIllegalArgumentException("Unsuported element type."); 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int id = rs.nScriptIntrinsicCreate(5, e.getID(rs)); 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptIntrinsicBlur sib = new ScriptIntrinsicBlur(id, rs); 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams sib.setRadius(5.f); 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return sib; 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Set the input of the blur. 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Must match the element type supplied during create. 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The input allocation 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void setInput(Allocation ain) { 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams mInput = ain; 701b370e358d16cc3b50b169511d6b387db09f972dJason Sams setVar(1, ain); 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Set the radius of the Blur. 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Supported range 0 < radius <= 25 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param radius The radius of the blur 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void setRadius(float radius) { 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (radius <= 0 || radius > 25) { 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSIllegalArgumentException("Radius out of range (0 < r <= 25)."); 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams setVar(0, radius); 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Apply the filter to the input and save to the specified 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * allocation. 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout Output allocation. Must match creation element 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * type. 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEach(Allocation aout) { 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams forEach(0, null, aout, null); 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for this intrinsic kernel. 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelID() { 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(0, 2, null, null); 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a FieldID for the input field of this intrinsic. 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.FieldID The FieldID object. 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.FieldID getFieldID_Input() { 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createFieldID(1, null); 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 117