diff options
| author | Matthieu Delahaye <matthieu@multicorewareinc.com> | 2014-03-04 11:05:49 -0600 |
|---|---|---|
| committer | Matthieu Delahaye <matthieu@multicorewareinc.com> | 2014-03-11 10:22:51 -0500 |
| commit | e4749f3a5a6a6041ef2894162edce5115b307db0 (patch) | |
| tree | 289cb611651fe96fb37adb15beccb11b405de06a /cpp/ScriptIntrinsics.cpp | |
| parent | d41722ce05351cebd6ff498d762f74a4aea6b1be (diff) | |
RS: Add VP9 LoopFilter Intrinsic
Change-Id: Ia49e56c7e21fee1601a0418bd105ef6429c336ca
Diffstat (limited to 'cpp/ScriptIntrinsics.cpp')
| -rw-r--r-- | cpp/ScriptIntrinsics.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cpp/ScriptIntrinsics.cpp b/cpp/ScriptIntrinsics.cpp index f9a1d979..34b2162c 100644 --- a/cpp/ScriptIntrinsics.cpp +++ b/cpp/ScriptIntrinsics.cpp @@ -644,3 +644,48 @@ void ScriptIntrinsicYuvToRGB::forEach(sp<Allocation> out) { Script::forEach(0, NULL, out, NULL, 0); } + +sp<ScriptIntrinsicVP9LoopFilter> ScriptIntrinsicVP9LoopFilter::create(sp<RS> rs, sp<const Element> e) { + if (!(e->isCompatible(Element::U8(rs)))) { + rs->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for Vp9LoopFilter"); + return NULL; + } + return new ScriptIntrinsicVP9LoopFilter(rs, e); +} + +ScriptIntrinsicVP9LoopFilter::ScriptIntrinsicVP9LoopFilter(sp<RS> rs, sp<const Element> e) + : ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_LOOP_FILTER, e) { + sp<const Type> t_pad = Type::create(rs, e, 1, 0, 0); + mPadAlloc = Allocation::createTyped(rs, t_pad, RS_ALLOCATION_MIPMAP_NONE, RS_ALLOCATION_USAGE_SCRIPT, NULL); +} + +void ScriptIntrinsicVP9LoopFilter::setLoopFilterDomain(int start, int stop, int numPlanes, int miRows, int miCols) { + FieldPacker fp(20); + fp.add(start); + fp.add(stop); + fp.add(numPlanes); + fp.add(miRows); + fp.add(miCols); + Script::setVar(0, fp.getData(), fp.getLength()); +} + +void ScriptIntrinsicVP9LoopFilter::setBufferInfo(const BufferInfo *bufInfo) { + Script::setVar(1, bufInfo, sizeof(BufferInfo)); +} + +void ScriptIntrinsicVP9LoopFilter::setLoopFilterInfo(sp<Allocation> lfInfo) { + Script::setVar(2, lfInfo); +} + +void ScriptIntrinsicVP9LoopFilter::setLoopFilterMasks(sp<Allocation> lfMasks) { + Script::setVar(3, lfMasks); +} + +void ScriptIntrinsicVP9LoopFilter::forEach(sp<Allocation> frameBuffer) { + if (!(frameBuffer->getType()->getElement()->isCompatible(mElement))) { + mRS->throwError(RS_ERROR_INVALID_ELEMENT, "Invalid element for input/output in Vp9LoopFilter"); + return; + } + Script::setVar(4, frameBuffer); + Script::forEach(0, mPadAlloc, NULL, NULL, 0); +} |
