大家好,我刚接触DSP,基本是从零学起,问的问题可能比较菜,希望大家多多指教啊。
我在看合众达的例程时,有下面这么一段程序:
/*初始化Video Port1*/
/*将Vedio Port1设为采集输入*/
portNumber = 1;
vpHchannel1 = bt656_8bit_ncfc(portNumber);
bt656_capture_start(vpHchannel1);
/*等待第一帧数据采集完成*/
while(capNewFrame == 0){}
/*将数据存入显示缓冲区,并清采集完成的标志*/
capNewFrame =0;
for(i=0;i
{
/*传送Y缓冲区*/
DAT_copy((void *)(capYbuffer + i * numPixels),
(void *)(disYbuffer + i * numPixels),
numPixels);
/*传送Cb缓冲区*/
DAT_copy((void *)(capCbbuffer + i * (numPixels >> 1)),
(void *)(disCbbuffer + i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
DAT_copy((void *)(capCrbuffer + i * (numPixels >> 1)),
(void *)(disCrbuffer + i * (numPixels >> 1)),
numPixels>>1);
}
/*启动显示模块*/
bt656_display_start(vpHchannel0);
/*建立显示的实时循环*/
for(;;)
{
/*当采集区的数据已经采集好,而显示缓冲区的数据已空*/
if((capNewFrame == 1)&&(disNewFrame == 1))
{
/*将数据装入显示缓冲区,并清采集完成的标志*/
capNewFrame =0;
disNewFrame =0;
for(i=0;i
{
/*传送Y缓冲区*/
DAT_copy((void *)(capYbuffer + i * numPixels),
(void *)(disYbuffer + i * numPixels),
numPixels);
/*传送Cb缓冲区*/
DAT_copy((void *)(capCbbuffer + i * (numPixels >> 1)),
(void *)(disCbbuffer + i * (numPixels >> 1)),
numPixels>>1);
/*传送Cr缓冲区*/
DAT_copy((void *)(capCrbuffer + i * (numPixels >> 1)),
(void *)(disCrbuffer + i * (numPixels >> 1)),
numPixels>>1);
}
}
}
for(;;)
{}
我的疑问是后面的for循环是用来传输图像的,它前面从WHILE开始的斜体字部分不是和后面重复的吗?还有,最后的for(;;) 是什么用途呢? 可能问题比较菜,我是新手,周围也没人可以问,麻烦大家指教一二啊
前面的的while的作用是先将空的缓冲区填满数据,然后启动显示模块,显示第一帧,后面的for用于将缓冲区进行循环。
如果没有后面的for,就会只是显示第一帧,而没有前面的while,因为for循环跳不出去,无法启动启示模块。
最后那个for(;;){}是多余的,可以删除。
回复 板凳 kooking 的帖子
谢谢仁兄,是否缓冲区不满就无法启动显示模块呢?
一般情况下是这样,显示时需要get数据,你可以测试下不填充数据,看看实际效果
回复 5楼 kooking 的帖子
非常感谢仁兄,受教了
后面的{}里还有好多的显示程序呢。分为屏幕左右显示还有奇偶数区分,而且缓冲区不满就无法显示吗?那岂不是满一次显示一次?