v4l2object: Don't leak downstream pool in propose_allocation

parse_nth_allocation_pool() give a ref on the pool, we need to unref it
when done.
This commit is contained in:
Nicolas Dufresne 2014-04-16 17:04:42 -04:00
parent eee61f39e5
commit d3383f9d4c

View file

@ -3120,7 +3120,7 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
/* no downstream pool, use our own then */
GST_DEBUG_OBJECT (obj->element,
"read/write mode: no downstream pool, using our own");
pool = obj->pool;
pool = gst_object_ref (obj->pool);
size = obj->sizeimage;
}
break;
@ -3134,7 +3134,7 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
if (can_use_own_pool) {
if (pool)
gst_object_unref (pool);
pool = obj->pool;
pool = gst_object_ref (obj->pool);
size = obj->sizeimage;
GST_DEBUG_OBJECT (obj->element,
"streaming mode: using our own pool %" GST_PTR_FORMAT, pool);
@ -3224,23 +3224,32 @@ done:
else
gst_query_add_allocation_pool (query, pool, size, min, max);
if (pool)
gst_object_unref (pool);
return TRUE;
pool_failed:
{
/* setup_pool already send the error */
return FALSE;
goto cleanup;
}
config_failed:
{
GST_ELEMENT_ERROR (obj->element, RESOURCE, SETTINGS,
(_("Failed to configure internal buffer pool.")), (NULL));
return FALSE;
goto cleanup;
}
no_size:
{
GST_ELEMENT_ERROR (obj->element, RESOURCE, SETTINGS,
(_("Video device did not suggest any buffer size.")), (NULL));
goto cleanup;
}
cleanup:
{
if (pool)
gst_object_unref (pool);
return FALSE;
}
}