vulkanupload: actually loop over possible uploaders
authorMatthew Waters <matthew@centricular.com>
Thu, 8 Feb 2018 05:55:43 +0000 (16:55 +1100)
committerMatthew Waters <matthew@centricular.com>
Thu, 8 Feb 2018 05:55:43 +0000 (16:55 +1100)
Fix some funky control that wasn't working

CID #1417219

ext/vulkan/vkupload.c

index 07bf6e5..ffe963e 100644 (file)
@@ -794,7 +794,8 @@ gst_vulkan_upload_prepare_output_buffer (GstBaseTransform * bt,
   GstVulkanUpload *vk_upload = GST_VULKAN_UPLOAD (bt);
   GstFlowReturn ret;
 
-  do {
+restart:
+  {
     gpointer method_impl;
     const struct UploadMethod *method;
 
@@ -803,24 +804,24 @@ gst_vulkan_upload_prepare_output_buffer (GstBaseTransform * bt,
 
     ret = method->perform (method_impl, inbuf, outbuf);
     if (ret != GST_FLOW_OK) {
-      do {
-        if (!_upload_find_method (vk_upload)) {
-          GST_ELEMENT_ERROR (bt, RESOURCE, NOT_FOUND,
-              ("Could not find suitable uploader"), (NULL));
-          return GST_FLOW_ERROR;
-        }
-
-        method = upload_methods[vk_upload->current_impl];
-        method_impl = vk_upload->upload_impls[vk_upload->current_impl];
-        if (!method->set_caps (method_impl, vk_upload->in_caps,
-                vk_upload->out_caps))
-          /* try the next method */
-          continue;
-      } while (FALSE);
+    next_method:
+      if (!_upload_find_method (vk_upload)) {
+        GST_ELEMENT_ERROR (bt, RESOURCE, NOT_FOUND,
+            ("Could not find suitable uploader"), (NULL));
+        return GST_FLOW_ERROR;
+      }
+
+      method = upload_methods[vk_upload->current_impl];
+      method_impl = vk_upload->upload_impls[vk_upload->current_impl];
+      if (!method->set_caps (method_impl, vk_upload->in_caps,
+              vk_upload->out_caps))
+        /* try the next method */
+        goto next_method;
+
       /* try the uploading with the next method */
-      continue;
+      goto restart;
     }
-  } while (FALSE);
+  }
 
   if (ret == GST_FLOW_OK) {
     /* basetransform doesn't unref if they're the same */