vaapisink: fail if surface display is different
authorHyunjun Ko <zzoon@igalia.com>
Wed, 5 Jul 2017 06:32:43 +0000 (15:32 +0900)
committerVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Wed, 26 Jul 2017 12:21:54 +0000 (14:21 +0200)
Replacing GstVaapiDisplay during rendering might be hiding problems
at some cases, even though it's safe currently since we use cache
of GstVaapidisplay.

Play safe by failing if this happens.

https://bugzilla.gnome.org/show_bug.cgi?id=766704

gst/vaapi/gstvaapisink.c

index d01c727..96ca674 100644 (file)
@@ -1408,8 +1408,9 @@ gst_vaapisink_show_frame_unlocked (GstVaapiSink * sink, GstBuffer * src_buffer)
     return ret;
 
   meta = gst_buffer_get_vaapi_video_meta (buffer);
-  GST_VAAPI_PLUGIN_BASE_DISPLAY_REPLACE (sink,
-      gst_vaapi_video_meta_get_display (meta));
+  if (gst_vaapi_video_meta_get_display (meta) !=
+      GST_VAAPI_PLUGIN_BASE_DISPLAY (sink))
+    goto different_display;
 
   proxy = gst_vaapi_video_meta_get_surface_proxy (meta);
   if (!proxy)
@@ -1491,6 +1492,13 @@ no_surface:
     ret = GST_FLOW_ERROR;
     goto done;
   }
+
+different_display:
+  {
+    GST_WARNING_OBJECT (sink, "incoming surface has different VAAPI Display");
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
 }
 
 static GstFlowReturn