mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
msm_fb: display: Program source address registers correctly
Scale filter FIR uses the adjacent pixels as part of the processing. Source address registers should be program such that they point to the first valid pixel so that non-ROI pixels are ignored. This is done by making source x,y offsets to zero and adding the computed offset to source address. CRs-Fixed: 380020 Change-Id: I998fdd46f39dc67f32c422ec209da59d1add2e95 Signed-off-by: Mayank Chopra <makchopra@codeaurora.org> Conflicts: drivers/video/msm/mdp4_overlay.c Signed-off-by: Mayank Chopra <makchopra@codeaurora.org>
This commit is contained in:
parent
c9dc717102
commit
8eb221e7d3
1 changed files with 26 additions and 9 deletions
|
@ -785,36 +785,52 @@ static void mdp4_overlay_vg_get_src_offset(struct mdp4_overlay_pipe *pipe,
|
|||
*luma_off = 0;
|
||||
*chroma_off = 0;
|
||||
|
||||
if (pipe->src_x && (pipe->frame_format ==
|
||||
if ((pipe->src_x || pipe->src_y) && (pipe->frame_format ==
|
||||
MDP4_FRAME_FORMAT_LINEAR)) {
|
||||
src_xy = (pipe->src_y << 16) | pipe->src_x;
|
||||
src_xy &= 0xffff0000;
|
||||
src_xy = 0;
|
||||
outpdw(vg_base + 0x0004, src_xy); /* MDP_RGB_SRC_XY */
|
||||
|
||||
switch (pipe->src_format) {
|
||||
case MDP_Y_CR_CB_H2V2:
|
||||
case MDP_Y_CR_CB_GH2V2:
|
||||
case MDP_Y_CB_CR_H2V2:
|
||||
*luma_off = pipe->src_x;
|
||||
*chroma_off = pipe->src_x/2;
|
||||
*luma_off = pipe->src_x +
|
||||
(pipe->src_y * pipe->srcp0_ystride);
|
||||
*chroma_off = pipe->src_x / 2 +
|
||||
((pipe->src_y / 2) * pipe->srcp1_ystride);
|
||||
break;
|
||||
|
||||
case MDP_Y_CBCR_H2V2_TILE:
|
||||
case MDP_Y_CRCB_H2V2_TILE:
|
||||
case MDP_Y_CBCR_H2V2:
|
||||
case MDP_Y_CRCB_H2V2:
|
||||
*luma_off = pipe->src_x +
|
||||
(pipe->src_y * pipe->srcp0_ystride);
|
||||
*chroma_off = pipe->src_x +
|
||||
((pipe->src_y / 2) * pipe->srcp1_ystride);
|
||||
break;
|
||||
|
||||
case MDP_Y_CRCB_H1V1:
|
||||
case MDP_Y_CBCR_H1V1:
|
||||
*luma_off = pipe->src_x +
|
||||
(pipe->src_y * pipe->srcp0_ystride);
|
||||
*chroma_off = pipe->src_x +
|
||||
((pipe->src_y * 2) * pipe->srcp1_ystride);
|
||||
break;
|
||||
|
||||
case MDP_Y_CRCB_H2V1:
|
||||
case MDP_Y_CBCR_H2V1:
|
||||
*luma_off = pipe->src_x;
|
||||
*chroma_off = pipe->src_x;
|
||||
*luma_off = pipe->src_x +
|
||||
(pipe->src_y * pipe->srcp0_ystride);
|
||||
*chroma_off = pipe->src_x +
|
||||
(pipe->src_y * pipe->srcp1_ystride);
|
||||
break;
|
||||
|
||||
case MDP_YCRYCB_H2V1:
|
||||
if (pipe->src_x & 0x1)
|
||||
pipe->src_x += 1;
|
||||
*luma_off += pipe->src_x * 2;
|
||||
*luma_off += pipe->src_x * 2 +
|
||||
((pipe->src_y * 2) * pipe->srcp0_ystride);
|
||||
break;
|
||||
|
||||
case MDP_ARGB_8888:
|
||||
|
@ -827,7 +843,8 @@ static void mdp4_overlay_vg_get_src_offset(struct mdp4_overlay_pipe *pipe,
|
|||
case MDP_RGB_888:
|
||||
case MDP_YCBCR_H1V1:
|
||||
case MDP_YCRCB_H1V1:
|
||||
*luma_off = pipe->src_x * pipe->bpp;
|
||||
*luma_off = (pipe->src_x * pipe->bpp) +
|
||||
(pipe->src_y * pipe->srcp0_ystride);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue