📄 601cman.c
字号:
//
// 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 + -