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 Samsimport android.util.Log; 203a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 213a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams/** 2280d819033d4687507907f787d47379b7b37eae19Jason Sams * Intrinsic for applying a 5x5 convolve to an allocation. 2380d819033d4687507907f787d47379b7b37eae19Jason Sams * 243a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams **/ 2580d819033d4687507907f787d47379b7b37eae19Jason Samspublic final class ScriptIntrinsicConvolve5x5 extends ScriptIntrinsic { 2680d819033d4687507907f787d47379b7b37eae19Jason Sams private final float[] mValues = new float[25]; 273a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams private Allocation mInput; 283a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 2980d819033d4687507907f787d47379b7b37eae19Jason Sams private ScriptIntrinsicConvolve5x5(int id, RenderScript rs) { 303a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams super(id, rs); 313a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 323a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 333a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams /** 3480d819033d4687507907f787d47379b7b37eae19Jason Sams * Supported elements types are {@link Element#U8_4} 353a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 3680d819033d4687507907f787d47379b7b37eae19Jason Sams * The default coefficients are. 3780d819033d4687507907f787d47379b7b37eae19Jason Sams * <code> 3880d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 0, 0, 0, 0 ] 3980d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 0, 0, 0, 0 ] 4080d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 0, 1, 0, 0 ] 4180d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 0, 0, 0, 0 ] 4280d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 0, 0, 0, 0 ] 4380d819033d4687507907f787d47379b7b37eae19Jason Sams * </code> 443a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 4580d819033d4687507907f787d47379b7b37eae19Jason Sams * @param rs The Renderscript context 4680d819033d4687507907f787d47379b7b37eae19Jason Sams * @param e Element type for intputs and outputs 473a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * 483a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams * @return ScriptIntrinsicConvolve5x5 493a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams */ 503a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public static ScriptIntrinsicConvolve5x5 create(RenderScript rs, Element e) { 513a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams int id = rs.nScriptIntrinsicCreate(4, e.getID(rs)); 523a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams return new ScriptIntrinsicConvolve5x5(id, rs); 533a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 543a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 553a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 5680d819033d4687507907f787d47379b7b37eae19Jason Sams /** 5780d819033d4687507907f787d47379b7b37eae19Jason Sams * Set the input of the blur. 5880d819033d4687507907f787d47379b7b37eae19Jason Sams * Must match the element type supplied during create. 5980d819033d4687507907f787d47379b7b37eae19Jason Sams * 6080d819033d4687507907f787d47379b7b37eae19Jason Sams * @param ain The input allocation. 6180d819033d4687507907f787d47379b7b37eae19Jason Sams */ 623a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public void setInput(Allocation ain) { 633a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mInput = ain; 64e6a7886674c167b4e17f6dc72d41d5b9c604cdd1Jason Sams setVar(1, ain); 653a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 663a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 6780d819033d4687507907f787d47379b7b37eae19Jason Sams /** 6880d819033d4687507907f787d47379b7b37eae19Jason Sams * Set the coefficients for the convolve. 6980d819033d4687507907f787d47379b7b37eae19Jason Sams * 7080d819033d4687507907f787d47379b7b37eae19Jason Sams * The convolve layout is 7180d819033d4687507907f787d47379b7b37eae19Jason Sams * <code> 7280d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 0, 1, 2, 3, 4 ] 7380d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 5, 6, 7, 8, 9 ] 7480d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 10, 11, 12, 13, 14 ] 7580d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 15, 16, 17, 18, 19 ] 7680d819033d4687507907f787d47379b7b37eae19Jason Sams * <p> [ 20, 21, 22, 23, 24 ] 7780d819033d4687507907f787d47379b7b37eae19Jason Sams * </code> 7880d819033d4687507907f787d47379b7b37eae19Jason Sams * 7980d819033d4687507907f787d47379b7b37eae19Jason Sams * @param v The array of coefficients to set 8080d819033d4687507907f787d47379b7b37eae19Jason Sams */ 813a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public void setCoefficients(float v[]) { 823a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams FieldPacker fp = new FieldPacker(25*4); 833a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams for (int ct=0; ct < mValues.length; ct++) { 843a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mValues[ct] = v[ct]; 853a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams fp.addF32(mValues[ct]); 863a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 873a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams setVar(0, fp); 883a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 893a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 9080d819033d4687507907f787d47379b7b37eae19Jason Sams /** 9180d819033d4687507907f787d47379b7b37eae19Jason Sams * Apply the filter to the input and save to the specified 9280d819033d4687507907f787d47379b7b37eae19Jason Sams * allocation. 9380d819033d4687507907f787d47379b7b37eae19Jason Sams * 9480d819033d4687507907f787d47379b7b37eae19Jason Sams * @param aout Output allocation. Must match creation element 9580d819033d4687507907f787d47379b7b37eae19Jason Sams * type. 9680d819033d4687507907f787d47379b7b37eae19Jason Sams */ 973a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public void forEach(Allocation aout) { 983a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams forEach(0, null, aout, null); 993a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 1003a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 10108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 10208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Get a KernelID for this intrinsic kernel. 10308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 10408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * @return Script.KernelID The KernelID object. 10508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 10608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public Script.KernelID getKernelID() { 10708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return createKernelID(0, 2, null, null); 10808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 10908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams 11008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams /** 11108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * Get a FieldID for the input field of this intrinsic. 11208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * 11308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams * @return Script.FieldID The FieldID object. 11408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams */ 11508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams public Script.FieldID getFieldID_Input() { 11608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams return createFieldID(1, null); 11708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams } 1183a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams} 1193a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 120