我有一个使用“eglfs”平台在 Raspberry Pi 3 上运行的全屏 Qt 应用程序。它使用 KMS/DRM 和/dev/dri/core0
GPU 设备进行绘制。 GPU 是 Broadcom VideoCore IV。
我想录制屏幕但没有成功。我最接近的是:
使用
ffmpeg
和kmsgrab
输入设备。不幸的是ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4
产生了乱码视频,如下所示。将 Qt 重定向到帧缓冲区。例如:
./my_app -platform linuxfb:fb=/dev/fb0
。然后是更直接的ffmpeg -f fbdev -i /dev/fb0 output.mp4
工作。不幸的是,linuxfb
它不会渲染诸如Qt5Compat.GraphicalEffects
之类的功能layer.effect
,因此我的按钮不会显示。
鉴于乱码输出ffmpeg
看起来如此接近,我尝试传递各种format_modifier
来自drm_fourcc.h但没有看到任何差异。当然有一组hwmap
或format_modifier
标志可以确保输出类似于屏幕上显示的内容?
作为参考,我使用内核版本 5.4.83-v8 和dtoverlay=vc4-fkms-v3d
.如果我认为会有什么不同的话,我可以调整这些事情。