DM642视频输出有大量横线问题.docx
- 文档编号:11939904
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:12
- 大小:18.95KB
DM642视频输出有大量横线问题.docx
《DM642视频输出有大量横线问题.docx》由会员分享,可在线阅读,更多相关《DM642视频输出有大量横线问题.docx(12页珍藏版)》请在冰豆网上搜索。
DM642视频输出有大量横线问题
刚开始学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。
i i++>{ if(*(capFrameBuf->frame.iFrm.y1+i>>0x3F> *(capFrameBuf->frame.iFrm.y1+i>=0xFF。 else *(capFrameBuf->frame.iFrm.y1+i>=0x00。 } //mycodeend// //----------------------------------------------------- for(i=0。 i 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.b5E2RGbCAP greenwang2006-3-1414: 23 [quote][i]labrador[/i]写道: tryCACHE_wbAllL2(CACHE_WAIT>。 afteryourcode.[/quote] 谢谢,效果比以前好了许多,少了很多白线,不过还是有一些黑线影响,看来得从CATHE下手。 p1EanqFDPw whyanqing2006-3-1612: 56 我也遇到同样问题,我是在输出图像缓冲区中写字符。 能不能说具体一点在什么地方加入CACHE_wbAllL2(CACHE_WAIT>。 是在输出的 FVID_exchange(disChan,&disFrameBuf>之前吗? 添加字符后感觉字符闪烁是什么缘故? 谢谢! DXDiTa9E3d 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]RTCrpUDGiT 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进行操作? 5PCzVD7HxA labrador2006-3-1723: 56 对图像缓冲区直接操作结束后,需要 CACHE_wbAllL2(CACHE_WAIT>。 可以就在FVID_exchange之前jLBHrnAILg 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),播放画面中有横线,但是没有抖动。 以上,请求各位帮助,不胜感激~xHAQX74J0X 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。 i i++>{ if(*(capFrameBuf->frame.iFrm.y1+i>>0x3F> *(capFrameBuf->frame.iFrm.y1+i>=0xFF。 else *(capFrameBuf->frame.iFrm.y1+i>=0x00。 } //mycodeend// //----------------------------------------------------- for(i=0。 i i++>{ DAT_copy(capFra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DM642 视频 输出 大量 横线 问题