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