visualizer: handle non-existant pool in the default allocation query
authorMatthew Waters <ystreet00@gmail.com>
Thu, 14 Mar 2013 00:15:29 +0000 (11:15 +1100)
committerTim-Philipp Müller <tim@centricular.net>
Mon, 1 Apr 2013 20:13:38 +0000 (21:13 +0100)
gst_query_set_nth_allocation_pool() requires there to be a pool in the
query already. This is not always the case when we get the query from
upstream.  Use gst_query_add_allocation_pool() instead in such case.

https://bugzilla.gnome.org/show_bug.cgi?id=681719

ext/libvisual/gstaudiovisualizer.c

index 29c45d7..aead4f1 100644 (file)
@@ -932,6 +932,7 @@ default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query)
   GstAllocationParams params;
   GstStructure *config;
   gboolean update_allocator;
+  gboolean update_pool;
 
   gst_query_parse_allocation (query, &outcaps, NULL);
 
@@ -949,10 +950,12 @@ default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query)
 
   if (gst_query_get_n_allocation_pools (query) > 0) {
     gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+    update_pool = TRUE;
   } else {
     pool = NULL;
     size = GST_VIDEO_INFO_SIZE (&scope->vinfo);
     min = max = 0;
+    update_pool = FALSE;
   }
 
   if (pool == NULL) {
@@ -974,10 +977,13 @@ default_decide_allocation (GstAudioVisualizer * scope, GstQuery * query)
   if (allocator)
     gst_object_unref (allocator);
 
-  if (pool) {
+  if (update_pool)
     gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+  else
+    gst_query_add_allocation_pool (query, pool, size, min, max);
+
+  if (pool)
     gst_object_unref (pool);
-  }
 
   return TRUE;
 }