Also, why do you need to change both the frontend and backend?
I changed wg_format_to_caps_video() (do you mean this is backend?) because we now totally ignore framerate settings in this function. the gst_video_info_set_format() call here only set format, width, height to info. Then we convert info to caps. So the result caps don't have framerate. Therefore I set framerate to info to make the result caps hold framerate information.
It also looks suspicious that you ensure the denominator is always nonzero in the frontend, but then check the denominator for zero in the backend rather than the numerator.
You are right. I could just move the denominator checking in frontend to wg_format_to_caps_video_{h264|wmv|cinepak}.
Also, I think it's ok to have numerator be zero. Zero framerate means variable fps in gstreamer. See: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/blob/discontinue...