Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db0b1e19 authored by niloc's avatar niloc Committed by Steve Kondik
Browse files

surfaceflinger: Support for user-defined calibration

Change-Id: Ie5649e8b6f4e30d86851cfa968ccffdf1e342016
parent 11ac44a2
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@
#define RENDER_EFFECT_AMBER 4
#define RENDER_EFFECT_SALMON 5
#define RENDER_EFFECT_FUSCIA 6
#define RENDER_EFFECT_N1_CALIBRATED_N 7
#define RENDER_EFFECT_N1_CALIBRATED_R 8
#define RENDER_EFFECT_N1_CALIBRATED_C 9

namespace android {

@@ -381,6 +384,10 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
    GLenum src = mPremultipliedAlpha ? GL_ONE : GL_SRC_ALPHA;

    int renderEffect = mFlinger->getRenderEffect();
    int renderColorR = mFlinger->getRenderColorR();
    int renderColorG = mFlinger->getRenderColorG();
    int renderColorB = mFlinger->getRenderColorB();

    bool noEffect = renderEffect == 0;

    if (UNLIKELY(s.alpha < 0xFF) && noEffect) {
@@ -427,6 +434,15 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
            case RENDER_EFFECT_FUSCIA:
                glColor4x(alpha, 0, alpha*0.5, alpha);
                break;
            case RENDER_EFFECT_N1_CALIBRATED_N:
                glColor4x(alpha*renderColorR/1000, alpha*renderColorG/1000, alpha*renderColorB/1000, alpha);
                break;
            case RENDER_EFFECT_N1_CALIBRATED_R:
                glColor4x(alpha*(renderColorR-50)/1000, alpha*renderColorG/1000, alpha*(renderColorB-30)/1000, alpha);
                break;
            case RENDER_EFFECT_N1_CALIBRATED_C:
                glColor4x(alpha*renderColorR/1000, alpha*renderColorG/1000, alpha*(renderColorB+30)/1000, alpha);
                break;
        }
        glEnable(GL_BLEND);
        glBlendFunc(src, GL_ONE_MINUS_SRC_ALPHA);
+23 −0
Original line number Diff line number Diff line
@@ -86,6 +86,9 @@ SurfaceFlinger::SurfaceFlinger()
        mDebugRegion(0),
        mDebugBackground(0),
        mRenderEffect(0),
        mRenderColorR(0),
	mRenderColorG(0),
	mRenderColorB(0),
        mDebugInSwapBuffers(0),
        mLastSwapBufferTime(0),
        mDebugInTransaction(0),
@@ -112,6 +115,14 @@ void SurfaceFlinger::init()

    LOGI_IF(mDebugRegion,       "showupdates enabled");
    LOGI_IF(mDebugBackground,   "showbackground enabled");

    // default calibration color set (disabled by default)
    property_get("debug.sf.render_color_red", value, "975");
    mRenderColorR = atoi(value);
    property_get("debug.sf.render_color_green", value, "937");
    mRenderColorG = atoi(value);
    property_get("debug.sf.render_color_blue", value, "824");
    mRenderColorB = atoi(value);
}

SurfaceFlinger::~SurfaceFlinger()
@@ -1544,6 +1555,18 @@ status_t SurfaceFlinger::onTransact(
                mRenderEffect = data.readInt32();
                return NO_ERROR;
            }
	    case 1015: { // RENDER_COLOR_RED
		mRenderColorR = data.readInt32();
		return NO_ERROR;
	    }
	    case 1016: { // RENDER_COLOR_GREEN
                mRenderColorG = data.readInt32();
		return NO_ERROR;
	    }
	    case 1017: { // RENDER_COLOR_BLUE
                mRenderColorB = data.readInt32();
		return NO_ERROR;
	    }
            return NO_ERROR;
        }
    }
+6 −0
Original line number Diff line number Diff line
@@ -210,6 +210,9 @@ public:
            overlay_control_device_t* getOverlayEngine() const;

            inline int                  getRenderEffect() const { return mRenderEffect; }
	    inline int			getRenderColorR() const { return mRenderColorR; }
	    inline int			getRenderColorG() const { return mRenderColorG; }
	    inline int			getRenderColorB() const { return mRenderColorB; }

            
    status_t removeLayer(const sp<LayerBase>& layer);
@@ -408,6 +411,9 @@ private:
                int                         mDebugRegion;
                int                         mDebugBackground;
                int                         mRenderEffect;
		int			    mRenderColorR;
		int			    mRenderColorG;
		int			    mRenderColorB;
                volatile nsecs_t            mDebugInSwapBuffers;
                nsecs_t                     mLastSwapBufferTime;
                volatile nsecs_t            mDebugInTransaction;