win7下虚拟显示器完成记
来源:互联网 发布:java能开发单片机吗 编辑:程序博客网 时间:2024/05/16 17:31
将近3个月过去了,一直在做win7下虚拟显示器的显示。效果如下:
10月份我请了陪产假,老婆生了个漂亮的女儿,我也是儿女双全了,也有半个月的时间没有上班。
最开始我获取屏幕数据采用mirror驱动方式, mirror驱动是win7上微软官方支持的效率最高的截屏方式,但是目前来说有几个比较显著的缺点:
(1)只能截获主屏数据,扩展屏貌似不能截;
(2)有了mirror驱动就不能开启毛玻璃效果;
(3)对于有些场景,如PS的画图场景,开启硬件加速后,只要有开启mirror驱动,延时就会变得相当严重。
鉴于上述的种种原因,在开发完mirror驱动截图一个版本后,我决定放弃这种框架,因为后面的维护成本会很高,而且有很对硬伤是无法解决的,抛弃这种框架,我决定直接从wddm过滤驱动获取图片数据。
所以从9月份一开始我就转入了WDDM过滤驱动截获图片数据开发,先从支持非Areo效果的图片开始,期间也遇到了很多问题:
内存映射问题:
(1)如何获取虚拟显示器surface地址?地址如何转换成我们可以访问的虚拟地址?
(2)如何获取图片更新区域?
(3)如何获取鼠标形状、位置?
为此我们需要阅读微软官方的资料:https://docs.microsoft.com/en-us/windows-hardware/drivers/display/video-memory-management-and-gpu-scheduling
内容比较多且比较抽象,但是是我们能找到的最好的教程,所以要耐心看完。
硬件加速图片拷贝速度慢问题:
做了1-2个星期,上面的这些问题大都解决了,然后就会面临一个棘手的问题:拷贝速度慢问题,地址映射完后,我们是可以获取到FrameBuffer的虚拟地址的,也就是说我们可以直接读取FrameBuffer,这样一来直接从Framebuffer截屏就显得很方便了,但是不幸的是,直接从FrameBuffer将数据拷贝出来耗时相当大,我这边统计了下,拷贝一张1080P的图片大约在90ms左右,这是一个相当大的耗时,在实时传输上根本没法用。
然后10月份我就转到WDDM用户态模式驱动的分析了,分析完后发现这些问题在用户态驱动能够很好的解决,可以通过在用户态调用一些系统函数进行拷贝,系统拷贝就会触发DMA传输,大大提升拷贝速度。
毛玻璃效果支持问题:
(1)毛玻璃效果开启后虚拟显示器不支持,会一直狂闪然后蓝屏;
(2)毛玻璃图片数据获取;
我这里支持介绍了个大概,如果有开发这类遇到问题可以留言咨询,我会尽力解答。
阅读全文
0 0
- win7下虚拟显示器完成记
- 虚拟显示器
- win7下虚拟WIFI
- win7下双显示器的顺序调整
- 【Win7下教你更改平板显示器缩放】
- win7连接双显示器
- 在win7下创建虚拟网卡
- Win7虚拟XP模式---Win7下安装Tornado
- win7: 设定关闭显示器时间
- 自定义win7显示器关闭时间
- win7双显示器如何设置
- 发现软件在Win7下不能正确完成导出功能!
- Loadrunner11+win7+IE9 环境下录制完成崩溃解决方法!
- Win7下解决文件无法删除"操作无法完成
- Ubuntu11.04下安装VirtualBox4.0.1虚拟Win7
- 解决win7下虚拟XP不能上网的方法
- WIN7下Virtualbox虚拟Ubuntu共享文件夹设置
- win7下 UAC及虚拟化的测试
- Android UI性能优化实战 识别绘制中的性能问题
- 移动端网络游戏服务器架构
- 加减乘除 求和,求积,求平均值样样都行
- android中强制解除锁屏即按开关机键就进入桌面
- MongoDB配置按天存储日志文件
- win7下虚拟显示器完成记
- 基础排序:选择排序
- 40个Java多线程问题总结
- 14个你可能不知道的JavaScript调试技巧
- 请帮定夺18144447282和18144448055哪个号码好?
- Java解释器介绍
- 蓝桥杯基础练习题~~杨辉三角
- 技术分享连载(六十六)
- 容器的高度height使用百分比时,如何设置可以使里面的文字垂直居中。