Add error handling, move to create methods for intrinsics. Change-Id: I81a0d481fef8b9396c648fdf18aee716a2056612
diff --git a/cpp/rsCppStructs.h b/cpp/rsCppStructs.h index afbff91..f6cb1dd 100644 --- a/cpp/rsCppStructs.h +++ b/cpp/rsCppStructs.h
@@ -44,6 +44,14 @@ class ScriptC; class Sampler; + enum RSError { + RS_SUCCESS = 0, + RS_ERROR_INVALID_PARAMETER = 1, + RS_ERROR_RUNTIME_ERROR = 2, + RS_ERROR_MAX = 9999 + + }; + class RS : public android::RSC::LightRefBase<RS> { public: @@ -58,7 +66,7 @@ void setMessageHandler(MessageHandlerFunc_t func); MessageHandlerFunc_t getMessageHandler() { return mMessageFunc; } - void throwError(const char *err) const; + void throwError(RSError error, const char *errMsg); RsContext getContext() { return mContext; } @@ -82,6 +90,7 @@ RsDevice mDev; RsContext mContext; + RSError mCurrentError; ErrorHandlerFunc_t mErrorFunc; MessageHandlerFunc_t mMessageFunc; @@ -665,15 +674,19 @@ }; class ScriptIntrinsic3DLUT : public ScriptIntrinsic { - public: + private: ScriptIntrinsic3DLUT(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsic3DLUT> create(sp<RS> rs, sp<const Element> e); void forEach(sp<Allocation> ain, sp<Allocation> aout); void setLUT(sp<Allocation> lut); }; class ScriptIntrinsicBlend : public ScriptIntrinsic { - public: + private: ScriptIntrinsicBlend(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicBlend> create(sp<RS> rs, sp<const Element> e); void blendClear(sp<Allocation> in, sp<Allocation> out); void blendSrc(sp<Allocation> in, sp<Allocation> out); void blendDst(sp<Allocation> in, sp<Allocation> out); @@ -692,15 +705,20 @@ }; class ScriptIntrinsicBlur : public ScriptIntrinsic { - public: + private: ScriptIntrinsicBlur(sp<RS> rs, sp<const Element> e); - void blur(sp<Allocation> in, sp<Allocation> out); + public: + static sp<ScriptIntrinsicBlur> create(sp<RS> rs, sp<const Element> e); + void setInput(sp<Allocation> in); + void forEach(sp<Allocation> out); void setRadius(float radius); }; class ScriptIntrinsicColorMatrix : public ScriptIntrinsic { - public: + private: ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicColorMatrix> create(sp<RS> rs, sp<const Element> e); void forEach(sp<Allocation> in, sp<Allocation> out); void setColorMatrix3(float* m); void setColorMatrix4(float* m); @@ -710,24 +728,30 @@ }; class ScriptIntrinsicConvolve3x3 : public ScriptIntrinsic { - public: + private: ScriptIntrinsicConvolve3x3(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicConvolve3x3> create(sp<RS> rs, sp<const Element> e); void setInput(sp<Allocation> in); void forEach(sp<Allocation> out); void setCoefficients(float* v); }; class ScriptIntrinsicConvolve5x5 : public ScriptIntrinsic { - public: + private: ScriptIntrinsicConvolve5x5(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicConvolve5x5> create(sp<RS> rs, sp<const Element> e); void setInput(sp<Allocation> in); void forEach(sp<Allocation> out); void setCoefficients(float* v); }; class ScriptIntrinsicHistogram : public ScriptIntrinsic { - public: + private: ScriptIntrinsicHistogram(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicHistogram> create(sp<RS> rs, sp<const Element> e); void setOutput(sp<Allocation> aout); void setDotCoefficients(float r, float g, float b, float a); void forEach(sp<Allocation> ain); @@ -740,9 +764,10 @@ bool mDirty; unsigned char mCache[1024]; void setTable(unsigned int offset, unsigned char base, unsigned char length, unsigned char* lutValues); + ScriptIntrinsicLUT(sp<RS> rs, sp<const Element> e); public: - ScriptIntrinsicLUT(sp<RS> rs, sp<const Element> e); + static sp<ScriptIntrinsicLUT> create(sp<RS> rs, sp<const Element> e); void forEach(sp<Allocation> ain, sp<Allocation> aout); void setRed(unsigned char base, unsigned char length, unsigned char* lutValues); void setGreen(unsigned char base, unsigned char length, unsigned char* lutValues); @@ -752,8 +777,10 @@ }; class ScriptIntrinsicYuvToRGB : public ScriptIntrinsic { - public: + private: ScriptIntrinsicYuvToRGB(sp<RS> rs, sp<const Element> e); + public: + static sp<ScriptIntrinsicYuvToRGB> create(sp<RS> rs, sp<const Element> e); void setInput(sp<Allocation> in); void forEach(sp<Allocation> out);