Does `shmsrc` / `shmsink` have a "stable" protocol?

Nicolas Dufresne nicolas at ndufresne.ca
Mon Sep 18 19:25:13 UTC 2023


Hi Greg,

Le dimanche 17 septembre 2023 à 13:18 -0500, Greg Kennedy via gstreamer-devel a
écrit :
> I am trying to write an app that inserts frames into an external
> gstreamer pipeline, but without marshalling through a socket or
> container format.  I hit upon the idea of sharing the framebuffer via
> shm IPC, avoiding a copy entirely.
> 
> So I considered writing a plugin for this, but it occurred to me that
> there is already shmsrc in plugins-bad, and it does exactly what I
> would want: getting frames from shared mem and pushing them into a
> pipeline, plus supporting other gstreamer features like changing caps
> midstream.
> 
> Normally of course shmsrc needs a matching shmsink; my question is
> somewhat of a hack but I am curious if this could work:
> 
> * Modify my app to "look like" an shmsink - exposing framebuffer and
> control info just like shmsink would

Inside the plugin gode, there is a BSD licence part for that purpose.

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/shm/shmpipe.h?ref_type=heads
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/shm/shmalloc.h?ref_type=heads

And same for their associated .c files. Typically one would copy that into their
project and use it.

> * Run a pipeline with shmsrc reading from my app's masquerading interface
> 
> I am curious how "stable" the interface is between shmsrc / shmsink.
> If it changes frequently, this will be fragile - but if it's
> well-defined, then I should be able to do it, and maybe it could be
> documented (or spun off into a header) so others can do the same.

-bad repo has unstable API, but we have never changed it in 10 years, mostly
because of the fact that it may be used in some third party software. For a
modern approach to this, Xavier posted this recently:

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5328

This is similar, but the approach is different, there is FDs per buffer/memory,
this allow passing through DMAbuf and/or other already FD located content.

> 
> Thoughts?



More information about the gstreamer-devel mailing list