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