diff --git a/libhwcomposer/hwc_ad.cpp b/libhwcomposer/hwc_ad.cpp index 34c241da..c2ea4ee8 100644 --- a/libhwcomposer/hwc_ad.cpp +++ b/libhwcomposer/hwc_ad.cpp @@ -124,14 +124,28 @@ static int adRead() { return ret; } -AssertiveDisplay::AssertiveDisplay() :mWbFd(-1), mDoable(false), - mFeatureEnabled(false), mDest(overlay::utils::OV_INVALID) { +AssertiveDisplay::AssertiveDisplay(hwc_context_t *ctx) : mWbFd(-1), + mDoable(false), mFeatureEnabled(false), + mDest(overlay::utils::OV_INVALID) { int fd = openWbFb(); if(fd >= 0) { + //Values in ad node: //-1 means feature is disabled on device // 0 means feature exists but turned off, will be turned on by hwc // 1 means feature is turned on by hwc - if(adRead() >= 0) { + // Plus, we do this feature only on split primary displays. + // Plus, we do this feature only if ro.qcom.ad=2 + + char property[PROPERTY_VALUE_MAX]; + const int ENABLED = 2; + int val = 0; + + if(property_get("ro.qcom.ad", property, "0") > 0) { + val = atoi(property); + } + + if(adRead() >= 0 && isDisplaySplit(ctx, HWC_DISPLAY_PRIMARY) && + val == ENABLED) { ALOGD_IF(DEBUG, "Assertive display feature supported"); mFeatureEnabled = true; } diff --git a/libhwcomposer/hwc_ad.h b/libhwcomposer/hwc_ad.h index 38b724d5..c745b157 100644 --- a/libhwcomposer/hwc_ad.h +++ b/libhwcomposer/hwc_ad.h @@ -39,7 +39,7 @@ namespace qhwc { class AssertiveDisplay { public: - AssertiveDisplay(); + AssertiveDisplay(hwc_context_t *ctx); void markDoable(hwc_context_t *ctx, const hwc_display_contents_1_t* list); bool prepare(hwc_context_t *ctx, const hwc_rect_t& crop, const overlay::utils::Whf& whf, diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp index 3e983f38..7ec99c14 100644 --- a/libhwcomposer/hwc_mdpcomp.cpp +++ b/libhwcomposer/hwc_mdpcomp.cpp @@ -1057,13 +1057,6 @@ bool MDPCompNonSplit::draw(hwc_context_t *ctx, hwc_display_contents_1_t* list) { int fd = hnd->fd; uint32_t offset = hnd->offset; - if(ctx->mAD->isModeOn()) { - if(ctx->mAD->draw(ctx, fd, offset)) { - fd = ctx->mAD->getDstFd(ctx); - offset = ctx->mAD->getDstOffset(ctx); - } - } - Rotator *rot = mCurrentFrame.mdpToLayer[mdpIndex].rot; if(rot) { if(!rot->queueBuffer(fd, offset)) diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp index bbed4f61..5ea79b5c 100644 --- a/libhwcomposer/hwc_utils.cpp +++ b/libhwcomposer/hwc_utils.cpp @@ -171,7 +171,7 @@ void initContext(hwc_context_t *ctx) } MDPComp::init(ctx); - ctx->mAD = new AssertiveDisplay(); + ctx->mAD = new AssertiveDisplay(ctx); ctx->vstate.enable = false; ctx->vstate.fakevsync = false; @@ -1250,13 +1250,6 @@ int configureNonSplit(hwc_context_t *ctx, hwc_layer_1_t *layer, setMdpFlags(layer, mdpFlags, downscale, transform); trimLayer(ctx, dpy, transform, crop, dst); - //Will do something only if feature enabled and conditions suitable - //hollow call otherwise - if(ctx->mAD->prepare(ctx, crop, whf, hnd)) { - overlay::Writeback *wb = overlay::Writeback::getInstance(); - whf.format = wb->getOutputFormat(); - } - if(isYuvBuffer(hnd) && //if 90 component or downscale, use rot ((transform & HWC_TRANSFORM_ROT_90) || downscale)) { *rot = ctx->mRotMgr->getNext();