rsCpuIntrinsicYuvToRGB.cpp revision aa782376e05c47141bc3f90966d609cfc69ebc39
101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams/* 2bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams * Copyright (C) 2013 The Android Open Source Project 301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * 401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * you may not use this file except in compliance with the License. 601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * You may obtain a copy of the License at 701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * 801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * 1001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * Unless required by applicable law or agreed to in writing, software 1101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * See the License for the specific language governing permissions and 1401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams * limitations under the License. 1501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams */ 1601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 1701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 18709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsic.h" 19709a0978ae141198018ca9769f8d96292a8928e6Jason Sams#include "rsCpuIntrinsicInlines.h" 2001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 21aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray#ifdef RS_COMPATIBILITY_LIB 22aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray#include "rsCompatibilityLib.h" 23aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray#endif 24aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray 256b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#ifndef RS_COMPATIBILITY_LIB 266b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#include "hardware/gralloc.h" 276b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 286b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 2901f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsusing namespace android; 3001f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsusing namespace android::renderscript; 3101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 32709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace android { 33709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace renderscript { 34709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 35709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 36709a0978ae141198018ca9769f8d96292a8928e6Jason Samsclass RsdCpuScriptIntrinsicYuvToRGB : public RsdCpuScriptIntrinsic { 37709a0978ae141198018ca9769f8d96292a8928e6Jason Samspublic: 38709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void populateScript(Script *); 39709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void invokeFreeChildren(); 40709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 41709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void setGlobalObj(uint32_t slot, ObjectBase *data); 42709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 43709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual ~RsdCpuScriptIntrinsicYuvToRGB(); 44c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuScriptIntrinsicYuvToRGB(RsdCpuReferenceImpl *ctx, const Script *s, const Element *e); 45709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 46709a0978ae141198018ca9769f8d96292a8928e6Jason Samsprotected: 4701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams ObjectBaseRef<Allocation> alloc; 48709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 49709a0978ae141198018ca9769f8d96292a8928e6Jason Sams static void kernel(const RsForEachStubParamStruct *p, 50709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 51709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep); 5201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams}; 5301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 54709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 55709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 56709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 57709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 58709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::setGlobalObj(uint32_t slot, ObjectBase *data) { 5901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams rsAssert(slot == 0); 60709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.set(static_cast<Allocation *>(data)); 6101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 6201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 6301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 6401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 65709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 6601f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsstatic uchar4 rsYuvToRGBA_uchar4(uchar y, uchar u, uchar v) { 6701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short Y = ((short)y) - 16; 6801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short U = ((short)u) - 128; 6901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short V = ((short)v) - 128; 7001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 7101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short4 p; 720b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = (Y * 298 + V * 409 + 128) >> 8; 730b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = (Y * 298 - U * 100 - V * 208 + 128) >> 8; 740b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = (Y * 298 + U * 516 + 128) >> 8; 750b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.w = 255; 760b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.x < 0) { 770b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = 0; 7801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 790b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.x > 255) { 800b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = 255; 8101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 820b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.y < 0) { 830b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = 0; 8401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 850b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.y > 255) { 860b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = 255; 8701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 880b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.z < 0) { 890b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = 0; 9001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 910b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.z > 255) { 920b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = 255; 9301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 9401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 950b575de8ed0b628d84d256f5846500b0385979bdTim Murray return (uchar4){p.x, p.y, p.z, p.w}; 9601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 9701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 98915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 99915aa964a1a312f5e06c115112a3aea14fd31b33Jason Samsstatic short YuvCoeff[] = { 100915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 298, 409, -100, 516, -208, 255, 0, 0, 101915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 16, 16, 16, 16, 16, 16, 16, 16, 102915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 128, 128, 128, 128, 128, 128, 128, 128, 103915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 298, 298, 298, 298, 298, 298, 298, 298, 104915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 255, 255, 255, 255, 255, 255, 255, 255 105915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 106915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 107915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams}; 108915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 109915aa964a1a312f5e06c115112a3aea14fd31b33Jason Samsextern "C" void rsdIntrinsicYuv_K(void *dst, const uchar *Y, const uchar *uv, uint32_t count, const short *param); 1106b58909686d7e439dac6dbb48c7e2236cd33c68dJason Samsextern "C" void rsdIntrinsicYuv2_K(void *dst, const uchar *Y, const uchar *u, const uchar *v, uint32_t count, const short *param); 11101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 112709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::kernel(const RsForEachStubParamStruct *p, 113709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 114709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep) { 115709a0978ae141198018ca9769f8d96292a8928e6Jason Sams RsdCpuScriptIntrinsicYuvToRGB *cp = (RsdCpuScriptIntrinsicYuvToRGB *)p->usr; 116b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams if (!cp->alloc.get()) { 117b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams ALOGE("YuvToRGB executed without input, skipping"); 118b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams return; 119b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams } 120bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *pinY = (const uchar *)cp->alloc->mHal.drvState.lod[0].mallocPtr; 121606e50048307530335b0885364ba888da436229bTim Murray 122606e50048307530335b0885364ba888da436229bTim Murray size_t strideY = cp->alloc->mHal.drvState.lod[0].stride; 123606e50048307530335b0885364ba888da436229bTim Murray 124606e50048307530335b0885364ba888da436229bTim Murray // calculate correct stride in legacy case 125606e50048307530335b0885364ba888da436229bTim Murray if (cp->alloc->mHal.drvState.lod[0].dimY == 0) { 126606e50048307530335b0885364ba888da436229bTim Murray strideY = p->dimX; 127606e50048307530335b0885364ba888da436229bTim Murray } 128bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *Y = pinY + (p->y * strideY); 12901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 130606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("pinY, %p, Y, %p, p->y, %d, strideY, %d", pinY, Y, p->y, strideY); 131606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("dimX, %d, dimY, %d", cp->alloc->mHal.drvState.lod[0].dimX, cp->alloc->mHal.drvState.lod[0].dimY); 132606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("p->dimX, %d, p->dimY, %d", p->dimX, p->dimY); 133606e50048307530335b0885364ba888da436229bTim Murray 13401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uchar4 *out = (uchar4 *)p->out; 13501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x1 = xstart; 13601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x2 = xend; 13701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 1386b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams switch (cp->alloc->mHal.state.yuv) { 1396b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // In API 17 there was no yuv format and the intrinsic treated everything as NV21 1406b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case 0: 141aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray#if !defined(RS_SERVER) 1426b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 14301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams#endif 1446b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1456b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinUV = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 146606e50048307530335b0885364ba888da436229bTim Murray size_t strideUV = cp->alloc->mHal.drvState.lod[1].stride; 1476b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *uv = pinUV + ((p->y >> 1) * strideUV); 1486b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 14906bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams if (pinUV == NULL) { 15006bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams // Legacy yuv support didn't fill in uv 151606e50048307530335b0885364ba888da436229bTim Murray strideUV = strideY; 15206bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams uv = ((uint8_t *)cp->alloc->mHal.drvState.lod[0].mallocPtr) + 153606e50048307530335b0885364ba888da436229bTim Murray (strideY * p->dimY) + 154606e50048307530335b0885364ba888da436229bTim Murray ((p->y >> 1) * strideUV); 15506bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams } 15606bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams 1576b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 158f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams if (gArchUseSIMD) { 159f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams #if defined(ARCH_ARM_HAVE_VFP) 160f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams int32_t len = (x2 - x1 - 1) >> 3; 161f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams if(len > 0) { 162f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams // ALOGE("%p, %p, %p, %d, %p", out, Y, uv, len, YuvCoeff); 163f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams rsdIntrinsicYuv_K(out, Y, uv, len, YuvCoeff); 164f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams x1 += len << 3; 165f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams out += len << 3; 166f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams } 167f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams #endif 1686b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1696b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1706b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 1716b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 1726b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar u = uv[(x1 & 0xffffe) + 1]; 1736b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar v = uv[(x1 & 0xffffe) + 0]; 1746b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1756b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1766b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1776b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1786b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1796b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1806b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1816b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1826b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1836b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 1846b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 185aa782376e05c47141bc3f90966d609cfc69ebc39Tim Murray#if !defined(RS_SERVER) 1866b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YV12: 1876b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1886b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinU = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 1896b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideU = cp->alloc->mHal.drvState.lod[1].stride; 1906b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *u = pinU + ((p->y >> 1) * strideU); 1916b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1926b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinV = (const uchar *)cp->alloc->mHal.drvState.lod[2].mallocPtr; 1936b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideV = cp->alloc->mHal.drvState.lod[2].stride; 1946b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *v = pinV + ((p->y >> 1) * strideV); 1956b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1966b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 197f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams #if defined(ARCH_ARM_HAVE_VFP) 198f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams if (gArchUseSIMD) { 199f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams int32_t len = (x2 - x1 - 1) >> 3; 200f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams if(len > 0) { 201f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams rsdIntrinsicYuv2_K(out, Y, u, v, len, YuvCoeff); 202f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams x1 += len << 3; 203f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams out += len << 3; 204f5ef8df639ba6363aa5d546e57ce872d04144cb6Jason Sams } 2056b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 2066b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #endif 2076b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 2086b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 2096b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 2106b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar ut = u[x1]; 2116b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar vt = v[x1]; 2126b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 2136b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 2146b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 2156b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 2166b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 2176b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 2186b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 2196b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 22001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2216b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 2226b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 22301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2246b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 22501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 22601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 227709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::RsdCpuScriptIntrinsicYuvToRGB( 228c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuReferenceImpl *ctx, const Script *s, const Element *e) 229c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_YUV_TO_RGB) { 230709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 231709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mRootPtr = &kernel; 232709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 233709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 234709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::~RsdCpuScriptIntrinsicYuvToRGB() { 235709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 236709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 237709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::populateScript(Script *s) { 238709a0978ae141198018ca9769f8d96292a8928e6Jason Sams s->mHal.info.exportedVariableCount = 1; 239709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 240709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 241709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::invokeFreeChildren() { 242709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.clear(); 243709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 244709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 24501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 246c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_YuvToRGB(RsdCpuReferenceImpl *ctx, 247c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) { 248c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams return new RsdCpuScriptIntrinsicYuvToRGB(ctx, s, e); 24901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 25001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 25101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 252