当前位置: 代码迷 >> 驱动开发 >> S3C6410framebuffer双缓冲有关问题
  详细解决方案

S3C6410framebuffer双缓冲有关问题

热度:17   发布时间:2016-04-28 11:03:09.0
S3C6410framebuffer双缓冲问题
我研究framebuffer不久,现在想做输出双缓冲,用的是华恒的6410,嵌入式linux系统,现在遇到了问题
在设置时候vinfo.xoffset = 0; 
vinfo.yoffset = 0; 
if(ioctl (dev_fp, FBIOPAN_DISPLAY,&vinfo) == -1); 

每次ioctl (dev_fp, FBIOPAN_DISPLAY,&vinfo)都返回-1
6410不可能不支持双缓冲吧 网上这方面资料也比较少 希望有大神可以解决,不能解决也希望能说下做framebuffer双缓冲的流程,我看看我是不是写错了 
谢谢!!
if (ioctl(dev_fp, FBIOGET_VSCREENINFO, &vinfo)) 
{}
width=vinfo.xres_virtual;//还有这句话应该设置为vinfo.xres还是vinfo.xres_virtual
height=vinfo.yres_virtual;
fb_bpp=vinfo.bits_per_pixel;
fb_size=width*height*fb_bpp/8;
if ((fb_addr = (char*)mmap(0, fb_size, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fp, 0)) < 0) 
{
perror("mmap()");
return -1;
}

------解决方案--------------------
FBIOPAN_DISPLAY 跟双缓冲应该是两马事,FBIOPAN_DISPLAY的作用是在虚拟显存大于实际显存的情况下,利用设置不同的xoffset,yoffset值(通常需要OSD 硬件 有对应的x_offset, y_offset 配置register.),从而实现滚动的显示。
如果6410 的LCD controler 没有可以设置x_offset ,y_offset的寄存器应该就不会支持这个功能。
------解决方案--------------------
直接分配 等同于当前显存的内存一块,将显示内容现在此内存填写好之后,直接memcpy到显存上...
  相关解决方案