vpp: improve 4k downscaler case when vskip=1 for s7d [1/1]

PD#SWPL-165200

Problem:
downscaler display abnormal when dv enable

Solution:
1.improve 4k downscaler case when vskip=1 for s7d
2.when dv enable, set axi_rps_ratio = 106 otherwise 100

Verify:
s7d

Change-Id: I64f6b5d18ce4ae2c9cd5915197298a46bba5d9cb
Signed-off-by: Pengcheng Chen <pengcheng.chen@amlogic.com>
This commit is contained in:
Pengcheng Chen
2024-04-15 17:40:49 +08:00
committed by gerrit autosubmit
parent 851a706c1f
commit a2098a040f
3 changed files with 25 additions and 2 deletions
+1
View File
@@ -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 =
+1
View File
@@ -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
+23 -2
View File
@@ -58,6 +58,10 @@
#include <linux/amlogic/media/vpu/vpu.h>
#include "videolog.h"
#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION
#include <linux/amlogic/media/amdolbyvision/dolby_vision.h>
#include "../enhancement/amdolby_vision/amdv_uevent.h"
#endif
#include <linux/amlogic/media/video_sink/vpp.h>
#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)