Allocation.java revision 0de9444aa6c25d2c586e8204a6168d10e67376e0
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 Samsimport java.io.IOException; 20b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport java.io.InputStream; 21b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 22b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.content.res.Resources; 23650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.content.res.AssetManager; 24b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap; 25b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.BitmapFactory; 26b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.util.Log; 27650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.util.TypedValue; 28b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 29b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/** 30b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * @hide 31b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * 32b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/ 33b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Allocation extends BaseObj { 3443ee06857bb7f99446d1d84f8789016c5d105558Jason Sams Type mType; 358a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Bitmap mBitmap; 3643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 3743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams Allocation(int id, RenderScript rs, Type t) { 380de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 3943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams mType = t; 40b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 41b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 4280a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk Allocation(int id, RenderScript rs) { 430de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 4480a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk } 4580a4c2cd34aedb4f1a2e5e7d1ac26a9aeebe41aeAlex Sakhartchouk 46dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 47dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 48dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mRS.validate(); 49fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk mName = mRS.nGetName(mID); 50dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int typeID = mRS.nAllocationGetType(mID); 51dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(typeID != 0) { 52dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mType = new Type(typeID, mRS); 53dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mType.updateFromNative(); 54dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 55dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 56dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 57ea87e96959895ef94cc3aa9576f41a660d2bbf03Jason Sams public Type getType() { 58ea87e96959895ef94cc3aa9576f41a660d2bbf03Jason Sams return mType; 59ea87e96959895ef94cc3aa9576f41a660d2bbf03Jason Sams } 60ea87e96959895ef94cc3aa9576f41a660d2bbf03Jason Sams 61b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void uploadToTexture(int baseMipLevel) { 62771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 63c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams mRS.nAllocationUploadToTexture(mID, false, baseMipLevel); 64c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams } 65c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams 66c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams public void uploadToTexture(boolean genMips, int baseMipLevel) { 67c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams mRS.validate(); 68c2908e60c9b021fb4bb69acff8d49981dd4dade8Jason Sams mRS.nAllocationUploadToTexture(mID, genMips, baseMipLevel); 69b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 70b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 7107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams public void uploadToBufferObject() { 72771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 7307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams mRS.nAllocationUploadToBufferObject(mID); 7407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 7507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 76b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void data(int[] d) { 77771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 78768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams subData1D(0, mType.getElementCount(), d); 79768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 80768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public void data(short[] d) { 81771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 82768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams subData1D(0, mType.getElementCount(), d); 83768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 84768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public void data(byte[] d) { 85771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 86768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams subData1D(0, mType.getElementCount(), d); 87b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 88b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void data(float[] d) { 89771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 90768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams subData1D(0, mType.getElementCount(), d); 91b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 92b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 93a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams public void subData(int off, FieldPacker fp) { 94a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams int eSize = mType.mElement.getSizeBytes(); 95a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams final byte[] data = fp.getData(); 96a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 97a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams int count = data.length / eSize; 98a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams if ((eSize * count) != data.length) { 99a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams throw new IllegalArgumentException("Field packer length " + data.length + 100a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams " not divisible by element size " + eSize + "."); 101a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 102a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams data1DChecks(off, count, data.length, data.length); 103a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams mRS.nAllocationSubData1D(mID, off, count, data, data.length); 104a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 105a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 106768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams private void data1DChecks(int off, int count, int len, int dataSize) { 107771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 108a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams if(off < 0) { 109a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams throw new IllegalArgumentException("Offset must be >= 0."); 110a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 111a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams if(count < 1) { 112a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams throw new IllegalArgumentException("Count must be >= 1."); 113a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 114a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams if((off + count) > mType.getElementCount()) { 115a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams throw new IllegalArgumentException("Overflow, Available count " + mType.getElementCount() + 116a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams ", got " + count + " at offset " + off + "."); 117768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 118768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if((len) < dataSize) { 119768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams throw new IllegalArgumentException("Array too small for allocation type."); 120768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 121b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 122b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 123768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public void subData1D(int off, int count, int[] d) { 124768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int dataSize = mType.mElement.getSizeBytes() * count; 125768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams data1DChecks(off, count, d.length * 4, dataSize); 126768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mRS.nAllocationSubData1D(mID, off, count, d, dataSize); 127768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 128768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public void subData1D(int off, int count, short[] d) { 129768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int dataSize = mType.mElement.getSizeBytes() * count; 130768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams data1DChecks(off, count, d.length * 2, dataSize); 131768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mRS.nAllocationSubData1D(mID, off, count, d, dataSize); 132768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 133768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public void subData1D(int off, int count, byte[] d) { 134768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int dataSize = mType.mElement.getSizeBytes() * count; 135768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams data1DChecks(off, count, d.length, dataSize); 136768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mRS.nAllocationSubData1D(mID, off, count, d, dataSize); 137768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 138b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void subData1D(int off, int count, float[] d) { 139768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int dataSize = mType.mElement.getSizeBytes() * count; 140768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams data1DChecks(off, count, d.length * 4, dataSize); 141768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mRS.nAllocationSubData1D(mID, off, count, d, dataSize); 142b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 143b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 144768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 145768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 146b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void subData2D(int xoff, int yoff, int w, int h, int[] d) { 147771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 14807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d, d.length * 4); 149b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 150b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 151b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void subData2D(int xoff, int yoff, int w, int h, float[] d) { 152771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 15307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams mRS.nAllocationSubData2D(mID, xoff, yoff, w, h, d, d.length * 4); 154b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 155b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 15640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams public void readData(int[] d) { 157771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 15840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams mRS.nAllocationRead(mID, d); 15940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams } 16040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 16140a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams public void readData(float[] d) { 162771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 16340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams mRS.nAllocationRead(mID, d); 16440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams } 16540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 16643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams public void data(Object o) { 167771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 1682525a815220652b37e2e390fe8c62394a6d0e574Jason Sams mRS.nAllocationSubDataFromObject(mID, mType, 0, o); 16943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 17043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 1715f43fd289abbd5380b6068766daf721b555d0053Jason Sams public void read(Object o) { 172771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 1735f43fd289abbd5380b6068766daf721b555d0053Jason Sams mRS.nAllocationSubReadFromObject(mID, mType, 0, o); 1745f43fd289abbd5380b6068766daf721b555d0053Jason Sams } 1755f43fd289abbd5380b6068766daf721b555d0053Jason Sams 1762525a815220652b37e2e390fe8c62394a6d0e574Jason Sams public void subData(int offset, Object o) { 177771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 1782525a815220652b37e2e390fe8c62394a6d0e574Jason Sams mRS.nAllocationSubDataFromObject(mID, mType, offset, o); 1792525a815220652b37e2e390fe8c62394a6d0e574Jason Sams } 18040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams 181b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public class Adapter1D extends BaseObj { 182b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams Adapter1D(int id, RenderScript rs) { 1830de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 184b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 185b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 186b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void setConstraint(Dimension dim, int value) { 187771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 188b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams mRS.nAdapter1DSetConstraint(mID, dim.mID, value); 189b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 190b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 191b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void data(int[] d) { 192771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 193b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams mRS.nAdapter1DData(mID, d); 194b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 195b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 196b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void data(float[] d) { 197771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 198b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams mRS.nAdapter1DData(mID, d); 199b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 200b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 201bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void subData(int off, int count, int[] d) { 202771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 203bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter1DSubData(mID, off, count, d); 204bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 205bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 206b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public void subData(int off, int count, float[] d) { 207771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 208b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams mRS.nAdapter1DSubData(mID, off, count, d); 209b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 210b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 211b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 212b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public Adapter1D createAdapter1D() { 213771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 214b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams int id = mRS.nAdapter1DCreate(); 215718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(id == 0) { 216718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams throw new IllegalStateException("allocation failed."); 217b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 218718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mRS.nAdapter1DBindAllocation(id, mID); 219b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams return new Adapter1D(id, mRS); 220b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 221b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 222b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 223bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public class Adapter2D extends BaseObj { 224bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams Adapter2D(int id, RenderScript rs) { 2250de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 226bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 227bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 228bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void setConstraint(Dimension dim, int value) { 229771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 230bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter2DSetConstraint(mID, dim.mID, value); 231bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 232bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 233bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void data(int[] d) { 234771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 235bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter2DData(mID, d); 236bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 237bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 238bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void data(float[] d) { 239771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 240bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter2DData(mID, d); 241bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 242bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 243bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void subData(int xoff, int yoff, int w, int h, int[] d) { 244771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 245bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter2DSubData(mID, xoff, yoff, w, h, d); 246bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 247bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 248bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public void subData(int xoff, int yoff, int w, int h, float[] d) { 249771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 250bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams mRS.nAdapter2DSubData(mID, xoff, yoff, w, h, d); 251bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 252bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 253bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 254bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams public Adapter2D createAdapter2D() { 255771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 256bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams int id = mRS.nAdapter2DCreate(); 257718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(id == 0) { 258718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams throw new IllegalStateException("allocation failed."); 259bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 260718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mRS.nAdapter2DBindAllocation(id, mID); 261bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams return new Adapter2D(id, mRS); 262bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams } 263bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 264b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 265b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams // creation 266b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 267b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams private static BitmapFactory.Options mBitmapOptions = new BitmapFactory.Options(); 268b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams static { 269b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams mBitmapOptions.inScaled = false; 270b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 271b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 2721bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams static public Allocation createTyped(RenderScript rs, Type type) 2731bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams throws IllegalArgumentException { 2741bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 275771bebb94054d06f97284379c93a2620613513c3Jason Sams rs.validate(); 2761bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams if(type.mID == 0) { 2771bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams throw new IllegalStateException("Bad Type"); 2781bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams } 279b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams int id = rs.nAllocationCreateTyped(type.mID); 28043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams return new Allocation(id, rs, type); 281b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 282b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 2831bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams static public Allocation createSized(RenderScript rs, Element e, int count) 2841bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams throws IllegalArgumentException { 2851bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 286771bebb94054d06f97284379c93a2620613513c3Jason Sams rs.validate(); 287768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams Type.Builder b = new Type.Builder(rs, e); 288768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams b.add(Dimension.X, count); 289768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams Type t = b.create(); 290768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 291768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int id = rs.nAllocationCreateTyped(t.mID); 292ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams if(id == 0) { 293ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams throw new IllegalStateException("Bad element."); 294b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 295768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return new Allocation(id, rs, t); 296b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 297b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 2988a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams static private Element elementFromBitmap(RenderScript rs, Bitmap b) { 2998a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams final Bitmap.Config bc = b.getConfig(); 3008a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams if (bc == Bitmap.Config.ALPHA_8) { 3018a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return Element.A_8(rs); 3028a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3038a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams if (bc == Bitmap.Config.ARGB_4444) { 3048a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return Element.RGBA_4444(rs); 3058a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3068a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams if (bc == Bitmap.Config.ARGB_8888) { 3078a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return Element.RGBA_8888(rs); 3088a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3098a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams if (bc == Bitmap.Config.RGB_565) { 3108a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return Element.RGB_565(rs); 3118a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3128a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams throw new IllegalStateException("Bad bitmap type."); 3138a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3148a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 3158a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams static private Type typeFromBitmap(RenderScript rs, Bitmap b) { 3168a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Element e = elementFromBitmap(rs, b); 3178a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Type.Builder tb = new Type.Builder(rs, e); 3188a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams tb.add(Dimension.X, b.getWidth()); 3198a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams tb.add(Dimension.Y, b.getHeight()); 3208a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return tb.create(); 3218a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3228a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 323b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams static public Allocation createFromBitmap(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips) 324b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams throws IllegalArgumentException { 325b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 326771bebb94054d06f97284379c93a2620613513c3Jason Sams rs.validate(); 3278a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Type t = typeFromBitmap(rs, b); 3288a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 329ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int id = rs.nAllocationCreateFromBitmap(dstFmt.mID, genMips, b); 330718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(id == 0) { 331718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams throw new IllegalStateException("Load failed."); 332718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 3338a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return new Allocation(id, rs, t); 3348a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3358a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 3368a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams static public Allocation createBitmapRef(RenderScript rs, Bitmap b) 3378a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams throws IllegalArgumentException { 3388a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 3398a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams rs.validate(); 3408a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Type t = typeFromBitmap(rs, b); 3418a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 3428a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams int id = rs.nAllocationCreateBitmapRef(t.getID(), b); 3438a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams if(id == 0) { 3448a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams throw new IllegalStateException("Load failed."); 3458a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams } 3468a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams 3478a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams Allocation a = new Allocation(id, rs, t); 3488a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams a.mBitmap = b; 3498a64743f37ed35af7c2204acd18bb3d62d8f66d5Jason Sams return a; 350b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 351b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 35274e02ef2000ff2783e526d6916e2f0b5d517593eJason Sams static Allocation createFromBitmapBoxed(RenderScript rs, Bitmap b, Element dstFmt, boolean genMips) 353b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams throws IllegalArgumentException { 354b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 355771bebb94054d06f97284379c93a2620613513c3Jason Sams rs.validate(); 356ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int id = rs.nAllocationCreateFromBitmapBoxed(dstFmt.mID, genMips, b); 357718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(id == 0) { 358718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams throw new IllegalStateException("Load failed."); 359718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 36043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams return new Allocation(id, rs, null); 361b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 362b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 363b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams static public Allocation createFromBitmapResource(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips) 364b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams throws IllegalArgumentException { 365b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 366771bebb94054d06f97284379c93a2620613513c3Jason Sams rs.validate(); 367650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy InputStream is = null; 368650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy try { 369650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy final TypedValue value = new TypedValue(); 370650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy is = res.openRawResource(id, value); 371650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy 372650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); 373ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int allocationId = rs.nAllocationCreateFromAssetStream(dstFmt.mID, genMips, 374650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy asset); 375650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy 376718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(allocationId == 0) { 377718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams throw new IllegalStateException("Load failed."); 378718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 379ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams return new Allocation(allocationId, rs, null); 380650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } catch (Exception e) { 381650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy // Ignore 382650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } finally { 383650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy if (is != null) { 384650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy try { 385650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy is.close(); 386650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } catch (IOException e) { 387650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy // Ignore 388650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } 389650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } 390650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy } 391650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy 392650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy return null; 393b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 394b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 395b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams static public Allocation createFromBitmapResourceBoxed(RenderScript rs, Resources res, int id, Element dstFmt, boolean genMips) 396b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams throws IllegalArgumentException { 397b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 398b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams Bitmap b = BitmapFactory.decodeResource(res, id, mBitmapOptions); 399b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams return createFromBitmapBoxed(rs, b, dstFmt, genMips); 400b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 4019b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 4029b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk static public Allocation createFromString(RenderScript rs, String str) 4039b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk throws IllegalArgumentException { 4049b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk byte[] allocArray = null; 4059b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk try { 4069b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk allocArray = str.getBytes("UTF-8"); 4079b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Allocation alloc = Allocation.createSized(rs, Element.U8(rs), allocArray.length); 4089b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk alloc.data(allocArray); 4099b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return alloc; 4109b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 4119b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk catch (Exception e) { 4129b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Log.e("rs", "could not convert string to utf-8"); 4139b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 4149b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk return null; 4159b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 416b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams} 417b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 418b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 419