1059fede7f200350b6131fc131f76248085485722Miao Wang/* 2059fede7f200350b6131fc131f76248085485722Miao Wang * Copyright (C) 2015 The Android Open Source Project 3059fede7f200350b6131fc131f76248085485722Miao Wang * 4059fede7f200350b6131fc131f76248085485722Miao Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5059fede7f200350b6131fc131f76248085485722Miao Wang * you may not use this file except in compliance with the License. 6059fede7f200350b6131fc131f76248085485722Miao Wang * You may obtain a copy of the License at 7059fede7f200350b6131fc131f76248085485722Miao Wang * 8059fede7f200350b6131fc131f76248085485722Miao Wang * http://www.apache.org/licenses/LICENSE-2.0 9059fede7f200350b6131fc131f76248085485722Miao Wang * 10059fede7f200350b6131fc131f76248085485722Miao Wang * Unless required by applicable law or agreed to in writing, software 11059fede7f200350b6131fc131f76248085485722Miao Wang * distributed under the License is distributed on an "AS IS" BASIS, 12059fede7f200350b6131fc131f76248085485722Miao Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13059fede7f200350b6131fc131f76248085485722Miao Wang * See the License for the specific language governing permissions and 14059fede7f200350b6131fc131f76248085485722Miao Wang * limitations under the License. 15059fede7f200350b6131fc131f76248085485722Miao Wang */ 16059fede7f200350b6131fc131f76248085485722Miao Wang 17059fede7f200350b6131fc131f76248085485722Miao Wangpackage android.support.v8.renderscript; 18059fede7f200350b6131fc131f76248085485722Miao Wang 19059fede7f200350b6131fc131f76248085485722Miao Wangimport android.util.Log; 20059fede7f200350b6131fc131f76248085485722Miao Wang 21059fede7f200350b6131fc131f76248085485722Miao Wang/** 22059fede7f200350b6131fc131f76248085485722Miao Wang * Intrinsic for performing a resize of a 2D allocation. 23059fede7f200350b6131fc131f76248085485722Miao Wang */ 24059fede7f200350b6131fc131f76248085485722Miao Wangpublic class ScriptIntrinsicResize extends ScriptIntrinsic { 25059fede7f200350b6131fc131f76248085485722Miao Wang private Allocation mInput; 26059fede7f200350b6131fc131f76248085485722Miao Wang // API level for the intrinsic 27059fede7f200350b6131fc131f76248085485722Miao Wang private static final int INTRINSIC_API_LEVEL = 21; 28059fede7f200350b6131fc131f76248085485722Miao Wang 29059fede7f200350b6131fc131f76248085485722Miao Wang protected ScriptIntrinsicResize(long id, RenderScript rs) { 30059fede7f200350b6131fc131f76248085485722Miao Wang super(id, rs); 31059fede7f200350b6131fc131f76248085485722Miao Wang } 32059fede7f200350b6131fc131f76248085485722Miao Wang 33059fede7f200350b6131fc131f76248085485722Miao Wang /** 34059fede7f200350b6131fc131f76248085485722Miao Wang * Supported elements types are {@link Element#U8}, {@link 35059fede7f200350b6131fc131f76248085485722Miao Wang * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4} 36059fede7f200350b6131fc131f76248085485722Miao Wang * {@link Element#F32}, {@link Element#F32_2}, {@link 37059fede7f200350b6131fc131f76248085485722Miao Wang * Element#F32_3}, {@link Element#F32_4} 38059fede7f200350b6131fc131f76248085485722Miao Wang * 39059fede7f200350b6131fc131f76248085485722Miao Wang * @param rs The RenderScript context 40059fede7f200350b6131fc131f76248085485722Miao Wang * 41059fede7f200350b6131fc131f76248085485722Miao Wang * @return ScriptIntrinsicResize 42059fede7f200350b6131fc131f76248085485722Miao Wang */ 43059fede7f200350b6131fc131f76248085485722Miao Wang public static ScriptIntrinsicResize create(RenderScript rs) { 44059fede7f200350b6131fc131f76248085485722Miao Wang long id; 45059fede7f200350b6131fc131f76248085485722Miao Wang boolean mUseIncSupp = rs.isUseNative() && 46059fede7f200350b6131fc131f76248085485722Miao Wang android.os.Build.VERSION.SDK_INT < INTRINSIC_API_LEVEL; 47059fede7f200350b6131fc131f76248085485722Miao Wang 48059fede7f200350b6131fc131f76248085485722Miao Wang id = rs.nScriptIntrinsicCreate(12, 0, mUseIncSupp); 49059fede7f200350b6131fc131f76248085485722Miao Wang 50059fede7f200350b6131fc131f76248085485722Miao Wang ScriptIntrinsicResize si = new ScriptIntrinsicResize(id, rs); 51059fede7f200350b6131fc131f76248085485722Miao Wang si.setIncSupp(mUseIncSupp); 52059fede7f200350b6131fc131f76248085485722Miao Wang return si; 53059fede7f200350b6131fc131f76248085485722Miao Wang 54059fede7f200350b6131fc131f76248085485722Miao Wang } 55059fede7f200350b6131fc131f76248085485722Miao Wang 56059fede7f200350b6131fc131f76248085485722Miao Wang /** 57059fede7f200350b6131fc131f76248085485722Miao Wang * Set the input of the resize. 58059fede7f200350b6131fc131f76248085485722Miao Wang * Must match the element type supplied during create. 59059fede7f200350b6131fc131f76248085485722Miao Wang * 60059fede7f200350b6131fc131f76248085485722Miao Wang * @param ain The input allocation. 61059fede7f200350b6131fc131f76248085485722Miao Wang */ 62059fede7f200350b6131fc131f76248085485722Miao Wang public void setInput(Allocation ain) { 63059fede7f200350b6131fc131f76248085485722Miao Wang Element e = ain.getElement(); 64059fede7f200350b6131fc131f76248085485722Miao Wang if (!e.isCompatible(Element.U8(mRS)) && 65059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.U8_2(mRS)) && 66059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.U8_3(mRS)) && 67059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.U8_4(mRS)) && 68059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.F32(mRS)) && 69059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.F32_2(mRS)) && 70059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.F32_3(mRS)) && 71059fede7f200350b6131fc131f76248085485722Miao Wang !e.isCompatible(Element.F32_4(mRS))) { 7283b686c5e4144b5e01ec25940f87e1955342f89bStephen Hines throw new RSIllegalArgumentException("Unsupported element type."); 73059fede7f200350b6131fc131f76248085485722Miao Wang } 74059fede7f200350b6131fc131f76248085485722Miao Wang 75059fede7f200350b6131fc131f76248085485722Miao Wang mInput = ain; 76059fede7f200350b6131fc131f76248085485722Miao Wang setVar(0, ain); 77059fede7f200350b6131fc131f76248085485722Miao Wang } 78059fede7f200350b6131fc131f76248085485722Miao Wang 79059fede7f200350b6131fc131f76248085485722Miao Wang /** 80059fede7f200350b6131fc131f76248085485722Miao Wang * Get a FieldID for the input field of this intrinsic. 81059fede7f200350b6131fc131f76248085485722Miao Wang * 82059fede7f200350b6131fc131f76248085485722Miao Wang * @return Script.FieldID The FieldID object. 83059fede7f200350b6131fc131f76248085485722Miao Wang */ 84059fede7f200350b6131fc131f76248085485722Miao Wang public Script.FieldID getFieldID_Input() { 85059fede7f200350b6131fc131f76248085485722Miao Wang return createFieldID(0, null); 86059fede7f200350b6131fc131f76248085485722Miao Wang } 87059fede7f200350b6131fc131f76248085485722Miao Wang 88059fede7f200350b6131fc131f76248085485722Miao Wang 89059fede7f200350b6131fc131f76248085485722Miao Wang /** 90059fede7f200350b6131fc131f76248085485722Miao Wang * Resize copy the input allocation to the output specified. The 91059fede7f200350b6131fc131f76248085485722Miao Wang * Allocation is rescaled if necessary using bi-cubic 92059fede7f200350b6131fc131f76248085485722Miao Wang * interpolation. 93059fede7f200350b6131fc131f76248085485722Miao Wang * 94059fede7f200350b6131fc131f76248085485722Miao Wang * @param aout Output allocation. Element type must match 95059fede7f200350b6131fc131f76248085485722Miao Wang * current input. Must not be same as input. 96059fede7f200350b6131fc131f76248085485722Miao Wang */ 97059fede7f200350b6131fc131f76248085485722Miao Wang public void forEach_bicubic(Allocation aout) { 98059fede7f200350b6131fc131f76248085485722Miao Wang if (aout == mInput) { 99059fede7f200350b6131fc131f76248085485722Miao Wang throw new RSIllegalArgumentException("Output cannot be same as Input."); 100059fede7f200350b6131fc131f76248085485722Miao Wang } 101059fede7f200350b6131fc131f76248085485722Miao Wang forEach_bicubic(aout, null); 102059fede7f200350b6131fc131f76248085485722Miao Wang } 103059fede7f200350b6131fc131f76248085485722Miao Wang 104059fede7f200350b6131fc131f76248085485722Miao Wang /** 105059fede7f200350b6131fc131f76248085485722Miao Wang * Resize copy the input allocation to the output specified. The 106059fede7f200350b6131fc131f76248085485722Miao Wang * Allocation is rescaled if necessary using bi-cubic 107059fede7f200350b6131fc131f76248085485722Miao Wang * interpolation. 108059fede7f200350b6131fc131f76248085485722Miao Wang * 109059fede7f200350b6131fc131f76248085485722Miao Wang * @param aout Output allocation. Element type must match 110059fede7f200350b6131fc131f76248085485722Miao Wang * current input. 111059fede7f200350b6131fc131f76248085485722Miao Wang * @param opt LaunchOptions for clipping 112059fede7f200350b6131fc131f76248085485722Miao Wang */ 113059fede7f200350b6131fc131f76248085485722Miao Wang public void forEach_bicubic(Allocation aout, Script.LaunchOptions opt) { 114059fede7f200350b6131fc131f76248085485722Miao Wang forEach(0, (Allocation) null, aout, null, opt); 115059fede7f200350b6131fc131f76248085485722Miao Wang } 116059fede7f200350b6131fc131f76248085485722Miao Wang 117059fede7f200350b6131fc131f76248085485722Miao Wang /** 118059fede7f200350b6131fc131f76248085485722Miao Wang * Get a KernelID for this intrinsic kernel. 119059fede7f200350b6131fc131f76248085485722Miao Wang * 120059fede7f200350b6131fc131f76248085485722Miao Wang * @return Script.KernelID The KernelID object. 121059fede7f200350b6131fc131f76248085485722Miao Wang */ 122059fede7f200350b6131fc131f76248085485722Miao Wang public Script.KernelID getKernelID_bicubic() { 123059fede7f200350b6131fc131f76248085485722Miao Wang return createKernelID(0, 2, null, null); 124059fede7f200350b6131fc131f76248085485722Miao Wang } 125059fede7f200350b6131fc131f76248085485722Miao Wang 126059fede7f200350b6131fc131f76248085485722Miao Wang 127059fede7f200350b6131fc131f76248085485722Miao Wang} 128