glupload: Fix caps query with no filter
authorJan Schmidt <jan@centricular.com>
Thu, 30 Jun 2022 02:50:17 +0000 (12:50 +1000)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 30 Jun 2022 08:52:04 +0000 (08:52 +0000)
If no filter caps are provided with a caps query, always
generate a full set of all caps from all upload methods,
not just the configured one. This is needed to handle
renegotiation when dealing with raw sysmem caps - as the upload
method might accept raw sysmem caps, but only the raw data
uploader adds those to the caps query.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2687>

subprojects/gst-plugins-base/gst-libs/gst/gl/gstglupload.c

index 8cd09f6..96d2880 100644 (file)
@@ -2358,7 +2358,12 @@ gst_gl_upload_transform_caps (GstGLUpload * upload, GstGLContext * context,
   GstCaps *result, *tmp;
   gint i;
 
-  if (upload->priv->method) {
+  /* If (and only if) there is an upstream filter, we can
+   * save some time by first checking if the configured upload method
+   * generates intersecting caps. If there's no filter, or no
+   * intersection we need to generate a full set of caps from all
+   * uploaders for upstream to choose from */
+  if (upload->priv->method && filter != NULL) {
     tmp = upload->priv->method->transform_caps (upload->priv->method_impl,
         context, direction, caps);
     if (tmp) {