basically i need a fullscreen borderless sink for my use-case. I was using nvoverlaysink in JP4.6.4 and it was and still is perfect for my use-case, it can run from GUI, self adjust the resolution to a capture card and i don’t need to restart gdm if i need to do something.
I know that nvdrmvideosink exists, but it cannot run from GUI and also somehow flickers when launching my code from python bindings, also flickers on plane 1 and plane 2.
Maybe someone has an idea or experience porting nvoverlaysink to jetpack 5.1.2 ? or maybe another alternative ?
I have managed to install the gst-egl and gst-omx1 from JP4.6.4 public_sources.tbz2, hoping it would bring nvoverlaysink back, but the .so files end up getting blacklisted from gstreamer. GST-DEBUG (after deleting cache) is not giving any info to why exactly the plugin is being blacklisted.
nvdrmvideosink supports these properties
conn_id: Set the connector ID for the display.
plane_id: Set the plane ID.
set_mode: Set the default mode (resolution) for playback.
the output will be sent to an HDMI capture card to be recorded by a laptop as a virtual camera.
Things i find from about nvoverlaysink:
With my program nvdrmvideosink can output the video, but it flickers. I am not sure why that is
If im not mistaken, nvoverlaysink can self adjust the resolution so that it always gives a fullscreen on the hdmi capture card output. With nvdrmvideosink i have to adjust manually from the python program so that uses exactly the right resolution, not bigger not smaller
this is not a big problem, but it’s practical that nvoverlaysink can also be run on GUI
Can you help to setup the nvdrmvideosink for this case ?
For such program (with nvcompositor & textoverlay), do i need to link some elements before the nvdrmvideosink ?
What does “set-mode” actually do ? i am not too sure from the description and everytime i set “set-mode = 1”, i only get a black screen
You can use the gst-inspect-1.0 nvdrmvideosink to check the set-mode parameter.
set-mode : Selects whether user wants to choose the default mode which is
already set by connector (set_mode = 0) or wants to select the mode
of the video stream (set_mode = 1). In the latter case, error is
thrown when the input stream resolution does not match with
the supported modes of the connector.
Nvdrmvideosink cannot be run along with another GUI system.
I also found out in the meantime that this pipeline works without flicker with nvvidconv instead of nvvideoconvert to convert to CPU before textoverlay:
And i think, also looking at the pipeline you gave with nvvidconv, confirmed that nvvideoconvert was the problem. At the moment, all conversion in my pipeline is done by nvvideoconvert (well, now except the one before textoverlay).
What is actually the difference between nvvideoconvert and nvvidconv ? I don’t see any big difference yet in performance, but is there a performance difference expected between nvvidconv and nvvideoconvert ?
So my pipeline is mixed with Nvidia plugins (nvinfer, nvcompositor, …) and Gstreamer standard plugins (textoverlay, filesrc, …), i think for my case then i would need to look for accelerated Gstreamer instead of Deepstream, if i understand correctly ?
should i use nvvidconv for every conversion ? or nvvideoconvert where it works and just use nvvidconv if nvvideoconvert does not work ?