diff options
| author | Tim Murray <timmurray@google.com> | 2012-10-31 16:03:16 -0700 |
|---|---|---|
| committer | Tim Murray <timmurray@google.com> | 2012-11-05 16:34:59 -0800 |
| commit | 84bf2b877024aaa154b66e0f2338d54bdabd855a (patch) | |
| tree | 64fcf3429697d1d609182a7ae769eb3d89e1f272 /cpp/Element.cpp | |
| parent | c36a74dfcf0c1a9af6b6411aa80f7be31694425c (diff) | |
Move to smart pointers for refcounting RS contexts
Change-Id: I0dc6adc4e02c7427a4234c549d3555a501fe5f90
Diffstat (limited to 'cpp/Element.cpp')
| -rw-r--r-- | cpp/Element.cpp | 79 |
1 files changed, 16 insertions, 63 deletions
diff --git a/cpp/Element.cpp b/cpp/Element.cpp index 2be41660..99b10690 100644 --- a/cpp/Element.cpp +++ b/cpp/Element.cpp @@ -14,14 +14,10 @@ * limitations under the License. */ -#define LOG_TAG "libRS_cpp" - -#include <utils/Log.h> #include <malloc.h> #include <string.h> #include "RenderScript.h" -#include "Element.h" using namespace android; using namespace renderscriptCpp; @@ -67,7 +63,7 @@ uint32_t Element::getSubElementOffsetBytes(uint32_t index) { } -#define CREATE_USER(N, T) sp<const Element> Element::N(RenderScript *rs) { \ +#define CREATE_USER(N, T) sp<const Element> Element::N(sp<RS> rs) { \ return createUser(rs, RS_TYPE_##T); \ } CREATE_USER(BOOLEAN, BOOLEAN); @@ -95,7 +91,7 @@ CREATE_USER(MATRIX_4X4, MATRIX_4X4); CREATE_USER(MATRIX_3X3, MATRIX_3X3); CREATE_USER(MATRIX_2X2, MATRIX_2X2); -#define CREATE_PIXEL(N, T, K) sp<const Element> Element::N(RenderScript *rs) { \ +#define CREATE_PIXEL(N, T, K) sp<const Element> Element::N(sp<RS> rs) { \ return createPixel(rs, RS_TYPE_##T, RS_KIND_##K); \ } CREATE_PIXEL(A_8, UNSIGNED_8, PIXEL_A); @@ -104,13 +100,13 @@ CREATE_PIXEL(RGB_888, UNSIGNED_8, PIXEL_RGB); CREATE_PIXEL(RGBA_4444, UNSIGNED_4_4_4_4, PIXEL_RGBA); CREATE_PIXEL(RGBA_8888, UNSIGNED_8, PIXEL_RGBA); -#define CREATE_VECTOR(N, T) sp<const Element> Element::N##_2(RenderScript *rs) { \ +#define CREATE_VECTOR(N, T) sp<const Element> Element::N##_2(sp<RS> rs) { \ return createVector(rs, RS_TYPE_##T, 2); \ } \ -sp<const Element> Element::N##_3(RenderScript *rs) { \ +sp<const Element> Element::N##_3(sp<RS> rs) { \ return createVector(rs, RS_TYPE_##T, 3); \ } \ -sp<const Element> Element::N##_4(RenderScript *rs) { \ +sp<const Element> Element::N##_4(sp<RS> rs) { \ return createVector(rs, RS_TYPE_##T, 4); \ } CREATE_VECTOR(U8, UNSIGNED_8); @@ -148,8 +144,8 @@ void Element::updateVisibleSubElements() { } } -Element::Element(void *id, RenderScript *rs, - android::Vector<sp</*const*/ Element> > &elements, +Element::Element(void *id, sp<RS> rs, + android::Vector<sp<Element> > &elements, android::Vector<android::String8> &elementNames, android::Vector<uint32_t> &arraySizes) : BaseObj(id, rs) { mSizeBytes = 0; @@ -222,7 +218,7 @@ static uint32_t GetSizeInBytesForType(RsDataType dt) { return 0; } -Element::Element(void *id, RenderScript *rs, +Element::Element(void *id, sp<RS> rs, RsDataType dt, RsDataKind dk, bool norm, uint32_t size) : BaseObj(id, rs) { @@ -247,68 +243,25 @@ Element::Element(void *id, RenderScript *rs, Element::~Element() { } - /* - Element(int id, RenderScript rs) { - super(id, rs); - } - */ - void Element::updateFromNative() { BaseObj::updateFromNative(); -/* - // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements - int[] dataBuffer = new int[5]; - mRS.nElementGetNativeData(getID(), dataBuffer); - - mNormalized = dataBuffer[2] == 1 ? true : false; - mVectorSize = dataBuffer[3]; - mSize = 0; - for (DataType dt: DataType.values()) { - if(dt.mID == dataBuffer[0]){ - mType = dt; - mSize = mType.mSize * mVectorSize; - } - } - for (DataKind dk: DataKind.values()) { - if(dk.mID == dataBuffer[1]){ - mKind = dk; - } - } - - int numSubElements = dataBuffer[4]; - if(numSubElements > 0) { - mElements = new Element[numSubElements]; - mElementNames = new String[numSubElements]; - mArraySizes = new int[numSubElements]; - mOffsetInBytes = new int[numSubElements]; - - int[] subElementIds = new int[numSubElements]; - mRS.nElementGetSubElements(getID(), subElementIds, mElementNames, mArraySizes); - for(int i = 0; i < numSubElements; i ++) { - mElements[i] = new Element(subElementIds[i], mRS); - mElements[i].updateFromNative(); - mOffsetInBytes[i] = mSize; - mSize += mElements[i].mSize * mArraySizes[i]; - } - } - */ updateVisibleSubElements(); } -sp<const Element> Element::createUser(RenderScript *rs, RsDataType dt) { - void * id = rsElementCreate(rs->mContext, dt, RS_KIND_USER, false, 1); +sp<const Element> Element::createUser(sp<RS> rs, RsDataType dt) { + void * id = rsElementCreate(rs->getContext(), dt, RS_KIND_USER, false, 1); return new Element(id, rs, dt, RS_KIND_USER, false, 1); } -sp<const Element> Element::createVector(RenderScript *rs, RsDataType dt, uint32_t size) { +sp<const Element> Element::createVector(sp<RS> rs, RsDataType dt, uint32_t size) { if (size < 2 || size > 4) { rs->throwError("Vector size out of range 2-4."); } - void *id = rsElementCreate(rs->mContext, dt, RS_KIND_USER, false, size); + void *id = rsElementCreate(rs->getContext(), dt, RS_KIND_USER, false, size); return new Element(id, rs, dt, RS_KIND_USER, false, size); } -sp<const Element> Element::createPixel(RenderScript *rs, RsDataType dt, RsDataKind dk) { +sp<const Element> Element::createPixel(sp<RS> rs, RsDataType dt, RsDataKind dk) { if (!(dk == RS_KIND_PIXEL_L || dk == RS_KIND_PIXEL_A || dk == RS_KIND_PIXEL_LA || @@ -355,7 +308,7 @@ sp<const Element> Element::createPixel(RenderScript *rs, RsDataType dt, RsDataKi break; } - void * id = rsElementCreate(rs->mContext, dt, dk, true, size); + void * id = rsElementCreate(rs->getContext(), dt, dk, true, size); return new Element(id, rs, dt, dk, true, size); } @@ -375,7 +328,7 @@ bool Element::isCompatible(sp<const Element>e) { (mVectorSize == e->mVectorSize)); } -Element::Builder::Builder(RenderScript *rs) { +Element::Builder::Builder(sp<RS> rs) { mRS = rs; mSkipPadding = false; } @@ -417,7 +370,7 @@ sp<const Element> Element::Builder::create() { sizeArray[ct] = mElementNames[ct].length(); } - void *id = rsElementCreate2(mRS->mContext, + void *id = rsElementCreate2(mRS->getContext(), (RsElement *)elementArray, fieldCount, nameArray, fieldCount * sizeof(size_t), sizeArray, (const uint32_t *)mArraySizes.array(), fieldCount); |
