zgf009719 发表于 2009-12-30 20:27:06

2440的camera数据流怎么加到LCD的buf里面啊?

我的2440板子上的摄像头采集到的数据通过dma存到一个数组camera_buf里面,lcd要显示的内容在lcd_buf里面,当然两个都是volatile的.现在的问题就是,camera是640*480的.lcd是800*480的,我怎么把camera_buf的数据流快速的拷贝到lcd_buf里面呢?
有什么办法可以将camera数据流只输出到lcd 的一个区域上呢?

ckb0901 发表于 2009-12-31 10:01:42

不好意思,帮不上忙,帮你顶一下。

gooogleman 发表于 2010-1-8 13:55:15

我在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]
查看完整版本: 2440的camera数据流怎么加到LCD的buf里面啊?