Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] switch: hwaccel & deco3d #196

Merged
merged 13 commits into from
Oct 25, 2023
Merged

[WIP] switch: hwaccel & deco3d #196

merged 13 commits into from
Oct 25, 2023

Conversation

xfangfang
Copy link
Owner

@xfangfang xfangfang commented Aug 26, 2023

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

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

存在的问题:

  • 部分 UI 操作报错 (应用某个位置的cmdbuf满了,在屏幕要绘制的内容过多时会出现)
  • 在应用内按返回关闭应用时,偶尔出现报错,直接从桌面强制关闭则没事(甚至关的更快了)
  • ffmpeg 使用的是 averne/FFmpeg 不过我需要把其中 nvjpg channel 的初始化和销毁部分 注释才能正常 (/dev/nvhost-nvjpg),不知道是不是和机器内已有的插件冲突
  • 软解视频会导致UI卡死,这个只在 mpv 使用 deco3d 输出时出现,而CPU渲染输出时 (MPV_SW_RENDER)不存在。
  • av1 格式不可用,因为用的是软解,而软解目前存在问题(见上一条)
  • 测试部分HDR视频不可用,可能和目前对硬解的支持不足有关
  • Anime4K 等 shader 不兼容 (暂不考虑)
  • 视频在加载前,mpv不会绘制黑色背景
  • 硬解偶尔出现画面撕裂,我猜是要切换到异步渲染才能避免

现在调用 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
Copy link
Contributor

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

@dragonflylee
Copy link
Contributor

@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 解码的问题?averne/FFmpeg@f01d976

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

@xfangfang
Copy link
Owner Author

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

@dragonflylee
Copy link
Contributor

dragonflylee commented Aug 30, 2023

关于 /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
XITRIX/Moonlight-Switch@c56fbe2

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

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

@xfangfang
Copy link
Owner Author

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

@xfangfang xfangfang merged commit f70206b into dev Oct 25, 2023
13 checks passed
@xfangfang xfangfang deleted the deko3d branch October 31, 2023 02:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants