Fix ColorMatrix intrinsic.
bug 10427951
Change-Id: Ia633dc7d0a824ab5501602cbb0219e94e49dae61
diff --git a/cpp/ScriptIntrinsics.cpp b/cpp/ScriptIntrinsics.cpp
index 98490c5..e7cdde5 100644
--- a/cpp/ScriptIntrinsics.cpp
+++ b/cpp/ScriptIntrinsics.cpp
@@ -243,12 +243,14 @@
-sp<ScriptIntrinsicColorMatrix> ScriptIntrinsicColorMatrix::create(sp<RS> rs, sp<const Element> e) {
- return new ScriptIntrinsicColorMatrix(rs, e);
+sp<ScriptIntrinsicColorMatrix> ScriptIntrinsicColorMatrix::create(sp<RS> rs) {
+ return new ScriptIntrinsicColorMatrix(rs, Element::RGBA_8888(rs));
}
ScriptIntrinsicColorMatrix::ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e)
: ScriptIntrinsic(rs, RS_SCRIPT_INTRINSIC_ID_COLOR_MATRIX, e) {
+ float add[4] = {0.f, 0.f, 0.f, 0.f};
+ setAdd(add);
}
@@ -285,7 +287,28 @@
}
void ScriptIntrinsicColorMatrix::setColorMatrix3(float* m) {
- Script::setVar(0, (void*)m, sizeof(float) * 9);
+ float temp[16];
+ temp[0] = m[0];
+ temp[1] = m[1];
+ temp[2] = m[2];
+ temp[3] = 0.f;
+
+ temp[4] = m[3];
+ temp[5] = m[4];
+ temp[6] = m[5];
+ temp[7] = 0.f;
+
+ temp[8] = m[6];
+ temp[9] = m[7];
+ temp[10] = m[8];
+ temp[11] = 0.f;
+
+ temp[12] = 0.f;
+ temp[13] = 0.f;
+ temp[14] = 0.f;
+ temp[15] = 1.f;
+
+ setColorMatrix4(temp);
}
@@ -295,19 +318,19 @@
void ScriptIntrinsicColorMatrix::setGreyscale() {
- float matrix[] = {0.299f, 0.587f, 0.114f, 0.299f, 0.587f, 0.114f, 0.299f, 0.587f, 0.114f};
+ float matrix[] = {0.299f, 0.299f, 0.299f,0.587f,0.587f,0.587f,0.114f,0.114f, 0.114f};
setColorMatrix3(matrix);
}
void ScriptIntrinsicColorMatrix::setRGBtoYUV() {
- float matrix[] = {0.299f,0.587f,0.114f,-0.14713f,-0.28886f,0.436f,0.615f,-0.51499f,-0.10001f};
+ float matrix[] = { 0.299f, -0.14713f, 0.615f, 0.587f, -0.28886f, -0.51499f, 0.114f, 0.436f, -0.10001f};
setColorMatrix3(matrix);
}
void ScriptIntrinsicColorMatrix::setYUVtoRGB() {
- float matrix[] = {1.f,0.f,1.13983f,1.f,-0.39465f,-0.5806f,1.f,2.03211f,0.f};
+ float matrix[] = {1.f, 1.f, 1.f, 0.f, -0.39465f, 2.03211f, 1.13983f, -0.5806f, 0.f};
setColorMatrix3(matrix);
}
diff --git a/cpp/rsCppStructs.h b/cpp/rsCppStructs.h
index 66ea50a..3d104eb 100644
--- a/cpp/rsCppStructs.h
+++ b/cpp/rsCppStructs.h
@@ -740,7 +740,7 @@
private:
ScriptIntrinsicColorMatrix(sp<RS> rs, sp<const Element> e);
public:
- static sp<ScriptIntrinsicColorMatrix> create(sp<RS> rs, sp<const Element> e);
+ static sp<ScriptIntrinsicColorMatrix> create(sp<RS> rs);
void forEach(sp<Allocation> in, sp<Allocation> out);
void setAdd(float* add);
void setColorMatrix3(float* m);