rsCpuIntrinsicYuvToRGB.cpp revision 06bd91ecb6ba59c5c19b2ad1325b30bd9344832d
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; 117bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const size_t strideY = cp->alloc->mHal.drvState.lod[0].stride; 118bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *Y = pinY + (p->y * strideY); 11901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 12001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uchar4 *out = (uchar4 *)p->out; 12101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x1 = xstart; 12201f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x2 = xend; 12301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 1246b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams switch (cp->alloc->mHal.state.yuv) { 1256b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // In API 17 there was no yuv format and the intrinsic treated everything as NV21 1266b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case 0: 1276b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 1286b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 12901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams#endif 1306b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1316b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinUV = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 1326b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideUV = cp->alloc->mHal.drvState.lod[1].stride; 1336b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *uv = pinUV + ((p->y >> 1) * strideUV); 1346b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 13506bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams if (pinUV == NULL) { 13606bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams // Legacy yuv support didn't fill in uv 13706bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams uv = ((uint8_t *)cp->alloc->mHal.drvState.lod[0].mallocPtr) + 13806bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams (cp->alloc->mHal.drvState.lod[0].stride * 13906bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams cp->alloc->mHal.drvState.lod[0].dimY); 14006bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams } 14106bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams 1426b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 1436b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #if defined(ARCH_ARM_HAVE_NEON) 1446b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams int32_t len = (x2 - x1 - 1) >> 3; 1456b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(len > 0) { 1466b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams rsdIntrinsicYuv_K(out, Y, uv, len, YuvCoeff); 1476b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1 += len << 3; 1486b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out += len << 3; 1496b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1506b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #endif 1516b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1526b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 1536b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 1546b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar u = uv[(x1 & 0xffffe) + 1]; 1556b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar v = uv[(x1 & 0xffffe) + 0]; 1566b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1576b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1586b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1596b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u, v); 1606b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1616b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1626b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1636b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1646b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1656b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 1666b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1676b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#if !defined(RS_SERVER) && !defined(RS_COMPATIBILITY_LIB) 1686b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams case HAL_PIXEL_FORMAT_YV12: 1696b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams { 1706b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinU = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 1716b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideU = cp->alloc->mHal.drvState.lod[1].stride; 1726b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *u = pinU + ((p->y >> 1) * strideU); 1736b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1746b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *pinV = (const uchar *)cp->alloc->mHal.drvState.lod[2].mallocPtr; 1756b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const size_t strideV = cp->alloc->mHal.drvState.lod[2].stride; 1766b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams const uchar *v = pinV + ((p->y >> 1) * strideV); 1776b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1786b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(x2 > x1) { 1796b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #if defined(ARCH_ARM_HAVE_NEON) 1806b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams int32_t len = (x2 - x1 - 1) >> 3; 1816b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams if(len > 0) { 1826b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams rsdIntrinsicYuv2_K(out, Y, u, v, len, YuvCoeff); 1836b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1 += len << 3; 1846b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out += len << 3; 1856b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1866b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams #endif 1876b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 1886b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams // ALOGE("y %i %i %i", p->y, x1, x2); 1896b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams while(x1 < x2) { 1906b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar ut = u[x1]; 1916b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams uchar vt = v[x1]; 1926b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 1936b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1946b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1956b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams *out = rsYuvToRGBA_uchar4(Y[x1], ut, vt); 1966b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams out++; 1976b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams x1++; 1986b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 1996b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 20001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2016b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams break; 2026b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 20301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2046b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 20501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 20601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 207709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::RsdCpuScriptIntrinsicYuvToRGB( 208c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuReferenceImpl *ctx, const Script *s, const Element *e) 209c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_YUV_TO_RGB) { 210709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 211709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mRootPtr = &kernel; 212709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 213709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 214709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::~RsdCpuScriptIntrinsicYuvToRGB() { 215709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 216709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 217709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::populateScript(Script *s) { 218709a0978ae141198018ca9769f8d96292a8928e6Jason Sams s->mHal.info.exportedVariableCount = 1; 219709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 220709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 221709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::invokeFreeChildren() { 222709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.clear(); 223709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 224709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 22501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 226c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_YuvToRGB(RsdCpuReferenceImpl *ctx, 227c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) { 228c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams return new RsdCpuScriptIntrinsicYuvToRGB(ctx, s, e); 22901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 23001f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 23101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 232