mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
media-session: add log topics to all modules
Media-session itself uses ms.core, there are only two files that could have a sub-topic but right now they don't use it (match-rules and metadata). The modules use the ms.mod.* namespace, so it's trivial to filter on those.
This commit is contained in:
parent
52a96bb602
commit
e3b216c026
26 changed files with 346 additions and 218 deletions
|
|
@ -151,6 +151,9 @@ PipeWire uses a "category.topic" naming scheme, with the following categories:
|
|||
- `pw.*`: pipewire-internal topics
|
||||
- `mod.*`: module topics, for example `mod.foo` would usually refer to the
|
||||
"foo" module
|
||||
- `ms.*`: media session topics
|
||||
- `ms.mod.*`: media session modules, for example `ms.foo` would usually refer
|
||||
to the "media-session-foo" module
|
||||
- `conn.*`: connection-specific topics such as printing raw messages sent over
|
||||
a communication socket. These are in a separate namespace as they are
|
||||
usually vastly more verbose than the normal debugging topics.
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@
|
|||
#define NAME "access-flatpak"
|
||||
#define SESSION_KEY "access-flatpak"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct sm_media_session *session;
|
||||
struct spa_hook listener;
|
||||
|
|
@ -82,7 +85,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = client->impl;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: client %p %08x", impl, client, client->obj->obj.changed);
|
||||
pw_log_debug("%p: client %p %08x", impl, client, client->obj->obj.changed);
|
||||
|
||||
if (client->obj->obj.avail & SM_CLIENT_CHANGE_MASK_INFO &&
|
||||
!client->active) {
|
||||
|
|
@ -104,7 +107,7 @@ static void object_update(void *data)
|
|||
perms = PW_PERM_R | PW_PERM_X;
|
||||
}
|
||||
|
||||
pw_log_info(NAME" %p: flatpak client %d granted 0x%08x permissions"
|
||||
pw_log_info("%p: flatpak client %d granted 0x%08x permissions"
|
||||
, impl, client->id, perms);
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, perms);
|
||||
pw_client_update_permissions(client->obj->obj.proxy,
|
||||
|
|
@ -123,7 +126,7 @@ handle_client(struct impl *impl, struct sm_object *object)
|
|||
{
|
||||
struct client *client;
|
||||
|
||||
pw_log_debug(NAME" %p: client", impl);
|
||||
pw_log_debug("%p: client", impl);
|
||||
|
||||
client = sm_object_add_data(object, SESSION_KEY, sizeof(struct client));
|
||||
client->obj = (struct sm_client*)object;
|
||||
|
|
@ -149,7 +152,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
struct impl *impl = data;
|
||||
int res;
|
||||
|
||||
pw_log_debug(NAME " %p: create global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: create global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Client))
|
||||
res = handle_client(impl, object);
|
||||
|
|
@ -157,13 +160,13 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0)
|
||||
pw_log_warn(NAME" %p: can't handle global %d", impl, object->id);
|
||||
pw_log_warn("%p: can't handle global %d", impl, object->id);
|
||||
}
|
||||
|
||||
static void session_remove(void *data, struct sm_object *object)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: remove global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Client)) {
|
||||
struct client *client;
|
||||
|
|
@ -196,6 +199,8 @@ int sm_access_flatpak_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -79,6 +79,9 @@
|
|||
#define NAME "access-portal"
|
||||
#define SESSION_KEY "access-portal"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
enum media_role {
|
||||
MEDIA_ROLE_INVALID = -1,
|
||||
MEDIA_ROLE_NONE = 0,
|
||||
|
|
@ -178,7 +181,7 @@ static void object_update(void *data)
|
|||
struct client *client = data;
|
||||
struct impl *impl = client->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: client %p %08x", impl, client, client->obj->obj.changed);
|
||||
pw_log_debug("%p: client %p %08x", impl, client, client->obj->obj.changed);
|
||||
|
||||
if (client->obj->obj.avail & SM_CLIENT_CHANGE_MASK_INFO)
|
||||
client_info_changed(client, client->obj->info);
|
||||
|
|
@ -195,7 +198,7 @@ handle_client(struct impl *impl, struct sm_object *object)
|
|||
struct client *client;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: client %u", impl, object->id);
|
||||
pw_log_debug("%p: client %u", impl, object->id);
|
||||
|
||||
client = sm_object_add_data(object, SESSION_KEY, sizeof(struct client));
|
||||
client->obj = (struct sm_client*)object;
|
||||
|
|
@ -210,7 +213,7 @@ handle_client(struct impl *impl, struct sm_object *object)
|
|||
(str = pw_properties_get(client->obj->obj.props, PW_KEY_CLIENT_ACCESS)) != NULL) &&
|
||||
spa_streq(str, "portal")) {
|
||||
client->portal_managed = true;
|
||||
pw_log_info(NAME " %p: portal managed client %d added",
|
||||
pw_log_info("%p: portal managed client %d added",
|
||||
impl, client->id);
|
||||
}
|
||||
return 1;
|
||||
|
|
@ -230,7 +233,7 @@ set_global_permissions(void *data, struct sm_object *object)
|
|||
if ((props = object->props) == NULL)
|
||||
return 0;
|
||||
|
||||
pw_log_debug(NAME" %p: object %d type:%s", impl, object->id, object->type);
|
||||
pw_log_debug("%p: object %d type:%s", impl, object->id, object->type);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Client)) {
|
||||
set_permission = allowed = object->id == client->id;
|
||||
|
|
@ -261,7 +264,7 @@ set_global_permissions(void *data, struct sm_object *object)
|
|||
if (set_permission) {
|
||||
permissions[n_permissions++] =
|
||||
PW_PERMISSION_INIT(object->id, allowed ? PW_PERM_ALL : 0);
|
||||
pw_log_info(NAME" %p: object %d allowed:%d", impl, object->id, allowed);
|
||||
pw_log_info("%p: object %d allowed:%d", impl, object->id, allowed);
|
||||
pw_client_update_permissions(client->obj->obj.proxy,
|
||||
n_permissions, permissions);
|
||||
}
|
||||
|
|
@ -274,7 +277,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
{
|
||||
struct impl *impl = data;
|
||||
|
||||
pw_log_debug(NAME " %p: create global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: create global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Client)) {
|
||||
handle_client(impl, object);
|
||||
|
|
@ -300,7 +303,7 @@ static void destroy_client(struct impl *impl, struct client *client)
|
|||
static void session_remove(void *data, struct sm_object *object)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: remove global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Client)) {
|
||||
struct client *client;
|
||||
|
|
@ -491,7 +494,7 @@ static void client_info_changed(struct client *client, const struct pw_client_in
|
|||
|
||||
is_portal = spa_dict_lookup(props, "pipewire.access.portal.is_portal");
|
||||
if (spa_streq(is_portal, "yes") || pw_properties_parse_bool(is_portal)) {
|
||||
pw_log_info(NAME " %p: client %d is the portal itself",
|
||||
pw_log_info("%p: client %d is the portal itself",
|
||||
impl, client->id);
|
||||
client->is_portal = true;
|
||||
return;
|
||||
|
|
@ -499,13 +502,13 @@ static void client_info_changed(struct client *client, const struct pw_client_in
|
|||
|
||||
app_id = spa_dict_lookup(props, "pipewire.access.portal.app_id");
|
||||
if (app_id == NULL) {
|
||||
pw_log_error(NAME" %p: Portal managed client %d didn't set app_id",
|
||||
pw_log_error("%p: Portal managed client %d didn't set app_id",
|
||||
impl, client->id);
|
||||
return;
|
||||
}
|
||||
media_roles = spa_dict_lookup(props, "pipewire.access.portal.media_roles");
|
||||
if (media_roles == NULL) {
|
||||
pw_log_error(NAME" %p: Portal managed client %d didn't set media_roles",
|
||||
pw_log_error("%p: Portal managed client %d didn't set media_roles",
|
||||
impl, client->id);
|
||||
return;
|
||||
}
|
||||
|
|
@ -513,7 +516,7 @@ static void client_info_changed(struct client *client, const struct pw_client_in
|
|||
client->app_id = strdup(app_id);
|
||||
client->media_roles = parse_media_roles(media_roles);
|
||||
|
||||
pw_log_info(NAME" %p: client %d with app_id '%s' set to portal access",
|
||||
pw_log_info("%p: client %d with app_id '%s' set to portal access",
|
||||
impl, client->id, client->app_id);
|
||||
|
||||
do_permission_store_check(client);
|
||||
|
|
@ -647,6 +650,8 @@ int sm_access_portal_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -61,6 +61,9 @@
|
|||
#define NAME "alsa-endpoint"
|
||||
#define SESSION_KEY "alsa-endpoint"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct endpoint {
|
||||
struct spa_list link;
|
||||
|
||||
|
|
@ -135,7 +138,7 @@ static int client_endpoint_set_param(void *object,
|
|||
{
|
||||
struct endpoint *endpoint = object;
|
||||
struct impl *impl = endpoint->impl;
|
||||
pw_log_debug(NAME " %p: endpoint %p set param %d", impl, endpoint, id);
|
||||
pw_log_debug("%p: endpoint %p set param %d", impl, endpoint, id);
|
||||
return pw_node_set_param((struct pw_node*)endpoint->node->node->obj.proxy,
|
||||
id, flags, param);
|
||||
}
|
||||
|
|
@ -185,7 +188,7 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
struct pw_properties *p;
|
||||
int res;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (props == NULL)
|
||||
return -EINVAL;
|
||||
|
|
@ -200,13 +203,13 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT);
|
||||
if (str == NULL) {
|
||||
pw_log_warn(NAME" %p: no target endpoint given", impl);
|
||||
pw_log_warn("%p: no target endpoint given", impl);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
obj = sm_media_session_find_object(impl->session, atoi(str));
|
||||
if (obj == NULL || !spa_streq(obj->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
pw_log_warn(NAME" %p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
pw_log_warn("%p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -308,7 +311,7 @@ static void update_params(void *data)
|
|||
struct sm_node *node = endpoint->node->node;
|
||||
struct sm_param *p;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint", endpoint);
|
||||
pw_log_debug("%p: endpoint", endpoint);
|
||||
|
||||
params = alloca(sizeof(struct spa_pod *) * node->n_params);
|
||||
n_params = 0;
|
||||
|
|
@ -338,7 +341,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct sm_node *node = endpoint->node->node;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (node->obj.changed & SM_NODE_CHANGE_MASK_PARAMS)
|
||||
update_params(endpoint);
|
||||
|
|
@ -520,7 +523,7 @@ static struct endpoint *create_endpoint(struct node *node, struct endpoint *moni
|
|||
endpoint->info.n_params = 2;
|
||||
spa_list_init(&endpoint->stream_list);
|
||||
|
||||
pw_log_debug(NAME" %p: new endpoint %p for alsa node %p", impl, endpoint, node);
|
||||
pw_log_debug("%p: new endpoint %p for alsa node %p", impl, endpoint, node);
|
||||
pw_proxy_add_listener(proxy,
|
||||
&endpoint->proxy_listener,
|
||||
&proxy_events, endpoint);
|
||||
|
|
@ -533,7 +536,7 @@ static struct endpoint *create_endpoint(struct node *node, struct endpoint *moni
|
|||
subscribe[n_subscribe++] = SPA_PARAM_EnumFormat;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_Props;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_PropInfo;
|
||||
pw_log_debug(NAME" %p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
pw_log_debug("%p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
endpoint, node->node->obj.proxy, n_subscribe);
|
||||
pw_node_subscribe_params((struct pw_node*)node->node->obj.proxy,
|
||||
subscribe, n_subscribe);
|
||||
|
|
@ -559,12 +562,12 @@ static int setup_alsa_fallback_endpoint(struct device *device)
|
|||
struct sm_node *n;
|
||||
struct sm_device *d = device->device;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p fallback", impl, d);
|
||||
pw_log_debug("%p: device %p fallback", impl, d);
|
||||
|
||||
spa_list_for_each(n, &d->node_list, link) {
|
||||
struct node *node;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p has node %p", impl, d, n);
|
||||
pw_log_debug("%p: device %p has node %p", impl, d, n);
|
||||
|
||||
node = sm_object_add_data(&n->obj, SESSION_KEY, sizeof(struct node));
|
||||
node->device = device;
|
||||
|
|
@ -655,7 +658,7 @@ static void device_update(void *data)
|
|||
struct device *device = data;
|
||||
struct impl *impl = device->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p %08x %08x", impl, device,
|
||||
pw_log_debug("%p: device %p %08x %08x", impl, device,
|
||||
device->device->obj.avail, device->device->obj.changed);
|
||||
|
||||
if (!SPA_FLAG_IS_SET(device->device->obj.avail,
|
||||
|
|
@ -688,7 +691,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
media_class = pw_properties_get(obj->props, PW_KEY_MEDIA_CLASS);
|
||||
str = pw_properties_get(obj->props, PW_KEY_DEVICE_API);
|
||||
|
||||
pw_log_debug(NAME" %p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
pw_log_debug("%p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
|
||||
if (!spa_strstartswith(media_class, "Audio/"))
|
||||
return 0;
|
||||
|
|
@ -700,7 +703,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
device->id = obj->id;
|
||||
device->device = (struct sm_device*)obj;
|
||||
spa_list_init(&device->endpoint_list);
|
||||
pw_log_debug(NAME" %p: found alsa device %d media_class %s", impl, obj->id, media_class);
|
||||
pw_log_debug("%p: found alsa device %d media_class %s", impl, obj->id, media_class);
|
||||
|
||||
sm_object_add_listener(obj, &device->listener, &device_events, device);
|
||||
|
||||
|
|
@ -725,7 +728,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl,
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl,
|
||||
object->id, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
|
|
@ -759,6 +762,8 @@ int sm_alsa_endpoint_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -46,6 +46,11 @@
|
|||
/** \page page_media_session_module_alsa_midi Media Session Module: ALSA MIDI
|
||||
*/
|
||||
|
||||
#define NAME "alsa-midi"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#define DEFAULT_NAME "Midi-Bridge"
|
||||
|
||||
struct impl {
|
||||
|
|
@ -175,6 +180,8 @@ int sm_alsa_midi_start(struct sm_media_session *session)
|
|||
int res;
|
||||
const char *name;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -56,9 +56,6 @@
|
|||
|
||||
#include "media-session.h"
|
||||
|
||||
#define NAME "alsa-monitor"
|
||||
#include "reserve.c"
|
||||
|
||||
/** \page page_media_session_module_alsa_monitor Media Session Module: ALSA Monitor
|
||||
*
|
||||
* This module monitors udev for ALSA devices and creates the required
|
||||
|
|
@ -122,6 +119,14 @@
|
|||
* See the `alsa-monitor.conf` provided by your installation for details on
|
||||
* possible actions and matches.
|
||||
*/
|
||||
|
||||
#define NAME "alsa-monitor"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#include "reserve.c"
|
||||
|
||||
#define SESSION_CONF "alsa-monitor.conf"
|
||||
|
||||
#define DEFAULT_JACK_SECONDS 1
|
||||
|
|
@ -1174,6 +1179,8 @@ int sm_alsa_monitor_start(struct sm_media_session *session)
|
|||
int res;
|
||||
const char *str;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@
|
|||
#define NAME "bluez-autoswitch"
|
||||
#define SESSION_KEY "bluez-autoswitch"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#define RESTORE_DELAY_SEC 3
|
||||
|
||||
#define DEFAULT_AUDIO_SINK_KEY "default.audio.sink"
|
||||
|
|
@ -201,7 +204,7 @@ static int set_profile(struct sm_device *dev, const char *profile_name)
|
|||
if ((ret = find_profile(dev, -1, profile_name, &index, NULL, NULL)) < 0)
|
||||
return ret;
|
||||
|
||||
pw_log_info(NAME ": switching device %d to profile %s", dev->obj.id, profile_name);
|
||||
pw_log_info("switching device %d to profile %s", dev->obj.id, profile_name);
|
||||
|
||||
return pw_device_set_param((struct pw_device *)dev->obj.proxy,
|
||||
SPA_PARAM_Profile, 0,
|
||||
|
|
@ -357,7 +360,7 @@ static void switch_profile_if_needed(struct impl *impl)
|
|||
if (impl->record_count == 0)
|
||||
goto inactive;
|
||||
|
||||
pw_log_debug(NAME ": considering switching device profiles");
|
||||
pw_log_debug("considering switching device profiles");
|
||||
|
||||
if ((dev = find_default_output_device(impl)) == NULL)
|
||||
goto inactive;
|
||||
|
|
@ -566,7 +569,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
if (!spa_streq(pw_properties_get(object->props, PW_KEY_MEDIA_CLASS), "Stream/Input/Audio"))
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME ": input stream %d added", object->id);
|
||||
pw_log_debug("input stream %d added", object->id);
|
||||
|
||||
node = sm_object_add_data(object, SESSION_KEY, sizeof(struct node));
|
||||
if (!node->obj) {
|
||||
|
|
@ -591,7 +594,7 @@ static void session_remove(void *data, struct sm_object *object)
|
|||
change_node_state(node, false, false);
|
||||
|
||||
if (node->obj) {
|
||||
pw_log_debug(NAME ": input stream %d removed", object->id);
|
||||
pw_log_debug("input stream %d removed", object->id);
|
||||
spa_hook_remove(&node->listener);
|
||||
node->obj = NULL;
|
||||
}
|
||||
|
|
@ -670,6 +673,8 @@ int sm_bluez5_autoswitch_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
int res;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@
|
|||
#define NAME "bluez-endpoint"
|
||||
#define SESSION_KEY "bluez-endpoint"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct endpoint {
|
||||
struct spa_list link;
|
||||
|
||||
|
|
@ -123,7 +126,7 @@ static int client_endpoint_set_param(void *object,
|
|||
{
|
||||
struct endpoint *endpoint = object;
|
||||
struct impl *impl = endpoint->impl;
|
||||
pw_log_debug(NAME " %p: endpoint %p set param %d", impl, endpoint, id);
|
||||
pw_log_debug("%p: endpoint %p set param %d", impl, endpoint, id);
|
||||
return pw_node_set_param((struct pw_node*)endpoint->node->node->obj.proxy,
|
||||
id, flags, param);
|
||||
}
|
||||
|
|
@ -173,7 +176,7 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
struct pw_properties *p;
|
||||
int res;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (props == NULL)
|
||||
return -EINVAL;
|
||||
|
|
@ -188,13 +191,13 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT);
|
||||
if (str == NULL) {
|
||||
pw_log_warn(NAME" %p: no target endpoint given", impl);
|
||||
pw_log_warn("%p: no target endpoint given", impl);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
obj = sm_media_session_find_object(impl->session, atoi(str));
|
||||
if (obj == NULL || !spa_streq(obj->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
pw_log_warn(NAME" %p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
pw_log_warn("%p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -296,7 +299,7 @@ static void update_params(void *data)
|
|||
struct sm_node *node = endpoint->node->node;
|
||||
struct sm_param *p;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint", endpoint);
|
||||
pw_log_debug("%p: endpoint", endpoint);
|
||||
|
||||
params = alloca(sizeof(struct spa_pod *) * node->n_params);
|
||||
n_params = 0;
|
||||
|
|
@ -326,7 +329,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct sm_node *node = endpoint->node->node;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (node->obj.changed & SM_NODE_CHANGE_MASK_PARAMS)
|
||||
update_params(endpoint);
|
||||
|
|
@ -508,7 +511,7 @@ static struct endpoint *create_endpoint(struct node *node, struct endpoint *moni
|
|||
endpoint->info.n_params = 2;
|
||||
spa_list_init(&endpoint->stream_list);
|
||||
|
||||
pw_log_debug(NAME" %p: new endpoint %p for bluez node %p", impl, endpoint, node);
|
||||
pw_log_debug("%p: new endpoint %p for bluez node %p", impl, endpoint, node);
|
||||
pw_proxy_add_listener(proxy,
|
||||
&endpoint->proxy_listener,
|
||||
&proxy_events, endpoint);
|
||||
|
|
@ -521,7 +524,7 @@ static struct endpoint *create_endpoint(struct node *node, struct endpoint *moni
|
|||
subscribe[n_subscribe++] = SPA_PARAM_EnumFormat;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_Props;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_PropInfo;
|
||||
pw_log_debug(NAME" %p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
pw_log_debug("%p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
endpoint, node->node->obj.proxy, n_subscribe);
|
||||
pw_node_subscribe_params((struct pw_node*)node->node->obj.proxy,
|
||||
subscribe, n_subscribe);
|
||||
|
|
@ -547,12 +550,12 @@ static int setup_bluez_endpoint(struct device *device)
|
|||
struct sm_node *n;
|
||||
struct sm_device *d = device->device;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p fallback", impl, d);
|
||||
pw_log_debug("%p: device %p fallback", impl, d);
|
||||
|
||||
spa_list_for_each(n, &d->node_list, link) {
|
||||
struct node *node;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p has node %p", impl, d, n);
|
||||
pw_log_debug("%p: device %p has node %p", impl, d, n);
|
||||
|
||||
node = sm_object_add_data(&n->obj, SESSION_KEY, sizeof(struct node));
|
||||
node->device = device;
|
||||
|
|
@ -583,7 +586,7 @@ static void device_update(void *data)
|
|||
struct device *device = data;
|
||||
struct impl *impl = device->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p %08x %08x", impl, device,
|
||||
pw_log_debug("%p: device %p %08x %08x", impl, device,
|
||||
device->device->obj.avail, device->device->obj.changed);
|
||||
|
||||
if (!SPA_FLAG_IS_SET(device->device->obj.avail,
|
||||
|
|
@ -616,7 +619,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
media_class = pw_properties_get(obj->props, PW_KEY_MEDIA_CLASS);
|
||||
str = pw_properties_get(obj->props, PW_KEY_DEVICE_API);
|
||||
|
||||
pw_log_debug(NAME" %p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
pw_log_debug("%p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
|
||||
if (!spa_strstartswith(media_class, "Audio/"))
|
||||
return 0;
|
||||
|
|
@ -628,7 +631,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
device->id = obj->id;
|
||||
device->device = (struct sm_device*)obj;
|
||||
spa_list_init(&device->endpoint_list);
|
||||
pw_log_debug(NAME" %p: found bluez device %d media_class %s", impl, obj->id, media_class);
|
||||
pw_log_debug("%p: found bluez device %d media_class %s", impl, obj->id, media_class);
|
||||
|
||||
sm_object_add_listener(obj, &device->listener, &device_events, device);
|
||||
|
||||
|
|
@ -653,7 +656,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl,
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl,
|
||||
object->id, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
|
|
@ -687,6 +690,8 @@ int sm_bluez5_endpoint_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@
|
|||
#define SESSION_CONF "bluez-monitor.conf"
|
||||
#define FEATURES_CONF "bluez-hardware.conf"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct device;
|
||||
|
||||
struct node {
|
||||
|
|
@ -700,10 +703,10 @@ static void seat_active(void *data, bool active)
|
|||
impl->seat_active = active;
|
||||
|
||||
if (impl->seat_active) {
|
||||
pw_log_info(NAME ": seat active, starting bluetooth");
|
||||
pw_log_info("seat active, starting bluetooth");
|
||||
load_bluez_handle(impl);
|
||||
} else {
|
||||
pw_log_info(NAME ": seat not active, stopping bluetooth");
|
||||
pw_log_info("seat not active, stopping bluetooth");
|
||||
unload_bluez_handle(impl);
|
||||
}
|
||||
}
|
||||
|
|
@ -721,6 +724,8 @@ int sm_bluez5_monitor_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
const char *str;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL) {
|
||||
res = -errno;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@
|
|||
#define DEFAULT_CONFIG_AUDIO_SOURCE_KEY "default.configured.audio.source"
|
||||
#define DEFAULT_CONFIG_VIDEO_SOURCE_KEY "default.configured.video.source"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct sm_media_session *session;
|
||||
struct spa_hook listener;
|
||||
|
|
@ -89,7 +92,7 @@ static void remove_idle_timeout(struct impl *impl)
|
|||
static void idle_timeout(void *data, uint64_t expirations)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: idle timeout", impl);
|
||||
pw_log_debug("%p: idle timeout", impl);
|
||||
remove_idle_timeout(impl);
|
||||
}
|
||||
|
||||
|
|
@ -171,6 +174,8 @@ int sm_default_nodes_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
int res;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -83,6 +83,9 @@
|
|||
|
||||
#define SAVE_INTERVAL 1
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct timespec now;
|
||||
|
||||
|
|
@ -131,7 +134,7 @@ static void remove_idle_timeout(struct impl *impl)
|
|||
static void idle_timeout(void *data, uint64_t expirations)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: idle timeout", impl);
|
||||
pw_log_debug("%p: idle timeout", impl);
|
||||
remove_idle_timeout(impl);
|
||||
}
|
||||
|
||||
|
|
@ -396,7 +399,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = dev->impl;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p %08x/%08x", impl, dev,
|
||||
pw_log_debug("%p: device %p %08x/%08x", impl, dev,
|
||||
dev->obj->obj.changed, dev->obj->obj.avail);
|
||||
|
||||
if (dev->obj->info && dev->obj->info->props &&
|
||||
|
|
@ -424,7 +427,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
(name = pw_properties_get(object->props, PW_KEY_DEVICE_NAME)) == NULL)
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: add device '%d' %s", impl, object->id, name);
|
||||
pw_log_debug("%p: add device '%d' %s", impl, object->id, name);
|
||||
|
||||
dev = sm_object_add_data(object, SESSION_KEY, sizeof(struct device));
|
||||
dev->obj = (struct sm_device*)object;
|
||||
|
|
@ -455,7 +458,7 @@ static void session_remove(void *data, struct sm_object *object)
|
|||
if (!spa_streq(object->type, PW_TYPE_INTERFACE_Device))
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: remove device '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove device '%d'", impl, object->id);
|
||||
|
||||
if ((dev = sm_object_get_data(object, SESSION_KEY)) != NULL)
|
||||
destroy_device(impl, dev);
|
||||
|
|
@ -483,6 +486,8 @@ int sm_default_profile_start(struct sm_media_session *session)
|
|||
int res;
|
||||
const char *str;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@
|
|||
|
||||
#define SAVE_INTERVAL 1
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct timespec now;
|
||||
|
||||
|
|
@ -99,7 +102,7 @@ static void remove_idle_timeout(struct impl *impl)
|
|||
static void idle_timeout(void *data, uint64_t expirations)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: idle timeout", impl);
|
||||
pw_log_debug("%p: idle timeout", impl);
|
||||
remove_idle_timeout(impl);
|
||||
}
|
||||
|
||||
|
|
@ -877,7 +880,7 @@ static void object_update(void *data)
|
|||
struct device *dev = data;
|
||||
struct impl *impl = dev->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p %08x/%08x", impl, dev,
|
||||
pw_log_debug("%p: device %p %08x/%08x", impl, dev,
|
||||
dev->obj->obj.changed, dev->obj->obj.avail);
|
||||
|
||||
if (dev->obj->obj.changed & SM_DEVICE_CHANGE_MASK_PARAMS)
|
||||
|
|
@ -900,7 +903,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
(name = pw_properties_get(object->props, PW_KEY_DEVICE_NAME)) == NULL)
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: add device '%d' %s", impl, object->id, name);
|
||||
pw_log_debug("%p: add device '%d' %s", impl, object->id, name);
|
||||
|
||||
dev = sm_object_add_data(object, SESSION_KEY, sizeof(struct device));
|
||||
dev->obj = (struct sm_device*)object;
|
||||
|
|
@ -931,7 +934,7 @@ static void session_remove(void *data, struct sm_object *object)
|
|||
if (!spa_streq(object->type, PW_TYPE_INTERFACE_Device))
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: remove device '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove device '%d'", impl, object->id);
|
||||
|
||||
if ((dev = sm_object_get_data(object, SESSION_KEY)) != NULL)
|
||||
destroy_device(impl, dev);
|
||||
|
|
@ -958,6 +961,8 @@ int sm_default_routes_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
int res;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,11 @@
|
|||
/** \page page_media_session_module_libcamera_monitor Media Session Module: libCamera Monitor
|
||||
*/
|
||||
|
||||
#define NAME "libcamera-monitor"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct device;
|
||||
|
||||
struct node {
|
||||
|
|
@ -469,6 +474,8 @@ int sm_libcamera_monitor_start(struct sm_media_session *sess)
|
|||
int res;
|
||||
void *iface;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@
|
|||
|
||||
#define NAME "logind"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct sm_media_session *session;
|
||||
struct spa_hook listener;
|
||||
|
|
@ -106,6 +109,8 @@ int sm_logind_start(struct sm_media_session *session)
|
|||
struct pw_loop *main_loop;
|
||||
int res;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
@ -132,7 +137,7 @@ int sm_logind_start(struct sm_media_session *session)
|
|||
return 0;
|
||||
|
||||
fail:
|
||||
pw_log_error(NAME ": failed to start systemd logind monitor: %d (%s)", res, spa_strerror(res));
|
||||
pw_log_error(": failed to start systemd logind monitor: %d (%s)", res, spa_strerror(res));
|
||||
free(impl);
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@
|
|||
#include <pipewire/pipewire.h>
|
||||
#include "media-session.h"
|
||||
|
||||
PW_LOG_TOPIC_EXTERN(mod_topic);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
static bool find_match(struct spa_json *arr, struct pw_properties *props)
|
||||
{
|
||||
struct spa_json match_obj;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,9 @@
|
|||
#define SESSION_PREFIX "media-session.d"
|
||||
#define SESSION_CONF "media-session.conf"
|
||||
|
||||
PW_LOG_TOPIC(mod_topic, "ms.core");
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#define sm_object_emit(o,m,v,...) spa_hook_list_call(&(o)->hooks, struct sm_object_events, m, v, ##__VA_ARGS__)
|
||||
|
||||
#define sm_object_emit_update(s) sm_object_emit(s, update, 0)
|
||||
|
|
@ -304,7 +307,7 @@ static int sm_object_destroy_maybe_free(struct sm_object *obj)
|
|||
struct impl *impl = SPA_CONTAINER_OF(obj->session, struct impl, this);
|
||||
struct data *d;
|
||||
|
||||
pw_log_debug(NAME" %p: destroy object %p id:%d proxy:%p handle:%p monitor:%d destroyed:%d discarded:%d", obj->session,
|
||||
pw_log_debug("%p: destroy object %p id:%d proxy:%p handle:%p monitor:%d destroyed:%d discarded:%d", obj->session,
|
||||
obj, obj->id, obj->proxy, obj->handle, obj->monitor_global, obj->destroyed, obj->discarded);
|
||||
|
||||
if (obj->destroyed)
|
||||
|
|
@ -376,13 +379,13 @@ static struct param *add_param(struct spa_list *param_list,
|
|||
id = SPA_POD_OBJECT_ID(param);
|
||||
|
||||
if (id >= SM_MAX_PARAMS) {
|
||||
pw_log_error(NAME": too big param id %d", id);
|
||||
pw_log_error("too big param id %d", id);
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (seq != param_seq[id]) {
|
||||
pw_log_debug(NAME": ignoring param %d, seq:%d != current_seq:%d",
|
||||
pw_log_debug("ignoring param %d, seq:%d != current_seq:%d",
|
||||
id, seq, param_seq[id]);
|
||||
errno = EBUSY;
|
||||
return NULL;
|
||||
|
|
@ -455,7 +458,7 @@ static void client_event_info(void *object, const struct pw_client_info *info)
|
|||
struct sm_client *client = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(client->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: client %d info", impl, client->obj.id);
|
||||
pw_log_debug("%p: client %d info", impl, client->obj.id);
|
||||
client->info = pw_client_info_merge(client->info, info, client->obj.changed == 0);
|
||||
|
||||
client->obj.avail |= SM_CLIENT_CHANGE_MASK_INFO;
|
||||
|
|
@ -493,7 +496,7 @@ static void device_event_info(void *object, const struct pw_device_info *info)
|
|||
struct impl *impl = SPA_CONTAINER_OF(device->obj.session, struct impl, this);
|
||||
uint32_t i;
|
||||
|
||||
pw_log_debug(NAME" %p: device %d info", impl, device->obj.id);
|
||||
pw_log_debug("%p: device %d info", impl, device->obj.id);
|
||||
info = device->info = pw_device_info_merge(device->info, info, device->obj.changed == 0);
|
||||
|
||||
device->obj.avail |= SM_DEVICE_CHANGE_MASK_INFO;
|
||||
|
|
@ -507,7 +510,7 @@ static void device_event_info(void *object, const struct pw_device_info *info)
|
|||
continue;
|
||||
|
||||
if (id >= SM_MAX_PARAMS) {
|
||||
pw_log_error(NAME" %p: too big param id %d", impl, id);
|
||||
pw_log_error("%p: too big param id %d", impl, id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -519,7 +522,7 @@ static void device_event_info(void *object, const struct pw_device_info *info)
|
|||
++device->param_seq[id], id, 0, UINT32_MAX, NULL);
|
||||
if (SPA_RESULT_IS_ASYNC(res))
|
||||
device->param_seq[id] = res;
|
||||
pw_log_debug(NAME" %p: device %d enum params %d seq:%d", impl,
|
||||
pw_log_debug("%p: device %d enum params %d seq:%d", impl,
|
||||
device->obj.id, id, device->param_seq[id]);
|
||||
}
|
||||
info->params[i].user = 0;
|
||||
|
|
@ -536,7 +539,7 @@ static void device_event_param(void *object, int seq,
|
|||
struct sm_device *device = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(device->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: device %p param %d index:%d seq:%d", impl, device, id, index, seq);
|
||||
pw_log_debug("%p: device %p param %d index:%d seq:%d", impl, device, id, index, seq);
|
||||
if (add_param(&device->param_list, seq, device->param_seq, id, param) != NULL)
|
||||
device->n_params++;
|
||||
|
||||
|
|
@ -601,7 +604,7 @@ static void node_event_info(void *object, const struct pw_node_info *info)
|
|||
struct impl *impl = SPA_CONTAINER_OF(node->obj.session, struct impl, this);
|
||||
uint32_t i;
|
||||
|
||||
pw_log_debug(NAME" %p: node %d info", impl, node->obj.id);
|
||||
pw_log_debug("%p: node %d info", impl, node->obj.id);
|
||||
info = node->info = pw_node_info_merge(node->info, info, node->obj.changed == 0);
|
||||
|
||||
node->obj.avail |= SM_NODE_CHANGE_MASK_INFO;
|
||||
|
|
@ -616,7 +619,7 @@ static void node_event_info(void *object, const struct pw_node_info *info)
|
|||
continue;
|
||||
|
||||
if (id >= SM_MAX_PARAMS) {
|
||||
pw_log_error(NAME" %p: too big param id %d", impl, id);
|
||||
pw_log_error("%p: too big param id %d", impl, id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -628,7 +631,7 @@ static void node_event_info(void *object, const struct pw_node_info *info)
|
|||
++node->param_seq[id], id, 0, UINT32_MAX, NULL);
|
||||
if (SPA_RESULT_IS_ASYNC(res))
|
||||
node->param_seq[id] = res;
|
||||
pw_log_debug(NAME" %p: node %d enum params %d seq:%d", impl,
|
||||
pw_log_debug("%p: node %d enum params %d seq:%d", impl,
|
||||
node->obj.id, id, node->param_seq[id]);
|
||||
}
|
||||
info->params[i].user = 0;
|
||||
|
|
@ -645,7 +648,7 @@ static void node_event_param(void *object, int seq,
|
|||
struct sm_node *node = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(node->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: node %p param %d index:%d seq:%d", impl, node, id, index, seq);
|
||||
pw_log_debug("%p: node %p param %d index:%d seq:%d", impl, node, id, index, seq);
|
||||
if (add_param(&node->param_list, seq, node->param_seq, id, param) != NULL)
|
||||
node->n_params++;
|
||||
|
||||
|
|
@ -672,7 +675,7 @@ static int node_init(void *object)
|
|||
if (props) {
|
||||
if ((str = pw_properties_get(props, PW_KEY_DEVICE_ID)) != NULL)
|
||||
node->device = find_object(impl, atoi(str), NULL);
|
||||
pw_log_debug(NAME" %p: node %d parent device %s (%p)", impl,
|
||||
pw_log_debug("%p: node %d parent device %s (%p)", impl,
|
||||
node->obj.id, str, node->device);
|
||||
if (node->device) {
|
||||
spa_list_append(&node->device->node_list, &node->link);
|
||||
|
|
@ -724,7 +727,7 @@ static void port_event_info(void *object, const struct pw_port_info *info)
|
|||
struct sm_port *port = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(port->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: port %d info", impl, port->obj.id);
|
||||
pw_log_debug("%p: port %d info", impl, port->obj.id);
|
||||
port->info = pw_port_info_merge(port->info, info, port->obj.changed == 0);
|
||||
|
||||
port->obj.avail |= SM_PORT_CHANGE_MASK_INFO;
|
||||
|
|
@ -769,7 +772,7 @@ static int port_init(void *object)
|
|||
if ((str = pw_properties_get(props, PW_KEY_NODE_ID)) != NULL)
|
||||
port->node = find_object(impl, atoi(str), PW_TYPE_INTERFACE_Node);
|
||||
|
||||
pw_log_debug(NAME" %p: port %d parent node %s (%p) direction:%d type:%d", impl,
|
||||
pw_log_debug("%p: port %d parent node %s (%p) direction:%d type:%d", impl,
|
||||
port->obj.id, str, port->node, port->direction, port->type);
|
||||
if (port->node) {
|
||||
spa_list_append(&port->node->port_list, &port->link);
|
||||
|
|
@ -809,7 +812,7 @@ static void session_event_info(void *object, const struct pw_session_info *info)
|
|||
struct impl *impl = SPA_CONTAINER_OF(sess->obj.session, struct impl, this);
|
||||
struct pw_session_info *i = sess->info;
|
||||
|
||||
pw_log_debug(NAME" %p: session %d info", impl, sess->obj.id);
|
||||
pw_log_debug("%p: session %d info", impl, sess->obj.id);
|
||||
if (i == NULL && info) {
|
||||
i = sess->info = calloc(1, sizeof(struct pw_session_info));
|
||||
i->version = PW_VERSION_SESSION_INFO;
|
||||
|
|
@ -881,7 +884,7 @@ static void endpoint_event_info(void *object, const struct pw_endpoint_info *inf
|
|||
struct pw_endpoint_info *i = endpoint->info;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %d info", impl, endpoint->obj.id);
|
||||
pw_log_debug("%p: endpoint %d info", impl, endpoint->obj.id);
|
||||
if (i == NULL && info) {
|
||||
i = endpoint->info = calloc(1, sizeof(struct pw_endpoint_info));
|
||||
i->id = info->id;
|
||||
|
|
@ -923,7 +926,7 @@ static int endpoint_init(void *object)
|
|||
if (props) {
|
||||
if ((str = pw_properties_get(props, PW_KEY_SESSION_ID)) != NULL)
|
||||
endpoint->session = find_object(impl, atoi(str), PW_TYPE_INTERFACE_Session);
|
||||
pw_log_debug(NAME" %p: endpoint %d parent session %s", impl,
|
||||
pw_log_debug("%p: endpoint %d parent session %s", impl,
|
||||
endpoint->obj.id, str);
|
||||
if (endpoint->session) {
|
||||
spa_list_append(&endpoint->session->endpoint_list, &endpoint->link);
|
||||
|
|
@ -976,7 +979,7 @@ static void endpoint_stream_event_info(void *object, const struct pw_endpoint_st
|
|||
struct sm_endpoint_stream *stream = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(stream->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint stream %d info", impl, stream->obj.id);
|
||||
pw_log_debug("%p: endpoint stream %d info", impl, stream->obj.id);
|
||||
if (stream->info == NULL && info) {
|
||||
stream->info = calloc(1, sizeof(struct pw_endpoint_stream_info));
|
||||
stream->info->version = PW_VERSION_ENDPOINT_STREAM_INFO;
|
||||
|
|
@ -1008,7 +1011,7 @@ static int endpoint_stream_init(void *object)
|
|||
if (props) {
|
||||
if ((str = pw_properties_get(props, PW_KEY_ENDPOINT_ID)) != NULL)
|
||||
stream->endpoint = find_object(impl, atoi(str), PW_TYPE_INTERFACE_Endpoint);
|
||||
pw_log_debug(NAME" %p: stream %d parent endpoint %s", impl,
|
||||
pw_log_debug("%p: stream %d parent endpoint %s", impl,
|
||||
stream->obj.id, str);
|
||||
if (stream->endpoint) {
|
||||
spa_list_append(&stream->endpoint->stream_list, &stream->link);
|
||||
|
|
@ -1052,7 +1055,7 @@ static void endpoint_link_event_info(void *object, const struct pw_endpoint_link
|
|||
struct sm_endpoint_link *link = object;
|
||||
struct impl *impl = SPA_CONTAINER_OF(link->obj.session, struct impl, this);
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint link %d info", impl, link->obj.id);
|
||||
pw_log_debug("%p: endpoint link %d info", impl, link->obj.id);
|
||||
if (link->info == NULL && info) {
|
||||
link->info = calloc(1, sizeof(struct pw_endpoint_link_info));
|
||||
link->info->version = PW_VERSION_ENDPOINT_LINK_INFO;
|
||||
|
|
@ -1253,13 +1256,13 @@ create_object(struct impl *impl, struct pw_proxy *proxy, struct pw_proxy *handle
|
|||
|
||||
info = get_object_info(impl, type);
|
||||
if (info == NULL) {
|
||||
pw_log_error(NAME" %p: unknown object type %s", impl, type);
|
||||
pw_log_error("%p: unknown object type %s", impl, type);
|
||||
errno = ENOTSUP;
|
||||
return NULL;
|
||||
}
|
||||
obj = init_object(impl, info, proxy, handle, SPA_ID_INVALID, props, monitor_global);
|
||||
|
||||
pw_log_debug(NAME" %p: created new object %p proxy:%p handle:%p", impl,
|
||||
pw_log_debug("%p: created new object %p proxy:%p handle:%p", impl,
|
||||
obj, obj->proxy, obj->handle);
|
||||
|
||||
return obj;
|
||||
|
|
@ -1278,7 +1281,7 @@ bind_object(struct impl *impl, const struct object_info *info, struct registry_e
|
|||
sm_object_discard(obj);
|
||||
add_object(impl, obj, re->id);
|
||||
|
||||
pw_log_debug(NAME" %p: bound new object %p proxy %p id:%d", impl, obj, obj->proxy, obj->id);
|
||||
pw_log_debug("%p: bound new object %p proxy %p id:%d", impl, obj, obj->proxy, obj->id);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
|
@ -1294,7 +1297,7 @@ update_object(struct impl *impl, const struct object_info *info, struct sm_objec
|
|||
if (obj->proxy != NULL)
|
||||
return 0;
|
||||
|
||||
pw_log_debug(NAME" %p: update type:%s", impl, obj->type);
|
||||
pw_log_debug("%p: update type:%s", impl, obj->type);
|
||||
|
||||
proxy = re->proxy;
|
||||
re->proxy = NULL;
|
||||
|
|
@ -1333,7 +1336,7 @@ static int handle_registry_event(struct impl *impl, struct registry_event *re)
|
|||
|
||||
obj = find_object(impl, re->id, NULL);
|
||||
|
||||
pw_log_debug(NAME " %p: new global '%d' %s/%d obj:%p monitor:%d seq:%d",
|
||||
pw_log_debug("%p: new global '%d' %s/%d obj:%p monitor:%d seq:%d",
|
||||
impl, re->id, re->type, re->version, obj, re->monitor, re->seq);
|
||||
|
||||
info = get_object_info(impl, re->type);
|
||||
|
|
@ -1377,7 +1380,7 @@ static int monitor_sync(struct impl *impl)
|
|||
{
|
||||
pw_core_set_paused(impl->policy_core, true);
|
||||
impl->monitor_seq = pw_core_sync(impl->monitor_core, 0, impl->monitor_seq);
|
||||
pw_log_debug(NAME " %p: monitor sync start %d", impl, impl->monitor_seq);
|
||||
pw_log_debug("%p: monitor sync start %d", impl, impl->monitor_seq);
|
||||
sm_media_session_schedule_rescan(&impl->this);
|
||||
return impl->monitor_seq;
|
||||
}
|
||||
|
|
@ -1395,7 +1398,7 @@ registry_global(void *data, uint32_t id,
|
|||
if (info == NULL)
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: registry event (policy) for new global '%d'", impl, id);
|
||||
pw_log_debug("%p: registry event (policy) for new global '%d'", impl, id);
|
||||
|
||||
/*
|
||||
* Handle policy core events after monitor core ones.
|
||||
|
|
@ -1435,7 +1438,7 @@ registry_global(void *data, uint32_t id,
|
|||
error:
|
||||
if (re)
|
||||
registry_event_free(re);
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl, id, spa_strerror(-errno));
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl, id, spa_strerror(-errno));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1447,7 +1450,7 @@ registry_global_remove(void *data, uint32_t id)
|
|||
obj = find_object(impl, id, NULL);
|
||||
obj = (obj && !obj->monitor_global) ? obj : NULL;
|
||||
|
||||
pw_log_debug(NAME " %p: registry event (policy) for remove global '%d' obj:%p",
|
||||
pw_log_debug("%p: registry event (policy) for remove global '%d' obj:%p",
|
||||
impl, id, obj);
|
||||
|
||||
if (obj)
|
||||
|
|
@ -1472,7 +1475,7 @@ monitor_registry_global(void *data, uint32_t id,
|
|||
.props = props, .monitor = true
|
||||
};
|
||||
|
||||
pw_log_debug(NAME " %p: registry event (monitor) for new global '%d'", impl, id);
|
||||
pw_log_debug("%p: registry event (monitor) for new global '%d'", impl, id);
|
||||
|
||||
info = get_object_info(impl, type);
|
||||
if (info == NULL)
|
||||
|
|
@ -1483,7 +1486,7 @@ monitor_registry_global(void *data, uint32_t id,
|
|||
if (re.proxy)
|
||||
handle_registry_event(impl, &re);
|
||||
else
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl, id, spa_strerror(-errno));
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl, id, spa_strerror(-errno));
|
||||
|
||||
registry_event_free(&re);
|
||||
return;
|
||||
|
|
@ -1498,7 +1501,7 @@ monitor_registry_global_remove(void *data, uint32_t id)
|
|||
obj = find_object(impl, id, NULL);
|
||||
obj = (obj && obj->monitor_global) ? obj : NULL;
|
||||
|
||||
pw_log_debug(NAME " %p: registry event (monitor) for remove global '%d' obj:%p", impl, id, obj);
|
||||
pw_log_debug("%p: registry event (monitor) for remove global '%d' obj:%p", impl, id, obj);
|
||||
|
||||
if (obj)
|
||||
sm_object_destroy_maybe_free(obj);
|
||||
|
|
@ -1616,21 +1619,21 @@ int sm_media_session_roundtrip(struct sm_media_session *sess)
|
|||
if ((seq = sm_media_session_sync(sess, roundtrip_callback, &done)) < 0)
|
||||
return seq;
|
||||
|
||||
pw_log_debug(NAME" %p: roundtrip %d", impl, seq);
|
||||
pw_log_debug("%p: roundtrip %d", impl, seq);
|
||||
|
||||
pw_loop_enter(loop);
|
||||
while (!done) {
|
||||
if ((res = pw_loop_iterate(loop, -1)) < 0) {
|
||||
if (res == -EINTR)
|
||||
continue;
|
||||
pw_log_warn(NAME" %p: iterate error %d (%s)",
|
||||
pw_log_warn("%p: iterate error %d (%s)",
|
||||
loop, res, spa_strerror(res));
|
||||
break;
|
||||
}
|
||||
}
|
||||
pw_loop_leave(loop);
|
||||
|
||||
pw_log_debug(NAME" %p: roundtrip %d done", impl, seq);
|
||||
pw_log_debug("%p: roundtrip %d done", impl, seq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1642,7 +1645,7 @@ struct pw_proxy *sm_media_session_export(struct sm_media_session *sess,
|
|||
struct impl *impl = SPA_CONTAINER_OF(sess, struct impl, this);
|
||||
struct pw_proxy *handle;
|
||||
|
||||
pw_log_debug(NAME " %p: object %s %p", impl, type, object);
|
||||
pw_log_debug("%p: object %s %p", impl, type, object);
|
||||
|
||||
handle = pw_core_export(impl->monitor_core, type,
|
||||
props, object, user_data_size);
|
||||
|
|
@ -1659,7 +1662,7 @@ struct sm_node *sm_media_session_export_node(struct sm_media_session *sess,
|
|||
struct sm_node *node;
|
||||
struct pw_proxy *handle;
|
||||
|
||||
pw_log_debug(NAME " %p: node %p", impl, object);
|
||||
pw_log_debug("%p: node %p", impl, object);
|
||||
|
||||
handle = pw_core_export(impl->monitor_core, PW_TYPE_INTERFACE_Node,
|
||||
props, object, sizeof(struct sm_node));
|
||||
|
|
@ -1678,7 +1681,7 @@ struct sm_device *sm_media_session_export_device(struct sm_media_session *sess,
|
|||
struct sm_device *device;
|
||||
struct pw_proxy *handle;
|
||||
|
||||
pw_log_debug(NAME " %p: device %p", impl, object);
|
||||
pw_log_debug("%p: device %p", impl, object);
|
||||
|
||||
handle = pw_core_export(impl->monitor_core, SPA_TYPE_INTERFACE_Device,
|
||||
props, object, sizeof(struct sm_device));
|
||||
|
|
@ -1706,7 +1709,7 @@ struct sm_node *sm_media_session_create_node(struct sm_media_session *sess,
|
|||
struct sm_node *node;
|
||||
struct pw_proxy *proxy;
|
||||
|
||||
pw_log_debug(NAME " %p: node '%s'", impl, factory_name);
|
||||
pw_log_debug("%p: node '%s'", impl, factory_name);
|
||||
|
||||
proxy = pw_core_create_object(impl->policy_core,
|
||||
factory_name,
|
||||
|
|
@ -1832,7 +1835,7 @@ static int link_nodes(struct impl *impl, struct endpoint_link *link,
|
|||
bool passive = false;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: linking %d -> %d", impl, outnode->obj.id, innode->obj.id);
|
||||
pw_log_debug("%p: linking %d -> %d", impl, outnode->obj.id, innode->obj.id);
|
||||
|
||||
if ((str = spa_dict_lookup(outnode->info->props, PW_KEY_NODE_PASSIVE)) != NULL)
|
||||
passive |= (pw_properties_parse_bool(str) || spa_streq(str, "out"));
|
||||
|
|
@ -1856,13 +1859,13 @@ static int link_nodes(struct impl *impl, struct endpoint_link *link,
|
|||
|
||||
inport = find_input_port(impl, outnode, outport, innode);
|
||||
if (inport == NULL) {
|
||||
pw_log_debug(NAME" %p: port %d:%d can't be linked", impl,
|
||||
pw_log_debug("%p: port %d:%d can't be linked", impl,
|
||||
outport->direction, outport->obj.id);
|
||||
continue;
|
||||
}
|
||||
inport->visited = true;
|
||||
|
||||
pw_log_debug(NAME" %p: port %d:%d -> %d:%d", impl,
|
||||
pw_log_debug("%p: port %d:%d -> %d:%d", impl,
|
||||
outport->direction, outport->obj.id,
|
||||
inport->direction, inport->obj.id);
|
||||
|
||||
|
|
@ -2098,7 +2101,7 @@ static void monitor_core_done(void *data, uint32_t id, int seq)
|
|||
handle_postponed_registry_events(impl, seq);
|
||||
|
||||
if (seq == impl->monitor_seq) {
|
||||
pw_log_debug(NAME " %p: monitor sync stop %d", impl, seq);
|
||||
pw_log_debug("%p: monitor sync stop %d", impl, seq);
|
||||
pw_core_set_paused(impl->policy_core, false);
|
||||
}
|
||||
}
|
||||
|
|
@ -2132,7 +2135,7 @@ static int start_session(struct impl *impl)
|
|||
static void core_info(void *data, const struct pw_core_info *info)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME" %p: info", impl);
|
||||
pw_log_debug("%p: info", impl);
|
||||
impl->this.info = pw_core_info_merge(impl->this.info, info, true);
|
||||
|
||||
if (impl->this.info->change_mask != 0)
|
||||
|
|
@ -2157,7 +2160,7 @@ static void core_done(void *data, uint32_t id, int seq)
|
|||
struct sm_object *obj, *to;
|
||||
|
||||
if (!impl->scanning) {
|
||||
pw_log_trace(NAME" %p: rescan %u %d", impl, id, seq);
|
||||
pw_log_trace("%p: rescan %u %d", impl, id, seq);
|
||||
impl->scanning = true;
|
||||
sm_media_session_emit_rescan(impl, seq);
|
||||
impl->scanning = false;
|
||||
|
|
@ -2170,7 +2173,7 @@ static void core_done(void *data, uint32_t id, int seq)
|
|||
spa_list_for_each_safe(obj, to, &impl->object_list, link) {
|
||||
if (obj->id == SPA_ID_INVALID)
|
||||
continue;
|
||||
pw_log_trace(NAME" %p: obj %p %08x", impl, obj, obj->changed);
|
||||
pw_log_trace("%p: obj %p %08x", impl, obj, obj->changed);
|
||||
if (obj->changed)
|
||||
sm_object_emit_update(obj);
|
||||
obj->changed = 0;
|
||||
|
|
@ -2203,7 +2206,7 @@ static const struct pw_core_events policy_core_events = {
|
|||
static void policy_core_destroy(void *data)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME" %p: policy core destroy", impl);
|
||||
pw_log_debug("%p: policy core destroy", impl);
|
||||
impl->policy_core = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -2242,7 +2245,7 @@ static void session_shutdown(struct impl *impl)
|
|||
struct registry_event *re;
|
||||
struct spa_list free_list;
|
||||
|
||||
pw_log_info(NAME" %p", impl);
|
||||
pw_log_info("%p", impl);
|
||||
sm_media_session_emit_shutdown(impl);
|
||||
|
||||
/*
|
||||
|
|
@ -2451,6 +2454,8 @@ int main(int argc, char *argv[])
|
|||
|
||||
pw_init(&argc, &argv);
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hVc:v", long_options, NULL)) != -1) {
|
||||
switch (c) {
|
||||
case 'v':
|
||||
|
|
|
|||
|
|
@ -36,6 +36,9 @@
|
|||
|
||||
#define NAME "metadata"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct metadata {
|
||||
struct pw_impl_metadata *impl;
|
||||
struct pw_metadata *metadata;
|
||||
|
|
@ -68,6 +71,8 @@ struct pw_metadata *sm_media_session_export_metadata(struct sm_media_session *se
|
|||
int res;
|
||||
struct spa_dict_item items[1];
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
this = calloc(1, sizeof(*this));
|
||||
if (this == NULL)
|
||||
goto error_errno;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@
|
|||
|
||||
#define DEFAULT_IDLE_SECONDS 3
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct timespec now;
|
||||
|
||||
|
|
@ -119,7 +122,7 @@ handle_endpoint(struct impl *impl, struct sm_object *object)
|
|||
|
||||
media_class = object->props ? pw_properties_get(object->props, PW_KEY_MEDIA_CLASS) : NULL;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
pw_log_debug("%p: endpoint "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
|
||||
if (media_class == NULL)
|
||||
return 0;
|
||||
|
|
@ -150,7 +153,7 @@ handle_endpoint(struct impl *impl, struct sm_object *object)
|
|||
ep->direction = direction;
|
||||
ep->type = ENDPOINT_TYPE_STREAM;
|
||||
ep->media = strdup(media_class);
|
||||
pw_log_debug(NAME "%p: endpoint %d is stream %s", impl, object->id, ep->media);
|
||||
pw_log_debug("%p: endpoint %d is stream %s", impl, object->id, ep->media);
|
||||
}
|
||||
else {
|
||||
const char *media;
|
||||
|
|
@ -176,7 +179,7 @@ handle_endpoint(struct impl *impl, struct sm_object *object)
|
|||
ep->type = ENDPOINT_TYPE_DEVICE;
|
||||
ep->media = strdup(media);
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %d '%s' prio:%d", impl,
|
||||
pw_log_debug("%p: endpoint %d '%s' prio:%d", impl,
|
||||
object->id, ep->media, ep->priority);
|
||||
}
|
||||
return 1;
|
||||
|
|
@ -230,7 +233,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d", impl, object->id);
|
||||
pw_log_warn("%p: can't handle global %d", impl, object->id);
|
||||
}
|
||||
else
|
||||
sm_media_session_schedule_rescan(impl->session);
|
||||
|
|
@ -239,7 +242,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
static void session_remove(void *data, struct sm_object *object)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: remove global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
struct endpoint *ep;
|
||||
|
|
@ -271,7 +274,7 @@ static int find_endpoint(void *data, struct endpoint *endpoint)
|
|||
int priority = 0;
|
||||
uint64_t plugged = 0;
|
||||
|
||||
pw_log_debug(NAME " %p: looking at endpoint '%d' enabled:%d busy:%d exclusive:%d",
|
||||
pw_log_debug("%p: looking at endpoint '%d' enabled:%d busy:%d exclusive:%d",
|
||||
impl, endpoint->id, endpoint->enabled, endpoint->busy, endpoint->exclusive);
|
||||
|
||||
if (!endpoint->enabled)
|
||||
|
|
@ -290,17 +293,17 @@ static int find_endpoint(void *data, struct endpoint *endpoint)
|
|||
priority = endpoint->priority;
|
||||
|
||||
if ((find->exclusive && endpoint->busy) || endpoint->exclusive) {
|
||||
pw_log_debug(NAME " %p: endpoint '%d' in use", impl, endpoint->id);
|
||||
pw_log_debug("%p: endpoint '%d' in use", impl, endpoint->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME " %p: found endpoint '%d' %"PRIu64" prio:%d", impl,
|
||||
pw_log_debug("%p: found endpoint '%d' %"PRIu64" prio:%d", impl,
|
||||
endpoint->id, plugged, priority);
|
||||
|
||||
if (find->endpoint == NULL ||
|
||||
priority > find->priority ||
|
||||
(priority == find->priority && plugged > find->plugged)) {
|
||||
pw_log_debug(NAME " %p: new best %d %" PRIu64, impl, priority, plugged);
|
||||
pw_log_debug("%p: new best %d %" PRIu64, impl, priority, plugged);
|
||||
find->endpoint = endpoint;
|
||||
find->priority = priority;
|
||||
find->plugged = plugged;
|
||||
|
|
@ -313,7 +316,7 @@ static int link_endpoints(struct endpoint *endpoint, struct endpoint *peer)
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct pw_properties *props;
|
||||
|
||||
pw_log_debug(NAME " %p: link endpoints %d %d", impl, endpoint->id, peer->id);
|
||||
pw_log_debug("%p: link endpoints %d %d", impl, endpoint->id, peer->id);
|
||||
|
||||
if (endpoint->direction == PW_DIRECTION_INPUT) {
|
||||
struct endpoint *t = endpoint;
|
||||
|
|
@ -325,7 +328,7 @@ static int link_endpoints(struct endpoint *endpoint, struct endpoint *peer)
|
|||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_OUTPUT_STREAM, "%d", -1);
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT, "%d", peer->id);
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_INPUT_STREAM, "%d", -1);
|
||||
pw_log_debug(NAME " %p: endpoint %d -> endpoint %d", impl,
|
||||
pw_log_debug("%p: endpoint %d -> endpoint %d", impl,
|
||||
endpoint->id, peer->id);
|
||||
|
||||
pw_endpoint_create_link((struct pw_endpoint*)endpoint->obj->obj.proxy,
|
||||
|
|
@ -344,7 +347,7 @@ static int link_node(struct endpoint *endpoint, struct sm_node *peer)
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct pw_properties *props;
|
||||
|
||||
pw_log_debug(NAME " %p: link endpoint %d to node %d", impl, endpoint->id, peer->obj.id);
|
||||
pw_log_debug("%p: link endpoint %d to node %d", impl, endpoint->id, peer->obj.id);
|
||||
|
||||
props = pw_properties_new(NULL, NULL);
|
||||
|
||||
|
|
@ -353,14 +356,14 @@ static int link_node(struct endpoint *endpoint, struct sm_node *peer)
|
|||
pw_properties_setf(props, PW_KEY_LINK_OUTPUT_PORT, "%d", -1);
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT, "%d", endpoint->id);
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_INPUT_STREAM, "%d", -1);
|
||||
pw_log_debug(NAME " %p: node %d -> endpoint %d", impl,
|
||||
pw_log_debug("%p: node %d -> endpoint %d", impl,
|
||||
peer->obj.id, endpoint->id);
|
||||
} else {
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_OUTPUT_ENDPOINT, "%d", endpoint->id);
|
||||
pw_properties_setf(props, PW_KEY_ENDPOINT_LINK_OUTPUT_STREAM, "%d", -1);
|
||||
pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", peer->obj.id);
|
||||
pw_properties_setf(props, PW_KEY_LINK_INPUT_PORT, "%d", -1);
|
||||
pw_log_debug(NAME " %p: endpoint %d -> node %d", impl,
|
||||
pw_log_debug("%p: endpoint %d -> node %d", impl,
|
||||
endpoint->id, peer->obj.id);
|
||||
}
|
||||
|
||||
|
|
@ -389,12 +392,12 @@ static int rescan_endpoint(struct impl *impl, struct endpoint *ep)
|
|||
return 0;
|
||||
|
||||
if (ep->obj->info == NULL || ep->obj->info->props == NULL) {
|
||||
pw_log_debug(NAME " %p: endpoint %d has no properties", impl, ep->id);
|
||||
pw_log_debug("%p: endpoint %d has no properties", impl, ep->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ep->linked > 0) {
|
||||
pw_log_debug(NAME " %p: endpoint %d is already linked", impl, ep->id);
|
||||
pw_log_debug("%p: endpoint %d is already linked", impl, ep->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -403,12 +406,12 @@ static int rescan_endpoint(struct impl *impl, struct endpoint *ep)
|
|||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_AUTOCONNECT);
|
||||
if (str == NULL || !pw_properties_parse_bool(str)) {
|
||||
pw_log_debug(NAME" %p: endpoint %d does not need autoconnect", impl, ep->id);
|
||||
pw_log_debug("%p: endpoint %d does not need autoconnect", impl, ep->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ep->media == NULL) {
|
||||
pw_log_debug(NAME" %p: endpoint %d has unknown media", impl, ep->id);
|
||||
pw_log_debug("%p: endpoint %d has unknown media", impl, ep->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -423,14 +426,14 @@ static int rescan_endpoint(struct impl *impl, struct endpoint *ep)
|
|||
find.ep = ep;
|
||||
find.exclusive = exclusive;
|
||||
|
||||
pw_log_debug(NAME " %p: exclusive:%d", impl, exclusive);
|
||||
pw_log_debug("%p: exclusive:%d", impl, exclusive);
|
||||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_TARGET);
|
||||
if (str == NULL)
|
||||
str = spa_dict_lookup(props, PW_KEY_NODE_TARGET);
|
||||
if (str != NULL) {
|
||||
uint32_t path_id = atoi(str);
|
||||
pw_log_debug(NAME " %p: target:%d", impl, path_id);
|
||||
pw_log_debug("%p: target:%d", impl, path_id);
|
||||
|
||||
if ((obj = sm_media_session_find_object(impl->session, path_id)) != NULL) {
|
||||
if (spa_streq(obj->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
|
|
@ -450,7 +453,7 @@ static int rescan_endpoint(struct impl *impl, struct endpoint *ep)
|
|||
if (find.endpoint == NULL) {
|
||||
struct sm_object *obj;
|
||||
|
||||
pw_log_warn(NAME " %p: no endpoint found for %d", impl, ep->id);
|
||||
pw_log_warn("%p: no endpoint found for %d", impl, ep->id);
|
||||
|
||||
str = spa_dict_lookup(props, PW_KEY_NODE_DONT_RECONNECT);
|
||||
if (str != NULL && pw_properties_parse_bool(str)) {
|
||||
|
|
@ -467,12 +470,12 @@ static int rescan_endpoint(struct impl *impl, struct endpoint *ep)
|
|||
peer = find.endpoint;
|
||||
|
||||
if (exclusive && peer->busy) {
|
||||
pw_log_warn(NAME" %p: endpoint %d busy, can't get exclusive access", impl, peer->id);
|
||||
pw_log_warn("%p: endpoint %d busy, can't get exclusive access", impl, peer->id);
|
||||
return -EBUSY;
|
||||
}
|
||||
peer->exclusive = exclusive;
|
||||
|
||||
pw_log_debug(NAME" %p: linking to endpoint '%d'", impl, peer->id);
|
||||
pw_log_debug("%p: linking to endpoint '%d'", impl, peer->id);
|
||||
|
||||
peer->busy = true;
|
||||
|
||||
|
|
@ -490,7 +493,7 @@ static void session_rescan(void *data, int seq)
|
|||
struct endpoint *ep;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &impl->now);
|
||||
pw_log_debug(NAME" %p: rescan", impl);
|
||||
pw_log_debug("%p: rescan", impl);
|
||||
|
||||
spa_list_for_each(ep, &impl->endpoint_list, link)
|
||||
rescan_endpoint(impl, ep);
|
||||
|
|
@ -515,6 +518,8 @@ int sm_policy_ep_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@
|
|||
|
||||
#define MAX_LINK_RETRY 5
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct default_node {
|
||||
char *key;
|
||||
char *key_config;
|
||||
|
|
@ -360,7 +363,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = node->impl;
|
||||
const char *str;
|
||||
|
||||
pw_log_debug(NAME" %p: node %d %08x", impl, node->id, node->obj->obj.changed);
|
||||
pw_log_debug("%p: node %d %08x", impl, node->id, node->obj->obj.changed);
|
||||
|
||||
if (node->obj->obj.avail & SM_NODE_CHANGE_MASK_INFO &&
|
||||
node->obj->info != NULL && node->obj->info->props != NULL) {
|
||||
|
|
@ -371,7 +374,7 @@ static void object_update(void *data)
|
|||
if (!node->active) {
|
||||
if (node->obj->obj.avail & SM_NODE_CHANGE_MASK_PARAMS) {
|
||||
if (!find_format(node)) {
|
||||
pw_log_debug(NAME" %p: node %d can't find format", impl, node->id);
|
||||
pw_log_debug("%p: node %d can't find format", impl, node->id);
|
||||
return;
|
||||
}
|
||||
node->active = true;
|
||||
|
|
@ -402,7 +405,7 @@ handle_node(struct impl *impl, struct sm_object *object)
|
|||
role = pw_properties_get(object->props, PW_KEY_MEDIA_ROLE);
|
||||
}
|
||||
|
||||
pw_log_debug(NAME" %p: node "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
pw_log_debug("%p: node "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
|
||||
if (media_class == NULL)
|
||||
return 0;
|
||||
|
|
@ -449,7 +452,7 @@ handle_node(struct impl *impl, struct sm_object *object)
|
|||
node->direction = direction;
|
||||
node->type = NODE_TYPE_STREAM;
|
||||
node->media = strdup(media_class);
|
||||
pw_log_debug(NAME" %p: node %d is stream %s", impl, object->id, node->media);
|
||||
pw_log_debug("%p: node %d is stream %s", impl, object->id, node->media);
|
||||
}
|
||||
else {
|
||||
const char *media;
|
||||
|
|
@ -493,7 +496,7 @@ handle_node(struct impl *impl, struct sm_object *object)
|
|||
node->type = NODE_TYPE_DEVICE;
|
||||
node->media = strdup(media);
|
||||
|
||||
pw_log_debug(NAME" %p: node %d '%s' prio:%d", impl,
|
||||
pw_log_debug("%p: node %d '%s' prio:%d", impl,
|
||||
object->id, node->media, node->priority);
|
||||
}
|
||||
|
||||
|
|
@ -659,7 +662,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d", impl, object->id);
|
||||
pw_log_warn("%p: can't handle global %d", impl, object->id);
|
||||
} else
|
||||
sm_media_session_schedule_rescan(impl->session);
|
||||
}
|
||||
|
|
@ -667,7 +670,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
static void session_remove(void *data, struct sm_object *object)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: remove global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Node)) {
|
||||
struct node *n, *node;
|
||||
|
|
@ -791,11 +794,11 @@ static int find_node(void *data, struct node *node)
|
|||
bool is_default = false, can_passthrough = false;
|
||||
|
||||
if (node->obj->info == NULL) {
|
||||
pw_log_debug(NAME " %p: skipping node '%d' with no node info", impl, node->id);
|
||||
pw_log_debug("%p: skipping node '%d' with no node info", impl, node->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME " %p: looking at node '%d' enabled:%d state:%d peer:%p exclusive:%d",
|
||||
pw_log_debug("%p: looking at node '%d' enabled:%d state:%d peer:%p exclusive:%d",
|
||||
impl, node->id, node->enabled, node->obj->info->state, node->peer, node->exclusive);
|
||||
|
||||
if (!node->enabled || node->type == NODE_TYPE_UNKNOWN)
|
||||
|
|
@ -852,7 +855,7 @@ static int find_node(void *data, struct node *node)
|
|||
}
|
||||
if ((find->exclusive && node->obj->info->state == PW_NODE_STATE_RUNNING) ||
|
||||
(node->peer && node->peer->exclusive)) {
|
||||
pw_log_debug(NAME " %p: node '%d' in use", impl, node->id);
|
||||
pw_log_debug("%p: node '%d' in use", impl, node->id);
|
||||
return 0;
|
||||
}
|
||||
if (find->node && find->have_passthrough && node->have_passthrough)
|
||||
|
|
@ -860,17 +863,17 @@ static int find_node(void *data, struct node *node)
|
|||
|
||||
if ((find->passthrough_only || node->passthrough_only) &&
|
||||
!can_passthrough) {
|
||||
pw_log_debug(NAME " %p: node '%d' passthrough required", impl, node->id);
|
||||
pw_log_debug("%p: node '%d' passthrough required", impl, node->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME " %p: found node '%d' %"PRIu64" prio:%d", impl,
|
||||
pw_log_debug("%p: found node '%d' %"PRIu64" prio:%d", impl,
|
||||
node->id, plugged, priority);
|
||||
|
||||
if (find->result == NULL ||
|
||||
priority > find->priority ||
|
||||
(priority == find->priority && plugged > find->plugged)) {
|
||||
pw_log_debug(NAME " %p: new best %d %" PRIu64, impl, priority, plugged);
|
||||
pw_log_debug("%p: new best %d %" PRIu64, impl, priority, plugged);
|
||||
find->result = node;
|
||||
find->priority = priority;
|
||||
find->plugged = plugged;
|
||||
|
|
@ -916,7 +919,7 @@ static int link_nodes(struct node *node, struct node *peer)
|
|||
int res;
|
||||
uint32_t node_id = node->id;
|
||||
|
||||
pw_log_debug(NAME " %p: link nodes %d %d remix:%d", impl,
|
||||
pw_log_debug("%p: link nodes %d %d remix:%d", impl,
|
||||
node->id, peer->id, !node->dont_remix);
|
||||
|
||||
if (node->want_passthrough) {
|
||||
|
|
@ -966,7 +969,7 @@ static int unlink_nodes(struct node *node, struct node *peer)
|
|||
struct impl *impl = node->impl;
|
||||
struct pw_properties *props;
|
||||
|
||||
pw_log_debug(NAME " %p: unlink nodes %d %d", impl, node->id, peer->id);
|
||||
pw_log_debug("%p: unlink nodes %d %d", impl, node->id, peer->id);
|
||||
|
||||
if (peer->peer == node)
|
||||
peer->peer = NULL;
|
||||
|
|
@ -995,7 +998,7 @@ static int relink_node(struct impl *impl, struct node *n, struct node *peer)
|
|||
|
||||
if (peer == n->failed_peer && n->failed_count > MAX_LINK_RETRY) {
|
||||
/* Break rescan -> failed link -> rescan loop. */
|
||||
pw_log_debug(NAME" %p: tried to link '%d' on last rescan, not retrying",
|
||||
pw_log_debug("%p: tried to link '%d' on last rescan, not retrying",
|
||||
impl, peer->id);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
|
@ -1015,7 +1018,7 @@ static int relink_node(struct impl *impl, struct node *n, struct node *peer)
|
|||
if ((res = unlink_nodes(n, n->peer)) < 0)
|
||||
return res;
|
||||
|
||||
pw_log_debug(NAME" %p: linking node %d to node %d", impl, n->id, peer->id);
|
||||
pw_log_debug("%p: linking node %d to node %d", impl, n->id, peer->id);
|
||||
|
||||
/* NB. if link_nodes returns error, n may have been invalidated */
|
||||
if ((res = link_nodes(n, peer)) > 0) {
|
||||
|
|
@ -1036,7 +1039,7 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
uint32_t path_id;
|
||||
|
||||
if (!n->active) {
|
||||
pw_log_debug(NAME " %p: node %d is not active", impl, n->id);
|
||||
pw_log_debug("%p: node %d is not active", impl, n->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1046,7 +1049,7 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
}
|
||||
|
||||
if (n->obj->info == NULL || n->obj->info->props == NULL) {
|
||||
pw_log_debug(NAME " %p: node %d has no properties", impl, n->id);
|
||||
pw_log_debug("%p: node %d has no properties", impl, n->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1075,17 +1078,17 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
autoconnect = true;
|
||||
|
||||
if (!autoconnect) {
|
||||
pw_log_debug(NAME" %p: node %d does not need autoconnect", impl, n->id);
|
||||
pw_log_debug("%p: node %d does not need autoconnect", impl, n->id);
|
||||
configure_node(n, NULL, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (n->media == NULL) {
|
||||
pw_log_debug(NAME" %p: node %d has unknown media", impl, n->id);
|
||||
pw_log_debug("%p: node %d has unknown media", impl, n->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME " %p: exclusive:%d", impl, n->exclusive);
|
||||
pw_log_debug("%p: exclusive:%d", impl, n->exclusive);
|
||||
|
||||
/* honor target node set by user or asked for by the client */
|
||||
path_id = SPA_ID_INVALID;
|
||||
|
|
@ -1111,7 +1114,7 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
bool recheck = !peer_is_target && (follows_default || target_found) &&
|
||||
reconnect && !n->passthrough;
|
||||
if (!recheck) {
|
||||
pw_log_debug(NAME " %p: node %d is already linked, peer-is-target:%d "
|
||||
pw_log_debug("%p: node %d is already linked, peer-is-target:%d "
|
||||
"follows-default:%d", impl, n->id, peer_is_target,
|
||||
follows_default);
|
||||
return 0;
|
||||
|
|
@ -1122,7 +1125,7 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
n->id, n->exclusive, reconnect, path_id, n->peer);
|
||||
|
||||
if (path_id != SPA_ID_INVALID) {
|
||||
pw_log_debug(NAME " %p: target:%d", impl, path_id);
|
||||
pw_log_debug("%p: target:%d", impl, path_id);
|
||||
|
||||
if (!reconnect)
|
||||
n->obj->target_node = NULL;
|
||||
|
|
@ -1139,12 +1142,12 @@ static int rescan_node(struct impl *impl, struct node *n)
|
|||
goto fallback;
|
||||
|
||||
peer = sm_object_get_data(obj, SESSION_KEY);
|
||||
pw_log_debug(NAME " %p: found target:%d type:%s %d:%d", impl,
|
||||
pw_log_debug("%p: found target:%d type:%s %d:%d", impl,
|
||||
peer->id, obj->type, n->passthrough_only, peer->have_passthrough);
|
||||
|
||||
can_passthrough = check_passthrough(n, peer);
|
||||
if (n->passthrough_only && !can_passthrough) {
|
||||
pw_log_info(NAME " %p: peer has no passthrough", impl);
|
||||
pw_log_info("%p: peer has no passthrough", impl);
|
||||
goto fallback;
|
||||
}
|
||||
|
||||
|
|
@ -1186,16 +1189,16 @@ do_link:
|
|||
sm_media_session_destroy_object(impl->session, n->id);
|
||||
} else if (reconnect && n->connect_count > 0) {
|
||||
/* Don't error the stream on reconnects */
|
||||
pw_log_info(NAME " %p: no node found for %d, waiting reconnect", impl, n->id);
|
||||
pw_log_info("%p: no node found for %d, waiting reconnect", impl, n->id);
|
||||
if (n->peer != NULL)
|
||||
unlink_nodes(n, n->peer);
|
||||
return 0;
|
||||
} else {
|
||||
pw_log_warn(NAME " %p: no node found for %d, stream error", impl, n->id);
|
||||
pw_log_warn("%p: no node found for %d, stream error", impl, n->id);
|
||||
}
|
||||
|
||||
obj = sm_media_session_find_object(impl->session, n->client_id);
|
||||
pw_log_debug(NAME " %p: client_id:%d object:%p type:%s", impl,
|
||||
pw_log_debug("%p: client_id:%d object:%p type:%s", impl,
|
||||
n->client_id, obj, obj ? obj->type : "None");
|
||||
|
||||
if (obj && spa_streq(obj->type, PW_TYPE_INTERFACE_Client)) {
|
||||
|
|
@ -1204,7 +1207,7 @@ do_link:
|
|||
}
|
||||
return -ENOENT;
|
||||
} else if (peer == n->peer) {
|
||||
pw_log_debug(NAME " %p: node %d already linked to %d (not changing)",
|
||||
pw_log_debug("%p: node %d already linked to %d (not changing)",
|
||||
impl, n->id, peer->id);
|
||||
return 0;
|
||||
} else {
|
||||
|
|
@ -1230,7 +1233,7 @@ static void session_info(void *data, const struct pw_core_info *info)
|
|||
if ((str = spa_dict_lookup(info->props, "default.clock.rate")) != NULL)
|
||||
impl->sample_rate = atoi(str);
|
||||
|
||||
pw_log_debug(NAME" %p: props changed sample_rate:%d", impl, impl->sample_rate);
|
||||
pw_log_debug("%p: props changed sample_rate:%d", impl, impl->sample_rate);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1241,7 +1244,7 @@ static void refresh_auto_default_nodes(struct impl *impl)
|
|||
if (impl->session->metadata == NULL)
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME" %p: refresh", impl);
|
||||
pw_log_debug("%p: refresh", impl);
|
||||
|
||||
/* Auto set default nodes */
|
||||
for (def = impl->defaults; def->key != NULL; ++def) {
|
||||
|
|
@ -1274,7 +1277,7 @@ static void session_rescan(void *data, int seq)
|
|||
struct impl *impl = data;
|
||||
struct node *node;
|
||||
|
||||
pw_log_debug(NAME" %p: rescan", impl);
|
||||
pw_log_debug("%p: rescan", impl);
|
||||
|
||||
again:
|
||||
impl->node_list_changed = false;
|
||||
|
|
@ -1395,6 +1398,8 @@ int sm_policy_node_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
const char *flag;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ static DBusHandlerResult object_handler(DBusConnection *c, DBusMessage *m, void
|
|||
DBUS_TYPE_INVALID))
|
||||
goto invalid;
|
||||
|
||||
pw_log_debug(NAME" %p: request release priority:%d", d, priority);
|
||||
pw_log_debug("%p: request release priority:%d", d, priority);
|
||||
|
||||
if (!(reply = dbus_message_new_method_return(m)))
|
||||
goto oom;
|
||||
|
|
@ -260,7 +260,7 @@ static DBusHandlerResult filter_handler(DBusConnection *c, DBusMessage *m, void
|
|||
if (!spa_streq(name, d->service_name))
|
||||
goto invalid;
|
||||
|
||||
pw_log_debug(NAME" %p: acquired %s, %s", d, name, d->service_name);
|
||||
pw_log_debug("%p: acquired %s, %s", d, name, d->service_name);
|
||||
|
||||
d->owning = true;
|
||||
|
||||
|
|
@ -288,7 +288,7 @@ static DBusHandlerResult filter_handler(DBusConnection *c, DBusMessage *m, void
|
|||
if (!spa_streq(name, d->service_name))
|
||||
goto invalid;
|
||||
|
||||
pw_log_debug(NAME" %p: lost %s", d, name);
|
||||
pw_log_debug("%p: lost %s", d, name);
|
||||
|
||||
d->owning = false;
|
||||
|
||||
|
|
@ -310,7 +310,7 @@ static DBusHandlerResult filter_handler(DBusConnection *c, DBusMessage *m, void
|
|||
if (!spa_streq(name, d->service_name) || d->owning)
|
||||
goto invalid;
|
||||
|
||||
pw_log_debug(NAME" %p: changed %s: %s -> %s", d, name, old, new);
|
||||
pw_log_debug("%p: changed %s: %s -> %s", d, name, old, new);
|
||||
|
||||
if (old == NULL || *old == 0) {
|
||||
if (d->callbacks->busy && !d->acquiring)
|
||||
|
|
@ -374,7 +374,7 @@ rd_device_new(DBusConnection *connection, const char *device_name, const char *a
|
|||
|
||||
dbus_connection_ref(d->connection);
|
||||
|
||||
pw_log_debug(NAME"%p: new device %s", d, device_name);
|
||||
pw_log_debug("%p: new device %s", d, device_name);
|
||||
|
||||
return d;
|
||||
|
||||
|
|
@ -393,7 +393,7 @@ int rd_device_acquire(struct rd_device *d)
|
|||
|
||||
dbus_error_init(&error);
|
||||
|
||||
pw_log_debug(NAME"%p: reserve %s", d, d->service_name);
|
||||
pw_log_debug("%p: reserve %s", d, d->service_name);
|
||||
|
||||
d->acquiring = true;
|
||||
|
||||
|
|
@ -401,12 +401,12 @@ int rd_device_acquire(struct rd_device *d)
|
|||
d->service_name,
|
||||
(d->priority < INT32_MAX ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT : 0),
|
||||
&error)) < 0) {
|
||||
pw_log_warn(NAME"%p: reserve failed: %s", d, error.message);
|
||||
pw_log_warn("%p: reserve failed: %s", d, error.message);
|
||||
dbus_error_free(&error);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
pw_log_debug(NAME"%p: reserve result: %d", d, res);
|
||||
pw_log_debug("%p: reserve result: %d", d, res);
|
||||
|
||||
if (res == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ||
|
||||
res == DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER)
|
||||
|
|
@ -451,7 +451,7 @@ int rd_device_complete_release(struct rd_device *d, int res)
|
|||
if (d->reply == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
pw_log_debug(NAME" %p: complete release %d", d, res);
|
||||
pw_log_debug("%p: complete release %d", d, res);
|
||||
|
||||
if (!dbus_message_append_args(d->reply,
|
||||
DBUS_TYPE_BOOLEAN, &ret,
|
||||
|
|
@ -473,7 +473,7 @@ exit:
|
|||
|
||||
void rd_device_release(struct rd_device *d)
|
||||
{
|
||||
pw_log_debug(NAME" %p: release %d", d, d->owning);
|
||||
pw_log_debug("%p: release %d", d, d->owning);
|
||||
|
||||
if (d->owning) {
|
||||
DBusError error;
|
||||
|
|
|
|||
|
|
@ -71,6 +71,9 @@
|
|||
#define SESSION_KEY "restore-stream"
|
||||
#define PREFIX "restore.stream."
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
#define SAVE_INTERVAL 1
|
||||
|
||||
struct impl {
|
||||
|
|
@ -119,7 +122,7 @@ static void remove_idle_timeout(struct impl *impl)
|
|||
static void idle_timeout(void *data, uint64_t expirations)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: idle timeout", impl);
|
||||
pw_log_debug("%p: idle timeout", impl);
|
||||
remove_idle_timeout(impl);
|
||||
}
|
||||
|
||||
|
|
@ -321,7 +324,7 @@ static int restore_stream(struct stream *str)
|
|||
if (val == NULL)
|
||||
return -ENOENT;
|
||||
|
||||
pw_log_info("stream %d: restore '%s' to %s", str->id, str->key, val);
|
||||
pw_log_info("stream %d: restoring '%s' to %s", str->id, str->key, val);
|
||||
|
||||
spa_json_init(&it[0], val, strlen(val));
|
||||
|
||||
|
|
@ -456,7 +459,7 @@ static void update_stream(struct stream *str)
|
|||
if (key == NULL)
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: stream %p key '%s'", impl, str, key);
|
||||
pw_log_debug("%p: stream %p key '%s'", impl, str, key);
|
||||
free(str->key);
|
||||
str->key = key;
|
||||
|
||||
|
|
@ -473,7 +476,7 @@ static void object_update(void *data)
|
|||
struct stream *str = data;
|
||||
struct impl *impl = str->impl;
|
||||
|
||||
pw_log_info(NAME" %p: stream %p %08x/%08x", impl, str,
|
||||
pw_log_info("%p: stream %p %08x/%08x", impl, str,
|
||||
str->obj->obj.changed, str->obj->obj.avail);
|
||||
|
||||
if (str->obj->obj.changed & (SM_NODE_CHANGE_MASK_INFO | SM_NODE_CHANGE_MASK_PARAMS))
|
||||
|
|
@ -498,11 +501,11 @@ static void session_create(void *data, struct sm_object *object)
|
|||
|
||||
if (spa_strstartswith(media_class, "Stream/")) {
|
||||
media_class += strlen("Stream/");
|
||||
pw_log_debug(NAME " %p: add stream '%d' %s", impl, object->id, media_class);
|
||||
pw_log_debug("%p: add stream '%d' %s", impl, object->id, media_class);
|
||||
} else if (spa_strstartswith(media_class, "Audio/") &&
|
||||
((routes = pw_properties_get(object->props, "device.routes")) == NULL ||
|
||||
atoi(routes) == 0)) {
|
||||
pw_log_debug(NAME " %p: add node '%d' %s", impl, object->id, media_class);
|
||||
pw_log_debug("%p: add node '%d' %s", impl, object->id, media_class);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
|
@ -534,7 +537,7 @@ static void session_remove(void *data, struct sm_object *object)
|
|||
if (!spa_streq(object->type, PW_TYPE_INTERFACE_Node))
|
||||
return;
|
||||
|
||||
pw_log_debug(NAME " %p: remove node '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove node '%d'", impl, object->id);
|
||||
|
||||
if ((str = sm_object_get_data(object, SESSION_KEY)) != NULL)
|
||||
destroy_stream(impl, str);
|
||||
|
|
@ -552,6 +555,8 @@ int sm_restore_stream_start(struct sm_media_session *session)
|
|||
struct impl *impl;
|
||||
int res;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
#define NAME "session-manager"
|
||||
#define SESSION_KEY "session-manager"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
int sm_stream_endpoint_start(struct sm_media_session *sess);
|
||||
int sm_v4l2_endpoint_start(struct sm_media_session *sess);
|
||||
int sm_bluez5_endpoint_start(struct sm_media_session *sess);
|
||||
|
|
@ -146,6 +149,8 @@ int sm_session_manager_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@
|
|||
#define DEFAULT_CHANNELS 2
|
||||
#define DEFAULT_SAMPLERATE 48000
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct endpoint;
|
||||
|
||||
struct impl {
|
||||
|
|
@ -116,7 +119,7 @@ static int client_endpoint_set_param(void *object,
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct node *node = endpoint->node;
|
||||
|
||||
pw_log_debug(NAME " %p: node %d set param %d", impl, node->obj->obj.id, id);
|
||||
pw_log_debug("%p: node %d set param %d", impl, node->obj->obj.id, id);
|
||||
return pw_node_set_param((struct pw_node*)node->obj->obj.proxy,
|
||||
id, flags, param);
|
||||
}
|
||||
|
|
@ -207,13 +210,13 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT);
|
||||
if (str == NULL) {
|
||||
pw_log_warn(NAME" %p: no target endpoint given", impl);
|
||||
pw_log_warn("%p: no target endpoint given", impl);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
obj = sm_media_session_find_object(impl->session, atoi(str));
|
||||
if (obj == NULL || !spa_streq(obj->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
pw_log_warn(NAME" %p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
pw_log_warn("%p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -301,7 +304,7 @@ static void complete_endpoint(void *data)
|
|||
struct node *node = endpoint->node;
|
||||
struct sm_param *p;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
spa_list_for_each(p, &node->obj->param_list, link) {
|
||||
struct spa_audio_info info = { 0, };
|
||||
|
|
@ -346,7 +349,7 @@ static void update_params(void *data)
|
|||
struct node *node = endpoint->node;
|
||||
struct sm_param *p;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
params = alloca(sizeof(struct spa_pod *) * node->obj->n_params);
|
||||
n_params = 0;
|
||||
|
|
@ -468,7 +471,7 @@ static struct endpoint *create_endpoint(struct node *node)
|
|||
subscribe[n_subscribe++] = SPA_PARAM_EnumFormat;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_Props;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_PropInfo;
|
||||
pw_log_debug(NAME" %p: node %p proxy %p subscribe %d params", impl,
|
||||
pw_log_debug("%p: node %p proxy %p subscribe %d params", impl,
|
||||
node->obj, node->obj->obj.proxy, n_subscribe);
|
||||
pw_node_subscribe_params((struct pw_node*)node->obj->obj.proxy,
|
||||
subscribe, n_subscribe);
|
||||
|
|
@ -488,7 +491,7 @@ static void object_update(void *data)
|
|||
struct node *node = data;
|
||||
struct impl *impl = node->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: node %p endpoint %p %08x", impl, node, node->endpoint, node->obj->obj.changed);
|
||||
pw_log_debug("%p: node %p endpoint %p %08x", impl, node, node->endpoint, node->obj->obj.changed);
|
||||
|
||||
if (node->endpoint == NULL &&
|
||||
node->obj->obj.avail & SM_OBJECT_CHANGE_MASK_PROPERTIES)
|
||||
|
|
@ -514,7 +517,7 @@ handle_node(struct impl *impl, struct sm_object *obj)
|
|||
|
||||
media_class = obj->props ? pw_properties_get(obj->props, PW_KEY_MEDIA_CLASS) : NULL;
|
||||
|
||||
pw_log_debug(NAME" %p: node "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
pw_log_debug("%p: node "PW_KEY_MEDIA_CLASS" %s", impl, media_class);
|
||||
|
||||
if (media_class == NULL)
|
||||
return 0;
|
||||
|
|
@ -541,7 +544,7 @@ handle_node(struct impl *impl, struct sm_object *obj)
|
|||
node->id = obj->id;
|
||||
node->direction = direction;
|
||||
node->media = strdup(media_class);
|
||||
pw_log_debug(NAME "%p: node %d is stream %d:%s", impl, node->id,
|
||||
pw_log_debug("%p: node %d is stream %d:%s", impl, node->id,
|
||||
node->direction, node->media);
|
||||
|
||||
sm_object_add_listener(obj, &node->listener, &object_events, node);
|
||||
|
|
@ -569,7 +572,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl,
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl,
|
||||
object->id, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
|
|
@ -603,6 +606,8 @@ int sm_stream_endpoint_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,9 @@
|
|||
|
||||
#define DEFAULT_IDLE_SECONDS 3
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct impl {
|
||||
struct timespec now;
|
||||
|
||||
|
|
@ -91,7 +94,7 @@ static void idle_timeout(void *data, uint64_t expirations)
|
|||
struct impl *impl = node->impl;
|
||||
struct spa_command *cmd = &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_Suspend);
|
||||
|
||||
pw_log_info(NAME " %p: node %d suspend", impl, node->id);
|
||||
pw_log_info("%p: node %d suspend", impl, node->id);
|
||||
|
||||
remove_idle_timeout(node);
|
||||
|
||||
|
|
@ -125,14 +128,14 @@ static void add_idle_timeout(struct node *node)
|
|||
|
||||
static int on_node_idle(struct impl *impl, struct node *node)
|
||||
{
|
||||
pw_log_debug(NAME" %p: node %d idle", impl, node->id);
|
||||
pw_log_debug("%p: node %d idle", impl, node->id);
|
||||
add_idle_timeout(node);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int on_node_running(struct impl *impl, struct node *node)
|
||||
{
|
||||
pw_log_debug(NAME" %p: node %d running", impl, node->id);
|
||||
pw_log_debug("%p: node %d running", impl, node->id);
|
||||
sm_object_acquire(&node->obj->obj);
|
||||
remove_idle_timeout(node);
|
||||
return 0;
|
||||
|
|
@ -143,7 +146,7 @@ static void object_update(void *data)
|
|||
struct node *node = data;
|
||||
struct impl *impl = node->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: node %p %08x", impl, node, node->obj->obj.changed);
|
||||
pw_log_debug("%p: node %p %08x", impl, node, node->obj->obj.changed);
|
||||
|
||||
if (node->obj->obj.changed & SM_NODE_CHANGE_MASK_INFO) {
|
||||
const struct pw_node_info *info = node->obj->info;
|
||||
|
|
@ -216,13 +219,13 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0)
|
||||
pw_log_warn(NAME" %p: can't handle global %d", impl, object->id);
|
||||
pw_log_warn("%p: can't handle global %d", impl, object->id);
|
||||
}
|
||||
|
||||
static void session_remove(void *data, struct sm_object *object)
|
||||
{
|
||||
struct impl *impl = data;
|
||||
pw_log_debug(NAME " %p: remove global '%d'", impl, object->id);
|
||||
pw_log_debug("%p: remove global '%d'", impl, object->id);
|
||||
|
||||
if (spa_streq(object->type, PW_TYPE_INTERFACE_Node)) {
|
||||
struct node *node;
|
||||
|
|
@ -249,6 +252,8 @@ int sm_suspend_node_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@
|
|||
#define NAME "v4l2-endpoint"
|
||||
#define SESSION_KEY "v4l2-endpoint"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct endpoint {
|
||||
struct spa_list link;
|
||||
|
||||
|
|
@ -117,7 +120,7 @@ static int client_endpoint_set_param(void *object,
|
|||
{
|
||||
struct endpoint *endpoint = object;
|
||||
struct impl *impl = endpoint->impl;
|
||||
pw_log_debug(NAME " %p: endpoint %p set param %d", impl, endpoint, id);
|
||||
pw_log_debug("%p: endpoint %p set param %d", impl, endpoint, id);
|
||||
return pw_node_set_param((struct pw_node*)endpoint->node->node->obj.proxy,
|
||||
id, flags, param);
|
||||
}
|
||||
|
|
@ -145,7 +148,7 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
struct pw_properties *p;
|
||||
int res;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (props == NULL)
|
||||
return -EINVAL;
|
||||
|
|
@ -160,13 +163,13 @@ static int client_endpoint_create_link(void *object, const struct spa_dict *prop
|
|||
|
||||
str = spa_dict_lookup(props, PW_KEY_ENDPOINT_LINK_INPUT_ENDPOINT);
|
||||
if (str == NULL) {
|
||||
pw_log_warn(NAME" %p: no target endpoint given", impl);
|
||||
pw_log_warn("%p: no target endpoint given", impl);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
obj = sm_media_session_find_object(impl->session, atoi(str));
|
||||
if (obj == NULL || !spa_streq(obj->type, PW_TYPE_INTERFACE_Endpoint)) {
|
||||
pw_log_warn(NAME" %p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
pw_log_warn("%p: could not find endpoint %s (%p)", impl, str, obj);
|
||||
res = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -264,7 +267,7 @@ static void update_params(void *data)
|
|||
struct sm_node *node = endpoint->node->node;
|
||||
struct sm_param *p;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint", endpoint);
|
||||
pw_log_debug("%p: endpoint", endpoint);
|
||||
|
||||
params = alloca(sizeof(struct spa_pod *) * node->n_params);
|
||||
n_params = 0;
|
||||
|
|
@ -294,7 +297,7 @@ static void object_update(void *data)
|
|||
struct impl *impl = endpoint->impl;
|
||||
struct sm_node *node = endpoint->node->node;
|
||||
|
||||
pw_log_debug(NAME" %p: endpoint %p", impl, endpoint);
|
||||
pw_log_debug("%p: endpoint %p", impl, endpoint);
|
||||
|
||||
if (node->obj.changed & SM_NODE_CHANGE_MASK_PARAMS)
|
||||
update_params(endpoint);
|
||||
|
|
@ -453,7 +456,7 @@ static struct endpoint *create_endpoint(struct node *node)
|
|||
endpoint->info.n_params = 2;
|
||||
spa_list_init(&endpoint->stream_list);
|
||||
|
||||
pw_log_debug(NAME" %p: new endpoint %p for v4l2 node %p", impl, endpoint, node);
|
||||
pw_log_debug("%p: new endpoint %p for v4l2 node %p", impl, endpoint, node);
|
||||
pw_proxy_add_listener(proxy,
|
||||
&endpoint->proxy_listener,
|
||||
&proxy_events, endpoint);
|
||||
|
|
@ -466,7 +469,7 @@ static struct endpoint *create_endpoint(struct node *node)
|
|||
subscribe[n_subscribe++] = SPA_PARAM_EnumFormat;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_Props;
|
||||
subscribe[n_subscribe++] = SPA_PARAM_PropInfo;
|
||||
pw_log_debug(NAME" %p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
pw_log_debug("%p: endpoint %p proxy %p subscribe %d params", impl,
|
||||
endpoint, node->node->obj.proxy, n_subscribe);
|
||||
pw_node_subscribe_params((struct pw_node*)node->node->obj.proxy,
|
||||
subscribe, n_subscribe);
|
||||
|
|
@ -493,12 +496,12 @@ static int setup_v4l2_endpoint(struct device *device)
|
|||
struct sm_node *n;
|
||||
struct sm_device *d = device->device;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p setup", impl, d);
|
||||
pw_log_debug("%p: device %p setup", impl, d);
|
||||
|
||||
spa_list_for_each(n, &d->node_list, link) {
|
||||
struct node *node;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p has node %p", impl, d, n);
|
||||
pw_log_debug("%p: device %p has node %p", impl, d, n);
|
||||
|
||||
node = sm_object_add_data(&n->obj, SESSION_KEY, sizeof(struct node));
|
||||
node->device = device;
|
||||
|
|
@ -521,7 +524,7 @@ static int deactivate_device(struct device *device)
|
|||
struct impl *impl = device->impl;
|
||||
struct endpoint *e;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p deactivate", impl, device->device);
|
||||
pw_log_debug("%p: device %p deactivate", impl, device->device);
|
||||
spa_list_consume(e, &device->endpoint_list, link)
|
||||
destroy_endpoint(impl, e);
|
||||
|
||||
|
|
@ -533,7 +536,7 @@ static void device_update(void *data)
|
|||
struct device *device = data;
|
||||
struct impl *impl = device->impl;
|
||||
|
||||
pw_log_debug(NAME" %p: device %p %08x %08x", impl, device,
|
||||
pw_log_debug("%p: device %p %08x %08x", impl, device,
|
||||
device->device->obj.avail, device->device->obj.changed);
|
||||
|
||||
if (!SPA_FLAG_IS_SET(device->device->obj.avail,
|
||||
|
|
@ -564,7 +567,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
media_class = pw_properties_get(obj->props, PW_KEY_MEDIA_CLASS);
|
||||
str = pw_properties_get(obj->props, PW_KEY_DEVICE_API);
|
||||
|
||||
pw_log_debug(NAME" %p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
pw_log_debug("%p: device "PW_KEY_MEDIA_CLASS":%s api:%s", impl, media_class, str);
|
||||
|
||||
if (!spa_strstartswith(media_class, "Video/"))
|
||||
return 0;
|
||||
|
|
@ -576,7 +579,7 @@ handle_device(struct impl *impl, struct sm_object *obj)
|
|||
device->id = obj->id;
|
||||
device->device = (struct sm_device*)obj;
|
||||
spa_list_init(&device->endpoint_list);
|
||||
pw_log_debug(NAME" %p: found v4l2 device %d media_class %s", impl, obj->id, media_class);
|
||||
pw_log_debug("%p: found v4l2 device %d media_class %s", impl, obj->id, media_class);
|
||||
|
||||
sm_object_add_listener(obj, &device->listener, &device_events, device);
|
||||
|
||||
|
|
@ -601,7 +604,7 @@ static void session_create(void *data, struct sm_object *object)
|
|||
res = 0;
|
||||
|
||||
if (res < 0) {
|
||||
pw_log_warn(NAME" %p: can't handle global %d: %s", impl,
|
||||
pw_log_warn("%p: can't handle global %d: %s", impl,
|
||||
object->id, spa_strerror(res));
|
||||
}
|
||||
}
|
||||
|
|
@ -635,6 +638,8 @@ int sm_v4l2_endpoint_start(struct sm_media_session *session)
|
|||
{
|
||||
struct impl *impl;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
|
|
@ -46,8 +46,12 @@
|
|||
|
||||
/** \page page_media_session_module_v4l2_monitor Media Session Module: V4L2 Monitor
|
||||
*/
|
||||
#define NAME "v4l2-monitor"
|
||||
#define SESSION_CONF "v4l2-monitor.conf"
|
||||
|
||||
PW_LOG_TOPIC_STATIC(mod_topic, "ms.mod." NAME);
|
||||
#define PW_LOG_TOPIC_DEFAULT mod_topic
|
||||
|
||||
struct device;
|
||||
|
||||
struct node {
|
||||
|
|
@ -539,6 +543,8 @@ int sm_v4l2_monitor_start(struct sm_media_session *sess)
|
|||
int res;
|
||||
void *iface;
|
||||
|
||||
PW_LOG_TOPIC_INIT(mod_topic);
|
||||
|
||||
impl = calloc(1, sizeof(struct impl));
|
||||
if (impl == NULL)
|
||||
return -errno;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue