diff --git a/drivers/media/video_sink/video_hw.c b/drivers/media/video_sink/video_hw.c index 53908b3b5..ebd6ff062 100644 --- a/drivers/media/video_sink/video_hw.c +++ b/drivers/media/video_sink/video_hw.c @@ -5994,6 +5994,7 @@ s32 config_vd_pps_internal(struct video_layer_s *layer, setting->vsr.vsr_top.vsize_in = src_h; setting->vsr.vsr_top.hsize_out = dst_w; setting->vsr.vsr_top.vsize_out = dst_h; + setting->vsr.vsr_top.vskip_cnt = cur_frame_par->vscale_skip_count; /* todo for pc mode 444 other 422 */ if (layer->dispbuf) setting->vsr.vsr_top.input_422_en = diff --git a/drivers/media/video_sink/video_priv.h b/drivers/media/video_sink/video_priv.h index 912fbfc78..81a67f5a5 100644 --- a/drivers/media/video_sink/video_priv.h +++ b/drivers/media/video_sink/video_priv.h @@ -353,6 +353,7 @@ struct mif_pos_s { }; struct vsr_top_setting_s { + u32 vskip_cnt; u32 hsize_in; //13 bits source pic hsize u32 vsize_in; //13 bits source pic vsize u32 hsize_out; //13 bits source pic hsize diff --git a/drivers/media/video_sink/video_safa.c b/drivers/media/video_sink/video_safa.c index 9d2c20fdf..d541ffa86 100644 --- a/drivers/media/video_sink/video_safa.c +++ b/drivers/media/video_sink/video_safa.c @@ -58,6 +58,10 @@ #include #include "videolog.h" +#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION +#include +#include "../enhancement/amdolby_vision/amdv_uevent.h" +#endif #include #ifdef CONFIG_AMLOGIC_MEDIA_VSYNC_RDMA #include "../common/rdma/rdma.h" @@ -82,6 +86,10 @@ static unsigned int g_preh_rate = 0xff; module_param(g_preh_rate, uint, 0664); MODULE_PARM_DESC(g_preh_rate, "g_preh_rate"); +static unsigned int g_axi_rps_ratio = 0xff; +module_param(g_axi_rps_ratio, uint, 0664); +MODULE_PARM_DESC(g_axi_rps_ratio, "g_axi_rps_ratio"); + struct pi_reg_s { u32 pi_dic_num; u32 pi_out_scl_mode; @@ -492,7 +500,7 @@ static u32 safa_speed_up_handle(struct vsr_setting_s *vsr) bool performance_skip = true, performance_hit = false; u32 display_active_hsize = 3840, display_active_vsize = 2160; u32 display_total_hsize = 4400; - u32 axi_rps_ratio = 1, mux_in_vsize = 0; + u32 axi_rps_ratio = 100, mux_in_vsize = 0; u32 input_time = 0, display_time = 0; u32 clk_in_pps = vpu_clk_get(); @@ -506,6 +514,17 @@ static u32 safa_speed_up_handle(struct vsr_setting_s *vsr) display_active_vsize = vinfo->height; display_total_hsize = vinfo->htotal; + if (vsr->vsr_top.vskip_cnt) { + vsize_in = (vsize_in << vsr->vsr_top.vskip_cnt) * 9 / 10; + if (debug_common_flag & DEBUG_FLAG_COMMON_SAFA) + pr_info("%s vsize in adjust :vskip_cnt=%d, vsize_in=%d\n", + __func__, + vsr->vsr_top.vskip_cnt, + vsize_in); + } + + if (is_amdv_enable()) + axi_rps_ratio = 106; if (vsize_out > vsize_in) mux_in_vsize = vsize_out; else @@ -520,8 +539,10 @@ static u32 safa_speed_up_handle(struct vsr_setting_s *vsr) pr_info("input_time=%d, clk_in_pps=%d, display_active_hsize=%d, display_total_hsize=%d\n", input_time, clk_in_pps, display_active_hsize, display_total_hsize); + if (g_axi_rps_ratio != 0xff) + axi_rps_ratio = g_axi_rps_ratio; - input_time = (input_time / clk_in_pps) * 10 * axi_rps_ratio; + input_time = (input_time / clk_in_pps) * axi_rps_ratio / 10; display_time = (display_total_hsize * vsize_out * 100 / 594 * 10); if (debug_common_flag & DEBUG_FLAG_COMMON_SAFA)