yanjuner
deepin
2024-12-05 15:21 好好好
Reply Like 0 View the author
好好好
mark
很强
涩涩才是第一生产力.jpg
感谢分享
感谢分享
多发爱看
点了
多发爱看
很实用
谢了
6的6的,后续星火动态壁纸肯定对treeland支持有限,到时候也根据插件来搞,似乎很棒
Popular Ranking
ChangePopular Events
More
启用 dde-desktop 动态壁纸插件
食用方式
检查系统更新,更新至 V23 Release 正式版最新版本
下载地址:dde-desktop-videowallpaper-plugin/releases
前情提要
[经验分享] 在 V23 开启使用桌面自带的动态壁纸功能
之前 V23 Beta2 时,在 https://github.com/linuxdeepin/dde-file-manager-extensions/tree/master/src/dde-desktop/ddplugin-videowallpaper 中翻到了动态壁纸的插件。虽然官方打包文件管理器时默认没有编译这个插件,但不妨碍咱自己抠出来打包用着玩儿 XD......
然而 V23 Release 正式更新后的某一天,突然之间天塌了,动态壁纸不见了。这才发现,原本桌面的
dde-desktop
可执行程序都不见了,取而代之的是成为了dde-shell
的新插件org.deepin.ds.desktop.so
。插件化本身倒也算是好事,但是升级为了 Qt6 编译,不仅 SVG 渲染有问题,还经常出现桌面文件重命名或者启动器搜索时无法正常输入等问题(好像按一次 Win 把启动器调出来能好?)。对动态壁纸来说更是灾难,原本使用的
libdmr
后端没有适配 Qt6,只能切换为 Qt 自己的 QMultiMedia 来播放视频;不仅效率比较低,开销也大,还得重新适配 Qt6 的 API 变化......虽然大佬说后面在 Treeland 里会提供支持,但是咱等不及,只能自己动手丰衣足食了......
正文
一开始以为桌面变成了
dde-shell
的插件,大概率换成了 QML 重写,遂准备放弃来着。然而,最近终于摸到鱼了,就花了亿点时间看了下文件管理器插件,突然发现桌面壁纸,自动整理等相关插件还在文件管理器项目里。https://github.com/linuxdeepin/dde-file-manager/tree/master/src/plugins/desktop
适配 Qt6
按照动态壁纸插件之前的逻辑,如果使用 QMultiMedia 播放视频,就在视频每一帧变化时,把新的一帧转换成 QImage 图片,然后直接画在 QWidget 上。这么一想,和正常静态壁纸的逻辑好像没太大差别?
于是就干脆从
ddplugin-background
插件入手,对比下代码发现插件接口完全一致,那工作就简单了很多。直接动手,照搬 CMake 库调用,剩下的工作就是适配 Qt6 了。Qt6 中多媒体播放部分变化不小,好多接口都没有了(比如播放列表,音量控制等),只能暂时屏蔽相关逻辑了。最终编译成功,满心欢喜地把插件放进了系统目录,然后重启
dde-shell
......便不出意外地出了意外:dde-shell
直接崩溃,翻大车了......排错
此处省略亿点文字,最终才发现:自己的插件使用
ldd
查看链接动态库情况,莫名其妙出现了 Qt5 的库......原来是文件管理器虽然把部分对外接口移植到了 Qt6,但是没有把调用
dfm6-base
和dfm6-framework
需要的 CMake 和 PkgConfig 配置文件打包进dde-file-manager-dev
里,导致编译时引入了 Qt5 的动态库。这不翻大车就见鬼了......效果
和之前一样,并不能播放声音(因为音量控制啥的懒得写了......等 Treeland 更新吧)。
相比于使用
libdmr
后端播放视频,由于是逐帧绘制图片,可以自由控制纵横比,遇到宽屏视频也可以撑满整个屏幕(就是左右或者上下会损失一部分画面)。但问题也比较明显,性能会差不少,使用动态壁纸时连任务栏的动效都明显掉帧,内存控制也不太行(甚至关闭动态壁纸时内存也没法完全释放,不知道咋搞了,好在涨得不太多......)。
唯一的好处是 Qt6 的多媒体库似乎可以自动调用
vdpau
和vaapi
进行硬件渲染,CPU 占用倒是挺低的......总结
涩涩是好文明.jpg没啥好总结的......奇怪的坑太多了,有 Qt 的,有文件管理器的......
虽然 Qt6 的多媒体库看上去支持了调用硬件渲染,但是能力还是十分有限,但凡来个 4K,HDR,HEVC 编码啥的视频立刻卡死,内存飙升......果然还是只适合放放简单的视频啊......
果然,想要兼容性够好的话,还得是用
mpv
或者vlc
啥的。还是用 dependon 大佬写的星火动态壁纸
吧附带下这次单独抠出来的 ddplugin-background 源码,可以单独编译,希望有点参考价值吧
ddplugin-background.zip