hwc_fbupdate.cpp revision 5c937230915bced21130a3e5d129c4f470fd74d3
1ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed/* 2ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Copyright (C) 2010 The Android Open Source Project 3bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * Copyright (C) 2012, The Linux Foundation. All rights reserved. 4ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 5ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Not a Contribution, Apache license notifications and license are 6ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * retained for attribution purposes only. 7ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 8ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 9ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * you may not use this file except in compliance with the License. 10ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * You may obtain a copy of the License at 11ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 12ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 13ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * 14ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 15ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 16ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * See the License for the specific language governing permissions and 18ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed * limitations under the License. 19ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed */ 20ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 21640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah#define DEBUG_FBUPDATE 0 221589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#include <gralloc_priv.h> 2347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed#include "hwc_fbupdate.h" 245c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N#include "hwc_video.h" 25ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 26ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmednamespace qhwc { 27ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 2847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmednamespace ovutils = overlay::utils; 29ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 30640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh ShahIFBUpdate* IFBUpdate::getObject(const int& width, const int& dpy) { 31640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(width > MAX_DISPLAY_DIM) { 32640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return new FBUpdateHighRes(dpy); 33640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 34640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return new FBUpdateLowRes(dpy); 35640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 36640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 37640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shahinline void IFBUpdate::reset() { 38640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mModeOn = false; 39640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 40640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 41640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah//================= Low res==================================== 42640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh ShahFBUpdateLowRes::FBUpdateLowRes(const int& dpy): IFBUpdate(dpy) {} 4347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 44640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shahinline void FBUpdateLowRes::reset() { 45640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah IFBUpdate::reset(); 46640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDest = ovutils::OV_INVALID; 47bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah} 48ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 4904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateLowRes::prepare(hwc_context_t *ctx, hwc_display_contents_1 *list) 5004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed{ 51b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed if(!ctx->mMDP.hasOverlay) { 52640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGD_IF(DEBUG_FBUPDATE, "%s, this hw doesnt support overlays", 532e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah __FUNCTION__); 54080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed return false; 55080cfcaf2e972513fc09a0207d034ef5dcc975d8Naseer Ahmed } 5604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed mModeOn = configure(ctx, list); 57640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGD_IF(DEBUG_FBUPDATE, "%s, mModeOn = %d", __FUNCTION__, mModeOn); 58640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return mModeOn; 59ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed} 60ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 61ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed// Configure 6204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateLowRes::configure(hwc_context_t *ctx, 6304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_display_contents_1 *list) 64ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed{ 6547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed bool ret = false; 6604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_layer_1_t *layer = &list->hwLayers[list->numHwLayers - 1]; 6747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed if (LIKELY(ctx->mOverlay)) { 6847377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed overlay::Overlay& ov = *(ctx->mOverlay); 6976443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah private_handle_t *hnd = (private_handle_t *)layer->handle; 708cc5d853c3125df5867ce35a10d7a01dd51d48c6Saurabh Shah if (!hnd) { 718cc5d853c3125df5867ce35a10d7a01dd51d48c6Saurabh Shah ALOGE("%s:NULL private handle for layer!", __FUNCTION__); 728cc5d853c3125df5867ce35a10d7a01dd51d48c6Saurabh Shah return false; 738cc5d853c3125df5867ce35a10d7a01dd51d48c6Saurabh Shah } 74327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ovutils::Whf info(hnd->width, hnd->height, 75327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ovutils::getMdpFormat(hnd->format), hnd->size); 7647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 7747377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed //Request an RGB pipe 78640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest dest = ov.nextPipe(ovutils::OV_MDP_PIPE_RGB, mDpy); 7947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed if(dest == ovutils::OV_INVALID) { //None available 8047377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return false; 8147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed } 8247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed 83640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDest = dest; 8476443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah 8576443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ovutils::eMdpFlags mdpFlags = ovutils::OV_MDP_FLAGS_NONE; 865c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N // If any of the layers has pre-multiplied alpha, set Pre multiplied 875c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N // Flag as the compositied output is alpha pre-multiplied. 885c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N if(ctx->listStats[mDpy].preMultipliedAlpha == true) 895c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::setMdpFlags(mdpFlags, ovutils::OV_MDP_BLEND_FG_PREMULT); 905c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N 915c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::eZorder z_order = 925c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ctx->mVidOv[mDpy]->isModeOn()?ovutils::ZORDER_1:ovutils::ZORDER_0; 935c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::eIsFg is_fg = 945c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ctx->mVidOv[mDpy]->isModeOn()? ovutils::IS_FG_OFF:ovutils::IS_FG_SET; 95ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 9676443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ovutils::PipeArgs parg(mdpFlags, 9776443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah info, 985c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N z_order, 995c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N is_fg, 1008b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan ovutils::ROT_FLAGS_NONE); 10147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed ov.setSource(parg, dest); 10276443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah 10304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_rect_t sourceCrop; 10404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed getNonWormholeRegion(list, sourceCrop); 10576443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah // x,y,w,h 10676443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ovutils::Dim dcrop(sourceCrop.left, sourceCrop.top, 1072e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah sourceCrop.right - sourceCrop.left, 1082e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah sourceCrop.bottom - sourceCrop.top); 10976443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ov.setCrop(dcrop, dest); 1102e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah 11176443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah int transform = layer->transform; 11276443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ovutils::eTransform orient = 11376443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah static_cast<ovutils::eTransform>(transform); 11476443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ov.setTransform(orient, dest); 115ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 11604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_rect_t displayFrame = sourceCrop; 11776443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ovutils::Dim dpos(displayFrame.left, 1182e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah displayFrame.top, 1192e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah displayFrame.right - displayFrame.left, 1202e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah displayFrame.bottom - displayFrame.top); 1210ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R // Calculate the actionsafe dimensions for External(dpy = 1 or 2) 1220ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R if(mDpy) 1230ae34e340382b0b3b767b844305db19e91257eddArun Kumar K.R getActionSafePosition(ctx, mDpy, dpos.x, dpos.y, dpos.w, dpos.h); 12476443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ov.setPosition(dpos, dest); 1252e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah 12647377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed ret = true; 12776443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah if (!ov.commit(dest)) { 12876443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah ALOGE("%s: commit fails", __FUNCTION__); 12947377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed ret = false; 130ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed } 131ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed } 13247377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed return ret; 133ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed} 134ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 13504a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateLowRes::draw(hwc_context_t *ctx, private_handle_t *hnd) 136ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed{ 137640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(!mModeOn) { 138ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed return true; 139ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed } 140ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed bool ret = true; 14147377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed overlay::Overlay& ov = *(ctx->mOverlay); 142640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest dest = mDest; 14347377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed if (!ov.queueBuffer(hnd->fd, hnd->offset, dest)) { 1449513fc6f6c9a7eb26a57838c6bbe95ecd29a7ca5Amara Venkata Mastan Manoj Kumar ALOGE("%s: queueBuffer failed for FBUpdate", __FUNCTION__); 14547377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed ret = false; 146ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed } 147ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed return ret; 148ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed} 149ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed 150640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah//================= High res==================================== 151640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh ShahFBUpdateHighRes::FBUpdateHighRes(const int& dpy): IFBUpdate(dpy) {} 152640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 153640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shahinline void FBUpdateHighRes::reset() { 154640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah IFBUpdate::reset(); 155640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDestLeft = ovutils::OV_INVALID; 156640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDestRight = ovutils::OV_INVALID; 157640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 158640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 15904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateHighRes::prepare(hwc_context_t *ctx, hwc_display_contents_1 *list) 16004a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed{ 161640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(!ctx->mMDP.hasOverlay) { 162640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGD_IF(DEBUG_FBUPDATE, "%s, this hw doesnt support overlays", 163640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah __FUNCTION__); 164640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return false; 165640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 166640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGD_IF(DEBUG_FBUPDATE, "%s, mModeOn = %d", __FUNCTION__, mModeOn); 16704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed mModeOn = configure(ctx, list); 168640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return mModeOn; 169640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 170640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 171640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah// Configure 17204a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateHighRes::configure(hwc_context_t *ctx, 17304a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_display_contents_1 *list) 174640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah{ 175640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah bool ret = false; 17604a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_layer_1_t *layer = &list->hwLayers[list->numHwLayers - 1]; 177640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (LIKELY(ctx->mOverlay)) { 178640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah overlay::Overlay& ov = *(ctx->mOverlay); 179640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah private_handle_t *hnd = (private_handle_t *)layer->handle; 180640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (!hnd) { 181640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGE("%s:NULL private handle for layer!", __FUNCTION__); 182640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return false; 183640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 184327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ovutils::Whf info(hnd->width, hnd->height, 185327b2ba85538669304a50d0fb6cc2f6aab7aaf3bSaurabh Shah ovutils::getMdpFormat(hnd->format), hnd->size); 186640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 187640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah //Request left RGB pipe 188640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest destL = ov.nextPipe(ovutils::OV_MDP_PIPE_RGB, mDpy); 189640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(destL == ovutils::OV_INVALID) { //None available 190640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return false; 191640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 192640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah //Request right RGB pipe 193640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest destR = ov.nextPipe(ovutils::OV_MDP_PIPE_RGB, mDpy); 194640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(destR == ovutils::OV_INVALID) { //None available 195640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return false; 196640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 197640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 198640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDestLeft = destL; 199640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah mDestRight = destR; 200640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 201640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eMdpFlags mdpFlagsL = ovutils::OV_MDP_FLAGS_NONE; 2025c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N //If any layer has pre-multiplied alpha, set Pre multiplied 2035c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N //Flag as the compositied output is alpha pre-multiplied. 2045c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N if(ctx->listStats[mDpy].preMultipliedAlpha == true) 2055c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::setMdpFlags(mdpFlagsL, ovutils::OV_MDP_BLEND_FG_PREMULT); 2065c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N 2075c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::eZorder z_order = 2085c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ctx->mVidOv[mDpy]->isModeOn()?ovutils::ZORDER_1:ovutils::ZORDER_0; 2095c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ovutils::eIsFg is_fg = 2105c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N ctx->mVidOv[mDpy]->isModeOn()? ovutils::IS_FG_OFF:ovutils::IS_FG_SET; 211640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 212640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::PipeArgs pargL(mdpFlagsL, 213640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah info, 2145c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N z_order, 2155c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N is_fg, 2168b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan ovutils::ROT_FLAGS_NONE); 217640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setSource(pargL, destL); 218640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 219640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eMdpFlags mdpFlagsR = mdpFlagsL; 220640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::setMdpFlags(mdpFlagsR, ovutils::OV_MDSS_MDP_RIGHT_MIXER); 221640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::PipeArgs pargR(mdpFlagsR, 222640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah info, 2235c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N z_order, 2245c937230915bced21130a3e5d129c4f470fd74d3Sravan Kumar D.V.N is_fg, 2258b2d50f3c665329517352269a687bdf562b2cc6dRamkumar Radhakrishnan ovutils::ROT_FLAGS_NONE); 226640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setSource(pargR, destR); 227640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 22804a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_rect_t sourceCrop; 22904a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed getNonWormholeRegion(list, sourceCrop); 230640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::Dim dcropL(sourceCrop.left, sourceCrop.top, 231640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah (sourceCrop.right - sourceCrop.left) / 2, 232640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah sourceCrop.bottom - sourceCrop.top); 233640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::Dim dcropR( 234640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah sourceCrop.left + (sourceCrop.right - sourceCrop.left) / 2, 235640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah sourceCrop.top, 236640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah (sourceCrop.right - sourceCrop.left) / 2, 237640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah sourceCrop.bottom - sourceCrop.top); 238640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setCrop(dcropL, destL); 239640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setCrop(dcropR, destR); 240640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 241640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah int transform = layer->transform; 242640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eTransform orient = 243640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah static_cast<ovutils::eTransform>(transform); 244640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setTransform(orient, destL); 245640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ov.setTransform(orient, destR); 246640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 24704a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmed hwc_rect_t displayFrame = sourceCrop; 248640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah //For FB left, top will always be 0 249640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah //That should also be the case if using 2 mixers for single display 25093f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R ovutils::Dim dposL(displayFrame.left, 25193f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R displayFrame.top, 25293f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R (displayFrame.right - displayFrame.left) / 2, 25393f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R displayFrame.bottom - displayFrame.top); 25493f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R ov.setPosition(dposL, destL); 25593f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R ovutils::Dim dposR(0, 256640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah displayFrame.top, 257640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah (displayFrame.right - displayFrame.left) / 2, 258640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah displayFrame.bottom - displayFrame.top); 25993f93515d4b36db7ddb56da15563e3ea6e7ce18cArun Kumar K.R ov.setPosition(dposR, destR); 260640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 261640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ret = true; 262640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (!ov.commit(destL)) { 263640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGE("%s: commit fails for left", __FUNCTION__); 264640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ret = false; 265640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 266640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (!ov.commit(destR)) { 267640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGE("%s: commit fails for right", __FUNCTION__); 268640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ret = false; 269640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 270640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 271640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return ret; 272640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 273640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 27404a2afbd65e9f8bc580a637bf44bfc4e627edce0Naseer Ahmedbool FBUpdateHighRes::draw(hwc_context_t *ctx, private_handle_t *hnd) 275640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah{ 276640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if(!mModeOn) { 277640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return true; 278640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 279640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah bool ret = true; 280640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah overlay::Overlay& ov = *(ctx->mOverlay); 281640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest destL = mDestLeft; 282640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ovutils::eDest destR = mDestRight; 283640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (!ov.queueBuffer(hnd->fd, hnd->offset, destL)) { 284640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGE("%s: queue failed for left of dpy = %d", 285640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah __FUNCTION__, mDpy); 286640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ret = false; 287640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 288640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah if (!ov.queueBuffer(hnd->fd, hnd->offset, destR)) { 289640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ALOGE("%s: queue failed for right of dpy = %d", 290640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah __FUNCTION__, mDpy); 291640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah ret = false; 292640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah } 293640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah return ret; 294640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah} 295640cb9421639c13248aeb30c3496cdfaec6d894cSaurabh Shah 296ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed//--------------------------------------------------------------------- 297ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed}; //namespace qhwc 298