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: 38c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines void populateScript(Script *) override; 39c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines void invokeFreeChildren() override; 40709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 41c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines void setGlobalObj(uint32_t slot, ObjectBase *data) override; 42709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 43c060f1435e7b9405f3be8974417fa6f410f03753Stephen Hines ~RsdCpuScriptIntrinsicYuvToRGB() override; 44c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuScriptIntrinsicYuvToRGB(RsdCpuReferenceImpl *ctx, const Script *s, const Element *e); 45709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 46709a0978ae141198018ca9769f8d96292a8928e6Jason Samsprotected: 4701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams ObjectBaseRef<Allocation> alloc; 48709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 49b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross static void kernel(const RsExpandKernelDriverInfo *info, 50709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 519ed79105cc6a8dbfaf959875249f36022cc2c798Chris Wailes 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 958994abbe699bb05fa70cff101becc925db6b2c26synergy dev return (uchar4){static_cast<uchar>(p.x), static_cast<uchar>(p.y), 968994abbe699bb05fa70cff101becc925db6b2c26synergy dev static_cast<uchar>(p.z), static_cast<uchar>(p.w)}; 9701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 9801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 99915aa964a1a312f5e06c115112a3aea14fd31b33Jason Sams 100ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosieextern "C" void rsdIntrinsicYuv_K(void *dst, const uchar *Y, const uchar *uv, uint32_t xstart, size_t xend); 101ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosieextern "C" void rsdIntrinsicYuvR_K(void *dst, const uchar *Y, const uchar *uv, uint32_t xstart, size_t xend); 102ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosieextern "C" void rsdIntrinsicYuv2_K(void *dst, const uchar *Y, const uchar *u, const uchar *v, size_t xstart, size_t xend); 10301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 104b0abb140ac51b93d1a85aadaa63fe057f2d29850David Grossvoid RsdCpuScriptIntrinsicYuvToRGB::kernel(const RsExpandKernelDriverInfo *info, 105709a0978ae141198018ca9769f8d96292a8928e6Jason Sams uint32_t xstart, uint32_t xend, 1069ed79105cc6a8dbfaf959875249f36022cc2c798Chris Wailes uint32_t outstep) { 107b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross RsdCpuScriptIntrinsicYuvToRGB *cp = (RsdCpuScriptIntrinsicYuvToRGB *)info->usr; 108b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams if (!cp->alloc.get()) { 109b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams ALOGE("YuvToRGB executed without input, skipping"); 110b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams return; 111b801b949e286275b5d19a33135235ba68d3a19a9Jason Sams } 112bc0ca6ba4e31239bf77060578d0bdf1a10e04168Jason Sams const uchar *pinY = (const uchar *)cp->alloc->mHal.drvState.lod[0].mallocPtr; 11344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes if (pinY == nullptr) { 114e99f3e21a0d88ca59eb9281699e8212a3a4205a3Jason Sams ALOGE("YuvToRGB executed without data, skipping"); 115e99f3e21a0d88ca59eb9281699e8212a3a4205a3Jason Sams return; 116e99f3e21a0d88ca59eb9281699e8212a3a4205a3Jason Sams } 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) { 122b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross strideY = info->dim.x; 123606e50048307530335b0885364ba888da436229bTim Murray } 124b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross const uchar *Y = pinY + (info->current.y * strideY); 12501f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 126b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross uchar4 *out = (uchar4 *)info->outPtr[0] + xstart; 12701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x1 = xstart; 12801f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams uint32_t x2 = xend; 12901f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 1300052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams size_t cstep = cp->alloc->mHal.drvState.yuv.step; 13106bd91ecb6ba59c5c19b2ad1325b30bd9344832dJason Sams 13261656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const uchar *pinU = (const uchar *)cp->alloc->mHal.drvState.lod[1].mallocPtr; 13361656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t strideU = cp->alloc->mHal.drvState.lod[1].stride; 134b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross const uchar *u = pinU + ((info->current.y >> 1) * strideU); 1356b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 13661656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const uchar *pinV = (const uchar *)cp->alloc->mHal.drvState.lod[2].mallocPtr; 13761656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams const size_t strideV = cp->alloc->mHal.drvState.lod[2].stride; 138b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross const uchar *v = pinV + ((info->current.y >> 1) * strideV); 13961656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 140b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross //ALOGE("pinY, %p, Y, %p, info->current.y, %d, strideY, %d", pinY, Y, info->current.y, strideY); 141b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross //ALOGE("pinU, %p, U, %p, info->current.y, %d, strideU, %d", pinU, u, info->current.y, strideU); 142b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross //ALOGE("pinV, %p, V, %p, info->current.y, %d, strideV, %d", pinV, v, info->current.y, strideV); 1430052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams //ALOGE("dimX, %d, dimY, %d", cp->alloc->mHal.drvState.lod[0].dimX, cp->alloc->mHal.drvState.lod[0].dimY); 144b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross //ALOGE("info->dim.x, %d, info->dim.y, %d", info->dim.x, info->dim.y); 1450052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams 14644bef6fba6244292b751387f3d6c31cca96c28adChris Wailes if (pinU == nullptr) { 14761656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams // Legacy yuv support didn't fill in uv 14861656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams v = ((uint8_t *)cp->alloc->mHal.drvState.lod[0].mallocPtr) + 149b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross (strideY * info->dim.y) + 150b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross ((info->current.y >> 1) * strideY); 15161656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams u = v + 1; 1520052f8dcb5ebb5c9205a1d25445629fb5a772380Jason Sams cstep = 2; 15361656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams } 15461656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 1551d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie /* If we start on an odd pixel then deal with it here and bump things along 1561d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie * so that subsequent code can carry on with even-odd pairing assumptions. 1571d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie */ 1581d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie if((x1 & 1) && (x2 > x1)) { 1591d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie int cx = (x1 >> 1) * cstep; 1601d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie *out = rsYuvToRGBA_uchar4(Y[x1], u[cx], v[cx]); 1611d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie out++; 1621d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie x1++; 1631d9c887c58d115975e01c9d500595f503803dc8cSimon Hosie } 164319babf8106540bf26ac5e76a85416846bae8d3bJason Sams 165319babf8106540bf26ac5e76a85416846bae8d3bJason Sams#if defined(ARCH_ARM_USE_INTRINSICS) 16661656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams if((x2 > x1) && gArchUseSIMD) { 167ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie int32_t len = x2 - x1; 168ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie if (cstep == 1) { 169b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross rsdIntrinsicYuv2_K(info->outPtr[0], Y, u, v, x1, x2); 170ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie x1 += len; 171ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie out += len; 172ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie } else if (cstep == 2) { 173ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie // Check for proper interleave 174ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie intptr_t ipu = (intptr_t)u; 175ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie intptr_t ipv = (intptr_t)v; 176ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie 177ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie if (ipu == (ipv + 1)) { 178b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross rsdIntrinsicYuv_K(info->outPtr[0], Y, v, x1, x2); 179ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie x1 += len; 180ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie out += len; 181ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie } else if (ipu == (ipv - 1)) { 182b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross rsdIntrinsicYuvR_K(info->outPtr[0], Y, u, x1, x2); 183ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie x1 += len; 184ccd7a46d0c0052209bf3ab8657f40622065d1d1fSimon Hosie out += len; 1856b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams } 18601f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 18761656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams } 1886b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams#endif 18961656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams 19061656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams if(x2 > x1) { 191b0abb140ac51b93d1a85aadaa63fe057f2d29850David Gross // ALOGE("y %i %i %i", info->current.y, x1, x2); 19261656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams while(x1 < x2) { 19361656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams int cx = (x1 >> 1) * cstep; 19461656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u[cx], v[cx]); 19561656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams out++; 19661656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams x1++; 19761656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams *out = rsYuvToRGBA_uchar4(Y[x1], u[cx], v[cx]); 19861656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams out++; 19961656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams x1++; 20061656a7c6fc13421679d0a1cdf8b5b861e286892Jason Sams } 20101f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams } 2026b58909686d7e439dac6dbb48c7e2236cd33c68dJason Sams 20301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 20401f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 205709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::RsdCpuScriptIntrinsicYuvToRGB( 206c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams RsdCpuReferenceImpl *ctx, const Script *s, const Element *e) 207c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams : RsdCpuScriptIntrinsic(ctx, s, e, RS_SCRIPT_INTRINSIC_ID_YUV_TO_RGB) { 208709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 209709a0978ae141198018ca9769f8d96292a8928e6Jason Sams mRootPtr = &kernel; 210709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 211709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 212709a0978ae141198018ca9769f8d96292a8928e6Jason SamsRsdCpuScriptIntrinsicYuvToRGB::~RsdCpuScriptIntrinsicYuvToRGB() { 213709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 214709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 215709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::populateScript(Script *s) { 216709a0978ae141198018ca9769f8d96292a8928e6Jason Sams s->mHal.info.exportedVariableCount = 1; 217709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 218709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 219709a0978ae141198018ca9769f8d96292a8928e6Jason Samsvoid RsdCpuScriptIntrinsicYuvToRGB::invokeFreeChildren() { 220709a0978ae141198018ca9769f8d96292a8928e6Jason Sams alloc.clear(); 221709a0978ae141198018ca9769f8d96292a8928e6Jason Sams} 222709a0978ae141198018ca9769f8d96292a8928e6Jason Sams 22301f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams 224c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason SamsRsdCpuScriptImpl * rsdIntrinsic_YuvToRGB(RsdCpuReferenceImpl *ctx, 225c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams const Script *s, const Element *e) { 226c905efd76fdcc1b8846b229bf7d991d185a7b4b7Jason Sams return new RsdCpuScriptIntrinsicYuvToRGB(ctx, s, e); 22701f03a04da629b9a3e3ff33287dd277b12c54148Jason Sams} 228