videopool: update buffer size after video alignment
authorSong Bing <b06498@freescale.com>
Tue, 16 Dec 2014 11:10:53 +0000 (12:10 +0100)
committerWim Taymans <wtaymans@redhat.com>
Tue, 16 Dec 2014 11:14:53 +0000 (12:14 +0100)
Update the new buffer size after alignment in the pool configuration
before calling the parent set_config. This ensures that the parent knows
about the buffer size that we will allocate and makes the size check
work in the release_buffer method.

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

gst-libs/gst/video/gstvideopool.c
sys/ximage/ximagepool.c
sys/xvimage/xvimagepool.c

index f1e7c00..abc6ba5 100644 (file)
@@ -122,11 +122,13 @@ video_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
   GstVideoBufferPoolPrivate *priv = vpool->priv;
   GstVideoInfo info;
   GstCaps *caps;
+  guint size, min_buffers, max_buffers;
   gint width, height;
   GstAllocator *allocator;
   GstAllocationParams params;
 
-  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL))
+  if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers,
+          &max_buffers))
     goto wrong_config;
 
   if (caps == NULL)
@@ -170,6 +172,9 @@ video_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
   }
   priv->info = info;
 
+  gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
+      max_buffers);
+
   return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
 
   /* ERRORS */
index 9d4ac2f..3582f11 100644 (file)
@@ -542,8 +542,10 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
   GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
   GstVideoInfo info;
   GstCaps *caps;
+  guint size, min_buffers, max_buffers;
 
-  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL))
+  if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers,
+          &max_buffers))
     goto wrong_config;
 
   if (caps == NULL)
@@ -596,6 +598,9 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
 
   xpool->info = info;
 
+  gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
+      max_buffers);
+
   return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
 
   /* ERRORS */
index 77fc272..614f197 100644 (file)
@@ -60,9 +60,11 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
   GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
   GstVideoInfo info;
   GstCaps *caps;
+  guint size, min_buffers, max_buffers;
   GstXvContext *context;
 
-  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL))
+  if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers,
+          &max_buffers))
     goto wrong_config;
 
   if (caps == NULL)
@@ -124,6 +126,9 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
   xvpool->crop.w = xvpool->info.width;
   xvpool->crop.h = xvpool->info.height;
 
+  gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
+      max_buffers);
+
   return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
 
   /* ERRORS */