Pass some more properties around

Only start listener when core is a daemon.
This commit is contained in:
Wim Taymans 2017-07-11 20:38:48 +02:00
parent 4f9d631910
commit 83b4eaca53
7 changed files with 42 additions and 17 deletions

View file

@ -152,6 +152,9 @@ struct spa_fraction {
#endif #endif
#endif #endif
#define SPA_STRINGIFY_1(x...) #x
#define SPA_STRINGIFY(x...) SPA_STRINGIFY_1(x)
#define spa_return_if_fail(expr) \ #define spa_return_if_fail(expr) \
do { \ do { \
if (SPA_UNLIKELY(!(expr))) \ if (SPA_UNLIKELY(!(expr))) \

View file

@ -29,6 +29,7 @@ int main(int argc, char *argv[])
struct pw_main_loop *loop; struct pw_main_loop *loop;
struct pw_daemon_config *config; struct pw_daemon_config *config;
char *err = NULL; char *err = NULL;
struct pw_properties *props;
pw_init(&argc, &argv); pw_init(&argc, &argv);
@ -42,7 +43,10 @@ int main(int argc, char *argv[])
loop = pw_main_loop_new(); loop = pw_main_loop_new();
core = pw_core_new(loop->loop, NULL); props = pw_properties_new("pipewire.core.name", "pipewire-0",
"pipewire.daemon", "1", NULL);
core = pw_core_new(loop->loop, props);
pw_daemon_config_run_commands(config, core); pw_daemon_config_run_commands(config, core);

View file

@ -395,7 +395,6 @@ get_name(struct pw_properties *properties)
name = getenv("PIPEWIRE_CORE"); name = getenv("PIPEWIRE_CORE");
if (name == NULL) if (name == NULL)
name = "pipewire-0"; name = "pipewire-0";
return name; return name;
} }
@ -411,10 +410,7 @@ static int impl_connect(struct pw_protocol_connection *conn)
return -1; return -1;
} }
if (name == NULL) name = get_name(NULL);
name = getenv("PIPEWIRE_CORE");
if (name == NULL)
name = "pipewire-0";
if ((fd = socket(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) < 0) if ((fd = socket(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0)) < 0)
return -1; return -1;
@ -614,7 +610,7 @@ impl_add_listener(struct pw_protocol *protocol,
l->fd = -1; l->fd = -1;
l->fd_lock = -1; l->fd_lock = -1;
name = get_name(properties); name = get_name(core->properties);
if (!init_socket_name(l, name)) if (!init_socket_name(l, name))
goto error; goto error;
@ -643,6 +639,7 @@ impl_add_listener(struct pw_protocol *protocol,
static struct impl *pw_protocol_native_new(struct pw_core *core, struct pw_properties *properties) static struct impl *pw_protocol_native_new(struct pw_core *core, struct pw_properties *properties)
{ {
struct impl *impl; struct impl *impl;
const char *val;
impl = calloc(1, sizeof(struct impl)); impl = calloc(1, sizeof(struct impl));
@ -656,8 +653,10 @@ static struct impl *pw_protocol_native_new(struct pw_core *core, struct pw_prope
spa_list_init(&impl->client_list); spa_list_init(&impl->client_list);
if ((val = pw_properties_get(core->properties, "pipewire.daemon"))) {
if (atoi(val) == 1)
impl_add_listener(impl->protocol, core, properties); impl_add_listener(impl->protocol, core, properties);
}
return impl; return impl;
} }

View file

@ -16,6 +16,7 @@
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA. * Boston, MA 02110-1301, USA.
*/ */
#include <unistd.h>
#include <time.h> #include <time.h>
#include <spa/lib/debug.h> #include <spa/lib/debug.h>
@ -273,6 +274,7 @@ core_bind_func(struct pw_global *global, struct pw_client *client, uint32_t vers
this->info.change_mask = PW_CORE_CHANGE_MASK_ALL; this->info.change_mask = PW_CORE_CHANGE_MASK_ALL;
pw_core_notify_info(resource, &this->info); pw_core_notify_info(resource, &this->info);
this->info.change_mask = 0;
return SPA_RESULT_OK; return SPA_RESULT_OK;
@ -293,6 +295,7 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, struct pw_properties *pro
{ {
struct impl *impl; struct impl *impl;
struct pw_core *this; struct pw_core *this;
const char *name;
impl = calloc(1, sizeof(struct impl)); impl = calloc(1, sizeof(struct impl));
if (impl == NULL) if (impl == NULL)
@ -305,7 +308,6 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, struct pw_properties *pro
this->data_loop = impl->data_loop->loop; this->data_loop = impl->data_loop->loop;
this->main_loop = main_loop; this->main_loop = main_loop;
this->properties = properties;
pw_type_init(&this->type); pw_type_init(&this->type);
pw_map_init(&this->objects, 128, 32); pw_map_init(&this->objects, 128, 32);
@ -344,12 +346,21 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, struct pw_properties *pro
this->info.change_mask = 0; this->info.change_mask = 0;
this->info.user_name = pw_get_user_name(); this->info.user_name = pw_get_user_name();
this->info.host_name = pw_get_host_name(); this->info.host_name = pw_get_host_name();
this->info.version = "0"; this->info.version = SPA_STRINGIFY(PW_VERSION_CORE);
this->info.name = "pipewire-0";
srandom(time(NULL)); srandom(time(NULL));
this->info.cookie = random(); this->info.cookie = random();
this->info.props = this->properties ? &this->properties->dict : NULL; this->info.props = this->properties ? &this->properties->dict : NULL;
if (properties == NULL)
properties = pw_properties_new(NULL, NULL);
if ((name = pw_properties_get(properties, "pipewire.core.name")) == NULL) {
pw_properties_setf(properties,
"pipewire.core.name", "pipewire-%s-%d",
pw_get_user_name(), getpid());
}
this->info.name = pw_properties_get(properties, "pipewire.core.name");
this->properties = properties;
return this; return this;
no_data_loop: no_data_loop:
@ -522,6 +533,7 @@ void pw_core_update_properties(struct pw_core *core, const struct spa_dict *dict
spa_list_for_each(resource, &core->resource_list, link) { spa_list_for_each(resource, &core->resource_list, link) {
pw_core_notify_info(resource, &core->info); pw_core_notify_info(resource, &core->info);
} }
core->info.change_mask = 0;
} }
/** Find a port to link with /** Find a port to link with

View file

@ -298,8 +298,10 @@ char *pw_get_client_name(void)
* *
* \memberof pw_pipewire * \memberof pw_pipewire
*/ */
void pw_fill_remote_properties(struct pw_properties *properties) void pw_fill_remote_properties(struct pw_core *core, struct pw_properties *properties)
{ {
const char *val;
if (!pw_properties_get(properties, "application.name")) if (!pw_properties_get(properties, "application.name"))
pw_properties_set(properties, "application.name", pw_get_application_name()); pw_properties_set(properties, "application.name", pw_get_application_name());
@ -322,6 +324,11 @@ void pw_fill_remote_properties(struct pw_properties *properties)
pw_properties_set(properties, "application.process.session_id", pw_properties_set(properties, "application.process.session_id",
getenv("XDG_SESSION_ID")); getenv("XDG_SESSION_ID"));
} }
pw_properties_set(properties, "pipewire.core.version", core->info.version);
pw_properties_set(properties, "pipewire.core.name", core->info.name);
if ((val = pw_properties_get(core->properties, "pipewire.daemon")))
pw_properties_set(properties, "pipewire.daemon", val);
} }
/** Fill stream properties /** Fill stream properties
@ -331,7 +338,7 @@ void pw_fill_remote_properties(struct pw_properties *properties)
* *
* \memberof pw_pipewire * \memberof pw_pipewire
*/ */
void pw_fill_stream_properties(struct pw_properties *properties) void pw_fill_stream_properties(struct pw_core *core, struct pw_properties *properties)
{ {
} }

View file

@ -109,10 +109,10 @@ char *
pw_get_client_name(void); pw_get_client_name(void);
void void
pw_fill_remote_properties(struct pw_properties *properties); pw_fill_remote_properties(struct pw_core *core, struct pw_properties *properties);
void void
pw_fill_stream_properties(struct pw_properties *properties); pw_fill_stream_properties(struct pw_core *core, struct pw_properties *properties);
enum pw_direction enum pw_direction
pw_direction_reverse(enum pw_direction direction); pw_direction_reverse(enum pw_direction direction);

View file

@ -165,7 +165,7 @@ struct pw_remote *pw_remote_new(struct pw_core *core,
if (properties == NULL) if (properties == NULL)
goto no_mem; goto no_mem;
pw_fill_remote_properties(properties); pw_fill_remote_properties(core, properties);
this->properties = properties; this->properties = properties;
this->state = PW_REMOTE_STATE_UNCONNECTED; this->state = PW_REMOTE_STATE_UNCONNECTED;