This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dm642视频采集与显示程序



看一个边缘检测的视频程序,(此处大概给个框架,附件中有连续程序)

  1       bt656_capture_start(vpHchannel1);
  2       for(i=0;i<numLines;i++)
  3       {  DAT_copy((void *)(capYbuffer + i * numPixels),               (void *)(tempSrcYbuffer + i * numPixels),              numPixels);
  4    DAT_copy((void *)(capYbuffer + i * numPixels),               (void *)(tempDisYbuffer + i * numPixels),              numPixels);    }

  5    sobelEdge();            drawRectangle();////图像处理函数
  6     for(i=0;i<numLines;i++)
  7     {  DAT_copy((void *)(tempDisYbuffer + i * numPixels),               (void *)(disYbuffer + i * numPixels),              numPixels);  }    
  8     bt656_display_start(vpHchannel0);
  9        for(;;)
 10       {  if((capNewFrame == 1)&&(disNewFrame == 1))
 11    {   capNewFrame =0;      disNewFrame =0;
 12      for(i=0;i<numLines;i++)
 13            {    DAT_copy((void *)(capYbuffer + i * numPixels),                 (void *)(tempSrcYbuffer + i * numPixels),                numPixels);
 14            DAT_copy((void *)(capYbuffer + i * numPixels),                 (void *)(tempDisYbuffer + i * numPixels),                numPixels);    }       
 15            sobelEdge();           drawRectangle();
 16           for(i=0;i<numLines;i++)
 17           {    DAT_copy((void *)(tempDisYbuffer + i * numPixels),                 (void *)(disYbuffer + i * numPixels),                numPixels);      }  } }
 18            for(;;) {}

有几个问题:

1.定义了视频采集和显示的缓存地址,视频采集后是怎么存到指定的地址的,我在ccs中搜索capYbuffer(视频获取缓冲区),得到8个结果,一个是定义,其他的都是出现在DAT_copy函数中,也就是直接在指定的地址中取视频数据了。而且在不同的开发板例程中,视频缓存区定义的关键词还不一样,除了capYbuffer,还有capYbur等。既然定义视频存储地址关键词不是特定的,就更不好理解为什么视频采集完会存到定义好的区间去。

2.程序中第3行先把获取缓存区capYbuffer中的数据搬到临时缓存tempSrcYbuffer中,第4行又把获取缓存区capYbuffer中的数据搬到临时缓存tempDisYbuffer中,为什么要放到两个临时缓存中?

3.第5行的图像处理函数,处理的是哪个地址里的数据,处理完放哪了?

4.第7行把capYbuffer中的数据搬到临时缓存tempDisYbuffer中数据搬到DisYbuffer中,是要显示吗?我理解的1-7行为图像采集过程,8-18为图像显示过程,为什么在这里就把数据放到显示缓存中了?

5.13-17行又把上面的处理重复了一遍,图像处理函数sobelEdge();           drawRectangle();也加了一遍,可以理解处理了两边吗?

6.数据搬了还几次,我理解的是这样的过程:视频开始采集,然后从采集缓存放到临时缓存,然后加入图像处理函数,然后从临时缓存搬到现实缓存,开始现实。这样的理解显然不能解释程序,我错在哪里?正确的过程是怎么样的。

本来做个硬件平台,例程调通了认为就可以了,结果老师要我写算法,只能从头看,基础不好,周围也没人做这个,只能向各位专家请教了,还望不吝赐教,谢谢!!!