1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.renderscript;
18 
19 /**
20  * Intrinsic Gausian blur filter. Applies a gaussian blur of the
21  * specified radius to all elements of an allocation.
22  *
23  * @deprecated Renderscript has been deprecated in API level 31. Please refer to the <a
24  * href="https://developer.android.com/guide/topics/renderscript/migration-guide">migration
25  * guide</a> for the proposed alternatives.
26  **/
27 @Deprecated
28 public final class ScriptIntrinsicBlur extends ScriptIntrinsic {
29     private final float[] mValues = new float[9];
30     private Allocation mInput;
31 
ScriptIntrinsicBlur(long id, RenderScript rs)32     private ScriptIntrinsicBlur(long id, RenderScript rs) {
33         super(id, rs);
34     }
35 
36     /**
37      * Create an intrinsic for applying a blur to an allocation. The
38      * default radius is 5.0.
39      *
40      * Supported elements types are {@link Element#U8},
41      * {@link Element#U8_4}.
42      *
43      * @param rs The RenderScript context
44      * @param e Element type for inputs and outputs
45      *
46      * @return ScriptIntrinsicBlur
47      */
create(RenderScript rs, Element e)48     public static ScriptIntrinsicBlur create(RenderScript rs, Element e) {
49         if ((!e.isCompatible(Element.U8_4(rs))) && (!e.isCompatible(Element.U8(rs)))) {
50             throw new RSIllegalArgumentException("Unsupported element type.");
51         }
52         long id = rs.nScriptIntrinsicCreate(5, e.getID(rs));
53         ScriptIntrinsicBlur sib = new ScriptIntrinsicBlur(id, rs);
54         sib.setRadius(5.f);
55         return sib;
56     }
57 
58     /**
59      * Set the input of the blur.
60      * Must match the element type supplied during create.
61      *
62      * @param ain The input allocation
63      */
setInput(Allocation ain)64     public void setInput(Allocation ain) {
65         if (ain.getType().getY() == 0) {
66             throw new RSIllegalArgumentException("Input set to a 1D Allocation");
67         }
68         Element e = ain.getElement();
69         if ((!e.isCompatible(Element.U8_4(mRS))) && (!e.isCompatible(Element.U8(mRS)))) {
70             throw new RSIllegalArgumentException("Unsupported element type.");
71         }
72         mInput = ain;
73         setVar(1, ain);
74     }
75 
76     /**
77      * Set the radius of the Blur.
78      *
79      * Supported range 0 < radius <= 25
80      *
81      * @param radius The radius of the blur
82      */
setRadius(float radius)83     public void setRadius(float radius) {
84         if (radius <= 0 || radius > 25) {
85             throw new RSIllegalArgumentException("Radius out of range (0 < r <= 25).");
86         }
87         setVar(0, radius);
88     }
89 
90     /**
91      * Apply the filter to the input and save to the specified
92      * allocation.
93      *
94      * @param aout Output allocation. Must match creation element
95      *             type.
96      */
forEach(Allocation aout)97     public void forEach(Allocation aout) {
98         if (aout.getType().getY() == 0) {
99             throw new RSIllegalArgumentException("Output is a 1D Allocation");
100         }
101         forEach(0, (Allocation) null, aout, null);
102     }
103 
104     /**
105      * Apply the filter to the input and save to the specified
106      * allocation.
107      *
108      * @param aout Output allocation. Must match creation element
109      *             type.
110      * @param opt LaunchOptions for clipping
111      */
forEach(Allocation aout, Script.LaunchOptions opt)112     public void forEach(Allocation aout, Script.LaunchOptions opt) {
113         if (aout.getType().getY() == 0) {
114             throw new RSIllegalArgumentException("Output is a 1D Allocation");
115         }
116         forEach(0, (Allocation) null, aout, null, opt);
117     }
118 
119 
120     /**
121      * Get a KernelID for this intrinsic kernel.
122      *
123      * @return Script.KernelID The KernelID object.
124      */
getKernelID()125     public Script.KernelID getKernelID() {
126         return createKernelID(0, 2, null, null);
127     }
128 
129     /**
130      * Get a FieldID for the input field of this intrinsic.
131      *
132      * @return Script.FieldID The FieldID object.
133      */
getFieldID_Input()134     public Script.FieldID getFieldID_Input() {
135         return createFieldID(1, null);
136     }
137 }
138