📄 tsklookback.c
字号:
#include <vport.h>
#include <fvid.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <scom.h>
#include <dm642.h>
#include <dm642_capParams.h>
#include <dm642_disParams.h>
extern int EXTERNALHEAP;
VPORT_PortParams EVMDM642_vDisParamsPort
= EVMDM642_DIS_PARAMS_PORT_DEFAULT;
static VPORTDIS_Params EVMDM642_vDisParamsChan
= EVMDM642_DIS_PARAMS_CHAN_BT656_DEFAULT(PAL);
static SAA7105_ConfParams EVMDM642_vDisParamsSAA7105
= EVMDM642_DIS_PARAMS_SAA7105_SDTV_DEFAULT(PAL720, SVIDEO);
static VPORTCAP_Params EVMDM642_vCapParamsChan
= EVMDM642_CAP_PARAMS_CHAN_EMBEDDED_DEFAULT(PAL720);
FVID_Handle disChan;
void VideoLoopbackInit()
{
Int status;
EVMDM642_vDisParamsChan.segId = EXTERNALHEAP;
EVMDM642_vDisParamsSAA7105.hI2C = DM642_I2C_hI2C;
/******************************************************/
/* initialization of display driver */
/******************************************************/
disChan = FVID_create("/VP1DISPLAY", IOM_OUTPUT,
&status, (Ptr)&EVMDM642_vDisParamsChan, NULL);
FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG,
(Ptr)&EVMDM642_vDisParamsSAA7105);
}
void VideoLoopbackStart()
{
FVID_control(disChan, VPORT_CMD_START, NULL);
}
void tskVideoLoopback()
{
Int i;
SCOM_Handle fromInput1toDIS,fromDIStoInput1;
FVID_Frame *disFrameBuf;
FVID_Frame *capFrameBuf;
Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1;
Int numLinesCap = EVMDM642_vCapParamsChan.fldYStop1 -
EVMDM642_vCapParamsChan.fldYStrt1+1;
Int numLines = (numLinesDis > numLinesCap) ? numLinesCap : numLinesDis;
Int numPixels = EVMDM642_vCapParamsChan.fldXStop1 -
EVMDM642_vCapParamsChan.fldXStrt1+1;
Int capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 -
EVMDM642_vCapParamsChan.fldXStrt1+1;
Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;
numLines *= 2; /* both fields */
/*打开SCOM模块*/
fromInput1toDIS = SCOM_open("IN1TODIS");
fromDIStoInput1 = SCOM_open("DISTOIN1");
/********************************************************/
/* request a frame buffer from display & capture driver */
/********************************************************/
FVID_alloc(disChan, &disFrameBuf);
while(1){/* loop for 4 seconds */
capFrameBuf = (FVID_Frame *)SCOM_getMsg(fromInput1toDIS, SYS_FOREVER);
/* copy data from capture buffer to display buffer */
/***************************************************/
for(i = 0; i < numLines; i ++) {
DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,
disFrameBuf->frame.iFrm.y1 + i * disLinePitch,
numPixels);
DAT_copy(capFrameBuf->frame.iFrm.cb1 + i * (capLinePitch >> 1),
disFrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1),
numPixels>>1);
DAT_copy(capFrameBuf->frame.iFrm.cr1 + i * (capLinePitch >> 1),
disFrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1),
numPixels>>1);
}
DAT_wait(DAT_XFRID_WAITALL);
CACHE_clean(CACHE_L2ALL,NULL,NULL);
/*-----------------------------------------------------------*/
/* Display the decoded frame. */
/*-----------------------------------------------------------*/
FVID_exchange(disChan, &disFrameBuf);
/*-----------------------------------------------------------*/
/* Send message to process task to continue */
/*-----------------------------------------------------------*/
SCOM_putMsg(fromDIStoInput1, NULL);/* loop forever */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -