【问题标题】:framebuffer output graphic tearing, FBIO_WAITFORVSYNC and FBIOPAN_DISPLAY failedframebuffer 输出图形撕裂,FBIO_WAITFORVSYNC 和 FBIOPAN_DISPLAY 失败
【发布时间】:2014-12-01 03:13:00
【问题描述】:

问题是关于 linux framebuffer 的,图在撕裂。

最近我为 SDI 显卡的输出桌面工作,然后我想到了使用帧缓冲区。没关系,它输出成功,但它有一个大问题,图形撕裂。 我想使用 FBIO_WAITFORVSYNC 和 FBIOPAN_DISPLAY 来解决它,但它们都返回-1。 ioctl(fd, FBIO_WAITFORVSYNC, 0) errno: 25(设备的 ioctl 不合适) ioctl(fb, FBIOPAN_DISPLAY, &vi) ,errno: 22 (无效参数)

我使用的操作系统是 Ubuntu 12.04,安装 fbset 后,我​​发现两个 ioctl 命令都包含在 fb.h 中。 现在的问题是如何让 FBIO_WAITFORVSYNC 和 FBIOPAN_DISPLAY 正常工作。 有什么建议吗?

【问题讨论】:

    标签: ubuntu framebuffer ioctl tearing


    【解决方案1】:

    错误代码不是交换了吗? 如果是这样,您可以尝试:

        int zero = 0;
        ioctl(fd, FBIO_WAITFORVSYNC, &zero);
    

    如果不支持 FBIOPAN_DISPLAY 并且帧缓冲区大小至少为 2 个屏幕(根据分辨率和像素深度检查 fixInfo.smem_len),然后尝试:

        static int bufferNumber = 0;
        //Assume the frame buffer has more memory than
        //just just 1 screen - either set xoffset or 
        //yoffset to flip to another page. 
        varInfo.yoffset = varInfo.yres * bufferNumber;
        ioctl(fd, FBIOPUT_VSCREENINFO, &varInfo);
        //now flip the buffer to which to render to
        bufferNumber = 1 - bufferNumber;
        //now render to appropriate frame-buffer page
        //assuming we change yoffset to switch pages
        pageBuffer = fixInfo.smem_start + 
                     (bufferNumber * 
                     (fixInfo.line_length / (varInfo.bits_per_pixel / 8) * 
                     varInfo.yres ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2012-06-15
      • 2011-04-09
      • 1970-01-01
      • 2016-03-21
      相关资源
      最近更新 更多