⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 601cman.c

📁 视频601芯片的驱动源码,你可以完全掌控该芯片了,对于其它多媒体芯片的设计具有参考价值
💻 C
📖 第 1 页 / 共 4 页
字号:
//
//	These function are the most common used function for video capture and 
//  playback. All functions in these level will return a complete error report
//  through the "Error" structure. This structure is defined in "601error.h".
//
//*********************************************************************************
//----------------------------------------------------------------------------
//  FUNCTION: HwConfig4Diag()
//----------------------------------------------------------------------------
DLLEXPORT Error *  HwConfig4Diag(int input_vid)
{
	Error	*pErr;

	if (LoadVxDFlg)
	{	
		// if VxD is not loaded, there is nothing
		// we can do, need to return error right 
		// the way !!!				
		pErr = PrepareErrorReport();
		pErr->HwConfig4DiagErr = LoadVxDFlg;
		return pErr; 
	}

	SetCurrentDirectory(VLabDir);
	read_config_file("bw.cfg");

	CapVideo.VideoFormat = NTSC;
	CapVideo.VideoSrc = S_VIDEO;
	CapVideo.VideoOut = YC_OUT;
	CapVideo.PixelType = NONSQ_PIXEL;
	CapVideo.VCRmode = VCR;

	Def_FIFO_Thre =	FIFO_THRESHOLD;

	// Perform a hardware reset on AMCC 
	pAmccOpRegs = pEV601Info->logicBAR0;
	pAmccOpRegs->MCSR |= ADD_ON_RESET;
	pAmccOpRegs->MCSR &= ~ADD_ON_RESET;

	// Init. and pass the I2C address down to I2C module
	I2CInit(pEV601Info->logicBAR4);
	clr_mcsrbit(SYSTEM_RESET);
	// Set ADV601 hardware reset bit
	set_mcsrbit(SYSTEM_RESET);

#ifdef NEVER
	// Init. SAA7111
	Err[0] = adc_init(NTSC, S_Capture, input_vid, VCR, pAmccOpRegs);
	// Init. ADV7175
	Err[1] = dac_init (NTSC, S_Capture, input_vid);
	// Initialize ADV601 chip (includes B.W. regs).
	Err[2] = wavelet_init(NTSC,S_Capture, Def_FIFO_Thre, pEV601Info, med_bw);
#endif

	pErr = BashBoard(NTSC, input_vid, input_vid, VCR, S_Capture, Def_FIFO_Thre);

	// Initialize the Bin Width Calculator to default ! 
	CapConfig.Resolution = SIF;
	CapConfig.BitPerPixel = 1.0f;
	CapConfig.SceneDetectFlg = 0;
	CapConfig.SpecialEffectFlg = 0;
	pErr->init_BWC_err = InitBWCalculator(&CapConfig);

	// Enable Bin Width Calculator as default !
	BWCalculationEnable();

	// Return the EV601 structure pointer for 601Test
	pErr->Reserve1 = pEV601Info;

	// initialize error code variable for 601test
	pEV601Info->VlabErr = OK;

	// Disable VxD blue screen report by default
	SetVxdOption(DISABLE, 0, 0, 0);

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION: Capture()
//----------------------------------------------------------------------------
DLLEXPORT Error *  WINAPI Capture(dword	NumOfFrm)
{
 	Error	*pErr;

	if (CapPlyBkState != S_Stop)
	{
		pErr = PrepareErrorReport();
		pErr->CaptureErr = CMAN_ILLEGAL_COMMAND_ERR;
		return pErr;	
	}

	SetCurrentDirectory(VLabDir);
	read_config_file("bw.cfg");
	read_fifo_thre_file("thre.cfg", &Def_FIFO_Thre);	


	// Make sure all hardware setup correctly !
	pErr = BashBoard(	CapVideo.VideoFormat, 
						CapVideo.VideoSrc, 
						CapVideo.VideoOut, 
						CapVideo.VCRmode, 
						S_Capture,
						Def_FIFO_Thre);

	// Wait for 1 second to let the 7111 and 7175 settle !
	TimeOutInSec(1);

	// Tell the VxD to start capture !
	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, CAPTURE_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
			pErr->CaptureErr = CMAN_VXD_IFACE_ERR;
			return pErr;
	}

	if (RetInfo[0])
	{
			pErr->CaptureErr = CMAN_START_CAP_ERR;
			return pErr;
	}
	else
			CapPlyBkState = S_Capture;		

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION: PlayBack()
//----------------------------------------------------------------------------
DLLEXPORT Error *  WINAPI PlayBack(dword StartFrm, dword NumOfFrm, int mode)
{
 	Error	*pErr;

	if (CapPlyBkState != S_Stop)
	{
		pErr = PrepareErrorReport();
		pErr->PlayBackErr = CMAN_ILLEGAL_COMMAND_ERR;
		return	pErr;
	}

	read_fifo_thre_file("thre.cfg", &Def_FIFO_Thre);	

	// Make sure all hardware setup correctly !
	pErr =  BashBoard( CapVideo.VideoFormat, 
						CapVideo.VideoSrc, 
						CapVideo.VideoOut, 
						CapVideo.VCRmode, 
						S_PlayBack,
						Def_FIFO_Thre);

	// Tell the	VxD to start Playback !
	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, PLAYBACK_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
		pErr->PlayBackErr = CMAN_VXD_IFACE_ERR;
		return pErr;
	}

	if (RetInfo[0])
	{
		pErr->PlayBackErr = CMAN_START_PLYBK_ERR;
		return pErr;
	}
	else
		CapPlyBkState = S_PlayBack;		

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION: PlayBackPause()
//----------------------------------------------------------------------------
DLLEXPORT Error *  WINAPI PlayBackPause(int command)
{

	DWORD 	VxDmsg;
 	Error	*pErr;


#if 0
	switch(command)
	{
		case A_Pause_On:
			if 	( CapPlyBkState != S_PlayBack &&
				  CapPlyBkState != S_PlayBackResume 					
				)
				return	CMAN_ILLEGAL_COMMAND_ERR;
			VxDmsg = PLAYBACK_PAUSE_VXDMSG;
			break;
		case A_Pause_Off:
			if 	( CapPlyBkState != S_PlayBackPause)
				return	CMAN_ILLEGAL_COMMAND_ERR;
			VxDmsg = PLAYBACK_RESUME_VXDMSG;
			break;
		default:
			return	CMAN_PARAM_ERR;
	}
#else
	if 	( CapPlyBkState != S_Stop )
	{
		pErr = PrepareErrorReport();
		pErr->PlayBackPauseErr = CMAN_ILLEGAL_COMMAND_ERR;
		return pErr;	
	}

	VxDmsg = PLAYBACK_PAUSE_VXDMSG;
#endif

	// Make sure all hardware setup correctly !
	pErr = BashBoard( CapVideo.VideoFormat, 
						CapVideo.VideoSrc, 
						CapVideo.VideoOut, 
						CapVideo.VCRmode, 
						S_PlayBack,
						Def_FIFO_Thre);

	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, VxDmsg,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
			pErr->PlayBackPauseErr = CMAN_VXD_IFACE_ERR;
			return pErr;
	}

	if (RetInfo[0])
	{
		pErr->PlayBackPauseErr = (command == A_Pause_On)
							? CMAN_PLYBK_PAUSE_ERR
							: CMAN_PLYBK_RESUME_ERR;
		return pErr;
	}
	else
	{
		CapPlyBkState = (command == A_Pause_On)
					? S_PlayBackPause
					: S_PlayBackResume;
	}

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION:	ColorRampDiag()
//
//			This function will playback a build in color ramp from the 
//			driver contineously until a stop command is issuce.				
//----------------------------------------------------------------------------
DLLEXPORT Error * WINAPI ColorRampDiag()
{
 	Error	*pErr;

	if (CapPlyBkState != S_Stop)
	{
		pErr = PrepareErrorReport();
		pErr->ColorRampDiagErr = CMAN_ILLEGAL_COMMAND_ERR;
		return pErr;	
	}

	// Make sure all hardware setup correctly !
	pErr = 	BashBoard( CapVideo.VideoFormat, 
						CapVideo.VideoSrc, 
						CapVideo.VideoOut, 
						CapVideo.VCRmode, 
						S_PlayBack,
						Def_FIFO_Thre);

	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, CRAMP_DIAG_START_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
		pErr->ColorRampDiagErr = CMAN_VXD_IFACE_ERR;
		return pErr;
	}


	if (RetInfo[0])
	{
		pErr->ColorRampDiagErr = CMAN_CRAMP_DIAG_ERR;
		return pErr;
	}
	else
		CapPlyBkState =	S_ColorRampPlyBkDiag;

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION:	MemCaptureDiag()
//
//			This function will capture a short period of video into the  
//			host memory contineously until a stop command is issuce.				
//----------------------------------------------------------------------------
DLLEXPORT Error * WINAPI MemCaptureDiag(int vid_format,int vid_source,int pllmode)
{
 	Error	*pErr;

	if (CapPlyBkState != S_Stop)
	{
		pErr = PrepareErrorReport();
		pErr->MemCaptureDiagErr = CMAN_ILLEGAL_COMMAND_ERR;
		return pErr;	
	}

	pErr = BashBoard( vid_format,vid_source, 
						CapVideo.VideoOut, 
						pllmode, 
						S_Capture,
						Def_FIFO_Thre);
	// Wait for 1 second to let the 7111 and 7175 settle !
	TimeOutInSec(1);

	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, MEM_CAP_DIAG_START_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
			pErr->MemCaptureDiagErr = CMAN_VXD_IFACE_ERR;
			return pErr;
	}

	if (RetInfo[0])
	{
	 	pErr->MemCaptureDiagErr = CMAN_MEM_CAP_DIAG_ERR;
	 	return pErr; 
	}
	else
		CapPlyBkState =	S_MemCaptureDiag;

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION: 	MemPlayBackDiag()
//
//			This function will playback a short period of video from the  
//			host memory contineously until a stop command is issuce.				
//----------------------------------------------------------------------------
DLLEXPORT Error * WINAPI MemPlayBackDiag()
{
 	Error	*pErr;

	if (CapPlyBkState != S_Stop)
	{
		pErr = PrepareErrorReport();
		pErr->MemPlayBackDiagErr = CMAN_ILLEGAL_COMMAND_ERR;
		return pErr;	
	}

	// Make sure all hardware setup correctly !
	pErr = BashBoard( CapVideo.VideoFormat, 
						CapVideo.VideoSrc, 
						CapVideo.VideoOut, 
						CapVideo.VCRmode, 
						S_PlayBack,
						Def_FIFO_Thre);

	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, MEM_PLYBK_DIAG_START_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
		pErr->MemPlayBackDiagErr = CMAN_VXD_IFACE_ERR;
		return pErr;
	}

	if (RetInfo[0])
	{
		pErr->MemPlayBackDiagErr = CMAN_MEM_PLYBK_DIAG_ERR;
		return pErr;
	}
	else
		CapPlyBkState =	 S_MemPlayBackDiag;

    return pErr;
}

//----------------------------------------------------------------------------
//  FUNCTION: Stop()
//----------------------------------------------------------------------------
DLLEXPORT Error * WINAPI Stop()
{
 	Error	*pErr;


	if ( CapPlyBkState == S_Stop )
		return pErr;


	// This function is not yet full implemented !
	RetInfo[0] = 0;
    if ( ! DeviceIoControl(hDevice, STOP_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
		pErr->StopErr = CMAN_VXD_IFACE_ERR;
		return pErr;
	}

	if (RetInfo[0])
	{
		pErr->StopErr = CMAN_STOP_ERR;
		return pErr;
	}
	else
		CapPlyBkState = S_Stop;		

    return pErr;
}

//*********************************************************************************
//							MID-LEVEL API
//*********************************************************************************
// -------------------------------------------------------------------------
//
// 	GetBuildDriverInfo
//
//  This function provide the date & time stamp of 601cman.dll and 
//  601rpman.vxd.
//
// -------------------------------------------------------------------------
DLLEXPORT int	GetBuildDriverInfo(char * * * ppp_dll_build, char * * * ppp_vxd_build)
{

	inBuf[0] = 0;
	RetInfo[0] = 0;


	*ppp_dll_build = dll_build_info;

    if ( ! DeviceIoControl(hDevice, GET_BUILD_INFO_VXDMSG,
               inBuf, sizeof(PVOID), (LPVOID)RetInfo, sizeof(RetInfo),
               &cbBytesReturned, NULL)
	   )
	{
			*ppp_vxd_build = NULL;
			return -1;
	}

	*ppp_vxd_build = (char * *)RetInfo[0];

	return 0;
}

// -------------------------------------------------------------------------
// 
// RegisterAppCallBack
//
// -------------------------------------------------------------------------
DLLEXPORT int RegisterAppCallBack(DWORD Event, PVOID pProc)
{

	switch(Event)
	{
		case INT_HALT_VXDMSG:
			IntHaltCallBack = (INTHALTPROC)pProc;
			return OK;

		case VITC_UPDATE_VXDMSG:
			VitcUpdateCallBack = (VITCUPDATEPROC)pProc;
			return OK;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -