[FFmpeg-trac] #8542(avdevice:reopened): ffmpeg use kmsgrab on wayland not working
FFmpeg
trac at avcodec.org
Thu May 7 21:42:11 EEST 2020
#8542: ffmpeg use kmsgrab on wayland not working
-------------------------------------+-------------------------------------
Reporter: | Owner:
chenjie199234 |
Type: defect | Status: reopened
Priority: normal | Component: avdevice
Version: git-master | Resolution:
Keywords: kmsgrab | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 1 |
-------------------------------------+-------------------------------------
Comment (by Lynne):
The Mesa PR is here:
[https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1466]
It might say its 2 months old but it is in fact 2 years old, and no matter
how much I've asked for it to be merged on IRC its development is beyond
sluggish.
Its a really big blocker to doing anything useful with Vulkan on linux. I
too, really need this merged to get my project working.
The Vulkan API with the modifiers EXT is fully capable of dealing with any
DMABUF thrown at it. And the hwcontext can too, deal with any DMABUF
thrown at it. Its pedantically correct according to the specs. It
definitely does not produce multiplane images however, merely a single
image composed of multiple objects (dmabuf fd mapped as VulkanMemory).
In case of multiplane images (e.g. NV12 or yuv420p), it produces one image
per plane, so still not multiplanar. Multiplanar images in Vulkan are
generally crap and you shouldn't use them, even according to official
Intel devs.
Unfortunately, without modifiers, Vulkan assumes all images on Intel use
either Y tiling or linear images. And the only thing producing Y tiled
images on Intel is VAAPI. Hence why only VAAPI->DMABUF->Vulkan works.
Compositors _cannot_ draw to Y tiled buffers, only to X tiled buffers.
Even if you disable compressed surfaces, and you try to import a display
DMABUF, you'll get garbage out, as the tiling will be wrong. VAAPI will
quite happily work though.
In the meantime, I'm writing this: [https://github.com/cyanreg/txproto].
It uses the sway export dmabuf extension and the screencopy extension to
capture the screen and filter/encode it, although it can use the kmsgrab
libavdevice library too. If you don't want to modify wlroots to disable
the modifiers (I can give a patch on IRC), you can use the screencapture
protocol to upload the image to either Vulkan, OpenCL or VAAPI (or even
CUDA) and encode it that way, along with sound (and unlike ffmpeg, it'll
have frame-perfect audio-video sync).
--
Ticket URL: <https://trac.ffmpeg.org/ticket/8542#comment:8>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list