1221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams/* 269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams * Copyright (C) 2012 The Android Open Source Project 3221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 4221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * you may not use this file except in compliance with the License. 6221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * You may obtain a copy of the License at 7221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 8221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * 10221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Unless required by applicable law or agreed to in writing, software 11221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * See the License for the specific language governing permissions and 14221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * limitations under the License. 15221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams */ 16221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 17221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <malloc.h> 18221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <string.h> 19221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 20221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "RenderScript.h" 21eeaf7142d7e06efb3e0ddc7ef542884ab1d527dcTim Murray#include "rsCppInternal.h" 22221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 23cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang// From system/graphics.h 24eb4426dfb63983559cf903b2ea984569e990c4fdTim Murrayenum { 25cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang HAL_PIXEL_FORMAT_YV12 = 0x32315659, // YCrCb 4:2:0 Planar 26cf067b8c4d1e53bc4768fbad239851c579717f2cMiao Wang HAL_PIXEL_FORMAT_YCrCb_420_SP = 0x11, // NV21 27eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray}; 28eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 29dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::Element; 30dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::RS; 31dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::Type; 32dfcfabfccad8a8f2f42f83081638c7e5c9bfb4b9Chih-Hung Hsiehusing android::RSC::sp; 3369cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams 34221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::calcElementCount() { 35221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams bool hasLod = hasMipmaps(); 36221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams uint32_t x = getX(); 37221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams uint32_t y = getY(); 38221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams uint32_t z = getZ(); 39221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams uint32_t faces = 1; 40221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (hasFaces()) { 41221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams faces = 6; 42221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 43221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (x == 0) { 44221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams x = 1; 45221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 46221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (y == 0) { 47221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams y = 1; 48221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 49221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (z == 0) { 50221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams z = 1; 51221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 52221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 53221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams uint32_t count = x * y * z * faces; 54221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams while (hasLod && ((x > 1) || (y > 1) || (z > 1))) { 55221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(x > 1) { 56221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams x >>= 1; 57221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 58221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(y > 1) { 59221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams y >>= 1; 60221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 61221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(z > 1) { 62221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams z >>= 1; 63221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 64221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 65221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams count += x * y * z * faces; 66221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 67221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mElementCount = count; 68221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 69221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 70221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 7184bf2b877024aaa154b66e0f2338d54bdabd855aTim MurrayType::Type(void *id, sp<RS> rs) : BaseObj(id, rs) { 72221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimX = 0; 73221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimY = 0; 74221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimZ = 0; 75221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimMipmaps = false; 76221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimFaces = false; 7744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes mElement = nullptr; 78eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray mYuvFormat = RS_YUV_NONE; 79221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 80221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 81221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::updateFromNative() { 8270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang BaseObj::updateFromNative(); 83221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 84221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams /* 8570d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * We have 6 integers / pointers (uintptr_t) to obtain from the return buffer: 8670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mDimX (buffer[0]); 8770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mDimY (buffer[1]); 8870d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mDimZ (buffer[2]); 8970d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mDimLOD (buffer[3]); 9070d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mDimFaces (buffer[4]); 9170d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang * mElement (buffer[5]); 9270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang */ 9370d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang uintptr_t dataBuffer[6]; 9470d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang RS::dispatch->TypeGetNativeData(mRS->getContext(), getID(), dataBuffer, 6); 95221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 9670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang mDimX = (uint32_t)dataBuffer[0]; 9770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang mDimY = (uint32_t)dataBuffer[1]; 9870d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang mDimZ = (uint32_t)dataBuffer[2]; 99221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimMipmaps = dataBuffer[3] == 1 ? true : false; 100221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimFaces = dataBuffer[4] == 1 ? true : false; 101221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 10270d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang uintptr_t elementID = dataBuffer[5]; 103221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(elementID != 0) { 10470d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang // Just create a new Element and update it from native. 10570d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang sp<Element> e = new Element((void *)elementID, mRS); 10670d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang e->updateFromNative(); 10770d8995254ee38173129e4ae4c9372f43716eb4eMiao Wang mElement = e; 108221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 109221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams calcElementCount(); 110221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 111221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 11245768e1663714702c0c2b7adf14fdbd80dae71f5Chih-Hung Hsiehsp<const Type> Type::create(const sp<RS>& rs, const sp<const Element>& e, uint32_t dimX, uint32_t dimY, uint32_t dimZ) { 113a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray void * id = RS::dispatch->TypeCreate(rs->getContext(), e->getID(), dimX, dimY, dimZ, false, false, 0); 11496267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray Type *t = new Type(id, rs); 11596267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray 11696267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mElement = e; 11796267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mDimX = dimX; 11896267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mDimY = dimY; 11996267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mDimZ = dimZ; 12096267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mDimMipmaps = false; 12196267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->mDimFaces = false; 122dafeee0fdd890d5110f8dcc8cabc01c7979eacddMiao Wang t->mYuvFormat = RS_YUV_NONE; 12396267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray 12496267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray t->calcElementCount(); 12596267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray 12696267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray return t; 12796267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray} 12896267c2ff0133c20cc5643419a3ed3b1e75fe568Tim Murray 12984bf2b877024aaa154b66e0f2338d54bdabd855aTim MurrayType::Builder::Builder(sp<RS> rs, sp<const Element> e) { 1303560907fa9b1624eefbd6db5e9c3ccc25ab23b92Tim Murray mRS = rs.get(); 131221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mElement = e; 132221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimX = 0; 133221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimY = 0; 134221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimZ = 0; 135221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimMipmaps = false; 136221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimFaces = false; 137dafeee0fdd890d5110f8dcc8cabc01c7979eacddMiao Wang mYuvFormat = RS_YUV_NONE; 138221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 139221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 140221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setX(uint32_t value) { 141221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(value < 1) { 142221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("Values of less than 1 for Dimension X are not valid."); 143221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 144221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimX = value; 145221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 146221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 1477d1b757c0be2622b72b3d3a10826752adb3e5182Stephen Hinesvoid Type::Builder::setY(uint32_t value) { 148221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if(value < 1) { 149221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("Values of less than 1 for Dimension Y are not valid."); 150221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 151221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimY = value; 152221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 153221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 154eb4426dfb63983559cf903b2ea984569e990c4fdTim Murrayvoid Type::Builder::setZ(uint32_t value) { 155eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray if(value < 1) { 156eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray ALOGE("Values of less than 1 for Dimension Z are not valid."); 157eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray } 158eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray mDimZ = value; 159eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray} 160eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 161c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainarvoid Type::Builder::setYuvFormat(RsYuvFormat format) { 162eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray if (format != RS_YUV_NONE && !(mElement->isCompatible(Element::YUV(mRS)))) { 163eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray ALOGE("Invalid element for use with YUV."); 164eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray return; 165eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray } 166eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 167c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar if (format != RS_YUV_NONE && 168c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar format != RS_YUV_YV12 && 169c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar format != RS_YUV_NV21 && 170c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar format != RS_YUV_420_888) { 171eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray ALOGE("Invalid YUV format."); 172eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray return; 173eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray } 174eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray mYuvFormat = format; 175eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray} 176eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 177eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 178221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setMipmaps(bool value) { 179221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimMipmaps = value; 180221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 181221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 182221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsvoid Type::Builder::setFaces(bool value) { 183221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams mDimFaces = value; 184221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 185221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 18669cccdf0659a193d6a75420ec745421fb5c436e6Jason Samssp<const Type> Type::Builder::create() { 187221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimZ > 0) { 188221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if ((mDimX < 1) || (mDimY < 1)) { 189221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("Both X and Y dimension required when Z is present."); 19043a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang return nullptr; 191221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 192221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimFaces) { 193221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("Cube maps not supported with 3D types."); 19443a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang return nullptr; 195221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 196221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 197221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimY > 0) { 198221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimX < 1) { 199221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("X dimension required when Y is present."); 20043a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang return nullptr; 201221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 202221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 203221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimFaces) { 204221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams if (mDimY < 1) { 205221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams ALOGE("Cube maps require 2D Types."); 20643a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang return nullptr; 20743a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang } 20843a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang } 20943a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang 210c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar if (mYuvFormat != RS_YUV_NONE) { 21143a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang if (mDimZ || mDimFaces || mDimMipmaps) { 21243a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang ALOGE("YUV only supports basic 2D."); 21343a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang return nullptr; 214221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 215221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams } 216221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 217c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar if (mYuvFormat == RS_YUV_420_888) { 218c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar ALOGE("YUV_420_888 not supported."); 219c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar return nullptr; 220eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray } 221eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray 222a423096c0d49e5cfe13a400b4323a76f89c6885cTim Murray void * id = RS::dispatch->TypeCreate(mRS->getContext(), mElement->getID(), mDimX, mDimY, mDimZ, 223c6f437422fe6b0093b5b32df2f145c5ce23e5a13Pirama Arumuga Nainar mDimMipmaps, mDimFaces, mYuvFormat); 224221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams Type *t = new Type(id, mRS); 225221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mElement = mElement; 226221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mDimX = mDimX; 227221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mDimY = mDimY; 228221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mDimZ = mDimZ; 229221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mDimMipmaps = mDimMipmaps; 230221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->mDimFaces = mDimFaces; 23143a6cba1be3ef984cd619c85373973cbb93edf5eMiao Wang t->mYuvFormat = mYuvFormat; 232221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 233221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams t->calcElementCount(); 234221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams return t; 235221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams} 236221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams 237