hardware/msm7k: Fix aspect ratio in HDMI UI
For portrait mode: Actionsafe width depends on actionsafe height, thus maintaining the aspect ratio. User entered value for actionsafe width doesn't matter. For landscape mode: Both, user entered actionsafe width and height matter. Aspect ratio may change, in an attempt to fill up the TV screen till the edges to avoid overscan/underscan. Picks actionsafe rectangle as the final rectangle. Change-Id: I4e16a2d57978d3443283e9311c2efdc6494f8a94 CRs-fixed: 271567
This commit is contained in:
parent
76595c17bd
commit
f7c6371137
@ -216,10 +216,7 @@ static void *hdmi_ui_loop(void *ptr)
|
||||
int width = pTemp->getFBWidth();
|
||||
int height = pTemp->getFBHeight();
|
||||
int aswidth = width, asheight = height;
|
||||
int final_width = width, final_height = height;
|
||||
int x = 0, y = 0; // Used for calculating normal x,y co-ordinates
|
||||
int x1 = 0, y1 = 0; // Action safe x, y co-ordinates
|
||||
int xx = 0, yy = 0; // Final x, y co-ordinates
|
||||
int asX = 0, asY = 0; // Action safe x, y co-ordinates
|
||||
int fbwidth = m->info.xres, fbheight = m->info.yres;
|
||||
float defaultASWidthRatio = 0.0f, defaultASHeightRatio = 0.0f;
|
||||
if(HEIGHT_1080P == height) {
|
||||
@ -239,8 +236,8 @@ static void *hdmi_ui_loop(void *ptr)
|
||||
|
||||
aswidth = (int)((float)width - (float)(width * asWidthRatio));
|
||||
asheight = (int)((float)height - (float)(height * asHeightRatio));
|
||||
x1 = (int)(width * asWidthRatio) / 2;
|
||||
y1 = (int)(height * asHeightRatio) / 2;
|
||||
asX = (width - aswidth) / 2;
|
||||
asY = (height - asheight) / 2;
|
||||
int rot = m->orientation;
|
||||
if (fbwidth < fbheight) {
|
||||
switch(rot) {
|
||||
@ -248,9 +245,8 @@ static void *hdmi_ui_loop(void *ptr)
|
||||
case 0:
|
||||
// ROT_180
|
||||
case HAL_TRANSFORM_ROT_180: {
|
||||
int tmpWidth = (height * fbwidth) / fbheight;
|
||||
x = (width - tmpWidth) / 2;
|
||||
width = tmpWidth;
|
||||
aswidth = (asheight * fbwidth) / fbheight;
|
||||
asX = (width - aswidth) / 2;
|
||||
if(rot == HAL_TRANSFORM_ROT_180)
|
||||
rot = OVERLAY_TRANSFORM_ROT_180;
|
||||
else
|
||||
@ -285,9 +281,8 @@ static void *hdmi_ui_loop(void *ptr)
|
||||
int t = fbwidth;
|
||||
fbwidth = fbheight;
|
||||
fbheight = t;
|
||||
int tmpWidth = (height * fbwidth) / fbheight;
|
||||
x = (width - tmpWidth) / 2;
|
||||
width = tmpWidth;
|
||||
aswidth = (asheight * fbwidth) / fbheight;
|
||||
asX = (width - aswidth) / 2;
|
||||
if(rot == HAL_TRANSFORM_ROT_90)
|
||||
rot = OVERLAY_TRANSFORM_ROT_270;
|
||||
else
|
||||
@ -296,19 +291,13 @@ static void *hdmi_ui_loop(void *ptr)
|
||||
break;
|
||||
}
|
||||
}
|
||||
pTemp->setParameter(OVERLAY_TRANSFORM,
|
||||
pTemp->setParameter(OVERLAY_TRANSFORM,
|
||||
rot);
|
||||
// Calculate the interection of final destination parameters
|
||||
// Intersection of Action Safe rect and the orig rect will give the final dest rect
|
||||
xx = max(x1, x);
|
||||
yy = max(y1, y);
|
||||
final_width = min((x1+aswidth), (x+width))- xx;
|
||||
final_height = min((y1+asheight), (y+height))- yy;
|
||||
EVEN_OUT(xx);
|
||||
EVEN_OUT(yy);
|
||||
EVEN_OUT(final_width);
|
||||
EVEN_OUT(final_height);
|
||||
pTemp->setPosition(xx, yy, final_width, final_height);
|
||||
EVEN_OUT(asX);
|
||||
EVEN_OUT(asY);
|
||||
EVEN_OUT(aswidth);
|
||||
EVEN_OUT(asheight);
|
||||
pTemp->setPosition(asX, asY, aswidth, asheight);
|
||||
pTemp->queueBuffer(m->currentOffset);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user