From 32762779e481651d3721221a5cfbcde6d7e0fa44 Mon Sep 17 00:00:00 2001 From: Wenfeng Guo Date: Wed, 22 May 2019 17:10:18 +0800 Subject: [PATCH] di: fix image jitter when play DTV 3 channels [1/1] PD#SWPL-4508 Problem: image jitter when play DTV 3 channels Solution: 1.force entry pulldown22 Verify: tl1 Change-Id: I3d15ec21458fb3a6e3ae0b59910a8f350a3b1d72 Signed-off-by: Wenfeng Guo --- .../media/deinterlace/film_mode_fmw/film_fw1.c | 28 ++++++++++++++++++---- .../deinterlace/film_mode_fmw/film_vof_soft.h | 1 + drivers/amlogic/media/deinterlace/pulldown_drv.c | 2 ++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/drivers/amlogic/media/deinterlace/film_mode_fmw/film_fw1.c b/drivers/amlogic/media/deinterlace/film_mode_fmw/film_fw1.c index 609d08b..e55bd20 100644 --- a/drivers/amlogic/media/deinterlace/film_mode_fmw/film_fw1.c +++ b/drivers/amlogic/media/deinterlace/film_mode_fmw/film_fw1.c @@ -60,6 +60,7 @@ UINT8 FlmVOFSftInt(struct sFlmSftPar *pPar) pPar->flm22_en = 1; pPar->flm32_en = 1; pPar->flm22_flag = 1; + pPar->flm22_avg_flag = 0; pPar->flm2224_flag = 1; pPar->flm22_comlev = 22; pPar->flm22_comlev1 = 8; @@ -262,6 +263,9 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, static int comsumpre; static int nS1pre; int dif01th = 0; + int avg_flag = 0; + int flm22_min = 0; + int flm22_th = 0; int nDIF01[HISDIFNUM]; int nDIF02[HISDIFNUM]; @@ -276,6 +280,7 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, int flm22_flag = pPar->flm22_flag; int flm2224_flag = pPar->flm2224_flag; int flm22_comth = pPar->flm22_comth; + int flm22_avg_flag = pPar->flm22_avg_flag; int comdif = 0; int dif01avg = 0; @@ -431,6 +436,17 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, /* pFMReg->rFlmPstGCm = 0; */ *rFlmPstGCm = 0; *frame_diff_avg = DIF02[HISDIFNUM-1] / (glb_frame_mot_num + 1); + /*-----------------*/ + /*force entry pulldown22 to fix image jitter when play DTV*/ + /*3 channels by vlsi-yanling*/ + flm22_min = nDIF01[HISDIFNUM-1] > nDIF01[HISDIFNUM-2] + ? nDIF01[HISDIFNUM-2] : nDIF01[HISDIFNUM-1]; + flm22_th = flm22_min/2; + avg_flag = abs(nDIF01[HISDIFNUM-1] - nDIF01[HISDIFNUM-2]) > flm22_th + ? 1:0; + avg_flag = (nDIF01[HISDIFNUM-1] > (1<<16) && pRDat.iHeight == 288) + ? avg_flag : 0; + /*-----------------*/ /* rFlmPstGCm = 1; */ if (pRDat.pMod32[HISDETNUM - 1 - mDly] == 3) { nT0 = pRDat.pFlg32[HISDETNUM - 1 - mDly] % 2; @@ -462,8 +478,10 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, flm22_mim_numb = flm22_mim_smfrms; if (pr_pd) - pr_info("diff02-avg=%4d\n", *frame_diff_avg); - if (*frame_diff_avg > flm22_frmdif_max) { + pr_info("diff02-avg=%4d, flm22_min=%4d,flm22_th=%4d, avg_flag=%d\n", + *frame_diff_avg, flm22_min, flm22_th, avg_flag); + if ((*frame_diff_avg > flm22_frmdif_max) + && (avg_flag == 0 || flm22_avg_flag == 1)) { ntmp = *frame_diff_avg - flm22_frmdif_max; if (ntmp > flm22_minus_cntmax) ntmp = flm22_minus_cntmax; @@ -482,7 +500,8 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, if (pr_pd) pr_info("diff01-avg=%4d\n", ntmp); - if (ntmp > flm22_flddif_max) { + if ((ntmp > flm22_flddif_max) + && (avg_flag == 0 || flm22_avg_flag == 1)) { ntmp = ntmp - flm22_flddif_max; if (ntmp > flm22_minus_cntmax) @@ -506,7 +525,8 @@ int FlmVOFSftTop(UINT8 *rCmb32Spcl, unsigned short *rPstCYWnd0, nS1 = 0; else nS1 = nS1 - pPar->flm22_comlev; - } else if (dif01avg > pPar->flm22_dif01_avgth) { + } else if ((dif01avg > pPar->flm22_dif01_avgth) + && (avg_flag == 0)) { if (nS1 < pPar->flm22_comlev) nS1 = 0; else diff --git a/drivers/amlogic/media/deinterlace/film_mode_fmw/film_vof_soft.h b/drivers/amlogic/media/deinterlace/film_mode_fmw/film_vof_soft.h index 0fa9ac8..784f107 100644 --- a/drivers/amlogic/media/deinterlace/film_mode_fmw/film_vof_soft.h +++ b/drivers/amlogic/media/deinterlace/film_mode_fmw/film_vof_soft.h @@ -120,6 +120,7 @@ struct sFlmSftPar { int flm22_en; int flm32_en; int flm22_flag; + int flm22_avg_flag; int flm2224_flag; int flm22_comlev; int flm22_comlev1; diff --git a/drivers/amlogic/media/deinterlace/pulldown_drv.c b/drivers/amlogic/media/deinterlace/pulldown_drv.c index 7ab71aa..5d08f6f 100644 --- a/drivers/amlogic/media/deinterlace/pulldown_drv.c +++ b/drivers/amlogic/media/deinterlace/pulldown_drv.c @@ -394,6 +394,8 @@ static struct pd_param_s pd_params[] = { &(pd_param.flm32_en) }, { "flm22_flag", &(pd_param.flm22_flag) }, + { "flm22_avg_flag", + &(pd_param.flm22_avg_flag)}, { "flm2224_flag", &(pd_param.flm2224_flag) }, { "flm22_comlev", -- 2.7.4