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 216b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#ifndef RS_COMPATIBILITY_LIB 226b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#include "hardware/gralloc.h" 236b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 246b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 2501f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsusing namespace android; 2601f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsusing namespace android::renderscript; 2701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 28709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace android { 29709a0978ae141198018ca9769f8d96292a8928e6Jason Samsnamespace renderscript { 30709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 31709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 32709a0978ae141198018ca9769f8d96292a8928e6Jason Samsclass RsdCpuScriptIntrinsicYuvToRGB : public RsdCpuScriptIntrinsic { 33709a0978ae141198018ca9769f8d96292a8928e6Jason Samspublic: 34709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void populateScript(Script *); 35709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void invokeFreeChildren(); 36709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 37709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual void setGlobalObj(uint32_t slot, ObjectBase *data); 38709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 39709a0978ae141198018ca9769f8d96292a8928e6Jason Sams virtual ~RsdCpuScriptIntrinsicYuvToRGB(); 40c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuScriptIntrinsicYuvToRGB(RsdCpuReferenceImpl *ctx, const Script *s, const Element *e); 41709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 42709a0978ae141198018ca9769f8d96292a8928e6Jason Samsprotected: 4301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams ObjectBaseRef<Allocation> alloc; 44709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 45709a0978ae141198018ca9769f8d96292a8928e6Jason Sams static void kernel(const RsForEachStubParamStruct *p, 46709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 47709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep); 4801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams}; 4901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 50709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 51709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 52709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 53709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 54709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::setGlobalObj(uint32_t slot, ObjectBase *data) { 5501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams rsAssert(slot == 0); 56709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.set(static_cast<Allocation *>(data)); 5701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 5801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 5901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 6001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 61709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 6201f03a04da629b9a3e3ff33287dd277b12c54148Jason Samsstatic uchar4 rsYuvToRGBA_uchar4(uchar y, uchar u, uchar v) { 6301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short Y = ((short)y) - 16; 6401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short U = ((short)u) - 128; 6501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short V = ((short)v) - 128; 6601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 6701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams short4 p; 680b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = (Y * 298 + V * 409 + 128) >> 8; 690b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = (Y * 298 - U * 100 - V * 208 + 128) >> 8; 700b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = (Y * 298 + U * 516 + 128) >> 8; 710b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.w = 255; 720b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.x < 0) { 730b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = 0; 7401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 750b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.x > 255) { 760b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.x = 255; 7701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 780b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.y < 0) { 790b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = 0; 8001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 810b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.y > 255) { 820b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.y = 255; 8301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 840b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.z < 0) { 850b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = 0; 8601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 870b575de8ed0b628d84d256f5846500b0385979bdTim Murray if(p.z > 255) { 880b575de8ed0b628d84d256f5846500b0385979bdTim Murray p.z = 255; 8901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 9001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 910b575de8ed0b628d84d256f5846500b0385979bdTim Murray return (uchar4){p.x, p.y, p.z, p.w}; 9201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 9301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 94915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 95915aa964a1a312f5e06c115112a3aea14fd31b33Jason Samsstatic short YuvCoeff[] = { 96915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 298, 409, -100, 516, -208, 255, 0, 0, 97915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 16, 16, 16, 16, 16, 16, 16, 16, 98915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 128, 128, 128, 128, 128, 128, 128, 128, 99915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 298, 298, 298, 298, 298, 298, 298, 298, 100915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 255, 255, 255, 255, 255, 255, 255, 255 101915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 102915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 103915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams}; 104915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 105915aa964a1a312f5e06c115112a3aea14fd31b33Jason Samsextern "C" void rsdIntrinsicYuv_K(void *dst, const uchar *Y, const uchar *uv, uint32_t count, const short *param); 1066b58909686d7e439dac6dbb48c7e2236cd33c68dJason Samsextern "C" void rsdIntrinsicYuv2_K(void *dst, const uchar *Y, const uchar *u, const uchar *v, uint32_t count, const short *param); 10701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 108709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::kernel(const RsForEachStubParamStruct *p, 109709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 110709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t instep, uint32_t outstep) { 111709a0978ae141198018ca9769f8d96292a8928e6Jason Sams RsdCpuScriptIntrinsicYuvToRGB *cp = (RsdCpuScriptIntrinsicYuvToRGB *)p->usr; 112b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams if (!cp->alloc.get()) { 113b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams ALOGE("YuvToRGB executed without input, skipping"); 114b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams return; 115b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams } 116bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *pinY = (const uchar *)cp->alloc->mHal.drvState.lod[0].mallocPtr; 117606e50048307530335b0885364ba888da436229bTim Murray 118606e50048307530335b0885364ba888da436229bTim Murray size_t strideY = cp->alloc->mHal.drvState.lod[0].stride; 119606e50048307530335b0885364ba888da436229bTim Murray 120606e50048307530335b0885364ba888da436229bTim Murray // calculate correct stride in legacy case 121606e50048307530335b0885364ba888da436229bTim Murray if (cp->alloc->mHal.drvState.lod[0].dimY == 0) { 122606e50048307530335b0885364ba888da436229bTim Murray strideY = p->dimX; 123606e50048307530335b0885364ba888da436229bTim Murray } 124bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *Y = pinY + (p->y * strideY); 12501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 126606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("pinY, %p, Y, %p, p->y, %d, strideY, %d", pinY, Y, p->y, strideY); 127606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("dimX, %d, dimY, %d", cp->alloc->mHal.drvState.lod[0].dimX, cp->alloc->mHal.drvState.lod[0].dimY); 128606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("p->dimX, %d, p->dimY, %d", p->dimX, p->dimY); 129606e50048307530335b0885364ba888da436229bTim Murray 13001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uchar4 *out = (uchar4 *)p->out; 13101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x1 = xstart; 13201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x2 = xend; 13301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 1346b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams switch (cp->alloc->mHal.state.yuv) { 1356b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // In API 17 there was no yuv format and the intrinsic treated everything as NV21 1366b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case 0: 1376b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 1386b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 13901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams#endif 1406b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1416b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinUV = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 142606e50048307530335b0885364ba888da436229bTim Murray size_t strideUV = cp->alloc->mHal.drvState.lod[1].stride; 1436b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *uv = pinUV + ((p->y >> 1) * strideUV); 1446b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 14506bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams if (pinUV == NULL) { 14606bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams // Legacy yuv support didn't fill in uv 147606e50048307530335b0885364ba888da436229bTim Murray strideUV = strideY; 14806bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams uv = ((uint8_t *)cp->alloc->mHal.drvState.lod[0].mallocPtr) + 149606e50048307530335b0885364ba888da436229bTim Murray (strideY * p->dimY) + 150606e50048307530335b0885364ba888da436229bTim Murray ((p->y >> 1) * strideUV); 15106bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams } 15206bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams 1536b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 1546b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #if defined(ARCH_ARM_HAVE_NEON) 1556b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams int32_t len = (x2 - x1 - 1) >> 3; 1566b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(len > 0) { 157606e50048307530335b0885364ba888da436229bTim Murray // ALOGE("%p, %p, %p, %d, %p", out, Y, uv, len, YuvCoeff); 1586b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams rsdIntrinsicYuv_K(out, Y, uv, len, YuvCoeff); 1596b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1 += len << 3; 1606b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out += len << 3; 1616b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1626b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #endif 1636b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1646b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 1656b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 1666b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar u = uv[(x1 & 0xffffe) + 1]; 1676b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar v = uv[(x1 & 0xffffe) + 0]; 1686b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1696b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1706b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1716b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1726b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1736b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1746b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1756b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1766b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1776b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 1786b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1796b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 1806b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YV12: 1816b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1826b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinU = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 1836b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideU = cp->alloc->mHal.drvState.lod[1].stride; 1846b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *u = pinU + ((p->y >> 1) * strideU); 1856b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1866b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinV = (const uchar *)cp->alloc->mHal.drvState.lod[2].mallocPtr; 1876b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideV = cp->alloc->mHal.drvState.lod[2].stride; 1886b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *v = pinV + ((p->y >> 1) * strideV); 1896b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1906b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 1916b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #if defined(ARCH_ARM_HAVE_NEON) 1926b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams int32_t len = (x2 - x1 - 1) >> 3; 1936b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(len > 0) { 1946b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams rsdIntrinsicYuv2_K(out, Y, u, v, len, YuvCoeff); 1956b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1 += len << 3; 1966b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out += len << 3; 1976b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1986b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #endif 1996b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 2006b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 2016b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 2026b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar ut = u[x1]; 2036b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar vt = v[x1]; 2046b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 2056b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 2066b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 2076b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 2086b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 2096b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 2106b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 2116b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 21201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2136b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 2146b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 21501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2166b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 21701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 21801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 219709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::RsdCpuScriptIntrinsicYuvToRGB( 220c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuReferenceImpl *ctx, const Script *s, const Element *e) 221c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_YUV_TO_RGB) { 222709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 223709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mRootPtr = &kernel; 224709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 225709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 226709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::~RsdCpuScriptIntrinsicYuvToRGB() { 227709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 228709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 229709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::populateScript(Script *s) { 230709a0978ae141198018ca9769f8d96292a8928e6Jason Sams s->mHal.info.exportedVariableCount = 1; 231709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 232709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 233709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::invokeFreeChildren() { 234709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.clear(); 235709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 236709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 23701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 238c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_YuvToRGB(RsdCpuReferenceImpl *ctx, 239c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) { 240c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams return new RsdCpuScriptIntrinsicYuvToRGB(ctx, s, e); 24101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 24201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 24301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 244