示例#1
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
static MDIN_ERROR_t MDIN3xx_ScaleDownProgNR(PMDIN_VIDEO_INFO pINFO, BOOL OnOff)
{
	PMDIN_SRCVIDEO_INFO pSRC = (PMDIN_SRCVIDEO_INFO)&pINFO->stSRC_m;
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;
	WORD nID = (pSRC->stATTB.attb&MDIN_USE_INPORT_A)? 1 : 0;


	if (OnOff==0||(pIPC->attb&MDIN_DEINT_IPC_PROC)) return MDIN_NO_ERROR;
	if ((pIPC->attb&MDIN_DEINT_DN_SCALE)==0) return MDIN_NO_ERROR;

	// because of getting field_id toggle
	// nr_t_en, deinterlace_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x205, 0, 1, 1)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x205, 4, 1, 1)) return MDIN_I2C_ERROR;

	// fieldid_bypass, progressive
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x001, 2+nID,   1, 1)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x002, 8-nID*8, 1, 0)) return MDIN_I2C_ERROR;
	
	// out dark screen
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x43, 1, 1, 1)) return MDIN_I2C_ERROR;

	// in_test_ptrn
	if (MDINHIF_RegWrite(MDIN_LOCAL_ID, 0x042, 0x0084)) return MDIN_I2C_ERROR;

	MDINDLY_mSec(100);		// delay 100ms

	// restore deinterlace_en, progressive, in_test_ptrn
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x205, 4, 1, 0)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x002, 8-nID*8, 1, 1)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegWrite(MDIN_LOCAL_ID, 0x042, 0x0000)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x43, 1, 1, 0)) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}
示例#2
0
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDINPCI_MMAPRead(BYTE nID, DWORD rAddr, PBYTE pBuff, DWORD bytes)
{
	if (nID!=MDIN_SDRAM_ID) return MDIN_INVALID_PARAM;

	if (MDINHIF_RegField(MDIN_HOST_ID,  0x006,  14,  2,  3)) return MDIN_I2C_ERROR;
	if (MDIN3xx_SetPriorityHIF(MDIN_PRIORITY_HIGH)) return MDIN_I2C_ERROR;

	memcpy(pBuff, (PBYTE)rAddr, bytes);

	if (MDIN3xx_SetPriorityHIF(MDIN_PRIORITY_NORM)) return MDIN_I2C_ERROR;

#if	CPU_ALIGN_BIG_ENDIAN == 1
	if (MDINHIF_RegField(MDIN_HOST_ID,  0x006,  14,  2,  1)) return MDIN_I2C_ERROR;
#endif

	return MDIN_NO_ERROR;
}
示例#3
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_SetDeintMode(PMDIN_VIDEO_INFO pINFO, MDIN_DEINT_MODE_t mode)
{
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;

//	pIPC->mode = (pIPC->attb&MDIN_DEINT_IPC_PROC)? mode : MDIN_DEINT_NONSTILL;
	pIPC->mode = mode; if ((pIPC->attb&MDIN_DEINT_IPC_PROC)==0) mode = MDIN_DEINT_NONSTILL;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x210, 12, 2, mode)) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}
示例#4
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_EnableDeintCCS(PMDIN_VIDEO_INFO pINFO, BOOL OnOff)
{
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;
	BOOL pal = (pIPC->attb&MDIN_DEINT_PAL_CCS)? 1 : 0;

	if (OnOff)	pIPC->fine |=  MDIN_DEINT_CCS_ON;
	else		pIPC->fine &= ~MDIN_DEINT_CCS_ON;

	// if progressive input, ccs_en = off
	if ((pIPC->attb&MDIN_DEINT_IPC_PROC)==0) OnOff = OFF;

	// if 1080i input, ccs_en = off
	if (pIPC->attb&MDIN_DEINT_HD_1080i) OnOff = OFF;

	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x248, 14, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x205, 5, 1, MBIT(OnOff,pal))) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}
示例#5
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_SetDeintFilm(PMDIN_VIDEO_INFO pINFO, MDIN_DEINT_FILM_t mode)
{
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;

//	pIPC->film = (pIPC->attb&MDIN_DEINT_IPC_PROC)? mode : MDIN_DEINT_FILM_OFF;
	pIPC->film = mode; if ((pIPC->attb&MDIN_DEINT_IPC_PROC)==0) mode = MDIN_DEINT_FILM_OFF;
	if (pINFO->dacPATH==DAC_PATH_AUX_4CH) mode = MDIN_DEINT_FILM_OFF;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x250, 12, 3, mode)) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}
示例#6
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_SetDeint3DNRGain(PMDIN_VIDEO_INFO pINFO, BYTE gain)
{
	BYTE level, max = 60; 
	PMDIN_SRCVIDEO_INFO pSRC = (PMDIN_SRCVIDEO_INFO)&pINFO->stSRC_m;
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;

	// if src is progressive && 8-bit precision then max is 33 or 50
	if ((pSRC->stATTB.attb&MDIN_SCANTYPE_PROG)&&(pSRC->stATTB.attb&MDIN_PRECISION_8))
		 level = (mdinREV==0)? 33 : 50;	// if revision=0 then 33, others 50.
	else level = 60;

	pIPC->gain = MIN(gain,level);

	// NR factor level, NR factor not_still_1st
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x260, 0, 6, max-pIPC->gain)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x26a, 0, 6, max-pIPC->gain)) return MDIN_I2C_ERROR;

	if ((pSRC->stATTB.attb&MDIN_PRECISION_8))
		if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x260, 8, 1, (pIPC->gain > 43) ? OFF : ON)) return MDIN_I2C_ERROR;

	// set ultraNR => if 3dnr_en=on & 3dnr_gain>50, ultraNR = ON
	return MDIN3xx_SetDeintUltraNR((pIPC->gain>50)? ON : OFF);
}
示例#7
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_EnableDeintCUE(PMDIN_VIDEO_INFO pINFO, BOOL OnOff)
{
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;
	WORD rVal;

	if (OnOff)	pIPC->fine |=  MDIN_DEINT_CUE_ON;
	else		pIPC->fine &= ~MDIN_DEINT_CUE_ON;

	// if ycbcr444_en==1 and progressive input, cue_en = off
	if ((pIPC->attb&MDIN_DEINT_444_PROC)&&(pIPC->attb&MDIN_DEINT_IPC_PROC)==0) OnOff = OFF;

	// if pal_ccs_en==1, cue_en = off
	if (MDINHIF_RegRead(MDIN_LOCAL_ID, 0x205, &rVal)) return MDIN_I2C_ERROR;
	if (rVal&0x0020) OnOff = OFF;

	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x208, 5, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}
示例#8
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
MDIN_ERROR_t MDIN3xx_EnableDeint3DNR(PMDIN_VIDEO_INFO pINFO, BOOL OnOff)
{
	PMDIN_DEINTCTL_INFO pIPC = (PMDIN_DEINTCTL_INFO)&pINFO->stIPC_m;
	PMDIN_SRCVIDEO_INFO pSRC = (PMDIN_SRCVIDEO_INFO)&pINFO->stSRC_m; // added on 16Aug2012		
	PMDIN_OUTVIDEO_INFO pOUT = (PMDIN_OUTVIDEO_INFO)&pINFO->stOUT_m; // added on 20Mar2012
//	PMDIN_MFCSCALE_INFO pMFC = (PMDIN_MFCSCALE_INFO)&pINFO->stMFC_m;
//	BYTE mode = (pIPC->fine&MDIN_DEINT_FRC_DOWN)? 1 : 0;
	BYTE mode = ((pIPC->attb&MDIN_DEINT_IPC_PROC)&&(pIPC->fine&MDIN_DEINT_FRC_DOWN))? 1 : 0;	// modified on 05Apr2012

	if (OnOff)	pIPC->fine |=  MDIN_DEINT_3DNR_ON;
	else		pIPC->fine &= ~MDIN_DEINT_3DNR_ON;

	// if ycbcr444_en==1 and progressive input, 3dnr_en = off
	if ((pIPC->attb&MDIN_DEINT_444_PROC)&&(pIPC->attb&MDIN_DEINT_IPC_PROC)==0) OnOff = OFF;

	// if 1080p input and dual output, 3dnr_en = off
	if (pIPC->attb&MDIN_DEINT_HD_1080p&&pINFO->dacPATH==DAC_PATH_AUX_OUT) OnOff = OFF;

	// for 2-HD input mode
	if (pINFO->dacPATH==DAC_PATH_AUX_2HD) OnOff = OFF;

	// if vertical scale ratio<0.5, 3dnr_en = off
	if (pIPC->attb&MDIN_DEINT_p5_SCALE) OnOff = OFF;

	// if revision=0 and vertical scale ratio<1.0 and progressive input, 3dnr_en = off
	if ((mdinREV==0)&&
		(pIPC->attb&MDIN_DEINT_DN_SCALE)&&(pIPC->attb&MDIN_DEINT_IPC_PROC)==0) OnOff = OFF;

	if (pIPC->attb&MDIN_DEINT_HD_1080i&&
	   (pOUT->frmt==VIDOUT_1920x1080i59||pOUT->frmt==VIDOUT_1920x1080i60)) OnOff = OFF; // added on 20Mar2012

	if (pIPC->attb&MDIN_DEINT_HD_1080p&&
	   (pOUT->frmt==VIDOUT_1920x1080i50||pOUT->frmt==VIDOUT_1920x1080i59||pOUT->frmt==VIDOUT_1920x1080i60)) OnOff = OFF; // added on 20Mar2012

	// prepare for timing problem when 10bit process use (refer to MDIN3xx_Set10BITProcess())
//	if ((pIPC->attb&MDIN_DEINT_IPC_PROC)==0&&pMFC->stMEM.h==1080&&pMFC->stDST.h==576) OnOff = OFF;

	// prepare for timing problem when 10bit process use (refer to MDIN3xx_Set10BITProcess())
//	if ((pIPC->attb&MDIN_DEINT_HD_1080i)&&(pSRC->stATTB.attb==MDIN_PRECISION_10)) OnOff = OFF; // added on 16Aug2012
	
	// if 1080p input, 3dnr_en = off
#if !defined(SYSTEM_USE_MCLK202)
	if (pIPC->attb&MDIN_DEINT_HD_1080p) OnOff = OFF;
#endif

	if (pSRC->frmt==VIDSRC_1920x1200p60) OnOff = OFF;		// added on 26Nov2012

	// common_mode_at_IPC - nr_t_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x205,  0, 1, (OnOff)? mode : 0)) return MDIN_I2C_ERROR;

	// nr_mode_reg - nr_en, nr_write_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x260, 10, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x260, 12, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// nr_motion_set_reg - nr_mo_sel, nr_all_use_mo
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x261, 6, 2, (OnOff)? 2 : 3)) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x261, 0, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// nr_motion_offset_reg - cu_motion_use, n_motion_use, slow_motion_use, still_motion_use
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x262, 15, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x262, 14, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x262, 13, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x262, 12, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// mo_history_for_nr_condition - nr_mo_his_update_use_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x266, 11, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// border_ctrl_reg1 - no_his_border_adp_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x240, 13, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// set progressive NR scale down
	if (MDIN3xx_ScaleDownProgNR(pINFO, OnOff)) return MDIN_NO_ERROR;

	// if 3dnr_en=off & progressive input, mfc_prepend_load = OFF
	OnOff = ((OnOff==OFF)&&((pIPC->attb&MDIN_DEINT_IPC_PROC)==0))? OFF : ON;
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x100,  6, 1, MBIT(OnOff,1))) return MDIN_I2C_ERROR;

	// set ultraNR => if 3dnr_en=on & 3dnr_gain>50, ultraNR = ON
	return MDIN3xx_SetDeintUltraNR((pIPC->gain>50)? ON : OFF);
}
示例#9
0
文件: mdinipc.c 项目: mrtos/testing
//--------------------------------------------------------------------------------------------------------------------------
static MDIN_ERROR_t MDIN3xx_SetDeintUltraNR(BOOL OnOff)
{
	WORD rVal;

	if (MDINHIF_RegRead(MDIN_LOCAL_ID, 0x260, &rVal)) return MDIN_I2C_ERROR;
	if ((rVal&0x0600)!=0x0600) OnOff = OFF;		// if 3DNR is off, then OFF
	
	// nr_n_deint_thres
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x264,  8, 8, (OnOff)? 255 : 20)) return MDIN_I2C_ERROR;

	// nr_deint_thres
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x264,  0, 8, (OnOff)? 255 : 18)) return MDIN_I2C_ERROR;

	// mo_nr_th
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x265,  4, 3, (OnOff)?   7 :  4)) return MDIN_I2C_ERROR;

	// n_mo_nr_th
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x265,  0, 3, (OnOff)?   7 :  4)) return MDIN_I2C_ERROR;

	// fast_history_nr
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x266,  0, 4, (OnOff)?   0 :  8)) return MDIN_I2C_ERROR;

	// nr_inter_diff_or_en, nr_avg_inter_diff_or_en
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x267, 14, 2, (OnOff)?   3 :  0)) return MDIN_I2C_ERROR;

	// nr_inter_diff_thres
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x267,  8, 6, (OnOff)?   0 : 63)) return MDIN_I2C_ERROR;

	// avg_nr_diff_thres
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x267,  0, 8, (OnOff)?   0 : 16)) return MDIN_I2C_ERROR;

	// inter_diff_exp_tab
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x268,  4, 2, (OnOff)?   3 :  2)) return MDIN_I2C_ERROR;

	// nr_avg_inter_diff_exp_tab
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x268,  0, 2, (OnOff)?   3 :  2)) return MDIN_I2C_ERROR;

	// y_surface_for_nr_surface_hor_th
	if (MDINHIF_RegField(MDIN_LOCAL_ID, 0x23b,  8, 8, (OnOff)?   0 :  3)) return MDIN_I2C_ERROR;
	return MDIN_NO_ERROR;
}