From: Wim Taymans Date: Tue, 26 Jul 2011 11:17:20 +0000 (+0200) Subject: x11: use new setup_allocation vmethod X-Git-Tag: 1.19.3~511^2~7399 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=662c1f4b6c72b867ac8ea459a458ccee23f11f5f;p=platform%2Fupstream%2Fgstreamer.git x11: use new setup_allocation vmethod --- diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index 0a3a64f..35d97d2 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -1141,7 +1141,7 @@ gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps) newpool = gst_ximage_buffer_pool_new (ximagesink); structure = gst_buffer_pool_get_config (newpool); - gst_buffer_pool_config_set (structure, caps, size, 0, 0, 0, 15); + gst_buffer_pool_config_set (structure, caps, size, 2, 0, 0, 15); if (!gst_buffer_pool_set_config (newpool, structure)) goto config_failed; @@ -1424,94 +1424,83 @@ gst_ximagesink_event (GstBaseSink * sink, GstEvent * event) } static gboolean -gst_ximagesink_sink_query (GstPad * sinkpad, GstQuery * query) +gst_ximagesink_setup_allocation (GstBaseSink * bsink, GstQuery * query) { - GstXImageSink *ximagesink = GST_XIMAGESINK (GST_PAD_PARENT (sinkpad)); - gboolean res = TRUE; - - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_ALLOCATION: - { - GstBufferPool *pool; - GstStructure *config; - GstCaps *caps; - guint size; - gboolean need_pool; + GstXImageSink *ximagesink = GST_XIMAGESINK (bsink); + GstBufferPool *pool; + GstStructure *config; + GstCaps *caps; + guint size; + gboolean need_pool; - gst_query_parse_allocation (query, &caps, &need_pool); + gst_query_parse_allocation (query, &caps, &need_pool); - if (caps == NULL) - goto no_caps; + if (caps == NULL) + goto no_caps; - g_mutex_lock (ximagesink->flow_lock); - if ((pool = ximagesink->pool)) - gst_object_ref (pool); - g_mutex_unlock (ximagesink->flow_lock); + g_mutex_lock (ximagesink->flow_lock); + if ((pool = ximagesink->pool)) + gst_object_ref (pool); + g_mutex_unlock (ximagesink->flow_lock); - if (pool != NULL) { - const GstCaps *pcaps; - - /* we had a pool, check caps */ - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, - NULL); - - GST_DEBUG_OBJECT (ximagesink, - "we had a pool with caps %" GST_PTR_FORMAT, pcaps); - if (!gst_caps_is_equal (caps, pcaps)) { - /* different caps, we can't use this pool */ - GST_DEBUG_OBJECT (ximagesink, "pool has different caps"); - gst_object_unref (pool); - pool = NULL; - } - } - if (pool == NULL && need_pool) { - GstVideoInfo info; + if (pool != NULL) { + const GstCaps *pcaps; - GST_DEBUG_OBJECT (ximagesink, "create new pool"); - pool = gst_ximage_buffer_pool_new (ximagesink); + /* we had a pool, check caps */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL); - if (!gst_video_info_from_caps (&info, caps)) - goto invalid_caps; + GST_DEBUG_OBJECT (ximagesink, + "we had a pool with caps %" GST_PTR_FORMAT, pcaps); + if (!gst_caps_is_equal (caps, pcaps)) { + /* different caps, we can't use this pool */ + GST_DEBUG_OBJECT (ximagesink, "pool has different caps"); + gst_object_unref (pool); + pool = NULL; + } + } + if (pool == NULL && need_pool) { + GstVideoInfo info; - /* the normal size of a frame */ - size = info.size; + GST_DEBUG_OBJECT (ximagesink, "create new pool"); + pool = gst_ximage_buffer_pool_new (ximagesink); - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 15); - if (!gst_buffer_pool_set_config (pool, config)) - 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, 15, pool); + if (!gst_video_info_from_caps (&info, caps)) + goto invalid_caps; - /* we also support various metadata */ - gst_query_add_allocation_meta (query, GST_META_API_VIDEO); - gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP); + /* the normal size of a frame */ + size = info.size; - gst_object_unref (pool); - break; - } - default: - res = FALSE; - break; + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 15); + if (!gst_buffer_pool_set_config (pool, config)) + goto config_failed; } - return res; + /* we need at least 2 buffer because we hold on to the last one */ + gst_query_set_allocation_params (query, size, 2, 0, 0, 15, pool); + + /* we also support various metadata */ + gst_query_add_allocation_meta (query, GST_META_API_VIDEO); + gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP); + + gst_object_unref (pool); + + return TRUE; /* ERRORS */ no_caps: { - GST_DEBUG_OBJECT (sinkpad, "no caps specified"); + GST_DEBUG_OBJECT (bsink, "no caps specified"); return FALSE; } invalid_caps: { - GST_DEBUG_OBJECT (sinkpad, "invalid caps specified"); + GST_DEBUG_OBJECT (bsink, "invalid caps specified"); return FALSE; } config_failed: { - GST_DEBUG_OBJECT (sinkpad, "failed setting config"); + GST_DEBUG_OBJECT (bsink, "failed setting config"); return FALSE; } } @@ -1883,10 +1872,6 @@ gst_ximagesink_finalize (GObject * object) static void gst_ximagesink_init (GstXImageSink * ximagesink) { - /* for the ALLOCATION query */ - gst_pad_set_query_function (GST_BASE_SINK (ximagesink)->sinkpad, - gst_ximagesink_sink_query); - ximagesink->display_name = NULL; ximagesink->xcontext = NULL; ximagesink->xwindow = NULL; @@ -1990,6 +1975,8 @@ gst_ximagesink_class_init (GstXImageSinkClass * klass) gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_getcaps); gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_setcaps); gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_ximagesink_get_times); + gstbasesink_class->setup_allocation = + GST_DEBUG_FUNCPTR (gst_ximagesink_setup_allocation); gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_ximagesink_event); videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_ximagesink_show_frame); diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index 2d2384f..22811ce 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -1650,7 +1650,7 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps) newpool = gst_xvimage_buffer_pool_new (xvimagesink); structure = gst_buffer_pool_get_config (newpool); - gst_buffer_pool_config_set (structure, caps, size, 0, 0, 0, 15); + gst_buffer_pool_config_set (structure, caps, size, 2, 0, 0, 15); if (!gst_buffer_pool_set_config (newpool, structure)) goto config_failed; @@ -1939,93 +1939,82 @@ gst_xvimagesink_event (GstBaseSink * sink, GstEvent * event) } static gboolean -gst_xvimagesink_sink_query (GstPad * sinkpad, GstQuery * query) +gst_xvimagesink_setup_allocation (GstBaseSink * bsink, GstQuery * query) { - GstXvImageSink *xvimagesink = GST_XVIMAGESINK (GST_PAD_PARENT (sinkpad)); - gboolean res = TRUE; + GstXvImageSink *xvimagesink = GST_XVIMAGESINK (bsink); + GstBufferPool *pool; + GstStructure *config; + GstCaps *caps; + guint size; + gboolean need_pool; - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_ALLOCATION: - { - GstBufferPool *pool; - GstStructure *config; - GstCaps *caps; - guint size; - gboolean need_pool; + gst_query_parse_allocation (query, &caps, &need_pool); - gst_query_parse_allocation (query, &caps, &need_pool); + if (caps == NULL) + goto no_caps; - if (caps == NULL) - goto no_caps; + g_mutex_lock (xvimagesink->flow_lock); + if ((pool = xvimagesink->pool)) + gst_object_ref (pool); + g_mutex_unlock (xvimagesink->flow_lock); - g_mutex_lock (xvimagesink->flow_lock); - if ((pool = xvimagesink->pool)) - gst_object_ref (pool); - g_mutex_unlock (xvimagesink->flow_lock); + if (pool != NULL) { + const GstCaps *pcaps; - if (pool != NULL) { - const GstCaps *pcaps; + /* we had a pool, check caps */ + GST_DEBUG_OBJECT (xvimagesink, "check existing pool caps"); + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, NULL); - /* we had a pool, check caps */ - GST_DEBUG_OBJECT (xvimagesink, "check existing pool caps"); - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_get (config, &pcaps, &size, NULL, NULL, NULL, - NULL); + if (!gst_caps_is_equal (caps, pcaps)) { + GST_DEBUG_OBJECT (xvimagesink, "pool has different caps"); + /* different caps, we can't use this pool */ + gst_object_unref (pool); + pool = NULL; + } + } + if (pool == NULL && need_pool) { + GstVideoInfo info; - if (!gst_caps_is_equal (caps, pcaps)) { - GST_DEBUG_OBJECT (xvimagesink, "pool has different caps"); - /* different caps, we can't use this pool */ - gst_object_unref (pool); - pool = NULL; - } - } - if (pool == NULL && need_pool) { - GstVideoInfo info; + GST_DEBUG_OBJECT (xvimagesink, "create new pool"); + pool = gst_xvimage_buffer_pool_new (xvimagesink); - GST_DEBUG_OBJECT (xvimagesink, "create new pool"); - pool = gst_xvimage_buffer_pool_new (xvimagesink); + if (!gst_video_info_from_caps (&info, caps)) + goto invalid_caps; - if (!gst_video_info_from_caps (&info, caps)) - goto invalid_caps; + /* the normal size of a frame */ + size = info.size; - /* the normal size of a frame */ - size = info.size; + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 15); + if (!gst_buffer_pool_set_config (pool, config)) + 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, 15, pool); - config = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set (config, caps, size, 0, 0, 0, 15); - if (!gst_buffer_pool_set_config (pool, config)) - 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, 15, pool); + /* we also support various metadata */ + gst_query_add_allocation_meta (query, GST_META_API_VIDEO); + gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP); - /* we also support various metadata */ - gst_query_add_allocation_meta (query, GST_META_API_VIDEO); - gst_query_add_allocation_meta (query, GST_META_API_VIDEO_CROP); + gst_object_unref (pool); - gst_object_unref (pool); - break; - } - default: - res = FALSE; - break; - } - return res; + return TRUE; /* ERRORS */ no_caps: { - GST_DEBUG_OBJECT (sinkpad, "no caps specified"); + GST_DEBUG_OBJECT (bsink, "no caps specified"); return FALSE; } invalid_caps: { - GST_DEBUG_OBJECT (sinkpad, "invalid caps specified"); + GST_DEBUG_OBJECT (bsink, "invalid caps specified"); return FALSE; } config_failed: { - GST_DEBUG_OBJECT (sinkpad, "failed setting config"); + GST_DEBUG_OBJECT (bsink, "failed setting config"); return FALSE; } } @@ -2759,10 +2748,6 @@ gst_xvimagesink_finalize (GObject * object) static void gst_xvimagesink_init (GstXvImageSink * xvimagesink) { - /* for the ALLOCATION query */ - gst_pad_set_query_function (GST_BASE_SINK (xvimagesink)->sinkpad, - gst_xvimagesink_sink_query); - xvimagesink->display_name = NULL; xvimagesink->adaptor_no = 0; xvimagesink->xcontext = NULL; @@ -2960,6 +2945,8 @@ gst_xvimagesink_class_init (GstXvImageSinkClass * klass) gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_getcaps); gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_setcaps); gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_xvimagesink_get_times); + gstbasesink_class->setup_allocation = + GST_DEBUG_FUNCPTR (gst_xvimagesink_setup_allocation); gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xvimagesink_event); videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_xvimagesink_show_frame);