2440的camera数据流怎么加到LCD的buf里面啊?
我的2440板子上的摄像头采集到的数据通过dma存到一个数组camera_buf里面,lcd要显示的内容在lcd_buf里面,当然两个都是volatile的.现在的问题就是,camera是640*480的.lcd是800*480的,我怎么把camera_buf的数据流快速的拷贝到lcd_buf里面呢?有什么办法可以将camera数据流只输出到lcd 的一个区域上呢? 不好意思,帮不上忙,帮你顶一下。 我在wince下做过不少,
//Display_Cam_Image(320, 240);
//Display_Cam_Image(240, 240);
void Display_Cam_Image(U32 size_x, U32 size_y)
{
U8 *buffer_rgb,*buffer_lcd;
U32 y;
int temp;
//static unsigned short transfer_data;
//static unsigned int time,old_time;
//DWORD dwStatus, dwType, dwSize, DIS_XSIZE, DIS_YSIZE ,src_xsize ,src_ysize;
//HKEY hkDisplay = NULL;
//DIS_XSIZE=320;
//DIS_YSIZE=240;
// if (port)
{
temp = (s2440CAM->rCIPRSTATUS>>26)&3;
temp = (temp + 2) % 4;
switch (temp)
{
case 0:
buffer_rgb = (U8 *)s2440CAM->rCIPRCLRSA1;
break;
case 1:
buffer_rgb = (U8 *)s2440CAM->rCIPRCLRSA2;
break;
case 2:
buffer_rgb = (U8 *)s2440CAM->rCIPRCLRSA3;
break;
case 3:
buffer_rgb = (U8 *)s2440CAM->rCIPRCLRSA4;
break;
default :
buffer_rgb = (U8 *)s2440CAM->rCIPRCLRSA1;
break;
}
}
RETAILMSG(1,(_T("preview buf index = %d\r\n"), temp));
#if (DOTNET_DRIVER)
SetKMode(TRUE);
#endif
//src_xsize=size_x>DIS_XSIZE?DIS_XSIZE:size_x;
//src_ysize=size_y>DIS_YSIZE?DIS_YSIZE:size_y;
buffer_rgb += VIRTUAL_OFFSET;
//buffer_lcd = (U8 *)(IMAGE_FRAMEBUFFER_UA_BASE+DIS_XSIZE*(DIS_YSIZE-src_ysize)+(DIS_XSIZE-src_xsize));
#if 1
for (y=0;y<(size_y-2);y++) // YCbCr 4:2:0 format
{
//memcpy((void *)buffer_lcd,(void *)buffer_rgb,(src_xsize)*2);
//buffer_lcd += DIS_XSIZE*2;
//buffer_rgb += (size_x*2);
//----------addat 2009.07.07-------------
memcpy((void *)(IMAGE_FRAMEBUFFER_UA_BASE+y*240*2),(void *)buffer_rgb,(size_x*2));
//RETAILMSG(1,(_T("IMAGE_FRAMEBUFFER_UA_BASE(2)\r\n")));
//跳到图像的下一行开始指针
//buffer_rgb += (QCIF_XSIZE*2);//QCIF_XSIZE*2 is relationship with line
buffer_rgb += (240*2);
}
#endif
#if (DOTNET_DRIVER)
SetKMode(FALSE);
#endif
}
下面这个就是了。
memcpy((void *)(IMAGE_FRAMEBUFFER_UA_BASE+y*240*2),(void *)buffer_rgb,(size_x*2));
页:
[1]