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