From fdb2cb5da871e00878795b021d00206c3213b19e Mon Sep 17 00:00:00 2001 From: pengcheng chen Date: Thu, 29 Nov 2018 14:00:10 +0800 Subject: [PATCH] osd: adjust free_scale_dst if interlaced [1/1] PD#SWPL-2600 Problem: osd display half menu when in 1080i Solution: osd: adjust free_scale_dst if interlaced Verify: verify by p212 Change-Id: Ie9faffbb5942faa317b380ca0cdbee072a30c01f Signed-off-by: pengcheng chen Signed-off-by: Jian Cao --- drivers/amlogic/media/osd/osd_hw.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index 66cd74f..f23fbc1 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -82,6 +82,7 @@ #define OSD_TYPE_BOT_FIELD 1 #define OSD_DISP_DEBUG 1 +#define ENCP_LINE_VSYNC 15 #define ENCP_LINE 16 #define OSD_OLD_HWC (0x01 << 0) #define OSD_OTHER_NEW_HWC (0x01 << 1) @@ -1939,7 +1940,7 @@ int osd_set_scan_mode(u32 index) if ((vinfo->width == 720) && (vinfo->height == 480)) { if (osd_hw.free_scale_mode[index]) { - //osd_hw.field_out_en = 1; + osd_hw.field_out_en = 1; switch (y_end) { case 719: osd_hw.bot_type = 2; @@ -1959,7 +1960,7 @@ int osd_set_scan_mode(u32 index) } else if ((vinfo->width == 720) && (vinfo->height == 576)) { if (osd_hw.free_scale_mode[index]) { - //osd_hw.field_out_en = 1; + osd_hw.field_out_en = 1; switch (y_end) { case 719: osd_hw.bot_type = 2; @@ -1980,7 +1981,7 @@ int osd_set_scan_mode(u32 index) } else if ((vinfo->width == 1920) && (vinfo->height == 1080)) { if (osd_hw.free_scale_mode[index]) { - //osd_hw.field_out_en = 1; + osd_hw.field_out_en = 1; switch (y_end) { case 719: osd_hw.bot_type = 1; @@ -4219,6 +4220,10 @@ static void osd_pan_display_update_info(struct layer_fence_map_s *layer_map) layer_map->dst_x + layer_map->dst_w - 1; osd_hw.free_dst_data[index].y_end = layer_map->dst_y + layer_map->dst_h - 1; + if (osd_hw.field_out_en) { + osd_hw.free_dst_data[index].y_start /= 2; + osd_hw.free_dst_data[index].y_end /= 2; + } } } #if 0 @@ -7340,9 +7345,10 @@ static int osd_setting_order(void) vinfo_height = osd_hw.field_out_en ? (osd_hw.vinfo_height * 2) : osd_hw.vinfo_height; if (line1 >= vinfo_height) { - osd_log_info( - "enter osd_setting_order:cnt=%d,encp line=%d\n", - cnt, line1); + if (osd_hw.osd_display_debug == ENCP_LINE_VSYNC) + osd_log_info( + "enter osd_setting_order:cnt=%d,encp line=%d\n", + cnt, line1); osd_wait_vsync_hw(); line1 = get_enter_encp_line(); } -- 2.7.4