Re: Does `shmsrc` / `shmsink` have a "stable" protocol?
Nicolas Dufresne via gstreamer-devel <[email protected]>
| Newsgroups | gmane.comp.video.gstreamer.devel |
|---|---|
| Message-ID | <[email protected]> |
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?