5 Qter豆
我在qt4.8.5中通过切换双缓冲改善图片播放的效果,测试切换framebuffer交替绘制两张图,buf0填充蓝图,buf1填充红色,但是结果是黑屏 红色的交替显示。
下面是我获取到的屏幕信息。
mem is 1536000
mem start is 6012928
line_length is 1600
xres is 800
yres is 480
bits_per_pixel is 16
xres_virtual 800
yres_virtual 960
我在主界面的构造函数中将fb0映射到内存
g_u32VpostBufMapSize = var.xres*var.yres*var.bits_per_pixel/8*2;
pDstBuf =(unsigned char*) mmap(NULL,
g_u32VpostBufMapSize,
PROT_READ|PROT_WRITE,
MAP_SHARED,
vpost_fd,
0);
memset(pDstBuf, 0x0, g_u32VpostBufMapSize);
我用了一个定时器播放照片,在播放照片的槽中切换双缓冲,用的下面的代码:
if(buf==0)
{
var.yoffset=0;
vpe_setting.dest_addrPac = (unsigned int)pDstBuf;
printf("Mdest_addrPac addr1 = %x\n", vpe_setting.dest_addrPac);
int ret0 = ioctl(vpost_fd, FBIOPAN_DISPLAY, &var);
qDebug()<<"buf ret0"<<buf<<ret0;
update();
buf=1;
}
else
{
var.yoffset=var.yres;
vpe_setting.dest_addrPac = (unsigned int)pDstBuf+ var.xres*var.yres*var.bits_per_pixel/8;
printf("Mdest_addrPac addr2 = %x\n", vpe_setting.dest_addrPac);
int ret1 = ioctl(vpost_fd, FBIOPAN_DISPLAY, &var);
qDebug()<<"buf ret1"<<buf<<ret1;
update();
buf=0;
}
打印信息显示ret0 和ret1在buf=0或1的时候都是返回的0,说明buffer切换过去了,是不是framebuffer没有更新数据,请朋友们帮我看一下,这是什么情况?我需要怎么测试?实在是没有头绪了。
我来回答