问题遇到的现象和发生背景
要在android开发板上做一个vncserver,基本流程已经是通了,但是画面上非常卡顿。仔细研究了一下,发现是读取的/dev/graphics/fb0这个文件与实际屏幕的画面不完全符合导致的。例如,从主界面打开设置界面,fb0成功更新,程序里面获取到的屏幕画面也能跟着更新;从设置界面退回到主界面时,fb0没能更新,程序里面获取到的画面也没有办法更新。
屏幕的基本信息:line_length=5120 xres=1280, yres=800, xresv=1280, yresv=2400, xoffs=0, yoffs=0, bpp=32
另外每次读取共享内存前会使用 ioctl(fbfd, FBIOGET_VSCREENINFO, &scrinfo) 更新信息,每次的x_offset和y_offset都是0,没有出现过有偏移的情况
问题相关代码,请勿粘贴截图
项目源码是从github上找的:https://github.com/oNaiPs/droidVncServer
打开/dev/graphics/fb0的方式也是通用的open和mmap映射的方式
fbfd = open(framebuffer_device, O_RDONLY)
fbmmap = mmap(NULL, fbSize , PROT_READ , MAP_SHARED , fbfd, 0);
使用的编译器是android-ndk-r14b,对android方面的开发了解的不太多,主要还是c/c++的东西
开发板的安卓版本是5.1.1
我的解答思路和尝试过的方法
通过命令行运行cat /dev/graphics/fb0 > fb0的方式后进行处理,确认是fb0没更新导致的问题。
我想要达到的结果
1.能够成功获取到屏幕的实时图像,比如让fb0刷新成当前的屏幕画面
2.做不到1的话有没有其他的c可用的方法持续读取屏幕的画面
3.如果实在不行有没有简单高效的android c的截图方法,一张一张的截图处理