From 02d4dc0efdeccf9d7efe3e43394a1789d64e9127 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 21 Apr 2017 16:39:14 +0200 Subject: [PATCH] context: add option to disable registry --- pinos/client/context.c | 38 ++++++++++++++++++++---------- pinos/client/context.h | 10 +++++++- pinos/client/stream.h | 4 ++-- pinos/examples/video-play.c | 2 +- pinos/examples/video-src.c | 3 ++- pinos/gst/gstpinosdeviceprovider.c | 4 ++-- pinos/gst/gstpinossink.c | 2 +- pinos/gst/gstpinossrc.c | 2 +- pinos/tools/pinos-monitor.c | 2 +- 9 files changed, 44 insertions(+), 23 deletions(-) diff --git a/pinos/client/context.c b/pinos/client/context.c index ce90fb1ae..71da54336 100644 --- a/pinos/client/context.c +++ b/pinos/client/context.c @@ -33,6 +33,8 @@ typedef struct { PinosContext this; + bool no_proxy; + int fd; PinosConnection *connection; SpaSource source; @@ -304,8 +306,12 @@ registry_event_global (void *object, { PinosProxy *registry_proxy = object; PinosContext *this = registry_proxy->context; + PinosContextImpl *impl = SPA_CONTAINER_OF (this, PinosContextImpl, this); PinosProxy *proxy = NULL; + if (impl->no_proxy) + return; + pinos_log_debug ("got global %u %s", id, type); if (!strcmp (type, PINOS_TYPE__Node)) { @@ -342,7 +348,7 @@ registry_event_global (void *object, proxy->implementation = &link_events; } if (proxy) { - pinos_registry_do_bind (this->registry_proxy, id, proxy->id); + pinos_registry_do_bind (registry_proxy, id, proxy->id); } return; @@ -547,7 +553,8 @@ pinos_context_destroy (PinosContext *context) * Returns: %TRUE on success. */ bool -pinos_context_connect (PinosContext *context) +pinos_context_connect (PinosContext *context, + PinosContextFlags flags) { struct sockaddr_un addr; socklen_t size; @@ -589,7 +596,7 @@ pinos_context_connect (PinosContext *context) goto error_close; } - return pinos_context_connect_fd (context, fd); + return pinos_context_connect_fd (context, flags, fd); error_close: close (fd); @@ -606,8 +613,9 @@ error_close: * Returns: %TRUE on success. */ bool -pinos_context_connect_fd (PinosContext *context, - int fd) +pinos_context_connect_fd (PinosContext *context, + PinosContextFlags flags, + int fd) { PinosContextImpl *impl = SPA_CONTAINER_OF (context, PinosContextImpl, this); @@ -643,16 +651,20 @@ pinos_context_connect_fd (PinosContext *context, pinos_core_do_client_update (context->core_proxy, &context->properties->dict); - context->registry_proxy = pinos_proxy_new (context, - SPA_ID_INVALID, - context->type.registry); - if (context->registry_proxy == NULL) - goto no_registry; + if (!(flags & PINOS_CONTEXT_FLAG_NO_REGISTRY)) { + context->registry_proxy = pinos_proxy_new (context, + SPA_ID_INVALID, + context->type.registry); + if (context->registry_proxy == NULL) + goto no_registry; - context->registry_proxy->implementation = ®istry_events; + context->registry_proxy->implementation = ®istry_events; - pinos_core_do_get_registry (context->core_proxy, - context->registry_proxy->id); + pinos_core_do_get_registry (context->core_proxy, + context->registry_proxy->id); + + } + impl->no_proxy = !!(flags & PINOS_CONTEXT_FLAG_NO_PROXY); pinos_core_do_sync (context->core_proxy, 0); diff --git a/pinos/client/context.h b/pinos/client/context.h index 2a838d57f..1b370fc97 100644 --- a/pinos/client/context.h +++ b/pinos/client/context.h @@ -49,6 +49,12 @@ typedef enum { PINOS_CONTEXT_STATE_CONNECTED = 2, } PinosContextState; +typedef enum { + PINOS_CONTEXT_FLAG_NONE = 0, + PINOS_CONTEXT_FLAG_NO_REGISTRY = (1 << 0), + PINOS_CONTEXT_FLAG_NO_PROXY = (1 << 1), +} PinosContextFlags; + const char * pinos_context_state_as_string (PinosContextState state); /** @@ -97,8 +103,10 @@ PinosContext * pinos_context_new (PinosLoop *loop, PinosProperties *properties); void pinos_context_destroy (PinosContext *context); -bool pinos_context_connect (PinosContext *context); +bool pinos_context_connect (PinosContext *context, + PinosContextFlags flags); bool pinos_context_connect_fd (PinosContext *context, + PinosContextFlags flags, int fd); bool pinos_context_disconnect (PinosContext *context); diff --git a/pinos/client/stream.h b/pinos/client/stream.h index df7d6eb02..61df94f06 100644 --- a/pinos/client/stream.h +++ b/pinos/client/stream.h @@ -44,12 +44,12 @@ typedef enum { const char * pinos_stream_state_as_string (PinosStreamState state); typedef enum { - PINOS_STREAM_FLAG_NONE = 0, + PINOS_STREAM_FLAG_NONE = 0, PINOS_STREAM_FLAG_AUTOCONNECT = (1 << 0), } PinosStreamFlags; typedef enum { - PINOS_STREAM_MODE_BUFFER = 0, + PINOS_STREAM_MODE_BUFFER = 0, PINOS_STREAM_MODE_RINGBUFFER = 1, } PinosStreamMode; diff --git a/pinos/examples/video-play.c b/pinos/examples/video-play.c index ac2e09522..0eba81910 100644 --- a/pinos/examples/video-play.c +++ b/pinos/examples/video-play.c @@ -401,7 +401,7 @@ main (int argc, char *argv[]) &data.on_state_changed, on_state_changed); - pinos_context_connect (data.context); + pinos_context_connect (data.context, PINOS_CONTEXT_FLAG_NO_REGISTRY); pinos_loop_enter (data.loop); while (data.running) { diff --git a/pinos/examples/video-src.c b/pinos/examples/video-src.c index 19a745901..6a9bfe38e 100644 --- a/pinos/examples/video-src.c +++ b/pinos/examples/video-src.c @@ -269,7 +269,8 @@ main (int argc, char *argv[]) &data.on_state_changed, on_state_changed); - pinos_context_connect (data.context); + pinos_context_connect (data.context, + PINOS_CONTEXT_FLAG_NO_REGISTRY); pinos_loop_enter (data.loop); while (data.running) { diff --git a/pinos/gst/gstpinosdeviceprovider.c b/pinos/gst/gstpinosdeviceprovider.c index 807b1bf26..10d42988d 100644 --- a/pinos/gst/gstpinosdeviceprovider.c +++ b/pinos/gst/gstpinosdeviceprovider.c @@ -373,7 +373,7 @@ gst_pinos_device_provider_probe (GstDeviceProvider * provider) if (!(c = pinos_context_new (l, self->client_name, NULL))) goto failed; - pinos_context_connect (c); + pinos_context_connect (c, 0); for (;;) { PinosContextState state; @@ -479,7 +479,7 @@ gst_pinos_device_provider_start (GstDeviceProvider * provider) &self->ctx_subscription, on_context_subscription); - pinos_context_connect (self->context); + pinos_context_connect (self->context, 0); for (;;) { PinosContextState state; diff --git a/pinos/gst/gstpinossink.c b/pinos/gst/gstpinossink.c index 16eb5410c..4da3e9c58 100644 --- a/pinos/gst/gstpinossink.c +++ b/pinos/gst/gstpinossink.c @@ -823,7 +823,7 @@ gst_pinos_sink_open (GstPinosSink * pinossink) pinos_signal_add (&pinossink->ctx->state_changed, &pinossink->ctx_state_changed, on_ctx_state_changed); - pinos_context_connect (pinossink->ctx); + pinos_context_connect (pinossink->ctx, PINOS_CONTEXT_FLAG_NO_REGISTRY); while (TRUE) { PinosContextState state = pinossink->ctx->state; diff --git a/pinos/gst/gstpinossrc.c b/pinos/gst/gstpinossrc.c index 137173817..00139bab2 100644 --- a/pinos/gst/gstpinossrc.c +++ b/pinos/gst/gstpinossrc.c @@ -1037,7 +1037,7 @@ gst_pinos_src_open (GstPinosSrc * pinossrc) pinos_signal_add (&pinossrc->ctx->state_changed, &pinossrc->ctx_state_changed, on_ctx_state_changed); - pinos_context_connect (pinossrc->ctx); + pinos_context_connect (pinossrc->ctx, PINOS_CONTEXT_FLAG_NO_REGISTRY); while (TRUE) { PinosContextState state = pinossrc->ctx->state; diff --git a/pinos/tools/pinos-monitor.c b/pinos/tools/pinos-monitor.c index ffeac2d77..fc9777155 100644 --- a/pinos/tools/pinos-monitor.c +++ b/pinos/tools/pinos-monitor.c @@ -288,7 +288,7 @@ main (int argc, char *argv[]) &data.on_subscription, on_subscription); - pinos_context_connect (data.context); + pinos_context_connect (data.context, 0); pinos_loop_enter (data.loop); while (data.running) {