From 3fee60597e9a316de78b2f0b5cc75c52582f00a5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 24 Aug 2016 17:24:05 +0200 Subject: [PATCH] remove hardcoded port allocation params --- pinos/client/stream.c | 19 ++++--------------- pinos/client/stream.h | 3 ++- pinos/gst/gstpinospool.c | 18 ++++++++++++++++-- pinos/gst/gstpinossink.c | 27 ++++----------------------- pinos/gst/gstpinossink.h | 3 --- pinos/gst/gstpinossrc.c | 5 +---- 6 files changed, 27 insertions(+), 48 deletions(-) diff --git a/pinos/client/stream.c b/pinos/client/stream.c index ab4ae097a..abfe0537b 100644 --- a/pinos/client/stream.c +++ b/pinos/client/stream.c @@ -76,9 +76,6 @@ struct _PinosStreamPrivate GPtrArray *possible_formats; SpaFormat *format; SpaPortInfo port_info; - SpaAllocParam *port_params[2]; - SpaAllocParamMetaEnable param_meta_enable; - SpaAllocParamBuffers param_buffers; PinosStreamFlags flags; @@ -1204,7 +1201,8 @@ pinos_stream_connect (PinosStream *stream, */ gboolean pinos_stream_start_allocation (PinosStream *stream, - PinosProperties *props) + SpaAllocParam **params, + unsigned int n_params) { PinosStreamPrivate *priv; PinosContext *context; @@ -1219,17 +1217,8 @@ pinos_stream_start_allocation (PinosStream *stream, control_builder_init (stream, &builder); - priv->port_info.params = priv->port_params; - priv->port_info.n_params = 1; - - priv->port_params[0] = &priv->param_buffers.param; - priv->param_buffers.param.type = SPA_ALLOC_PARAM_TYPE_BUFFERS; - priv->param_buffers.param.size = sizeof (SpaAllocParamBuffers); - priv->param_buffers.minsize = 115200; - priv->param_buffers.stride = 640; - priv->param_buffers.min_buffers = 0; - priv->param_buffers.max_buffers = 0; - priv->param_buffers.align = 16; + priv->port_info.params = params; + priv->port_info.n_params = n_params; /* send update port status */ add_port_update (stream, &builder, SPA_CONTROL_CMD_PORT_UPDATE_INFO); diff --git a/pinos/client/stream.h b/pinos/client/stream.h index 62f63eaef..748aef906 100644 --- a/pinos/client/stream.h +++ b/pinos/client/stream.h @@ -104,7 +104,8 @@ gboolean pinos_stream_connect (PinosStream *stream, gboolean pinos_stream_disconnect (PinosStream *stream); gboolean pinos_stream_start_allocation (PinosStream *stream, - PinosProperties *props); + SpaAllocParam **params, + unsigned int n_params); gboolean pinos_stream_start (PinosStream *stream); gboolean pinos_stream_stop (PinosStream *stream); diff --git a/pinos/gst/gstpinospool.c b/pinos/gst/gstpinospool.c index 756de789d..aa0aaa1a1 100644 --- a/pinos/gst/gstpinospool.c +++ b/pinos/gst/gstpinospool.c @@ -99,18 +99,32 @@ static gboolean do_start (GstBufferPool * pool) { GstPinosPool *p = GST_PINOS_POOL (pool); - PinosProperties *props = NULL; GstStructure *config; GstCaps *caps; guint size; guint min_buffers; guint max_buffers; + SpaAllocParam *port_params[2]; + SpaAllocParamMetaEnable param_meta_enable; + SpaAllocParamBuffers param_buffers; config = gst_buffer_pool_get_config (pool); gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers, &max_buffers); + port_params[0] = ¶m_buffers.param; + param_buffers.param.type = SPA_ALLOC_PARAM_TYPE_BUFFERS; + param_buffers.param.size = sizeof (SpaAllocParamBuffers); + param_buffers.minsize = size; + param_buffers.stride = 0; + param_buffers.min_buffers = min_buffers; + param_buffers.max_buffers = max_buffers; + param_buffers.align = 16; + port_params[1] = ¶m_meta_enable.param; + param_meta_enable.param.type = SPA_ALLOC_PARAM_TYPE_META_ENABLE; + param_meta_enable.param.size = sizeof (SpaAllocParamMetaEnable); + param_meta_enable.type = SPA_META_TYPE_HEADER; - pinos_stream_start_allocation (p->stream, props); + pinos_stream_start_allocation (p->stream, port_params, 2); return TRUE; } diff --git a/pinos/gst/gstpinossink.c b/pinos/gst/gstpinossink.c index d1029a930..d95eded3e 100644 --- a/pinos/gst/gstpinossink.c +++ b/pinos/gst/gstpinossink.c @@ -220,8 +220,6 @@ gst_pinos_sink_init (GstPinosSink * sink) sink->pool = gst_pinos_pool_new (); sink->client_name = pinos_client_name(); sink->mode = DEFAULT_PROP_MODE; - g_queue_init (&sink->empty); - g_queue_init (&sink->filled); sink->buf_ids = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) gst_buffer_unref); @@ -409,10 +407,9 @@ on_add_buffer (GObject *gobject, g_slice_dup (ProcessMemData, &data), process_mem_data_destroy); - gst_pinos_pool_add_buffer (GST_PINOS_POOL (pinossink->pool), buf); + gst_pinos_pool_add_buffer (pinossink->pool, buf); g_hash_table_insert (pinossink->buf_ids, GINT_TO_POINTER (id), buf); - g_queue_push_tail (&pinossink->empty, buf); pinos_main_loop_signal (pinossink->loop, FALSE); } @@ -428,9 +425,7 @@ on_remove_buffer (GObject *gobject, buf = g_hash_table_lookup (pinossink->buf_ids, GINT_TO_POINTER (id)); GST_MINI_OBJECT_CAST (buf)->dispose = NULL; - gst_pinos_pool_remove_buffer (GST_PINOS_POOL (pinossink->pool), buf); - g_queue_remove (&pinossink->empty, buf); - g_queue_remove (&pinossink->filled, buf); + gst_pinos_pool_remove_buffer (pinossink->pool, buf); g_hash_table_remove (pinossink->buf_ids, GINT_TO_POINTER (id)); } @@ -451,8 +446,6 @@ on_new_buffer (GObject *gobject, g_debug ("recycle buffer %d %p", id, buf); if (buf) { - g_queue_remove (&pinossink->filled, buf); - g_queue_push_tail (&pinossink->empty, buf); pinos_main_loop_signal (pinossink->loop, FALSE); } } @@ -490,12 +483,6 @@ on_format_notify (GObject *gobject, GParamSpec *pspec, gpointer user_data) { - GstPinosSink *pinossink = user_data; - SpaFormat *format; - PinosProperties *props = NULL; - - g_object_get (gobject, "format", &format, NULL); - } static gboolean @@ -594,15 +581,9 @@ gst_pinos_sink_render (GstBaseSink * bsink, GstBuffer * buffer) if (buffer->pool != GST_BUFFER_POOL_CAST (pinossink->pool)) { GstBuffer *b = NULL; - while (TRUE) { - b = g_queue_peek_head (&pinossink->empty); - if (b) - break; - - pinos_main_loop_wait (pinossink->loop); - } - g_queue_push_tail (&pinossink->filled, b); + gst_buffer_pool_acquire_buffer (GST_BUFFER_POOL_CAST (pinossink->pool), &b, NULL); + /* FIXME, copy */ buffer = b; } diff --git a/pinos/gst/gstpinossink.h b/pinos/gst/gstpinossink.h index 757c90c92..2d22e5542 100644 --- a/pinos/gst/gstpinossink.h +++ b/pinos/gst/gstpinossink.h @@ -87,9 +87,6 @@ struct _GstPinosSink { GstPinosPool *pool; GHashTable *buf_ids; - - GQueue empty; - GQueue filled; }; struct _GstPinosSinkClass { diff --git a/pinos/gst/gstpinossrc.c b/pinos/gst/gstpinossrc.c index 3302559d9..6c377b751 100644 --- a/pinos/gst/gstpinossrc.c +++ b/pinos/gst/gstpinossrc.c @@ -723,10 +723,7 @@ on_format_notify (GObject *gobject, gst_base_src_set_caps (GST_BASE_SRC (pinossrc), caps); gst_caps_unref (caps); - - - - pinos_stream_start_allocation (pinossrc->stream, NULL); + pinos_stream_start_allocation (pinossrc->stream, NULL, 0); } static gboolean