[Xcb] Can XCB return an image with an NVIDIA GPU memory address?

Peter Harris peter at harr.ca
Mon Aug 5 16:21:09 UTC 2019


On 2019-08-05 11:07 a.m., Suhail Doshi wrote:
> My question is: Is there a way to get an image of the desktop that
> returns a pointer that's GPU memory? For example, in Windows 10, there's
> an API called the Desktop Duplication API which will allows you to do
> this. Then, it lets you copy the data in that GPU memory block to
> another one such that you can encode the frame with H264, for example. I
> am using NVIDIA GPUs and utilizing their NVENC SDK.
> 
> I am looking for an equivalent.

XCB is very low-level. For most things, you probably want to use a
higher level library (such as, for example, OBS:
https://github.com/obsproject/obs-studio , which includes a
cross-platform library with an API that is probably closer to the
Desktop Duplication API than anything in XCB).

With that said, if you want to implement the details yourself, you can
take a peek inside OBS and see that the capture method that copies
uncompressed pixels back to main memory uses xcb_shm_get_image (and
xcb_xfixes_get_cursor_image, and xcb_xinerama_query_screens, among other
things).
https://github.com/obsproject/obs-studio/blob/master/plugins/linux-capture/xshm-input.c

Peter Harris


More information about the Xcb mailing list