xfangfang / wiliwili

第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上
https://xfangfang.github.io/wiliwili
GNU General Public License v3.0
3.11k stars 145 forks source link

[WIP] switch: hwaccel & deco3d #196

Closed xfangfang closed 10 months ago

xfangfang commented 12 months ago

添加编译参数 -DUSE_DEKO3D=ON 可将应用底层图形 API 从 OpenGL 切换到 deco3d。(需要搭配适配的 ffmpeg 与 mpv)

测试绝大部分 h264/h265 视频可以硬解,运行功耗最大降低 1W+。

存在的问题:

现在调用 MPV 方式类似之前在 opengl2/es 上使用的 MPV_NO_FB 模式(不使用独立的 framebuffer,直接控制mpv绘制到屏幕上)。进一步的优化需要异步渲染,更省GPU,减少硬解画面撕裂(或许可以)

Many thanks to averne for the assistance, and gratitude to this hero who single-handedly improves the overall multimedia application experience on the HOS.

dragonflylee commented 11 months ago

我这边的测试结果 H264@High@L4 和 HEVC@Main@L4 的1080p 硬解都OK HEVC@Main 10@L4 黑屏无法播放

dragonflylee commented 11 months ago

@xfangfang 升级到 0.36.0 似乎能解决部分问题?https://gbatemp.net/threads/nxmp-nintendo-switch-media-player.601868/post-10234489

Updated MPV to 0.36.0 (Needed for use new FFMPEG without issue)

好像 averne 解决的 10bit 解码的问题?https://github.com/averne/FFmpeg/commit/f01d9768d872a977374fa1134e78d97dd582903d

等等 nxmp 更新再看看怎么做吧

xfangfang commented 11 months ago

@dragonflylee nxmp 更新 mpv 可能是因为他原来的版本太低了(0.34.1),averne 的 mpv 用的是 0.35.1 应该是正好能用FFmpeg 6.0 的。(他还没开源,或许还有一些内容要修改) 看起来 nxmp 倒是能正常用起来那个 FFMPEG,不是很清楚为啥我这边就得注释点东西才行,看起来离他更新也不远了,等等看他的更新吧。 感谢同步这些信息~

dragonflylee commented 11 months ago

关于 /dev/nvhost-nvjpg 找到的资料如下,大概率和权限有关系? https://github.com/switchbrew/libnx/blob/master/nx/source/services/nv.c#L27-L47

https://switchbrew.org/w/index.php?title=NV_services&mobileaction=toggle_view_desktop#NvDrvPermission https://github.com/XITRIX/Moonlight-Switch/commit/c56fbe2b4de2cd3153f07ea39cc00b8230a1dbed

Moonlight-Switch 的做法似乎是在 nvInitialize 前通过 hack 方法修改了 applet 类型

https://github.com/averne/FFmpeg/blob/tx1/libavutil/hwcontext_tx1.c#L338

xfangfang commented 11 months ago

@dragonflylee 好像确实是这个问题,deko3d 初始化时候也会调用 nvInitialize,所以我在borealis那边修改了一下:https://github.com/xfangfang/borealis/commit/1e45b3cdb66df7e736b384e8f6d3b690634b9e10