Allocation.java revision b8c5a84e7c23746a3fc26013e0880d3d95ca6588
1b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/*
2b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Copyright (C) 2008 The Android Open Source Project
3b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams *
4b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * you may not use this file except in compliance with the License.
6b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * You may obtain a copy of the License at
7b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams *
8b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams *
10b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Unless required by applicable law or agreed to in writing, software
11b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * See the License for the specific language governing permissions and
14b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * limitations under the License.
15b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams */
16b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
17b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspackage android.renderscript;
18b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
19b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
20b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport java.io.IOException;
21b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport java.io.InputStream;
22b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
23b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.content.res.Resources;
24b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
25b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.BitmapFactory;
26b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.os.Bundle;
27b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.renderscript.Type;
28b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.util.Config;
29b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.util.Log;
30b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
31b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/**
32b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * @hide
33b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams *
34b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/
35b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Allocation extends BaseObj {
36b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    Allocation(int id, RenderScript rs) {
37b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        super(rs);
38b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mID = id;
39b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
40b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
41b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void uploadToTexture(int baseMipLevel) {
42b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationUploadToTexture(mID, baseMipLevel);
43b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
44b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
45b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void destroy() {
46b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationDestroy(mID);
47b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mID = 0;
48b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
49b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
50b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void data(int[] d) {
51b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationData(mID, d);
52b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
53b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
54b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void data(float[] d) {
55b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationData(mID, d);
56b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
57b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
58b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void subData1D(int off, int count, int[] d) {
59b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationSubData1D(mID, off, count, d);
60b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
61b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
62b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void subData1D(int off, int count, float[] d) {
63b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationSubData1D(mID, off, count, d);
64b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
65b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
66b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
67b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d);
68b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
69b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
70b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
71b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d);
72b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
73b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
74b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public class Adapter1D extends BaseObj {
75b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        Adapter1D(int id, RenderScript rs) {
76b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            super(rs);
77b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mID = id;
78b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
79b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
80b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void destroy() {
81b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DDestroy(mID);
82b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mID = 0;
83b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
84b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
85b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void setConstraint(Dimension dim, int value) {
86b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DSetConstraint(mID, dim.mID, value);
87b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
88b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
89b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void data(int[] d) {
90b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DData(mID, d);
91b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
92b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
93b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void subData(int off, int count, int[] d) {
94b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DSubData(mID, off, count, d);
95b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
96b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
97b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void data(float[] d) {
98b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DData(mID, d);
99b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
100b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
101b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        public void subData(int off, int count, float[] d) {
102b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DSubData(mID, off, count, d);
103b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
104b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
105b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
106b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public Adapter1D createAdapter1D() {
107b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        int id = mRS.nAdapter1DCreate();
108b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        if (id != 0) {
109b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            mRS.nAdapter1DBindAllocation(id, mID);
110b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
111b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return new Adapter1D(id, mRS);
112b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
113b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
114b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
115b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
116b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    // creation
117b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
118b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    private static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options();
119b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static {
120b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mBitmapOptions.inScaled = false;
121b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
122b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
123b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createTyped(RenderScript rs, Type type) {
124b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        int id = rs.nAllocationCreateTyped(type.mID);
125b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return new Allocation(id, rs);
126b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
127b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
128b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createSized(RenderScript rs, Element e, int count) {
129b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        int id;
130b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        if(e.mIsPredefined) {
131b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            id = rs.nAllocationCreatePredefSized(e.mPredefinedID, count);
132b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        } else {
133b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            id = rs.nAllocationCreateSized(e.mID, count);
134b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
135b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return new Allocation(id, rs);
136b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
137b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
138b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createFromBitmap(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips)
139b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        throws IllegalArgumentException {
140b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        if(!dstFmt.mIsPredefined) {
141b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
142b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
143b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
144b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        int id = rs.nAllocationCreateFromBitmap(dstFmt.mPredefinedID, genMips, b);
145b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return new Allocation(id, rs);
146b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
147b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
148b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createFromBitmapBoxed(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips)
149b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        throws IllegalArgumentException {
150b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        if(!dstFmt.mIsPredefined) {
151b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams            throw new IllegalStateException("Attempting to allocate a bitmap with a non-static element.");
152b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        }
153b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
154b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        int id = rs.nAllocationCreateFromBitmapBoxed(dstFmt.mPredefinedID, genMips, b);
155b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return new Allocation(id, rs);
156b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
157b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
158b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createFromBitmapResource(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
159b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        throws IllegalArgumentException {
160b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
161b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
162b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return createFromBitmap(rs, b, dstFmt, genMips);
163b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
164b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
165b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    static public Allocation createFromBitmapResourceBoxed(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips)
166b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        throws IllegalArgumentException {
167b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
168b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions);
169b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return createFromBitmapBoxed(rs, b, dstFmt, genMips);
170b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
171b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
172b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
173b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams}
174b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
175b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams
176