#DM642视频输出有大量横线问题.docx

上传人:b****2 文档编号:2441922 上传时间:2023-05-03 格式:DOCX 页数:12 大小:18.86KB
下载 相关 举报
#DM642视频输出有大量横线问题.docx_第1页
第1页 / 共12页
#DM642视频输出有大量横线问题.docx_第2页
第2页 / 共12页
#DM642视频输出有大量横线问题.docx_第3页
第3页 / 共12页
#DM642视频输出有大量横线问题.docx_第4页
第4页 / 共12页
#DM642视频输出有大量横线问题.docx_第5页
第5页 / 共12页
#DM642视频输出有大量横线问题.docx_第6页
第6页 / 共12页
#DM642视频输出有大量横线问题.docx_第7页
第7页 / 共12页
#DM642视频输出有大量横线问题.docx_第8页
第8页 / 共12页
#DM642视频输出有大量横线问题.docx_第9页
第9页 / 共12页
#DM642视频输出有大量横线问题.docx_第10页
第10页 / 共12页
#DM642视频输出有大量横线问题.docx_第11页
第11页 / 共12页
#DM642视频输出有大量横线问题.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

#DM642视频输出有大量横线问题.docx

《#DM642视频输出有大量横线问题.docx》由会员分享,可在线阅读,更多相关《#DM642视频输出有大量横线问题.docx(12页珍藏版)》请在冰点文库上搜索。

#DM642视频输出有大量横线问题.docx

#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.

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。

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,

              disFr

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2