1ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray/* 2ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Copyright (C) 2013 The Android Open Source Project 3ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 4ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Licensed under the Apache License, Version 2.0 (the "License"); 5ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * you may not use this file except in compliance with the License. 6ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * You may obtain a copy of the License at 7ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 8ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * http://www.apache.org/licenses/LICENSE-2.0 9ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * 10ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Unless required by applicable law or agreed to in writing, software 11ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * distributed under the License is distributed on an "AS IS" BASIS, 12ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * See the License for the specific language governing permissions and 14ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * limitations under the License. 15ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray */ 16ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 17ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murraypackage android.support.v8.renderscript; 18ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 19ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.graphics.ImageFormat; 20ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport android.util.Log; 21ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayimport java.util.HashMap; 22ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 23ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murrayclass TypeThunker extends Type { 24ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray android.renderscript.Type mN; 25ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 26ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray android.renderscript.Type getNObj() { 27ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return mN; 28ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 29ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 30ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray static HashMap<android.renderscript.Type, Type> mMap = new HashMap(); 31ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 32ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray void internalCalc() { 33ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimX = mN.getX(); 34ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimY = mN.getY(); 35ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimZ = mN.getZ(); 36ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimFaces = mN.hasFaces(); 37ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimMipmaps = mN.hasMipmaps(); 38ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimYuv = mN.getYuv(); 39ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray calcElementCount(); 40ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 41ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 42ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray TypeThunker(RenderScript rs, android.renderscript.Type t) { 43ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray super(0, rs); 44ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mN = t; 45d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 46d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray internalCalc(); 47d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray mElement = new ElementThunker(rs, t.getElement()); 48d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException e) { 49d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(e); 50d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 51ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 52ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray synchronized(mMap) { 53ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mMap.put(mN, this); 54ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 55ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 56ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 57ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray static Type find(android.renderscript.Type nt) { 58ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return mMap.get(nt); 59ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 60ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 61ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray static Type create(RenderScript rs, Element e, 62ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray int dx, int dy, int dz, boolean dmip, boolean dfaces, int yuv) { 63ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray ElementThunker et = (ElementThunker)e; 64ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)rs; 65d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray try { 66d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray android.renderscript.Type.Builder tb = 67d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray new android.renderscript.Type.Builder(rst.mN, et.mN); 68d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (dx > 0) tb.setX(dx); 69d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (dy > 0) tb.setY(dy); 70d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (dz > 0) tb.setZ(dz); 71d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (dmip) tb.setMipmaps(dmip); 72d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (dfaces) tb.setFaces(dfaces); 73d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray if (yuv > 0) tb.setYuvFormat(yuv); 74d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray android.renderscript.Type nt = tb.create(); 75d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray TypeThunker tt = new TypeThunker(rs, nt); 76d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray tt.internalCalc(); 77ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 78d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray return tt; 79d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } catch (android.renderscript.RSRuntimeException exc) { 80d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray throw ExceptionThunker.convertException(exc); 81d1107f953974cf7a6c8bdf43e898d2f1f74427e6Tim Murray } 82ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 83ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray} 84