Cannot link custom gst element pads with nv* elements, even with caps = any

Using the latest devkit on a Xavier AGX I wrote a C++ GPU application using OpenCV and the cuda::* optical flow (farneback) and KMeans functions. It works perfectly and I am seeing close to a 100x speed improvement over the native Arm CPUs on the Xaiver, as expected.

I want to insert this into a GStreamer pipeline, so used my standard boilerplate GST+OpenCV filter that I use CPU-based sitatuions, it’s my “old-faithful.” But I’ve never tried to link it to an nv* element. I thought it would be just a matter of setting the VIDEO_SRC/SINK_CAPS using the feature macro to “video/x-raw(memory:NVMM), format=(string)VN12”… but I was wrong.

When trying to build a GStreamer element, even a dummy element that copies the inframe to the outframe fails to link/delay link. The failure occurs even if the SINK pads accept feature (memory:NVMM) or even … “any”!!! At GST_DEBUG=6 all I can see is a failure to find an always-available pad that matches.

(I also looked into nivivafilter, but going down to the *.cu level is a no-go because I need to eventually do a and send that data to another pad!)

There is so much code and debug logs I could attach that I figured I’d ask what would be helpful first.