Lines Matching full:ctx
52 static int openFramebufferDevice(hwc_context_t *ctx)
106 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = fb_fd;
108 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].stride = finfo.line_length /(info.xres/8);
109 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres = info.xres;
110 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].yres = info.yres;
111 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xdpi = xdpi;
112 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].ydpi = ydpi;
113 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period = 1000000000l / fps;
120 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].isActive = true;
125 void initContext(hwc_context_t *ctx)
127 memset(&ctx->dpyAttr, 0, sizeof(ctx->dpyAttr));
128 if(openFramebufferDevice(ctx) < 0) {
133 ctx->mOverlay = overlay::Overlay::getInstance();
134 ctx->mRotMgr = new RotMgr();
135 ctx->mMDP.version = qdutils::MDPVersion::getInstance().getMDPVersion();
136 ctx->mMDP.hasOverlay = qdutils::MDPVersion::getInstance().hasOverlay();
137 ctx->mMDP.panel = qdutils::MDPVersion::getInstance().getPanelType();
140 ctx->mOverlay = overlay::Overlay::getInstance();
141 ctx->mRotMgr = new RotMgr();
146 ctx->mFBUpdate[HWC_DISPLAY_PRIMARY] =
147 IFBUpdate::getObject(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres,
158 ctx->mCopyBit[HWC_DISPLAY_PRIMARY] = new CopyBit();
161 ctx->mExtDisplay = new ExternalDisplay(ctx);
164 ctx->mLayerRotMap[i] = new LayerRotMap();
167 ctx->mMDPComp[HWC_DISPLAY_PRIMARY] =
168 MDPComp::getObject(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].xres,
171 MDPComp::init(ctx);
172 ctx->mAD = new AssertiveDisplay();
174 ctx->vstate.enable = false;
175 ctx->vstate.fakevsync = false;
180 sp<IQClient> client = new QClient(ctx);
186 ALOGI("MDP version: %d", ctx->mMDP.version);
189 void closeContext(hwc_context_t *ctx)
191 if(ctx->mOverlay) {
192 delete ctx->mOverlay;
193 ctx->mOverlay = NULL;
196 if(ctx->mRotMgr) {
197 delete ctx->mRotMgr;
198 ctx->mRotMgr = NULL;
202 if(ctx->mCopyBit[i]) {
203 delete ctx->mCopyBit[i];
204 ctx->mCopyBit[i] = NULL;
208 if(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd) {
209 close(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd);
210 ctx->dpyAttr[HWC_DISPLAY_PRIMARY].fd = -1;
213 if(ctx->mExtDisplay) {
214 delete ctx->mExtDisplay;
215 ctx->mExtDisplay = NULL;
219 if(ctx->mFBUpdate[i]) {
220 delete ctx->mFBUpdate[i];
221 ctx->mFBUpdate[i] = NULL;
223 if(ctx->mMDPComp[i]) {
224 delete ctx->mMDPComp[i];
225 ctx->mMDPComp[i] = NULL;
227 if(ctx->mLayerRotMap[i]) {
228 delete ctx->mLayerRotMap[i];
229 ctx->mLayerRotMap[i] = NULL;
233 if(ctx->mAD) {
234 delete ctx->mAD;
235 ctx->mAD = NULL;
249 void getActionSafePosition(hwc_context_t *ctx, int dpy, uint32_t& x,
254 if(ctx->mExtDisplay->isCEUnderscanSupported())
274 float fbWidth = ctx->dpyAttr[dpy].xres;
275 float fbHeight = ctx->dpyAttr[dpy].yres;
303 bool needsScaling(hwc_context_t* ctx, hwc_layer_1_t const* layer,
309 trimLayer(ctx, dpy, layer->transform, sourceCrop, displayFrame);
322 bool isAlphaScaled(hwc_context_t* ctx, hwc_layer_1_t const* layer,
324 if(needsScaling(ctx, layer, dpy) && isAlphaPresent(layer)) {
363 void setListStats(hwc_context_t *ctx,
365 const int prevYuvCount = ctx->listStats[dpy].yuvCount;
366 memset(&ctx->listStats[dpy], 0, sizeof(ListStats));
367 ctx->listStats[dpy].numAppLayers = list->numHwLayers - 1;
368 ctx->listStats[dpy].fbLayerIndex = list->numHwLayers - 1;
369 ctx->listStats[dpy].skipCount = 0;
370 ctx->listStats[dpy].needsAlphaScale = false;
371 ctx->listStats[dpy].preMultipliedAlpha = false;
372 ctx->listStats[dpy].planeAlpha = false;
373 ctx->listStats[dpy].isSecurePresent = false;
374 ctx->listStats[dpy].yuvCount = 0;
376 for (size_t i = 0; i < (size_t)ctx->listStats[dpy].numAppLayers; i++) {
381 if(ctx->listStats[dpy].numAppLayers > MAX_NUM_APP_LAYERS)
385 ctx->listStats[dpy].yuvIndices[i] = -1;
388 ctx->listStats[dpy].isSecurePresent = true;
392 ctx->listStats[dpy].skipCount++;
394 int& yuvCount = ctx->listStats[dpy].yuvCount;
395 ctx->listStats[dpy].yuvIndices[yuvCount] = i;
399 canUseRotator(ctx, dpy)) {
401 ctx->mOverlay->isPipeTypeAttached(OV_MDP_PIPE_DMA)) {
402 ctx->isPaddingRound = true;
408 ctx->listStats[dpy].preMultipliedAlpha = true;
410 ctx->listStats[dpy].planeAlpha = true;
411 if(!ctx->listStats[dpy].needsAlphaScale)
412 ctx->listStats[dpy].needsAlphaScale =
413 isAlphaScaled(ctx, layer, dpy);
415 setYUVProp(ctx->listStats[dpy].yuvCount);
418 if(prevYuvCount != ctx->listStats[dpy].yuvCount) {
419 ctx->mVideoTransFlag = true;
422 ctx->mAD->markDoable(ctx, list);
445 bool isSecuring(hwc_context_t* ctx, hwc_layer_1_t const* layer) {
446 if((ctx->mMDP.version < qdutils::MDSS_V5) &&
447 (ctx->mMDP.version > qdutils::MDP_V3_0) &&
448 ctx->mSecuring) {
453 if (isSecureModePolicy(ctx->mMDP.version)) {
455 if(ctx->mSecureMode) {
605 int hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy,
629 for(uint32_t i = 0; i < ctx->mLayerRotMap[dpy]->getCount(); i++) {
630 int rotFd = ctx->mRotMgr->getRotDevFd();
636 &ctx->mLayerRotMap[dpy]->getLayer(i)->acquireFenceFd;
639 rotData.session_id = ctx->mLayerRotMap[dpy]->getRot(i)->getSessId();
646 close(ctx->mLayerRotMap[dpy]->getLayer(i)->acquireFenceFd);
648 ctx->mLayerRotMap[dpy]->getLayer(i)->acquireFenceFd =
652 ctx->mLayerRotMap[dpy]->getLayer(i)->releaseFenceFd =
688 fbFd = ctx->dpyAttr[dpy].fd;
724 if (ctx->mCopyBit[dpy])
725 ctx->mCopyBit[dpy]->setReleaseFd(releaseFd);
728 ctx->mLayerRotMap[dpy]->setReleaseFd(releaseFd);
738 void trimLayer(hwc_context_t *ctx, const int& dpy, const int& transform,
740 int hw_w = ctx->dpyAttr[dpy].xres;
741 int hw_h = ctx->dpyAttr[dpy].yres;
878 int configureLowRes(hwc_context_t *ctx, hwc_layer_1_t *layer,
885 ctx->mLayerRotMap[dpy]->reset();
906 getActionSafePosition(ctx, dpy, x, y, w, h);
914 if(isYuvBuffer(hnd) && ctx->mMDP.version >= qdutils::MDP_V4_2 &&
915 ctx->mMDP.version < qdutils::MDSS_V5) {
927 trimLayer(ctx, dpy, transform, crop, dst);
931 if(ctx->mAD->prepare(ctx, crop, whf, hnd)) {
938 *rot = ctx->mRotMgr->getNext();
940 BwcPM::setBwc(ctx, crop, dst, transform, mdpFlags);
944 ctx->mOverlay->clear(dpy);
947 ctx->mLayerRotMap[dpy]->add(layer, *rot);
961 if(configMdp(ctx->mOverlay, parg, orient, crop, dst, metadata, dest) < 0) {
963 ctx->mLayerRotMap[dpy]->reset();
969 int configureHighRes(hwc_context_t *ctx, hwc_layer_1_t *layer,
981 int hw_w = ctx->dpyAttr[dpy].xres;
982 int hw_h = ctx->dpyAttr[dpy].yres;
994 trimLayer(ctx, dpy, transform, crop, dst);
998 if(ctx->mAD->prepare(ctx, crop, whf, hnd)) {
1004 (*rot) = ctx->mRotMgr->getNext();
1009 ctx->mOverlay->clear(dpy);
1012 ctx->mLayerRotMap[dpy]->add(layer, *rot);
1024 const int lSplit = getLeftSplit(ctx, dpy);
1070 if(configMdp(ctx->mOverlay, pargL, orient,
1085 if(configMdp(ctx->mOverlay, pargR, orient,
1095 bool canUseRotator(hwc_context_t *ctx, int dpy) {
1097 isSecondaryConnected(ctx)) {
1100 if(ctx->mMDP.version == qdutils::MDP_V3_0_4)
1105 int getLeftSplit(hwc_context_t *ctx, const int& dpy) {
1107 int lSplit = ctx->dpyAttr[dpy].xres / 2;
1116 void setupSecondaryObjs(hwc_context_t *ctx, const int& dpy) {
1118 ctx->mFBUpdate[dpy] =
1119 IFBUpdate::getObject(ctx->dpyAttr[dpy].xres, rSplit, dpy);
1120 ctx->mMDPComp[dpy] = MDPComp::getObject(
1121 ctx->dpyAttr[dpy].xres, rSplit, dpy);
1128 ctx->mCopyBit[dpy] = new CopyBit();
1131 if(ctx->mFBUpdate[dpy])
1132 ctx->mFBUpdate[dpy]->reset();
1133 if(ctx->mMDPComp[dpy])
1134 ctx->mMDPComp[dpy]->reset();
1135 if(ctx->mCopyBit[dpy])
1136 ctx->mCopyBit[dpy]->reset();
1139 void clearSecondaryObjs(hwc_context_t *ctx, const int& dpy) {
1140 if(ctx->mFBUpdate[dpy]) {
1141 delete ctx->mFBUpdate[dpy];
1142 ctx->mFBUpdate[dpy] = NULL;
1144 if(ctx->mCopyBit[dpy]){
1145 delete ctx->mCopyBit[dpy];
1146 ctx->mCopyBit[dpy] = NULL;
1148 if(ctx->mMDPComp[dpy]) {
1149 delete ctx->mMDPComp[dpy];
1150 ctx->mMDPComp[dpy] = NULL;
1154 bool isGLESOnlyComp(hwc_context_t *ctx, const int& dpy) {
1155 if(ctx->mMDPComp[dpy]) {
1156 return (ctx->mMDPComp[dpy]->getMDPCompCount() == 0);
1161 void BwcPM::setBwc(hwc_context_t *ctx, const hwc_rect_t& crop,
1173 if(isSecondaryConnected(ctx)) {