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 <wenfeng.guo@amlogic.com>
This commit is contained in:
Wenfeng Guo
2019-05-22 17:10:18 +08:00
committed by Chris KIM
parent b9def26284
commit 7d2b1444d0
3 changed files with 27 additions and 4 deletions

View File

@@ -58,6 +58,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;
@@ -256,6 +257,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];
@@ -270,6 +274,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;
@@ -425,6 +430,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;
@@ -456,8 +472,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;
@@ -476,7 +494,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)
@@ -500,7 +519,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

View File

@@ -118,6 +118,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;

View File

@@ -393,6 +393,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",