198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/* 2f681be1f0ec328acaa311478887352a456d52be8Jason Sams * Copyright (C) 2013 The Android Open Source Project 398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License. 698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at 798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software 1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and 1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License. 1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript; 1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Field; 219fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams 229fdd33763a41feb9b0906078c660949fb2c3b930Jason Samsimport android.graphics.ImageFormat; 2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.Log; 2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/** 2660c5b31f4448410221de043873b94797732afa66Stephen Hines * <p>A Type describes the {@link android.support.v8.renderscript.Element} and 2760c5b31f4448410221de043873b94797732afa66Stephen Hines * dimensions used for an {@link android.support.v8.renderscript.Allocation} or 2860c5b31f4448410221de043873b94797732afa66Stephen Hines * a parallel operation. Types are created through 2960c5b31f4448410221de043873b94797732afa66Stephen Hines * {@link android.support.v8.renderscript.Type.Builder}.</p> 3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 3160c5b31f4448410221de043873b94797732afa66Stephen Hines * <p>A Type always includes an {@link android.support.v8.renderscript.Element} 3260c5b31f4448410221de043873b94797732afa66Stephen Hines * and an X dimension. A Type may be multidimensional, up to three dimensions. 3360c5b31f4448410221de043873b94797732afa66Stephen Hines * A nonzero value in the Y or Z dimensions indicates that the dimension is 3460c5b31f4448410221de043873b94797732afa66Stephen Hines * present. Note that a Type with only a given X dimension and a Type with the 3560c5b31f4448410221de043873b94797732afa66Stephen Hines * same X dimension but Y = 1 are not equivalent.</p> 3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 377d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * <p>A Type also supports inclusion of level of detail (LOD) or cube map 387d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * faces. LOD and cube map faces are booleans to indicate present or not 397d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * present. </p> 407d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 417d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * <p>A Type also supports YUV format information to support an {@link 4260c5b31f4448410221de043873b94797732afa66Stephen Hines * android.support.v8.renderscript.Allocation} in a YUV format. The YUV formats 4360c5b31f4448410221de043873b94797732afa66Stephen Hines * supported are {@link android.graphics.ImageFormat#YV12} and {@link 447d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * android.graphics.ImageFormat#NV21}.</p> 4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <div class="special reference"> 4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <h3>Developer Guides</h3> 4860c5b31f4448410221de043873b94797732afa66Stephen Hines * <p>For more information about creating an application that uses RenderScript, 4960c5b31f4448410221de043873b94797732afa66Stephen Hines * read the 5060c5b31f4448410221de043873b94797732afa66Stephen Hines * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> 5160c5b31f4448410221de043873b94797732afa66Stephen Hines * developer guide.</p> 5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * </div> 5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/ 5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class Type extends BaseObj { 5598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimX; 5698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimY; 5798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimZ; 5898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimMipmaps; 5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimFaces; 601b370e358d16cc3b50b169511d6b387db09f972dJason Sams int mDimYuv; 6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mElementCount; 6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement; 6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public enum CubemapFace { 6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_X (0), 6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_X (1), 6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_Y (2), 6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_Y (3), 6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_Z (4), 7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_Z (5); 7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mID; 7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams CubemapFace(int id) { 7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mID = id; 7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the element associated with this Type. 8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Element getElement() { 8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElement; 8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the X dimension. 8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getX() { 9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimX; 9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getY() { 10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimY; 10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getZ() { 11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimZ; 11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 1157d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Get the YUV format 1167d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 1177d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @hide 1187d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 1197d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @return int 1207d435ae5ba100be5710b685653cc351cab159c11Stephen Hines */ 1217d435ae5ba100be5710b685653cc351cab159c11Stephen Hines public int getYuv() { 1227d435ae5ba100be5710b685653cc351cab159c11Stephen Hines return mDimYuv; 1237d435ae5ba100be5710b685653cc351cab159c11Stephen Hines } 1247d435ae5ba100be5710b685653cc351cab159c11Stephen Hines 1257d435ae5ba100be5710b685653cc351cab159c11Stephen Hines /** 12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return if the Type has a mipmap chain. 12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean 12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean hasMipmaps() { 13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimMipmaps; 13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return if the Type is a cube map. 13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean 13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean hasFaces() { 14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimFaces; 14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the total number of accessable cells in the Type. 14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getCount() { 14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElementCount; 15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams void calcElementCount() { 15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean hasLod = hasMipmaps(); 15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int x = getX(); 15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int y = getY(); 15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int z = getZ(); 15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int faces = 1; 15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (hasFaces()) { 15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams faces = 6; 16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (x == 0) { 16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams x = 1; 16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (y == 0) { 16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams y = 1; 16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (z == 0) { 16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams z = 1; 16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int count = x * y * z * faces; 17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams while (hasLod && ((x > 1) || (y > 1) || (z > 1))) { 17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(x > 1) { 17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams x >>= 1; 17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(y > 1) { 17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams y >>= 1; 17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(z > 1) { 18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams z >>= 1; 18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams count += x * y * z * faces; 18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementCount = count; 18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Type(int id, RenderScript rs) { 19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Builder class for Type. 19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class Builder { 19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript mRS; 20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimX = 1; 20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimY; 20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimZ; 20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimMipmaps; 20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimFaces; 2059fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams int mYuv; 20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement; 20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a new builder object. 21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs 21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param e The element for the type to be created. 21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder(RenderScript rs, Element e) { 21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams e.checkValid(); 21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS = rs; 21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElement = e; 21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Add a dimension to the Type. 22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param value 22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setX(int value) { 22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(value < 1) { 22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimX = value; 23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setY(int value) { 23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(value < 1) { 23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimY = value; 24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 243c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray public Builder setZ(int value) { 244c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray if(value < 1) { 245c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray throw new RSIllegalArgumentException("Values of less than 1 for Dimension Z are not valid."); 246c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray } 247c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray mDimZ = value; 248c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray return this; 249c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray } 250c5b37c751f22199fd3cf14f6ef19ed4b9664510fTim Murray 25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setMipmaps(boolean value) { 25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimMipmaps = value; 25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setFaces(boolean value) { 25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimFaces = value; 25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2619fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams /** 2627d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Set the YUV layout for a Type. 2637d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * 2649fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams * @hide 2659fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams * 2667d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * @param yuvFormat {@link android.graphics.ImageFormat#YV12} or {@link android.graphics.ImageFormat#NV21} 2679fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams */ 2689fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams public Builder setYuvFormat(int yuvFormat) { 2699fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams switch (yuvFormat) { 2709fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams case android.graphics.ImageFormat.NV21: 2719fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams case android.graphics.ImageFormat.YV12: 2729fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams break; 2739fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams 2749fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams default: 2759fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams throw new RSIllegalArgumentException("Only NV21 and YV12 are supported.."); 2769fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams } 2779fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams 2789fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams mYuv = yuvFormat; 2799fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams return this; 2809fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams } 2819fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams 28298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 28398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 2847d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * Validate structure and create a new Type. 28598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 28698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Type 28798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 28898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Type create() { 28998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimZ > 0) { 29098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if ((mDimX < 1) || (mDimY < 1)) { 29198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 29298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimFaces) { 29498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 29598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimY > 0) { 29898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimX < 1) { 29998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 30098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimFaces) { 30398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimY < 1) { 30498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 30598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 3089fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams if (mYuv != 0) { 3099fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams if ((mDimZ != 0) || mDimFaces || mDimMipmaps) { 3109fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams throw new RSInvalidStateException("YUV only supports basic 2D."); 3119fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams } 3129fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams } 3139fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams 314ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray Type t; 315ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (mRS.isNative) { 316ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)mRS; 317ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray t = TypeThunker.create(rst, mElement, mDimX, mDimY, mDimZ, 318ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimMipmaps, mDimFaces, mYuv); 319ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } else { 320ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray int id = mRS.nTypeCreate(mElement.getID(mRS), 321ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces, mYuv); 322ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray t = new Type(id, mRS); 323ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 32498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mElement = mElement; 32598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimX = mDimX; 32698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimY = mDimY; 32798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimZ = mDimZ; 32898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimMipmaps = mDimMipmaps; 32998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimFaces = mDimFaces; 3309fdd33763a41feb9b0906078c660949fb2c3b930Jason Sams t.mDimYuv = mYuv; 33198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 33298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.calcElementCount(); 33398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return t; 33498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 33598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 33698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 33798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams} 338