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>。
FVID_exchange(capChan,&capFrameBuf>。
FVID_exchange(disChan,&disFrameBuf>。
frames++。
}
}
labrador2006-3-1400:
19
tryCACHE_wbAllL2(CACHE_WAIT>。
afteryourcode.
greenwang2006-3-1414:
23
[quote][i]labrador[/i]写道:
tryCACHE_wbAllL2(CACHE_WAIT>。
afteryourcode.[/quote]
谢谢,效果比以前好了许多,少了很多白线,不过还是有一些黑线影响,看来得从CATHE下手。
whyanqing2006-3-1612:
56
我也遇到同样问题,我是在输出图像缓冲区中写字符。
能不能说具体一点在什么地方加入CACHE_wbAllL2(CACHE_WAIT>。
是在输出的 FVID_exchange(disChan,&disFrameBuf>之前吗?
添加字符后感觉字符闪烁是什么缘故?
谢谢!
landiya2006-3-1616:
58
如果把字符换成图片是不是整幅图像闪烁?
labrador2006-3-1704:
44
cacheincoherency是如此造成的:
如果你写图像缓冲区之后,没有writeback,
cache里面的内容就和sdram不一致,
而videodriver使用DMA将图像缓冲区
的内容写入videoport,结果就是如此。
[quote][i]whyanqing[/i]写道:
我也遇到同样问题,我是在输出图像缓冲区中写字符。
能不能说具体一点在什么地方加入CACHE_wbAllL2(CACHE_WAIT>。
是在输出的 FVID_exchange(disChan,&disFrameBuf>之前吗?
添加字符后感觉字符闪烁是什么缘故?
谢谢!
[/quote]
whyanqing2006-3-1713:
06
[quote][i]landiya[/i]写道:
如果把字符换成图片是不是整幅图像闪烁?
[/quote]
把字符换成图片是整幅图像闪烁,
我是这样作的:
1、 利用DAT_copy(capFrameBufA->frame.iFrm.y1+k*704+352,
disFrameBuf->frame.iFrm.y1+k*disLinePitch+360,
numPixels>将采集到的背景图像送到disFrameBuf中。
2、 针对 disFrameBuf->frame.iFrm.y1进行操作将字符<或图片)叠加到
disFrameBuf中
3、 FVID_exchange(disChan,&disFrameBuf>。
现在的现象是背景图像不闪烁,添加的字符<或图片)闪烁,不知道是为什么?
您说是关于cache的问题,不知道该如何对cache进行操作?
labrador2006-3-1723:
56
对图像缓冲区直接操作结束后,需要
CACHE_wbAllL2(CACHE_WAIT>。
可以就在FVID_exchange之前
dm6432006-3-2209:
45
我也遇到类似的问题。
图像有横线并且会抖动。
可是在在FVID_exchange(disChan,&disFrameBuf>。
前加了CACHE_clean(CACHE_L2ALL,0,0>。
和CACHE_wbAllL2(CACHE_WAIT>。
没有什么改善。
具体得情况是,我是把encode和decode后得yuv格式数据得yuv分量存储在malloc开辟得三个存储区里,然后把这三个存储区得数据转换成rgb格式放入disFrameBuf中播放。
播放的图像中有横线,并且好像时画面会突然水平移动一下<也就是可以看到画面中得图像突然出现两个相同物体),造成抖动。
另外,把decode后存在三个存储区得的yuv分量使用yuv格式播放时<未使disFrameBuf),播放画面中有横线,但是没有抖动。
以上,请求各位帮助,不胜感激~
qiuxin_882006-9-711:
10
[quote][i]greenwang[/i]写道:
刚开始学DM642,想改一下例程,原来的功能是把摄像头获得的图像显示出来,我想对输入的信号二值化后再输出,结果虽然看得出部分图像二值化了,但是会出现大量横线,不知道是什么原因<是不是因为捕捉到的是场信号,而输出是帧信号的关系?
)
下面是部分代码:
/*
*========tskVideoLoopback========
*videoloopbackfunction.
*/
voidtskVideoLoopback(>
{
Inti。
Intstatus。
FVID_HandledisChan。
Intframes=0。
FVID_Frame*disFrameBuf。
IntnumLinesDis=EVMDM642_vDisParamsChan.imgVSizeFld1。
IntnumLinesCap=EVMDM642_vCapParamsChan.fldYStop1-
EVMDM642_vCapParamsChan.fldYStrt1+1。
IntnumLines=(numLinesDis>numLinesCap>?
numLinesCap:
numLinesDis。
FVID_HandlecapChan。
IntnumPixels=EVMDM642_vCapParamsChan.fldXStop1-
EVMDM642_vCapParamsChan.fldXStrt1+1。
FVID_Frame*capFrameBuf。
IntcapLinePitch=EVMDM642_vCapParamsChan.fldXStop1-
EVMDM642_vCapParamsChan.fldXStrt1+1。
IntdisLinePitch=EVMDM642_vDisParamsChan.imgHSizeFld1。
numLines*=2。
/*bothfields*/
/******************************************************/
/*allocatebothcaptureanddisplayframebuffers */
/*inexternalheapmemory */
/******************************************************/
EVMDM642_vCapParamsChan.segId=EXTERNALHEAP。
EVMDM642_vDisParamsChan.segId=EXTERNALHEAP。
EVMDM642_vDisParamsSAA7121.hI2C=EVMDM642_I2C_hI2C。
EVMDM642_vCapParamsSAA7115.hI2C=EVMDM642_I2C_hI2C。
/******************************************************/
/*initializationofcapturedriver */
/******************************************************/
capChan=FVID_create(\"/VP0CAPTURE/A/0\",
IOM_INPUT,&status,(Ptr>&EVMDM642_vCapParamsChan,NULL>。
/******************************************************/
/*initializationofdisplaydriver */
/******************************************************/
disChan=FVID_create(\"/VP2DISPLAY/1\",IOM_OUTPUT,
&status,(Ptr>&EVMDM642_vDisParamsChan,NULL>。
/******************************************************/
/*configurevideoencoder&decoder */
/******************************************************/
//FVID_control(disChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,
// (Ptr>&EVMDM642_vDisParamsSAA7121>。
FVID_control(capChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,
(Ptr>&EVMDM642_vCapParamsSAA7115>。
/******************************************************/
/*startcapture&displayoperation */
/******************************************************/
FVID_control(disChan,VPORT_CMD_START,NULL>。
FVID_control(capChan,VPORT_CMD_START,NULL>。
/********************************************************/
/*requestaframebufferfromdisplay&capturedriver*/
/********************************************************/
FVID_alloc(disChan,&disFrameBuf>。
FVID_alloc(capChan,&capFrameBuf>。
frames++。
while(1>{/*loopforever*/
/*copydatafromcapturebuffertodisplaybuffer*/
/***************************************************/
//----------------------------------------------------
//mycodestart//
for(i=0。
ii++>{
if(*(capFrameBuf->frame.iFrm.y1+i>>0x3F>
*(capFrameBuf->frame.iFrm.y1+i>=0xFF。
else
*(capFrameBuf->frame.iFrm.y1+i>=0x00。
}
//mycodeend//
//-----------------------------------------------------
for(i=0。
ii++>{
DAT_copy(capFrameBuf->frame.iFrm.y1+i*capLinePitch,
disFr