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