ScriptIntrinsics.cpp revision e5428e661ce6f9d24f838cab0a8fb0fa8c76dbca
17f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray/* 27f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Copyright (C) 2008-2012 The Android Open Source Project 37f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * 47f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Licensed under the Apache License, Version 2.0 (the "License"); 57f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * you may not use this file except in compliance with the License. 67f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * You may obtain a copy of the License at 77f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * 87f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * http://www.apache.org/licenses/LICENSE-2.0 97f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * 107f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * Unless required by applicable law or agreed to in writing, software 117f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * distributed under the License is distributed on an "AS IS" BASIS, 127f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * See the License for the specific language governing permissions and 147f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray * limitations under the License. 157f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray */ 167f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 177f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include <malloc.h> 187f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 197f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray#include "RenderScript.h" 20fa77db83d3e36d6aa23622cec5bdcb5e373f0a3bTim Murray#include "rsCppInternal.h" 217f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 227f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murrayusing namespace android; 239eb7f4b90120ebe4be74343856e86b46495f72dfTim Murrayusing namespace RSC; 247f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 253cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsic::ScriptIntrinsic(sp<RS> rs, int id, sp<const Element> e) 2644bef6fba6244292b751387f3d6c31cca96c28adChris Wailes : Script(nullptr, rs) { 27e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang mID = createDispatch(rs, RS::dispatch->ScriptIntrinsicCreate(rs->getContext(), id, 28e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang e != nullptr ? e->getID() : 0)); 2910913a5c37ba119bef335320d3e8be25212c05adTim Murray mElement = e; 307f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 317f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 32b27b18130d0772203799ba0f2d27783b640dc891Tim MurrayScriptIntrinsic::~ScriptIntrinsic() { 33b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 34b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 35b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 3621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsic3DLUT> ScriptIntrinsic3DLUT::create(sp<RS> rs, sp<const Element> e) { 3710913a5c37ba119bef335320d3e8be25212c05adTim Murray if (e->isCompatible(Element::U8_4(rs)) == false) { 3810913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Element not supported for intrinsic"); 3944bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 4010913a5c37ba119bef335320d3e8be25212c05adTim Murray } 4121fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsic3DLUT(rs, e); 4221fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 4321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 4489daad6bae798779e57f252e9da4fe4e62337124Tim MurrayScriptIntrinsic3DLUT::ScriptIntrinsic3DLUT(sp<RS> rs, sp<const Element> e) 4589daad6bae798779e57f252e9da4fe4e62337124Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_3DLUT, e) { 4689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 4789daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 4889daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsic3DLUT::forEach(sp<Allocation> ain, sp<Allocation> aout) { 4910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (ain->getType()->getElement()->isCompatible(mElement) == false || 5010913a5c37ba119bef335320d3e8be25212c05adTim Murray aout->getType()->getElement()->isCompatible(mElement) == false) { 5110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "3DLUT forEach element mismatch"); 5210913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 5310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 5444bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, ain, aout, nullptr, 0); 5589daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 5689daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsic3DLUT::setLUT(sp<Allocation> lut) { 5710913a5c37ba119bef335320d3e8be25212c05adTim Murray sp<const Type> t = lut->getType(); 5810913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!t->getElement()->isCompatible(mElement)) { 5910913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "setLUT element does not match"); 6010913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 6110913a5c37ba119bef335320d3e8be25212c05adTim Murray } 6210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (t->getZ() == 0) { 6310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, "setLUT Allocation must be 3D"); 6410913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 6510913a5c37ba119bef335320d3e8be25212c05adTim Murray } 6610913a5c37ba119bef335320d3e8be25212c05adTim Murray 6789daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(0, lut); 6889daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 6989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 7021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicBlend> ScriptIntrinsicBlend::create(sp<RS> rs, sp<const Element> e) { 7110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (e->isCompatible(Element::U8_4(rs)) == false) { 7210913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Element not supported for intrinsic"); 7344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 7410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 7521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicBlend(rs, e); 7621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 7721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 783cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsicBlend::ScriptIntrinsicBlend(sp<RS> rs, sp<const Element> e) 797f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_BLEND, e) { 807f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 817f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 8275e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachClear(sp<Allocation> in, sp<Allocation> out) { 8310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 8410913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 8510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 8610913a5c37ba119bef335320d3e8be25212c05adTim Murray } 8744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, in, out, nullptr, 0); 887f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 897f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 9075e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSrc(sp<Allocation> in, sp<Allocation> out) { 9110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 9210913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 9310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 9410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 9544bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(1, in, out, nullptr, 0); 967f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 977f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 9875e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachDst(sp<Allocation> in, sp<Allocation> out) { 9910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 10010913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 10110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 10210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 10344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(2, in, out, nullptr, 0); 1047f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1057f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 10675e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSrcOver(sp<Allocation> in, sp<Allocation> out) { 10710913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 10810913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 10910913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 11010913a5c37ba119bef335320d3e8be25212c05adTim Murray } 11144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(3, in, out, nullptr, 0); 1127f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1137f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 11475e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachDstOver(sp<Allocation> in, sp<Allocation> out) { 11510913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 11610913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 11710913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 11810913a5c37ba119bef335320d3e8be25212c05adTim Murray } 11944bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(4, in, out, nullptr, 0); 1207f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1217f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 12275e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSrcIn(sp<Allocation> in, sp<Allocation> out) { 12310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 12410913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 12510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 12610913a5c37ba119bef335320d3e8be25212c05adTim Murray } 12744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(5, in, out, nullptr, 0); 1287f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1297f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 13075e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachDstIn(sp<Allocation> in, sp<Allocation> out) { 13110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 13210913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 13310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 13410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 13544bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(6, in, out, nullptr, 0); 1367f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1377f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 13875e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSrcOut(sp<Allocation> in, sp<Allocation> out) { 13910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 14010913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 14110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 14210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 14344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(7, in, out, nullptr, 0); 1447f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1457f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 14675e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachDstOut(sp<Allocation> in, sp<Allocation> out) { 14710913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 14810913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 14910913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 15010913a5c37ba119bef335320d3e8be25212c05adTim Murray } 15144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(8, in, out, nullptr, 0); 1527f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1537f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 15475e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSrcAtop(sp<Allocation> in, sp<Allocation> out) { 15510913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 15610913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 15710913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 15810913a5c37ba119bef335320d3e8be25212c05adTim Murray } 15944bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(9, in, out, nullptr, 0); 1607f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1617f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 16275e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachDstAtop(sp<Allocation> in, sp<Allocation> out) { 16310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 16410913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 16510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 16610913a5c37ba119bef335320d3e8be25212c05adTim Murray } 16744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(10, in, out, nullptr, 0); 1687f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1697f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 17075e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachXor(sp<Allocation> in, sp<Allocation> out) { 17110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 17210913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 17310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 17410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 17544bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(11, in, out, nullptr, 0); 1767f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1777f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 1787f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray// Numbering jumps here 17975e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachMultiply(sp<Allocation> in, sp<Allocation> out) { 18010913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 18110913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 18210913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 18310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 18444bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(14, in, out, nullptr, 0); 1857f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1867f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 1877f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray// Numbering jumps here 18875e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachAdd(sp<Allocation> in, sp<Allocation> out) { 18910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 19010913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 19110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 19210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 19344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(34, in, out, nullptr, 0); 1947f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 1957f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 19675e877d157f9429eb6d8fb1b09c75c5472db161aTim Murrayvoid ScriptIntrinsicBlend::forEachSubtract(sp<Allocation> in, sp<Allocation> out) { 19710913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false || 19810913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getElement()->isCompatible(mElement) == false) { 19910913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blend"); 20010913a5c37ba119bef335320d3e8be25212c05adTim Murray } 20144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(35, in, out, nullptr, 0); 2027f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray} 2037f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 20489daad6bae798779e57f252e9da4fe4e62337124Tim Murray 20589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 20689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 20721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicBlur> ScriptIntrinsicBlur::create(sp<RS> rs, sp<const Element> e) { 20810913a5c37ba119bef335320d3e8be25212c05adTim Murray if ((e->isCompatible(Element::U8_4(rs)) == false) && 20910913a5c37ba119bef335320d3e8be25212c05adTim Murray (e->isCompatible(Element::U8(rs)) == false)) { 21010913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blur"); 21144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 21210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 21321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicBlur(rs, e); 21421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 21521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 2163cd44af22622898d3000b2b3c4c408cede294152Tim MurrayScriptIntrinsicBlur::ScriptIntrinsicBlur(sp<RS> rs, sp<const Element> e) 2178f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_BLUR, e) { 2187f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 2198f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray} 2207f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 22121fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murrayvoid ScriptIntrinsicBlur::setInput(sp<Allocation> in) { 22210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (in->getType()->getElement()->isCompatible(mElement) == false) { 22310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blur input"); 22410913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 22510913a5c37ba119bef335320d3e8be25212c05adTim Murray } 2268f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray Script::setVar(1, in); 22721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 22821fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 22921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murrayvoid ScriptIntrinsicBlur::forEach(sp<Allocation> out) { 23010913a5c37ba119bef335320d3e8be25212c05adTim Murray if (out->getType()->getElement()->isCompatible(mElement) == false) { 23110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element in blur output"); 23210913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 23310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 23444bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, nullptr, out, nullptr, 0); 2358f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray} 2367f0d56899840f071c81bbbcbebfbd880ac31c043Tim Murray 2378f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murrayvoid ScriptIntrinsicBlur::setRadius(float radius) { 23810913a5c37ba119bef335320d3e8be25212c05adTim Murray if (radius > 0.f && radius <= 25.f) { 23910913a5c37ba119bef335320d3e8be25212c05adTim Murray Script::setVar(0, &radius, sizeof(float)); 24010913a5c37ba119bef335320d3e8be25212c05adTim Murray } else { 24110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, "Blur radius out of 0-25 pixel bound"); 24210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 2438f1e60c42e0a819f389594f5d2f38fb2e024c9c9Tim Murray} 24489daad6bae798779e57f252e9da4fe4e62337124Tim Murray 24589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 24689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 247aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murraysp<ScriptIntrinsicColorMatrix> ScriptIntrinsicColorMatrix::create(sp<RS> rs) { 248aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray return new ScriptIntrinsicColorMatrix(rs, Element::RGBA_8888(rs)); 24921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 25021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 25189daad6bae798779e57f252e9da4fe4e62337124Tim MurrayScriptIntrinsicColorMatrix::ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e) 25289daad6bae798779e57f252e9da4fe4e62337124Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_COLOR_MATRIX, e) { 253aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray float add[4] = {0.f, 0.f, 0.f, 0.f}; 254aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray setAdd(add); 25589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 25689daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 25789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 25889daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::forEach(sp<Allocation> in, sp<Allocation> out) { 25910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(in->getType()->getElement()->isCompatible(Element::U8(mRS))) && 26010913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::U8_2(mRS))) && 26110913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::U8_3(mRS))) && 26210913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::U8_4(mRS))) && 26310913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::F32(mRS))) && 26410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::F32_2(mRS))) && 26510913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::F32_3(mRS))) && 26610913a5c37ba119bef335320d3e8be25212c05adTim Murray !(in->getType()->getElement()->isCompatible(Element::F32_4(mRS)))) { 26710913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for ColorMatrix"); 26810913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 26910913a5c37ba119bef335320d3e8be25212c05adTim Murray } 27010913a5c37ba119bef335320d3e8be25212c05adTim Murray 27110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(out->getType()->getElement()->isCompatible(Element::U8(mRS))) && 27210913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U8_2(mRS))) && 27310913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U8_3(mRS))) && 27410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U8_4(mRS))) && 27510913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::F32(mRS))) && 27610913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::F32_2(mRS))) && 27710913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::F32_3(mRS))) && 27810913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::F32_4(mRS)))) { 27910913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for ColorMatrix"); 28010913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 28110913a5c37ba119bef335320d3e8be25212c05adTim Murray } 28210913a5c37ba119bef335320d3e8be25212c05adTim Murray 28344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, in, out, nullptr, 0); 28489daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 28589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 28610913a5c37ba119bef335320d3e8be25212c05adTim Murrayvoid ScriptIntrinsicColorMatrix::setAdd(float* add) { 28710913a5c37ba119bef335320d3e8be25212c05adTim Murray Script::setVar(1, (void*)add, sizeof(float) * 4); 28810913a5c37ba119bef335320d3e8be25212c05adTim Murray} 28989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 29089daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::setColorMatrix3(float* m) { 291aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray float temp[16]; 292aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[0] = m[0]; 293aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[1] = m[1]; 294aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[2] = m[2]; 295aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[3] = 0.f; 296aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray 297aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[4] = m[3]; 298aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[5] = m[4]; 299aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[6] = m[5]; 300aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[7] = 0.f; 301aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray 302aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[8] = m[6]; 303aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[9] = m[7]; 304aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[10] = m[8]; 305aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[11] = 0.f; 306aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray 307aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[12] = 0.f; 308aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[13] = 0.f; 309aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[14] = 0.f; 310aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray temp[15] = 1.f; 311aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray 312aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray setColorMatrix4(temp); 31389daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 31489daad6bae798779e57f252e9da4fe4e62337124Tim Murray 31589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 31689daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::setColorMatrix4(float* m) { 31789daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(0, (void*)m, sizeof(float) * 16); 31889daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 31989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 32089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 32189daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::setGreyscale() { 322aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray float matrix[] = {0.299f, 0.299f, 0.299f,0.587f,0.587f,0.587f,0.114f,0.114f, 0.114f}; 32389daad6bae798779e57f252e9da4fe4e62337124Tim Murray setColorMatrix3(matrix); 32489daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 32589daad6bae798779e57f252e9da4fe4e62337124Tim Murray 32689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 32789daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::setRGBtoYUV() { 328aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray float matrix[] = { 0.299f, -0.14713f, 0.615f, 0.587f, -0.28886f, -0.51499f, 0.114f, 0.436f, -0.10001f}; 32989daad6bae798779e57f252e9da4fe4e62337124Tim Murray setColorMatrix3(matrix); 33089daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 33189daad6bae798779e57f252e9da4fe4e62337124Tim Murray 33289daad6bae798779e57f252e9da4fe4e62337124Tim Murray 33389daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicColorMatrix::setYUVtoRGB() { 334aae73c96081c15eb63ac24f29e243b7c85ff4480Tim Murray float matrix[] = {1.f, 1.f, 1.f, 0.f, -0.39465f, 2.03211f, 1.13983f, -0.5806f, 0.f}; 33589daad6bae798779e57f252e9da4fe4e62337124Tim Murray setColorMatrix3(matrix); 33689daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 33789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 33821fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 33921fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 34021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicConvolve3x3> ScriptIntrinsicConvolve3x3::create(sp<RS> rs, sp<const Element> e) { 34110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(e->isCompatible(Element::U8(rs))) && 34210913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_2(rs))) && 34310913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_3(rs))) && 34410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_4(rs))) && 34510913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32(rs))) && 34610913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_2(rs))) && 34710913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_3(rs))) && 34810913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_4(rs)))) { 34910913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for Convolve3x3"); 35044bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 35110913a5c37ba119bef335320d3e8be25212c05adTim Murray } 35210913a5c37ba119bef335320d3e8be25212c05adTim Murray 35321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicConvolve3x3(rs, e); 35421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 35521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 35689daad6bae798779e57f252e9da4fe4e62337124Tim MurrayScriptIntrinsicConvolve3x3::ScriptIntrinsicConvolve3x3(sp<RS> rs, sp<const Element> e) 35789daad6bae798779e57f252e9da4fe4e62337124Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_CONVOLVE_3x3, e) { 35889daad6bae798779e57f252e9da4fe4e62337124Tim Murray 35989daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 36089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 36189daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve3x3::setInput(sp<Allocation> in) { 36210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(in->getType()->getElement()->isCompatible(mElement))) { 36310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Element mismatch in Convolve3x3"); 36410913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 36510913a5c37ba119bef335320d3e8be25212c05adTim Murray } 36689daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(1, in); 36789daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 36889daad6bae798779e57f252e9da4fe4e62337124Tim Murray 36989daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve3x3::forEach(sp<Allocation> out) { 37010913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(out->getType()->getElement()->isCompatible(mElement))) { 37110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Element mismatch in Convolve3x3"); 37210913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 37310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 37444bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, nullptr, out, nullptr, 0); 37589daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 37689daad6bae798779e57f252e9da4fe4e62337124Tim Murray 37789daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve3x3::setCoefficients(float* v) { 37889daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(0, (void*)v, sizeof(float) * 9); 37989daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 38089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 38121fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicConvolve5x5> ScriptIntrinsicConvolve5x5::create(sp<RS> rs, sp<const Element> e) { 38210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(e->isCompatible(Element::U8(rs))) && 38310913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_2(rs))) && 38410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_3(rs))) && 38510913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::U8_4(rs))) && 38610913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32(rs))) && 38710913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_2(rs))) && 38810913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_3(rs))) && 38910913a5c37ba119bef335320d3e8be25212c05adTim Murray !(e->isCompatible(Element::F32_4(rs)))) { 39010913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for Convolve5x5"); 39144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 39210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 39310913a5c37ba119bef335320d3e8be25212c05adTim Murray 39421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicConvolve5x5(rs, e); 39521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 39621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 39789daad6bae798779e57f252e9da4fe4e62337124Tim MurrayScriptIntrinsicConvolve5x5::ScriptIntrinsicConvolve5x5(sp<RS> rs, sp<const Element> e) 39889daad6bae798779e57f252e9da4fe4e62337124Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_CONVOLVE_5x5, e) { 39989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 40089daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 40189daad6bae798779e57f252e9da4fe4e62337124Tim Murray 40289daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve5x5::setInput(sp<Allocation> in) { 40310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(in->getType()->getElement()->isCompatible(mElement))) { 40410913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Element mismatch in Convolve5x5 input"); 40510913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 40610913a5c37ba119bef335320d3e8be25212c05adTim Murray } 40789daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(1, in); 40889daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 40989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 41089daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve5x5::forEach(sp<Allocation> out) { 41110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(out->getType()->getElement()->isCompatible(mElement))) { 41210913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Element mismatch in Convolve5x5 output"); 41310913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 41410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 41510913a5c37ba119bef335320d3e8be25212c05adTim Murray 41644bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, nullptr, out, nullptr, 0); 41789daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 41889daad6bae798779e57f252e9da4fe4e62337124Tim Murray 41989daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicConvolve5x5::setCoefficients(float* v) { 42089daad6bae798779e57f252e9da4fe4e62337124Tim Murray Script::setVar(0, (void*)v, sizeof(float) * 25); 42189daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 42289daad6bae798779e57f252e9da4fe4e62337124Tim Murray 423b05c850a493a769c88b58be2a6721a9bb06b3a0aJon Parrsp<ScriptIntrinsicHistogram> ScriptIntrinsicHistogram::create(sp<RS> rs, sp<const Element> e) { 424b05c850a493a769c88b58be2a6721a9bb06b3a0aJon Parr return new ScriptIntrinsicHistogram(rs, e); 42521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 42621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 427b27b18130d0772203799ba0f2d27783b640dc891Tim MurrayScriptIntrinsicHistogram::ScriptIntrinsicHistogram(sp<RS> rs, sp<const Element> e) 428b27b18130d0772203799ba0f2d27783b640dc891Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_HISTOGRAM, e) { 429b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 430b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 431b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 43210913a5c37ba119bef335320d3e8be25212c05adTim Murrayvoid ScriptIntrinsicHistogram::setOutput(sp<Allocation> out) { 43310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(out->getType()->getElement()->isCompatible(Element::U32(mRS))) && 43410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U32_2(mRS))) && 43510913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U32_3(mRS))) && 43610913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::U32_4(mRS))) && 43710913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::I32(mRS))) && 43810913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::I32_2(mRS))) && 43910913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::I32_3(mRS))) && 44010913a5c37ba119bef335320d3e8be25212c05adTim Murray !(out->getType()->getElement()->isCompatible(Element::I32_4(mRS)))) { 44110913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for Histogram output"); 44210913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 44310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 44410913a5c37ba119bef335320d3e8be25212c05adTim Murray 44510913a5c37ba119bef335320d3e8be25212c05adTim Murray if (out->getType()->getX() != 256 || 44610913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->getY() != 0 || 44710913a5c37ba119bef335320d3e8be25212c05adTim Murray out->getType()->hasMipmaps()) { 44810913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, "Invalid Allocation type for Histogram output"); 44910913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 45010913a5c37ba119bef335320d3e8be25212c05adTim Murray } 45110913a5c37ba119bef335320d3e8be25212c05adTim Murray mOut = out; 45210913a5c37ba119bef335320d3e8be25212c05adTim Murray Script::setVar(1, out); 453b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 454b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 455b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayvoid ScriptIntrinsicHistogram::setDotCoefficients(float r, float g, float b, float a) { 456b27b18130d0772203799ba0f2d27783b640dc891Tim Murray if ((r < 0.f) || (g < 0.f) || (b < 0.f) || (a < 0.f)) { 457b27b18130d0772203799ba0f2d27783b640dc891Tim Murray return; 458b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 459b27b18130d0772203799ba0f2d27783b640dc891Tim Murray if ((r + g + b + a) > 1.f) { 460b27b18130d0772203799ba0f2d27783b640dc891Tim Murray return; 461b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 462b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 463b27b18130d0772203799ba0f2d27783b640dc891Tim Murray FieldPacker fp(16); 464b27b18130d0772203799ba0f2d27783b640dc891Tim Murray fp.add(r); 465b27b18130d0772203799ba0f2d27783b640dc891Tim Murray fp.add(g); 466b27b18130d0772203799ba0f2d27783b640dc891Tim Murray fp.add(b); 467b27b18130d0772203799ba0f2d27783b640dc891Tim Murray fp.add(a); 468b27b18130d0772203799ba0f2d27783b640dc891Tim Murray Script::setVar(0, fp.getData(), fp.getLength()); 469b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 470b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 471b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 472b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayvoid ScriptIntrinsicHistogram::forEach(sp<Allocation> ain) { 47310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (ain->getType()->getElement()->getVectorSize() < 47410913a5c37ba119bef335320d3e8be25212c05adTim Murray mOut->getType()->getElement()->getVectorSize()) { 47510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, 47610913a5c37ba119bef335320d3e8be25212c05adTim Murray "Input vector size must be >= output vector size"); 47710913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 47810913a5c37ba119bef335320d3e8be25212c05adTim Murray } 47910913a5c37ba119bef335320d3e8be25212c05adTim Murray 480b05c850a493a769c88b58be2a6721a9bb06b3a0aJon Parr if (!(ain->getType()->getElement()->isCompatible(Element::U8(mRS))) && 48110913a5c37ba119bef335320d3e8be25212c05adTim Murray !(ain->getType()->getElement()->isCompatible(Element::U8_4(mRS)))) { 48210913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, 48310913a5c37ba119bef335320d3e8be25212c05adTim Murray "Input allocation to Histogram must be U8 or U8_4"); 48410913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 48510913a5c37ba119bef335320d3e8be25212c05adTim Murray } 48610913a5c37ba119bef335320d3e8be25212c05adTim Murray 48744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, ain, nullptr, nullptr, 0); 488b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 489b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 49089daad6bae798779e57f252e9da4fe4e62337124Tim Murray 491b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayvoid ScriptIntrinsicHistogram::forEach_dot(sp<Allocation> ain) { 49210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (mOut->getType()->getElement()->getVectorSize() != 1) { 49310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, 49410913a5c37ba119bef335320d3e8be25212c05adTim Murray "Output Histogram allocation must have vector size of 1 " \ 49510913a5c37ba119bef335320d3e8be25212c05adTim Murray "when used with forEach_dot"); 49610913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 49710913a5c37ba119bef335320d3e8be25212c05adTim Murray } 498b05c850a493a769c88b58be2a6721a9bb06b3a0aJon Parr if (!(ain->getType()->getElement()->isCompatible(Element::U8(mRS))) && 49910913a5c37ba119bef335320d3e8be25212c05adTim Murray !(ain->getType()->getElement()->isCompatible(Element::U8_4(mRS)))) { 50010913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, 50110913a5c37ba119bef335320d3e8be25212c05adTim Murray "Input allocation to Histogram must be U8 or U8_4"); 50210913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 50310913a5c37ba119bef335320d3e8be25212c05adTim Murray } 50410913a5c37ba119bef335320d3e8be25212c05adTim Murray 50544bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(1, ain, nullptr, nullptr, 0); 506b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 507b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 50821fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicLUT> ScriptIntrinsicLUT::create(sp<RS> rs, sp<const Element> e) { 50910913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(e->isCompatible(Element::U8_4(rs)))) { 51010913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for LUT"); 51144bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 51210913a5c37ba119bef335320d3e8be25212c05adTim Murray } 51321fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicLUT(rs, e); 51421fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 51521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 516b27b18130d0772203799ba0f2d27783b640dc891Tim MurrayScriptIntrinsicLUT::ScriptIntrinsicLUT(sp<RS> rs, sp<const Element> e) 517b27b18130d0772203799ba0f2d27783b640dc891Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_LUT, e), mDirty(true) { 5182acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray LUT = Allocation::createSized(rs, Element::U8(rs), 1024); 519b27b18130d0772203799ba0f2d27783b640dc891Tim Murray for (int i = 0; i < 256; i++) { 520b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mCache[i] = i; 521b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mCache[i+256] = i; 522b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mCache[i+512] = i; 523b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mCache[i+768] = i; 524b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 5252acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray setVar(0, LUT); 52689daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 52789daad6bae798779e57f252e9da4fe4e62337124Tim Murray 52889daad6bae798779e57f252e9da4fe4e62337124Tim Murrayvoid ScriptIntrinsicLUT::forEach(sp<Allocation> ain, sp<Allocation> aout) { 529b27b18130d0772203799ba0f2d27783b640dc891Tim Murray if (mDirty) { 530b27b18130d0772203799ba0f2d27783b640dc891Tim Murray LUT->copy1DFrom((void*)mCache); 531b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mDirty = false; 532b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 53310913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(ain->getType()->getElement()->isCompatible(Element::U8_4(mRS))) || 53410913a5c37ba119bef335320d3e8be25212c05adTim Murray !(aout->getType()->getElement()->isCompatible(Element::U8_4(mRS)))) { 53510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for LUT"); 53610913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 53710913a5c37ba119bef335320d3e8be25212c05adTim Murray } 53844bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, ain, aout, nullptr, 0); 53989daad6bae798779e57f252e9da4fe4e62337124Tim Murray 54089daad6bae798779e57f252e9da4fe4e62337124Tim Murray} 54189daad6bae798779e57f252e9da4fe4e62337124Tim Murray 5422acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murrayvoid ScriptIntrinsicLUT::setTable(unsigned int offset, unsigned char base, unsigned int length, unsigned char* lutValues) { 5432acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray if ((base + length) > 256 || length == 0) { 5442acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray mRS->throwError(RS_ERROR_INVALID_PARAMETER, "LUT out of range"); 545b27b18130d0772203799ba0f2d27783b640dc891Tim Murray return; 546b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 547b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mDirty = true; 5482acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murray for (unsigned int i = 0; i < length; i++) { 549b27b18130d0772203799ba0f2d27783b640dc891Tim Murray mCache[offset + base + i] = lutValues[i]; 550b27b18130d0772203799ba0f2d27783b640dc891Tim Murray } 551b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 55289daad6bae798779e57f252e9da4fe4e62337124Tim Murray 5532acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murrayvoid ScriptIntrinsicLUT::setRed(unsigned char base, unsigned int length, unsigned char* lutValues) { 554b27b18130d0772203799ba0f2d27783b640dc891Tim Murray setTable(0, base, length, lutValues); 555b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 556b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 5572acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murrayvoid ScriptIntrinsicLUT::setGreen(unsigned char base, unsigned int length, unsigned char* lutValues) { 558b27b18130d0772203799ba0f2d27783b640dc891Tim Murray setTable(256, base, length, lutValues); 559b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 560b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 5612acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murrayvoid ScriptIntrinsicLUT::setBlue(unsigned char base, unsigned int length, unsigned char* lutValues) { 562b27b18130d0772203799ba0f2d27783b640dc891Tim Murray setTable(512, base, length, lutValues); 563b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 56489daad6bae798779e57f252e9da4fe4e62337124Tim Murray 5652acce99bd7d6bb97d8a4d4778107968aa09d6e02Tim Murrayvoid ScriptIntrinsicLUT::setAlpha(unsigned char base, unsigned int length, unsigned char* lutValues) { 566b27b18130d0772203799ba0f2d27783b640dc891Tim Murray setTable(768, base, length, lutValues); 567b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 568b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 569b27b18130d0772203799ba0f2d27783b640dc891Tim MurrayScriptIntrinsicLUT::~ScriptIntrinsicLUT() { 570b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 571b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 572b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 573e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wangsp<ScriptIntrinsicResize> ScriptIntrinsicResize::create(sp<RS> rs) { 574e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang return new ScriptIntrinsicResize(rs, nullptr); 575e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang} 576e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 577e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao WangScriptIntrinsicResize::ScriptIntrinsicResize(sp<RS> rs, sp<const Element> e) 578e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_RESIZE, e) { 579e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 580e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang} 581e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wangvoid ScriptIntrinsicResize::forEach_bicubic(sp<Allocation> aout) { 582e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang if (aout == mInput) { 583e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang mRS->throwError(RS_ERROR_INVALID_PARAMETER, "Resize Input and Ouput cannot be the same"); 584e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang } 585e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 586e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang if (!(mInput->getType()->getElement()->isCompatible(aout->getType()->getElement()))) { 587e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Resize forEach element mismatch"); 588e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang return; 589e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang } 590e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang Script::forEach(0, nullptr, aout, nullptr, 0); 591e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang} 592e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wangvoid ScriptIntrinsicResize::setInput(sp<Allocation> ain) { 593e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang if (!(ain->getType()->getElement()->isCompatible(Element::U8(mRS))) && 594e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::U8_2(mRS))) && 595e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::U8_3(mRS))) && 596e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::U8_4(mRS))) && 597e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::F32(mRS))) && 598e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::F32_2(mRS))) && 599e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::F32_3(mRS))) && 600e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang !(ain->getType()->getElement()->isCompatible(Element::F32_4(mRS)))) { 601e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for Resize Input"); 602e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang return; 603e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang } 604e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 605e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang mInput = ain; 606e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang Script::setVar(0, ain); 607e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang} 608e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 609e5428e661ce6f9d24f838cab0a8fb0fa8c76dbcaMiao Wang 61021fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murraysp<ScriptIntrinsicYuvToRGB> ScriptIntrinsicYuvToRGB::create(sp<RS> rs, sp<const Element> e) { 61110913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(e->isCompatible(Element::U8_4(rs)))) { 61210913a5c37ba119bef335320d3e8be25212c05adTim Murray rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for YuvToRGB"); 61344bef6fba6244292b751387f3d6c31cca96c28adChris Wailes return nullptr; 61410913a5c37ba119bef335320d3e8be25212c05adTim Murray } 61521fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray return new ScriptIntrinsicYuvToRGB(rs, e); 61621fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray} 61721fa7a0a23eddab88ff261017f6d7a2548b4d89aTim Murray 618b27b18130d0772203799ba0f2d27783b640dc891Tim MurrayScriptIntrinsicYuvToRGB::ScriptIntrinsicYuvToRGB(sp<RS> rs, sp<const Element> e) 619b27b18130d0772203799ba0f2d27783b640dc891Tim Murray : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_YUV_TO_RGB, e) { 620b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 621b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 622b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 623b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayvoid ScriptIntrinsicYuvToRGB::setInput(sp<Allocation> in) { 624eb4426dfb63983559cf903b2ea984569e990c4fdTim Murray if (!(in->getType()->getElement()->isCompatible(Element::YUV(mRS)))) { 62510913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for input in YuvToRGB"); 62610913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 62710913a5c37ba119bef335320d3e8be25212c05adTim Murray } 628b27b18130d0772203799ba0f2d27783b640dc891Tim Murray Script::setVar(0, in); 629b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 630b27b18130d0772203799ba0f2d27783b640dc891Tim Murray 631b27b18130d0772203799ba0f2d27783b640dc891Tim Murrayvoid ScriptIntrinsicYuvToRGB::forEach(sp<Allocation> out) { 63210913a5c37ba119bef335320d3e8be25212c05adTim Murray if (!(out->getType()->getElement()->isCompatible(mElement))) { 63310913a5c37ba119bef335320d3e8be25212c05adTim Murray mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for output in YuvToRGB"); 63410913a5c37ba119bef335320d3e8be25212c05adTim Murray return; 63510913a5c37ba119bef335320d3e8be25212c05adTim Murray } 63610913a5c37ba119bef335320d3e8be25212c05adTim Murray 63744bef6fba6244292b751387f3d6c31cca96c28adChris Wailes Script::forEach(0, nullptr, out, nullptr, 0); 638b27b18130d0772203799ba0f2d27783b640dc891Tim Murray} 639