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