Device specifications:
Jetson Orin Nano 4GB
Seeedstudio Jetpack 6.2
Balena OS 6.4.4
The goal is to have a Gstreamer pipeline showing camera feed at a 1080p on a HDMI connected monitor. When the camera feed is disabled/unavailable an image is displayed using FBI.
By default EDID will negotiate the highest possible resolution (i.e. 4K) that will be used for the framebuffer and DRM. Both FBI and Gstreamer have the default behavior to scale 1080p input to 4K output.
By making changes to extlinux.conf it is possible to have the kernel cmdline to include video=HDMI-A-1:1920x1080@60D which forces the HDMI mode to use 1080p.
This results in FBI properly displaying images as 1080p. For the Gstreamer pipeline to HDMI we use “nvdrmvideosink” which is supported on the headless OS. The remaining problem is that this pipeline still result in 4K output over the DRM buffer where only the top-left corner is filled with the 1080p feed. This particular sink supports “set-mode =1” which re-scales the output to 1080p full-screen and gives the desired output, but after doing so it is not possible to switch back to FBI anymore. It seems that it changes the mode in DRM, and that change propagates down to the underlying frame-buffer device, making the FBI configuration invalid.
The following pipeline is used:
gst-launch-1.0 rtspsrc location=rtsp://172.26.40.107/live/av0 latency=0 ! rtpjpegdepay ! nvv4l2decoder mjpeg=1 ! nvvidconv ! ‘video/x-raw(memory:NVMM), format=RGBA’ ! nvdrmvideosink set-mode=1
I also tried adding height and width to the capstone but since the input is already 1080p it doesn’t have any effect.
gst-launch-1.0 rtspsrc location=rtsp://172.26.40.107/live/av0 latency=0 ! rtpjpegdepay ! nvv4l2decoder mjpeg=1 ! nvvidconv ! ‘video/x-raw(memory:NVMM), width=1920, height=1080, format=RGBA’ ! nvdrmvideosink set-mode=1
How can I make the pipeline work for the correct resolution without messing up the frame-buffer?