ScriptIntrinsicResize.java revision 464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9
1464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams/*
2464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Copyright (C) 2014 The Android Open Source Project
3464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams *
4464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * you may not use this file except in compliance with the License.
6464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * You may obtain a copy of the License at
7464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams *
8464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams *
10464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Unless required by applicable law or agreed to in writing, software
11464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * See the License for the specific language governing permissions and
14464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * limitations under the License.
15464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */
16464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
17464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Samspackage android.renderscript;
18464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
19464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams/**
20464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Intrinsic for performing a resize of a 2D allocation.
21464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @hide
22464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */
23464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Samspublic final class ScriptIntrinsicResize extends ScriptIntrinsic {
24464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    private Allocation mInput;
25464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
26464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    private ScriptIntrinsicResize(long id, RenderScript rs) {
27464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        super(id, rs);
28464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
29464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
30464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
31464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Supported elements types are {@link Element#U8}, {@link
32464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4}
33464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
34464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @param rs The RenderScript context
35464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
36464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @return ScriptIntrinsicResize
37464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
38464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public static ScriptIntrinsicResize create(RenderScript rs) {
39464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        long id = rs.nScriptIntrinsicCreate(12, 0);
40464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        ScriptIntrinsicResize si = new ScriptIntrinsicResize(id, rs);
41464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        return si;
42464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
43464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
44464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
45464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
46464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Set the input of the resize.
47464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Must match the element type supplied during create.
48464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
49464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @param ain The input allocation.
50464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
51464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public void setInput(Allocation ain) {
52464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        Element e = ain.getElement();
53464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        if (!e.isCompatible(Element.U8(mRS)) &&
54464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams            !e.isCompatible(Element.U8_2(mRS)) &&
55464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams            !e.isCompatible(Element.U8_3(mRS)) &&
56464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams            !e.isCompatible(Element.U8_4(mRS))) {
57464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams            throw new RSIllegalArgumentException("Unsuported element type.");
58464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        }
59464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
60464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        mInput = ain;
61464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        setVar(0, ain);
62464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
63464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
64464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
65464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Get a FieldID for the input field of this intrinsic.
66464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
67464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @return Script.FieldID The FieldID object.
68464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
69464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public Script.FieldID getFieldID_Input() {
70464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        return createFieldID(0, null);
71464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
72464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
73464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
74464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
75464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Resize copy the input allocation to the output specified. The
76464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Allocation is rescaled if necessary using bi-cubic
77464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * interpolation.
78464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
79464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @param aout Output allocation. Element type must match
80464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *             current input.  Must not be same as input.
81464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
82464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public void forEach_bicubic(Allocation aout) {
83464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        if (aout == mInput) {
84464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams            throw new RSIllegalArgumentException("Output cannot be same as Input.");
85464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        }
86464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        forEach_bicubic(aout, null);
87464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
88464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
89464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
90464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Resize copy the input allocation to the output specified. The
91464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Allocation is rescaled if necessary using bi-cubic
92464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * interpolation.
93464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
94464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @param aout Output allocation. Element type must match
95464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *             current input.
96464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @param opt LaunchOptions for clipping
97464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
98464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public void forEach_bicubic(Allocation aout, Script.LaunchOptions opt) {
99464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        forEach(0, null, aout, null, opt);
100464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
101464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
102464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    /**
103464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * Get a KernelID for this intrinsic kernel.
104464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     *
105464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     * @return Script.KernelID The KernelID object.
106464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams     */
107464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    public Script.KernelID getKernelID_bicubic() {
108464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams        return createKernelID(0, 2, null, null);
109464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams    }
110464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
111464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
112464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams}
113464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams
114