为了将超分辨率整合进 GA,首先要搞明白 GamingAnywhere 的代码结构,参考知乎:
现在的 IDEA 是在服务器端渲染出低分辨率的图像,再在客户端进行超分,得到高分辨率的结果
Step 1 降低服务器端渲染分辨率
服务器端首先会对游戏画面进行桌面级别的捕捉,提供DirectX
与GDI
两种图像采集实现。因此降低服务器端渲染分辨率就只能直接修改游戏设置了,很悲剧地发现我用的 AssaultCube 游戏一改分辨率就报错闪退:
Further help & information can be found in your README, which is inside your AssaultCube directory.
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 153 (XFree86-VidModeExtension)
Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Value in failed request: 0x4400010
Serial number of failed request: 400
Current serial number in output stream: 402
查一下可以发现大概率是 nvidia 驱动和 OpenGL 版本的问题,卸载了 NVIDIA 驱动,发现没问题了,但是没有驱动根本捕捉不了窗口 QAQ,只能先换一个游戏试试
💡
补充:恢复系统默认分辨率的指令是 xrandr -s 0
于是用 minetest 试了一下发现没问题,但是客户端显示的并不是游戏窗口,而是默认左上角的一块固定大小的屏幕
Step 2 客户端实现超分辨率
客户端渲染t画面的函数调用过程为:
main()
→ProcessEvent(&event)
→
render_image((struct RTSPThreadParam*) event->user.data1, (int) ch & 0x0ffffffff)
render_image()
函数中调用 SDL2 库进行视频显示,可以参考在两篇博客: