videofilter: Really add a buffer pool if none was provided
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 8 Aug 2012 10:19:31 +0000 (12:19 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 8 Aug 2012 10:19:31 +0000 (12:19 +0200)
And also use the allocation parameters from the query if any
and if there are none set our own (16-byte alignment) on the
query.

gst-libs/gst/video/gstvideofilter.c

index c21358c..a29a58b 100644 (file)
@@ -79,15 +79,24 @@ gst_video_filter_propose_allocation (GstBaseTransform * trans,
 
   size = GST_VIDEO_INFO_SIZE (&info);
 
-  if (gst_query_get_n_allocation_pools (query) < 0) {
+  if (gst_query_get_n_allocation_pools (query) == 0) {
     GstStructure *structure;
-    static GstAllocationParams params = { 0, 0, 0, 15, };
+    GstAllocator *allocator = NULL;
+    GstAllocationParams params = { 0, 0, 0, 15, };
+
+    if (gst_query_get_n_allocation_params (query) > 0)
+      gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
+    else
+      gst_query_add_allocation_param (query, allocator, &params);
 
     pool = gst_video_buffer_pool_new ();
 
     structure = gst_buffer_pool_get_config (pool);
     gst_buffer_pool_config_set_params (structure, caps, size, 0, 0);
-    gst_buffer_pool_config_set_allocator (structure, NULL, &params);
+    gst_buffer_pool_config_set_allocator (structure, allocator, &params);
+
+    if (allocator)
+      gst_object_unref (allocator);
 
     if (!gst_buffer_pool_set_config (pool, structure))
       goto config_failed;