13a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams/* 23a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Copyright (C) 2012 The Android Open Source Project 33a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 43a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 53a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * you may not use this file except in compliance with the License. 63a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * You may obtain a copy of the License at 73a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 83a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 93a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 103a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * Unless required by applicable law or agreed to in writing, software 113a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 123a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * See the License for the specific language governing permissions and 143a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * limitations under the License. 153a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams */ 163a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 173a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samspackage android.renderscript; 183a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 193a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams/** 2080d819033d4687507907f787d47379b7b37eae19Jason Sams * Intrinsic Gausian blur filter. Applies a gaussian blur of the 2180d819033d4687507907f787d47379b7b37eae19Jason Sams * specified radius to all elements of an allocation. 2280d819033d4687507907f787d47379b7b37eae19Jason Sams * 2380d819033d4687507907f787d47379b7b37eae19Jason Sams * 243a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams **/ 2580d819033d4687507907f787d47379b7b37eae19Jason Samspublic final class ScriptIntrinsicBlur extends ScriptIntrinsic { 2680d819033d4687507907f787d47379b7b37eae19Jason Sams private final float[] mValues = new float[9]; 273a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams private Allocation mInput; 283a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 29460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray private ScriptIntrinsicBlur(long id, RenderScript rs) { 303a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams super(id, rs); 313a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 323a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 333a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams /** 3480d819033d4687507907f787d47379b7b37eae19Jason Sams * Create an intrinsic for applying a blur to an allocation. The 3580d819033d4687507907f787d47379b7b37eae19Jason Sams * default radius is 5.0. 363a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 3780d819033d4687507907f787d47379b7b37eae19Jason Sams * Supported elements types are {@link Element#U8_4} 383a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 39c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * @param rs The RenderScript context 4080d819033d4687507907f787d47379b7b37eae19Jason Sams * @param e Element type for inputs and outputs 413a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 4280d819033d4687507907f787d47379b7b37eae19Jason Sams * @return ScriptIntrinsicBlur 433a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams */ 443a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public static ScriptIntrinsicBlur create(RenderScript rs, Element e) { 45bddc7ffb5203602e6e84941b1840aef5d606bcb4Tim Murray if ((!e.isCompatible(Element.U8_4(rs))) && (!e.isCompatible(Element.U8(rs)))) { 4680d819033d4687507907f787d47379b7b37eae19Jason Sams throw new RSIllegalArgumentException("Unsuported element type."); 4780d819033d4687507907f787d47379b7b37eae19Jason Sams } 48460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nScriptIntrinsicCreate(5, e.getID(rs)); 4980d819033d4687507907f787d47379b7b37eae19Jason Sams ScriptIntrinsicBlur sib = new ScriptIntrinsicBlur(id, rs); 5080d819033d4687507907f787d47379b7b37eae19Jason Sams sib.setRadius(5.f); 5180d819033d4687507907f787d47379b7b37eae19Jason Sams return sib; 523a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 533a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 5480d819033d4687507907f787d47379b7b37eae19Jason Sams /** 5580d819033d4687507907f787d47379b7b37eae19Jason Sams * Set the input of the blur. 5680d819033d4687507907f787d47379b7b37eae19Jason Sams * Must match the element type supplied during create. 5780d819033d4687507907f787d47379b7b37eae19Jason Sams * 5880d819033d4687507907f787d47379b7b37eae19Jason Sams * @param ain The input allocation 5980d819033d4687507907f787d47379b7b37eae19Jason Sams */ 603a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public void setInput(Allocation ain) { 613a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mInput = ain; 62e6a7886674c167b4e17f6dc72d41d5b9c604cdd1Jason Sams setVar(1, ain); 633a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 643a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 6580d819033d4687507907f787d47379b7b37eae19Jason Sams /** 6680d819033d4687507907f787d47379b7b37eae19Jason Sams * Set the radius of the Blur. 6780d819033d4687507907f787d47379b7b37eae19Jason Sams * 6831864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams * Supported range 0 < radius <= 25 6980d819033d4687507907f787d47379b7b37eae19Jason Sams * 7080d819033d4687507907f787d47379b7b37eae19Jason Sams * @param radius The radius of the blur 7180d819033d4687507907f787d47379b7b37eae19Jason Sams */ 7280d819033d4687507907f787d47379b7b37eae19Jason Sams public void setRadius(float radius) { 7331864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams if (radius <= 0 || radius > 25) { 7431864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams throw new RSIllegalArgumentException("Radius out of range (0 < r <= 25)."); 753a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 7680d819033d4687507907f787d47379b7b37eae19Jason Sams setVar(0, radius); 773a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 783a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 7980d819033d4687507907f787d47379b7b37eae19Jason Sams /** 8080d819033d4687507907f787d47379b7b37eae19Jason Sams * Apply the filter to the input and save to the specified 8180d819033d4687507907f787d47379b7b37eae19Jason Sams * allocation. 8280d819033d4687507907f787d47379b7b37eae19Jason Sams * 8380d819033d4687507907f787d47379b7b37eae19Jason Sams * @param aout Output allocation. Must match creation element 8480d819033d4687507907f787d47379b7b37eae19Jason Sams * type. 8580d819033d4687507907f787d47379b7b37eae19Jason Sams */ 863a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public void forEach(Allocation aout) { 87949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes forEach(0, (Allocation) null, aout, null); 883a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 893a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 9008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 916f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * Apply the filter to the input and save to the specified 926f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * allocation. 936f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * 946f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * @param aout Output allocation. Must match creation element 956f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * type. 966f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray * @param opt LaunchOptions for clipping 976f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray */ 986f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray public void forEach(Allocation aout, Script.LaunchOptions opt) { 9948ba506dfa591d0bcd79a088457eb95a9bd4c575Stephen Hines forEach(0, (Allocation) null, aout, null, opt); 1006f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray } 1016f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray 1026f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray 1036f842ac8aa37dd855fbffdc09f5491bd85ab3c9aTim Murray /** 10408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Get a KernelID for this intrinsic kernel. 10508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 10608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * @return Script.KernelID The KernelID object. 10708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 10808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public Script.KernelID getKernelID() { 10908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return createKernelID(0, 2, null, null); 11008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 11108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 11208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 11308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Get a FieldID for the input field of this intrinsic. 11408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * @return Script.FieldID The FieldID object. 11608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 11708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public Script.FieldID getFieldID_Input() { 11808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return createFieldID(1, null); 11908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 1203a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams} 121