找回密码
 立即注册
收起左侧

关于QT中切换双缓冲

6
回复
7943
查看
[复制链接]
累计签到:103 天
连续签到:1 天
来源: 2017-5-10 10:11:20 显示全部楼层 |阅读模式
5Qter豆
我在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没有更新数据,请朋友们帮我看一下,这是什么情况?我需要怎么测试?实在是没有头绪了。

回复

使用道具 举报

累计签到:103 天
连续签到:1 天
2017-5-23 13:39:02 显示全部楼层
哎,这么久了,没有人了解么?
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-6-10 00:16:07 显示全部楼层
你是在改源码吗?色彩格式是什么?

点评

我不知道怎么修改,感觉需要改源码  详情 回复 发表于 2017-6-20 16:27
回复

使用道具 举报

累计签到:103 天
连续签到:1 天
2017-6-20 16:27:14 显示全部楼层
jinhang87 发表于 2017-6-10 00:16
你是在改源码吗?色彩格式是什么?

我不知道怎么修改,感觉需要改源码
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2017-6-20 19:25:04 显示全部楼层
冷月有情 发表于 2017-6-20 16:27
我不知道怎么修改,感觉需要改源码

Qt内部在操作framebuffer,你这又操作,两者是冲突的,感觉你的问题不需要操作framebuffer。

点评

对,是不是需要定位到QT内部操作framebuffer的地方 把它修改成双缓冲的形式?我也不知道怎么整?  详情 回复 发表于 2017-7-31 10:00
回复

使用道具 举报

累计签到:103 天
连续签到:1 天
2017-7-31 10:00:36 显示全部楼层
jinhang87 发表于 2017-6-20 19:25
Qt内部在操作framebuffer,你这又操作,两者是冲突的,感觉你的问题不需要操作framebuffer。 ...

对,是不是需要定位到QT内部操作framebuffer的地方 把它修改成双缓冲的形式?我也不知道怎么整?
回复

使用道具 举报

累计签到:10 天
连续签到:1 天
2017-11-21 16:02:50 显示全部楼层
为什么不在main函数中,在界面初始化之前,切换呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了