v4l2object: Orphan buffer pool on object_stop if supported
authorDamian Hobson-Garcia <dhobsong@igel.co.jp>
Mon, 27 May 2019 09:08:54 +0000 (18:08 +0900)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 7 Aug 2019 22:57:48 +0000 (23:57 +0100)
Use V4L2 buffer orphaning, on recent kernels so that
the device can be restarted immediately with
a new buffer pool during renogatiation.

sys/v4l2/gstv4l2object.c

index 01c5abf..dad426a 100644 (file)
@@ -4158,9 +4158,11 @@ gst_v4l2_object_stop (GstV4l2Object * v4l2object)
     goto done;
 
   if (v4l2object->pool) {
-    GST_DEBUG_OBJECT (v4l2object->dbg_obj, "deactivating pool");
-    gst_buffer_pool_set_active (v4l2object->pool, FALSE);
-    gst_object_unref (v4l2object->pool);
+    if (!gst_v4l2_buffer_pool_orphan (&v4l2object->pool)) {
+      GST_DEBUG_OBJECT (v4l2object->dbg_obj, "deactivating pool");
+      gst_buffer_pool_set_active (v4l2object->pool, FALSE);
+      gst_object_unref (v4l2object->pool);
+    }
     v4l2object->pool = NULL;
   }