Hello, @steely-glint
Good news! 
We solved this problem, after testing it can not only be stabilized at 1920x1080 30 fps, but also at 3840x2160 30 fps.
But the steps can be a little complicated
Please follow these steps.
Clone multimedia debs
git clone https://github.com/numbqq/multimedia_debs_aml.git
Install these(not all)
sudo dpkg -i multimedia_debs_aml/focal/arm64/gst-aml-drmbufferpool-plugins_0.1-202307_arm64.deb
sudo dpkg -i multimedia_debs_aml/focal/arm64/mediactrlsrc_0.1-202307_arm64.deb
Then clone gst related debs
git clone https://github.com/numbqq/gstreamer_aml.git
Install them in order 
sudo dpkg -i gstreamer-aml_0.3-202307_arm64.deb
cd gstreamer1.0-debs/
sudo dpkg -i libgstreamer1.0-0_1.20.3-0ubuntu1_arm64.deb
sudo dpkg -i gir1.2-gstreamer-1.0_1.20.3-0ubuntu1_arm64.deb
sudo dpkg -i gstreamer1.0-tools_1.20.3-0ubuntu1_arm64.deb
cd ../gst-plugins-base1.0-debs/
sudo dpkg -i libgstreamer-plugins-base1.0-0_1.20.1-1_arm64.deb
sudo dpkg -i libgstreamer-gl1.0-0_1.20.1-1_arm64.deb
sudo dpkg -i gstreamer1.0-plugins-base_1.20.1-1_arm64.deb
sudo dpkg -i gstreamer1.0-plugins-base-apps_1.20.1-1_arm64.deb
sudo dpkg -i gstreamer1.0-alsa_1.20.1-1_arm64.deb
sudo dpkg -i gir1.2-gst-plugins-base-1.0_1.20.1-1_arm64.deb
cd ../gst-plugins-good1.0-debs/
sudo dpkg -i libgstreamer-plugins-good1.0-0_1.20.3-0ubuntu1_arm64.deb
sudo dpkg -i gstreamer1.0-plugins-good_1.20.3-0ubuntu1_arm64.deb
sudo dpkg -i gstreamer1.0-pulseaudio_1.20.3-0ubuntu1_arm64.deb
cd ../gst-plugins-bad1.0-debs/
sudo dpkg -i libgstreamer-plugins-bad1.0-0_1.20.3-0ubuntu1_arm64.deb
sudo dpkg -i gstreamer1.0-plugins-bad_1.20.3-0ubuntu1_arm64.deb
sync
sudo reboot
Download this file.
https://dl.khadas.com/.test/libgstvideo4linux2.so
Replace old one
sudo cp libgstvideo4linux2.so /usr/lib/aarch64-linux-gnu/gstreamer-1.0/
Then clear the cache directory
rm .cache/gstreamer-1.0/ -rf
Final you can run it!
gst-launch-1.0 -v v4l2src device=/dev/video50 io-mode=mmap ! video/x-raw,width=1920,height=1080,framerate=30/1,format=NV12 ! videoconvert ! queue ! fpsdisplaysink
The followings are the result that run by me.
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 64, dropped: 0, current: 30.01, average: 30.25
Last but not least, if you think these steps too complicated, you can also wait for the new kernel released by Khadas Team in Q3 