libgstlibvisual_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS)
libgstlibvisual_la_LIBADD = \
$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_MAJORMINOR).la \
+ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_MAJORMINOR).la \
$(GST_BASE_LIBS) $(LIBVISUAL_LIBS)
libgstlibvisual_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstlibvisual_la_LIBTOOLFLAGS = --tag=disable-static
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
#include <gst/video/video.h>
+#include <gst/video/gstvideopool.h>
#include <gst/audio/audio.h>
#include <libvisual/libvisual.h>
GstCaps *caps;
GstQuery *query;
GstBufferPool *pool = NULL;
- guint size, min, max, prefix, padding, alignment;
+ GstStructure *config;
+ guint size, min, max;
caps = gst_pad_query_caps (visual->srcpad, NULL);
/* find a pool for the negotiated caps now */
query = gst_query_new_allocation (target, TRUE);
- if (gst_pad_peer_query (visual->srcpad, query)) {
- /* we got configuration from our peer, parse them */
- gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
- &padding, &alignment, &pool);
+ if (!gst_pad_peer_query (visual->srcpad, query)) {
+ /* not a problem, we deal with the defaults of the query */
+ GST_DEBUG_OBJECT (visual, "allocation query failed");
+ }
+
+ if (gst_query_get_n_allocation_pools (query) > 0) {
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+
+ size = MAX (size, visual->outsize);
} else {
+ pool = NULL;
size = visual->outsize;
min = max = 0;
- prefix = 0;
- padding = 0;
- alignment = 0;
}
if (pool == NULL) {
- GstStructure *config;
-
- /* we did not get a pool, make one ourselves then */
- pool = gst_buffer_pool_new ();
-
- config = gst_buffer_pool_get_config (pool);
- gst_buffer_pool_config_set (config, target, size, min, max, prefix,
- padding, alignment);
- gst_buffer_pool_set_config (pool, config);
+ /* no pool, just parameters, we can make our own */
+ GST_DEBUG_OBJECT (visual, "no pool, making new pool");
+ pool = gst_video_buffer_pool_new ();
}
+ /* and configure */
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set (config, target, size, min, max, 0, 0, 0);
+ gst_buffer_pool_set_config (pool, config);
+
if (visual->pool)
gst_object_unref (visual->pool);
visual->pool = pool;
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
visual->actor =
- visual_actor_new (GST_VISUAL_GET_CLASS (visual)->plugin->info->
- plugname);
+ visual_actor_new (GST_VISUAL_GET_CLASS (visual)->plugin->
+ info->plugname);
visual->video = visual_video_new ();
visual->audio = visual_audio_new ();
/* can't have a play without actors */
GstVideoFormat format;
GstQuery *query;
GstBufferPool *pool;
- guint size, min, max, prefix, padding, alignment;
+ guint size, min, max;
GstStructure *config;
GstCaps *caps;
GstVideoInfo info, cinfo;
query = gst_query_new_allocation (caps, TRUE);
if (gst_pad_peer_query (dec->srcpad, query)) {
- GST_DEBUG_OBJECT (dec, "got downstream ALLOCATION hints");
- /* we got configuration from our peer, parse them */
- gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
- &padding, &alignment, &pool);
-
/* check if downstream supports cropping */
dec->has_cropping =
gst_query_has_allocation_meta (query, GST_VIDEO_CROP_META_API_TYPE);
} else {
+ /* not a problem, deal with defaults */
GST_DEBUG_OBJECT (dec, "didn't get downstream ALLOCATION hints");
+ dec->has_cropping = FALSE;
+ }
+
+ if (gst_query_get_n_allocation_pools (query) > 0) {
+ /* we got configuration from our peer, parse them */
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+ } else {
+ pool = NULL;
size = 0;
min = max = 0;
- prefix = 0;
- padding = 0;
- alignment = 0;
- pool = NULL;
- dec->has_cropping = FALSE;
}
GST_DEBUG_OBJECT (dec, "downstream cropping %d", dec->has_cropping);
size = MAX (size, GST_VIDEO_INFO_SIZE (&dec->vinfo));
config = gst_buffer_pool_get_config (pool);
- gst_buffer_pool_config_set (config, caps, size, min, max, prefix, padding,
- alignment);
+ gst_buffer_pool_config_set (config, caps, size, min, max, 0, 0, 0);
gst_caps_unref (caps);
- /* just set the option, if the pool can support it we will transparently use
- * it through the video info API. We could also see if the pool support this
- * option and only activate it then. */
- gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+ if (gst_query_has_allocation_meta (query, GST_VIDEO_META_API_TYPE)) {
+ /* just set the option, if the pool can support it we will transparently use
+ * it through the video info API. We could also see if the pool support this
+ * option and only activate it then. */
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_META);
+ }
gst_buffer_pool_set_config (pool, config);
/* and activate */
} else
pool = NULL;
- gst_query_set_allocation_params (query, size, 0, 0, 0, 0, 15, pool);
+ gst_query_add_allocation_pool (query, pool, size, 0, 0);
gst_object_unref (pool);
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
static gboolean
gst_video_filter_decide_allocation (GstBaseTransform * trans, GstQuery * query)
{
- GstBufferPool *pool = NULL;
- guint size, min, max, prefix, padding, alignment;
- gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
- &padding, &alignment, &pool);
+ if (gst_query_get_n_allocation_pools (query) > 0) {
+ GstBufferPool *pool = NULL;
- if (pool) {
- GstStructure *config;
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, NULL, NULL, NULL);
- config = gst_buffer_pool_get_config (pool);
- gst_buffer_pool_config_add_option (config,
- GST_BUFFER_POOL_OPTION_VIDEO_META);
- gst_buffer_pool_set_config (pool, config);
+ if (pool) {
+ GstStructure *config;
+
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_META);
+ gst_buffer_pool_set_config (pool, config);
+ gst_object_unref (pool);
+ }
}
return GST_BASE_TRANSFORM_CLASS (parent_class)->decide_allocation (trans,
query);
gst_video_test_src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
{
GstVideoTestSrc *videotestsrc;
- GstBufferPool *pool;
- guint size, min, max, prefix, padding, alignment;
videotestsrc = GST_VIDEO_TEST_SRC (bsrc);
- gst_query_parse_allocation_params (query, &size, &min, &max, &prefix,
- &padding, &alignment, &pool);
- /* adjust size */
- size = MAX (size, videotestsrc->info.size);
+ if (gst_query_get_n_allocation_pools (query) > 0) {
+ GstBufferPool *pool;
+ guint size, min, max;
- if (pool) {
- GstStructure *config;
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
- config = gst_buffer_pool_get_config (pool);
- gst_buffer_pool_config_add_option (config,
- GST_BUFFER_POOL_OPTION_VIDEO_META);
- gst_buffer_pool_set_config (pool, config);
- }
- gst_query_set_allocation_params (query, size, min, max, prefix,
- padding, alignment, pool);
+ /* adjust size */
+ size = MAX (size, videotestsrc->info.size);
+
+ if (pool) {
+ GstStructure *config;
- if (pool)
- gst_object_unref (pool);
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_add_option (config,
+ GST_BUFFER_POOL_OPTION_VIDEO_META);
+ gst_buffer_pool_set_config (pool, config);
+ }
+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+ if (pool)
+ gst_object_unref (pool);
+ }
return TRUE;
}
goto config_failed;
}
/* we need at least 2 buffer because we hold on to the last one */
- gst_query_set_allocation_params (query, size, 2, 0, 0, 0, 0, pool);
+ gst_query_add_allocation_pool (query, pool, size, 2, 0);
/* we also support various metadata */
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);
goto config_failed;
}
/* we need at least 2 buffer because we hold on to the last one */
- gst_query_set_allocation_params (query, size, 2, 0, 0, 0, 0, pool);
+ gst_query_add_allocation_pool (query, pool, size, 2, 0);
/* we also support various metadata */
gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE);