vaapipostproc: before set surface proxy, check if it already been created and exist.
authorWangfei <fei.w.wang@intel.com>
Tue, 15 Jan 2019 06:33:11 +0000 (14:33 +0800)
committerWangfei <fei.w.wang@intel.com>
Tue, 15 Jan 2019 06:48:19 +0000 (14:48 +0800)
Fix the deinterlace black frame when playing with glimagesink:
gst-launch-1.0 filesrc location=test.264 ! h264parse ! vaapih264dec \
! vaapipostproc deinterlace-mode=1 deinterlace-method=1 ! glimagesink

gst/vaapi/gstvaapipostproc.c

index 24d93f6..55e3a56 100644 (file)
@@ -723,13 +723,15 @@ gst_vaapipostproc_process_vpp (GstBaseTransform * trans, GstBuffer * inbuf,
     if (!outbuf_meta)
       goto error_create_meta;
 
-    proxy =
-        gst_vaapi_surface_proxy_new_from_pool (GST_VAAPI_SURFACE_POOL
-        (postproc->filter_pool));
-    if (!proxy)
-      goto error_create_proxy;
-    gst_vaapi_video_meta_set_surface_proxy (outbuf_meta, proxy);
-    gst_vaapi_surface_proxy_unref (proxy);
+    if (!gst_vaapi_video_meta_get_surface_proxy (outbuf_meta)) {
+      proxy =
+          gst_vaapi_surface_proxy_new_from_pool (GST_VAAPI_SURFACE_POOL
+          (postproc->filter_pool));
+      if (!proxy)
+        goto error_create_proxy;
+      gst_vaapi_video_meta_set_surface_proxy (outbuf_meta, proxy);
+      gst_vaapi_surface_proxy_unref (proxy);
+    }
 
     if (deint) {
       deint_flags = (tff ? GST_VAAPI_DEINTERLACE_FLAG_TOPFIELD : 0);