summaryrefslogtreecommitdiff
authorPengcheng Chen <pengcheng.chen@amlogic.com>2019-10-10 07:29:34 (GMT)
committer Jianxin Pan <jianxin.pan@amlogic.com>2019-10-16 02:59:27 (GMT)
commitfa878fc1f466bc04297370e72a5b0790fc9b306b (patch)
treefa468910a830c5f1999b85e3701e2abcd72807fd
parent2730374b2100df0f34f3713d31efb9bb3c7cd676 (diff)
downloadcommon-fa878fc1f466bc04297370e72a5b0790fc9b306b.zip
common-fa878fc1f466bc04297370e72a5b0790fc9b306b.tar.gz
common-fa878fc1f466bc04297370e72a5b0790fc9b306b.tar.bz2
osd: fix osd source crop issue [1/1]
PD#SWPL-14906 Problem: osd source crop setting error. Solution: if source crop adjust blending out data. Verify: franklin Change-Id: I067642ef6fe435da0c65362abedee49de3f1384d Signed-off-by: Pengcheng Chen <pengcheng.chen@amlogic.com>
Diffstat
-rw-r--r--drivers/amlogic/media/osd/osd.h1
-rw-r--r--drivers/amlogic/media/osd/osd_hw.c11
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/amlogic/media/osd/osd.h b/drivers/amlogic/media/osd/osd.h
index 3e27e49..c379be7 100644
--- a/drivers/amlogic/media/osd/osd.h
+++ b/drivers/amlogic/media/osd/osd.h
@@ -700,6 +700,7 @@ struct hw_para_s {
struct pandata_s cursor_dispdata[HW_OSD_COUNT];
struct dispdata_s src_data[HW_OSD_COUNT];
struct dispdata_s dst_data[HW_OSD_COUNT];
+ u32 src_crop[HW_OSD_COUNT];
u32 buffer_alloc[HW_OSD_COUNT];
u32 gbl_alpha[HW_OSD_COUNT];
u32 color_key[HW_OSD_COUNT];
diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c
index affbc2f..64b73d62 100644
--- a/drivers/amlogic/media/osd/osd_hw.c
+++ b/drivers/amlogic/media/osd/osd_hw.c
@@ -4935,6 +4935,11 @@ static void osd_pan_display_update_info(struct layer_fence_map_s *layer_map)
osd_hw.dst_data[index].y = layer_map->dst_y;
osd_hw.dst_data[index].w = layer_map->dst_w;
osd_hw.dst_data[index].h = layer_map->dst_h;
+ if ((layer_map->fb_height != layer_map->src_h) ||
+ (layer_map->fb_width != layer_map->src_w))
+ osd_hw.src_crop[index] = 1;
+ else
+ osd_hw.src_crop[index] = 0;
if (osd_hw.osd_meson_dev.osd_ver <= OSD_NORMAL) {
osd_hw.free_src_data[index].x_start = layer_map->src_x;
osd_hw.free_src_data[index].y_start = layer_map->src_y;
@@ -8419,6 +8424,12 @@ static void set_blend_reg(struct layer_blend_reg_s *blend_reg)
static void uniformization_fb(u32 index,
struct hw_osd_blending_s *blending)
{
+ if ((index == OSD1) && osd_hw.src_crop[index]) {
+ blending->screen_ratio_w_den =
+ osd_hw.src_data[index].w;
+ blending->screen_ratio_h_den =
+ osd_hw.src_data[index].h;
+ }
blending->dst_data.x = osd_hw.dst_data[index].x *
blending->screen_ratio_w_den /
blending->screen_ratio_w_num;