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 */ 22464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Samspublic final class ScriptIntrinsicResize extends ScriptIntrinsic { 23464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams private Allocation mInput; 24464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 25464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams private ScriptIntrinsicResize(long id, RenderScript rs) { 26464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams super(id, rs); 27464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 28464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 29464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 30464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Supported elements types are {@link Element#U8}, {@link 31464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4} 328f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang * {@link Element#F32}, {@link Element#F32_2}, {@link 338f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang * Element#F32_3}, {@link Element#F32_4} 34464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 35464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @param rs The RenderScript context 36464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 37464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @return ScriptIntrinsicResize 38464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 39464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public static ScriptIntrinsicResize create(RenderScript rs) { 40464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams long id = rs.nScriptIntrinsicCreate(12, 0); 41464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams ScriptIntrinsicResize si = new ScriptIntrinsicResize(id, rs); 42464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams return si; 43464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 44464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 45464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 46464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 47464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Set the input of the resize. 48464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Must match the element type supplied during create. 49464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 50464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @param ain The input allocation. 51464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 52464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public void setInput(Allocation ain) { 53464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams Element e = ain.getElement(); 54464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams if (!e.isCompatible(Element.U8(mRS)) && 55464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams !e.isCompatible(Element.U8_2(mRS)) && 56464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams !e.isCompatible(Element.U8_3(mRS)) && 578f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang !e.isCompatible(Element.U8_4(mRS)) && 588f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang !e.isCompatible(Element.F32(mRS)) && 598f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang !e.isCompatible(Element.F32_2(mRS)) && 608f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang !e.isCompatible(Element.F32_3(mRS)) && 618f3cc4582dba6beaf9630239d4ad861543964f93Miao Wang !e.isCompatible(Element.F32_4(mRS))) { 62464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams throw new RSIllegalArgumentException("Unsuported element type."); 63464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 64464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 65464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams mInput = ain; 66464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams setVar(0, ain); 67464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 68464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 69464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 70464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Get a FieldID for the input field of this intrinsic. 71464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 72464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @return Script.FieldID The FieldID object. 73464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 74464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public Script.FieldID getFieldID_Input() { 75464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams return createFieldID(0, null); 76464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 77464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 78464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 79464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 80464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Resize copy the input allocation to the output specified. The 81464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Allocation is rescaled if necessary using bi-cubic 82464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * interpolation. 83464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 84464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @param aout Output allocation. Element type must match 85464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * current input. Must not be same as input. 86464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 87464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public void forEach_bicubic(Allocation aout) { 88464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams if (aout == mInput) { 89464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams throw new RSIllegalArgumentException("Output cannot be same as Input."); 90464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 91464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams forEach_bicubic(aout, null); 92464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 93464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 94464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 95464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Resize copy the input allocation to the output specified. The 96464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Allocation is rescaled if necessary using bi-cubic 97464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * interpolation. 98464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 99464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @param aout Output allocation. Element type must match 100464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * current input. 101464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @param opt LaunchOptions for clipping 102464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 103464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public void forEach_bicubic(Allocation aout, Script.LaunchOptions opt) { 104949610653fdf55dd2cb3c846047e6aa2c6d73f0dChris Wailes forEach(0, (Allocation) null, aout, null, opt); 105464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 106464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 107464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams /** 108464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * Get a KernelID for this intrinsic kernel. 109464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * 110464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams * @return Script.KernelID The KernelID object. 111464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams */ 112464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams public Script.KernelID getKernelID_bicubic() { 113464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams return createKernelID(0, 2, null, null); 114464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams } 115464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 116464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams 117464af41b28cfb1b56fdf4aeda117b4a4c5e99eb9Jason Sams} 118