hwc: 8x26: Composition policy when WFD connected
When WFD is connected to 8x26 1) On Video transition, have 1 padding round if external connected. Required to shift pipes across mixers. 2) Request DMA pipe always for FB on WFD. Necessary for rotation + writeback 3) Disable non-worm-hole calcs on external (because of 2) 4) Disable action-safe calcs on external (because of 2) Change-Id: I63b50b2477db443f9ea1d3fa610b59295c9359b7
This commit is contained in:
@@ -88,7 +88,6 @@ static void hwc_registerProcs(struct hwc_composer_device_1* dev,
|
||||
//Helper
|
||||
static void reset(hwc_context_t *ctx, int numDisplays,
|
||||
hwc_display_contents_1_t** displays) {
|
||||
memset(ctx->listStats, 0, sizeof(ctx->listStats));
|
||||
for(int i = 0; i < MAX_DISPLAYS; i++) {
|
||||
hwc_display_contents_1_t *list = displays[i];
|
||||
// XXX:SurfaceFlinger no longer guarantees that this
|
||||
@@ -497,6 +496,7 @@ static int hwc_set(hwc_composer_device_1 *dev,
|
||||
// frames to the display.
|
||||
CALC_FPS();
|
||||
MDPComp::resetIdleFallBack();
|
||||
ctx->mVideoTransFlag = false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -82,8 +82,13 @@ bool FBUpdateLowRes::configure(hwc_context_t *ctx, hwc_display_contents_1 *list,
|
||||
ovutils::Whf info(hnd->width, hnd->height,
|
||||
ovutils::getMdpFormat(hnd->format), hnd->size);
|
||||
|
||||
//Request an RGB pipe
|
||||
ovutils::eDest dest = ov.nextPipe(ovutils::OV_MDP_PIPE_ANY, mDpy);
|
||||
//Request a pipe
|
||||
ovutils::eMdpPipeType type = ovutils::OV_MDP_PIPE_ANY;
|
||||
if(qdutils::MDPVersion::getInstance().is8x26() && mDpy) {
|
||||
//For 8x26 external always use DMA pipe
|
||||
type = ovutils::OV_MDP_PIPE_DMA;
|
||||
}
|
||||
ovutils::eDest dest = ov.nextPipe(type, mDpy);
|
||||
if(dest == ovutils::OV_INVALID) { //None available
|
||||
ALOGE("%s: No pipes available to configure fb for dpy %d",
|
||||
__FUNCTION__, mDpy);
|
||||
@@ -119,15 +124,17 @@ bool FBUpdateLowRes::configure(hwc_context_t *ctx, hwc_display_contents_1 *list,
|
||||
displayFrame = sourceCrop;
|
||||
} else if((!mDpy || (mDpy && !ctx->mExtOrientation))
|
||||
&& extOnlyLayerIndex == -1) {
|
||||
getNonWormholeRegion(list, sourceCrop);
|
||||
displayFrame = sourceCrop;
|
||||
if(!qdutils::MDPVersion::getInstance().is8x26()) {
|
||||
getNonWormholeRegion(list, sourceCrop);
|
||||
displayFrame = sourceCrop;
|
||||
}
|
||||
}
|
||||
ovutils::Dim dpos(displayFrame.left,
|
||||
displayFrame.top,
|
||||
displayFrame.right - displayFrame.left,
|
||||
displayFrame.bottom - displayFrame.top);
|
||||
|
||||
if(mDpy) {
|
||||
if(mDpy && !qdutils::MDPVersion::getInstance().is8x26()) {
|
||||
// Get Aspect Ratio for external
|
||||
getAspectRatioPosition(ctx, mDpy, ctx->mExtOrientation, dpos.x,
|
||||
dpos.y, dpos.w, dpos.h);
|
||||
|
||||
@@ -366,6 +366,13 @@ bool MDPComp::isFrameDoable(hwc_context_t *ctx) {
|
||||
if(!isEnabled()) {
|
||||
ALOGD_IF(isDebug(),"%s: MDP Comp. not enabled.", __FUNCTION__);
|
||||
ret = false;
|
||||
} else if(qdutils::MDPVersion::getInstance().is8x26() &&
|
||||
ctx->mVideoTransFlag &&
|
||||
ctx->mExtDisplay->isExternalConnected()) {
|
||||
//1 Padding round to shift pipes across mixers
|
||||
ALOGD_IF(isDebug(),"%s: MDP Comp. video transition padding round",
|
||||
__FUNCTION__);
|
||||
ret = false;
|
||||
} else if(ctx->mExtDispConfiguring) {
|
||||
ALOGD_IF( isDebug(),"%s: External Display connection is pending",
|
||||
__FUNCTION__);
|
||||
|
||||
@@ -368,7 +368,8 @@ bool isAlphaPresent(hwc_layer_1_t const* layer) {
|
||||
|
||||
void setListStats(hwc_context_t *ctx,
|
||||
const hwc_display_contents_1_t *list, int dpy) {
|
||||
|
||||
const int prevYuvCount = ctx->listStats[dpy].yuvCount;
|
||||
memset(&ctx->listStats[dpy], 0, sizeof(ListStats));
|
||||
ctx->listStats[dpy].numAppLayers = list->numHwLayers - 1;
|
||||
ctx->listStats[dpy].fbLayerIndex = list->numHwLayers - 1;
|
||||
ctx->listStats[dpy].skipCount = 0;
|
||||
@@ -457,6 +458,12 @@ void setListStats(hwc_context_t *ctx,
|
||||
Overlay::setDMAMode(Overlay::DMA_BLOCK_MODE);
|
||||
}
|
||||
}
|
||||
|
||||
//The marking of video begin/end is useful on some targets where we need
|
||||
//to have a padding round to be able to shift pipes across mixers.
|
||||
if(prevYuvCount != ctx->listStats[dpy].yuvCount) {
|
||||
ctx->mVideoTransFlag = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -316,6 +316,8 @@ struct hwc_context_t {
|
||||
bool isPaddingRound;
|
||||
// External Orientation
|
||||
int mExtOrientation;
|
||||
//Flags the transition of a video session
|
||||
bool mVideoTransFlag;
|
||||
};
|
||||
|
||||
namespace qhwc {
|
||||
|
||||
Reference in New Issue
Block a user