mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
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:
committed by
gerrit autosubmit
parent
851a706c1f
commit
a2098a040f
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user