I’m afraid what you want will not be easy because of that. You may consider redesigning in multi-thread using the same process memory space.
If you can’t do this, I see 2 possible workarounds without a GUI.
-
If your monitor supports PIP mode and has both a HDMI and a DP inputs, you may split monitor into 2 displays (one for HDMI and one for DP, Xavier-NX devkit has both connectors, use 2 cables), then use nvdrmvideosink property
conn-idfor displaying frames into the wanted display. Not sure if the monitor will properly keep that PIP/inputs config upon wake up, though. -
Second workaround would be using shmsink/shmsrc for interprocess. You would do something like:
Process1 → queue → shmsink socket-path=./app1
Process2 → queue → shmsink socket-path=./app2
Or:
Process1 → identity drop-allocation=1 → shmsink socket-path=./app1
Process2 → identity drop-allocation=1 → shmsink socket-path=./app2
Then read both inputs and compose:
gst-launch-1.0 shrmrc socket-path=./app1 do-timestamp=1 ! nvvidconv ! 'video/x-raw(memory:NVMM),format=RGBA' ! queue ! comp.sink_0 shrmrc socket-path=./app2 do-timestamp=1 ! nvvidconv ! 'video/x-raw(memory:NVMM),format=RGBA' ! queue ! comp.sink_1 nvcompositor name=comp ! 'video/x-raw(memory:NVMM),format=BGRA' ! nvvidconv ! nvdrmvideosink
Be aware that this may cost CPU usage… and you may have to manage the deletion of sockets (producer would only clean if the consumer no longer uses it…May be better creating your named sockets beforehand, not tested though).