v4l2sink: destroy buffer pool when changing state to NULL
authorMichael Grzeschik <m.grzeschik@pengutronix.de>
Wed, 23 Jun 2010 09:47:43 +0000 (11:47 +0200)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 6 Jul 2010 10:03:39 +0000 (11:03 +0100)
In the case we change the State from READY_TO_NULL the buffers in the pool
still hold an open dup file descriptor to the device, therefore the device
release function will not be called and the device will probably answer with
-EBUSY when we reopen it in the next NULL_TO_READY transition.

Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
See bug #622500 and #612244.

sys/v4l2/gstv4l2sink.c

index 64cdadcaa55f6745e5d0a6a5018c7f00143a37db..679f7e2903c33bbdefbe2f5a3daba66fc9b04675 100644 (file)
@@ -461,6 +461,8 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition)
       }
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
+      gst_v4l2_buffer_pool_destroy (v4l2sink->pool);
+      v4l2sink->pool = NULL;
       /* close the device */
       if (!gst_v4l2_object_stop (v4l2sink->v4l2object))
         return GST_STATE_CHANGE_FAILURE;