diff --git a/src/modules/module-client-node.c b/src/modules/module-client-node.c index 9e8922db8..4db632856 100644 --- a/src/modules/module-client-node.c +++ b/src/modules/module-client-node.c @@ -13,6 +13,7 @@ #include +#define PW_API_CLIENT_NODE_IMPL SPA_EXPORT #include "module-client-node/v0/client-node.h" #include "module-client-node/client-node.h" diff --git a/src/modules/module-metadata.c b/src/modules/module-metadata.c index b6588f6fc..be0e6e97b 100644 --- a/src/modules/module-metadata.c +++ b/src/modules/module-metadata.c @@ -12,6 +12,7 @@ #include #include +#define PW_API_METADATA_IMPL SPA_EXPORT #include #include diff --git a/src/pipewire/client.h b/src/pipewire/client.h index 5cfe6f51a..f82242370 100644 --- a/src/pipewire/client.h +++ b/src/pipewire/client.h @@ -12,6 +12,7 @@ extern "C" { #include #include +#include #include #include @@ -30,6 +31,10 @@ extern "C" { #define PW_VERSION_CLIENT 3 struct pw_client; +#ifndef PW_API_CLIENT_IMPL +#define PW_API_CLIENT_IMPL static inline +#endif + /* default ID of the current client after connect */ #define PW_ID_CLIENT 1 @@ -150,7 +155,9 @@ struct pw_client_methods { const struct pw_permission *permissions); }; -SPA_API_IMPL int pw_client_add_listener(struct pw_client *object, +/** \copydoc pw_client_methods.add_listener + * \sa pw_client_methods.add_listener */ +PW_API_CLIENT_IMPL int pw_client_add_listener(struct pw_client *object, struct spa_hook *listener, const struct pw_client_events *events, void *data) @@ -158,28 +165,54 @@ SPA_API_IMPL int pw_client_add_listener(struct pw_client *object, return spa_api_method_r(int, -ENOTSUP, pw_client, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_client_error(struct pw_client *object, uint32_t id, int res, const char *message) +/** \copydoc pw_client_methods.error + * \sa pw_client_methods.error */ +PW_API_CLIENT_IMPL int pw_client_error(struct pw_client *object, uint32_t id, int res, const char *message) { return spa_api_method_r(int, -ENOTSUP, pw_client, (struct spa_interface*)object, error, 0, id, res, message); } -SPA_API_IMPL int pw_client_update_properties(struct pw_client *object, const struct spa_dict *props) +/** \copydoc pw_client_methods.update_properties + * \sa pw_client_methods.update_properties */ +PW_API_CLIENT_IMPL int pw_client_update_properties(struct pw_client *object, const struct spa_dict *props) { return spa_api_method_r(int, -ENOTSUP, pw_client, (struct spa_interface*)object, update_properties, 0, props); } -SPA_API_IMPL int pw_client_get_permissions(struct pw_client *object, uint32_t index, uint32_t num) +/** \copydoc pw_client_methods.get_permissions + * \sa pw_client_methods.get_permissions */ +PW_API_CLIENT_IMPL int pw_client_get_permissions(struct pw_client *object, uint32_t index, uint32_t num) { return spa_api_method_r(int, -ENOTSUP, pw_client, (struct spa_interface*)object, get_permissions, 0, index, num); } -SPA_API_IMPL int pw_client_update_permissions(struct pw_client *object, uint32_t n_permissions, +/** \copydoc pw_client_methods.update_permissions + * \sa pw_client_methods.update_permissions */ +PW_API_CLIENT_IMPL int pw_client_update_permissions(struct pw_client *object, uint32_t n_permissions, const struct pw_permission *permissions) { return spa_api_method_r(int, -ENOTSUP, pw_client, (struct spa_interface*)object, update_permissions, 0, n_permissions, permissions); } +PW_API_CLIENT_IMPL void *pw_client_get_user_data(struct pw_client *object) +{ + return pw_proxy_get_user_data((struct pw_proxy *)object); +} +PW_API_CLIENT_IMPL void pw_client_add_proxy_listener(struct pw_client *object, + struct spa_hook *listener, + const struct pw_proxy_events *events, + void *data) +{ + pw_proxy_add_listener((struct pw_proxy *)object, listener, events, data); +} +PW_API_CLIENT_IMPL struct pw_client *pw_registry_bind_client(struct pw_registry *object, + uint32_t id, size_t user_data_size) +{ + return (struct pw_client*)pw_registry_bind(object, id, PW_TYPE_INTERFACE_Client, + PW_VERSION_CLIENT, user_data_size); +} + /** * \} */ diff --git a/src/pipewire/core.c b/src/pipewire/core.c index a627452ff..91328a27f 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -12,6 +12,9 @@ #include #include +#define PW_API_CORE_IMPL SPA_EXPORT +#define PW_API_REGISTRY_IMPL SPA_EXPORT + #include "pipewire/pipewire.h" #include "pipewire/private.h" @@ -476,6 +479,15 @@ struct pw_mempool * pw_core_get_mempool(struct pw_core *core) return core->pool; } +SPA_EXPORT +void pw_core_add_proxy_listener(struct pw_core *object, + struct spa_hook *listener, + const struct pw_proxy_events *events, + void *data) +{ + pw_proxy_add_listener((struct pw_proxy *)object, listener, events, data); +} + SPA_EXPORT int pw_core_disconnect(struct pw_core *core) { diff --git a/src/pipewire/core.h b/src/pipewire/core.h index a915b8164..3242c889c 100644 --- a/src/pipewire/core.h +++ b/src/pipewire/core.h @@ -14,6 +14,8 @@ extern "C" { #include +#include + /** \defgroup pw_core Core * * \brief The core global object. @@ -41,6 +43,13 @@ struct pw_core; #define PW_VERSION_REGISTRY 3 struct pw_registry; +#ifndef PW_API_CORE_IMPL +#define PW_API_CORE_IMPL static inline +#endif +#ifndef PW_API_REGISTRY_IMPL +#define PW_API_REGISTRY_IMPL static inline +#endif + /** The default remote name to connect to */ #define PW_DEFAULT_REMOTE "pipewire-0" @@ -335,7 +344,7 @@ struct pw_core_methods { }; -SPA_API_IMPL int pw_core_add_listener(struct pw_core *object, +PW_API_CORE_IMPL int pw_core_add_listener(struct pw_core *object, struct spa_hook *listener, const struct pw_core_events *events, void *data) @@ -344,31 +353,31 @@ SPA_API_IMPL int pw_core_add_listener(struct pw_core *object, pw_core, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_core_hello(struct pw_core *object, uint32_t version) +PW_API_CORE_IMPL int pw_core_hello(struct pw_core *object, uint32_t version) { return spa_api_method_r(int, -ENOTSUP, pw_core, (struct spa_interface*)object, hello, 0, version); } -SPA_API_IMPL int pw_core_sync(struct pw_core *object, uint32_t id, int seq) +PW_API_CORE_IMPL int pw_core_sync(struct pw_core *object, uint32_t id, int seq) { return spa_api_method_r(int, -ENOTSUP, pw_core, (struct spa_interface*)object, sync, 0, id, seq); } -SPA_API_IMPL int pw_core_pong(struct pw_core *object, uint32_t id, int seq) +PW_API_CORE_IMPL int pw_core_pong(struct pw_core *object, uint32_t id, int seq) { return spa_api_method_r(int, -ENOTSUP, pw_core, (struct spa_interface*)object, pong, 0, id, seq); } -SPA_API_IMPL int pw_core_error(struct pw_core *object, uint32_t id, int seq, int res, const char *message) +PW_API_CORE_IMPL int pw_core_error(struct pw_core *object, uint32_t id, int seq, int res, const char *message) { return spa_api_method_r(int, -ENOTSUP, pw_core, (struct spa_interface*)object, error, 0, id, seq, res, message); } -SPA_API_IMPL +PW_API_CORE_IMPL SPA_PRINTF_FUNC(5, 0) int pw_core_errorv(struct pw_core *core, uint32_t id, int seq, int res, const char *message, va_list args) @@ -379,7 +388,7 @@ pw_core_errorv(struct pw_core *core, uint32_t id, int seq, return pw_core_error(core, id, seq, res, buffer); } -SPA_API_IMPL +PW_API_CORE_IMPL SPA_PRINTF_FUNC(5, 6) int pw_core_errorf(struct pw_core *core, uint32_t id, int seq, int res, const char *message, ...) @@ -392,14 +401,14 @@ pw_core_errorf(struct pw_core *core, uint32_t id, int seq, return r; } -SPA_API_IMPL struct pw_registry * +PW_API_CORE_IMPL struct pw_registry * pw_core_get_registry(struct pw_core *core, uint32_t version, size_t user_data_size) { return spa_api_method_r(struct pw_registry*, NULL, pw_core, (struct spa_interface*)core, get_registry, 0, version, user_data_size); } -SPA_API_IMPL void * +PW_API_CORE_IMPL void * pw_core_create_object(struct pw_core *core, const char *factory_name, const char *type, @@ -411,13 +420,15 @@ pw_core_create_object(struct pw_core *core, pw_core, (struct spa_interface*)core, create_object, 0, factory_name, type, version, props, user_data_size); } -SPA_API_IMPL void +PW_API_CORE_IMPL void pw_core_destroy(struct pw_core *core, void *proxy) { spa_api_method_v(pw_core, (struct spa_interface*)core, destroy, 0, proxy); } +void *pw_core_get_user_data(struct pw_core *object); + /** * \} */ @@ -532,8 +543,9 @@ struct pw_registry_methods { int (*destroy) (void *object, uint32_t id); }; + /** Registry */ -SPA_API_IMPL int pw_registry_add_listener(struct pw_registry *registry, +PW_API_REGISTRY_IMPL int pw_registry_add_listener(struct pw_registry *registry, struct spa_hook *listener, const struct pw_registry_events *events, void *data) @@ -542,7 +554,7 @@ SPA_API_IMPL int pw_registry_add_listener(struct pw_registry *registry, pw_registry, (struct spa_interface*)registry, add_listener, 0, listener, events, data); } -SPA_API_IMPL void * +PW_API_REGISTRY_IMPL void * pw_registry_bind(struct pw_registry *registry, uint32_t id, const char *type, uint32_t version, size_t user_data_size) @@ -551,13 +563,20 @@ pw_registry_bind(struct pw_registry *registry, pw_registry, (struct spa_interface*)registry, bind, 0, id, type, version, user_data_size); } -SPA_API_IMPL int +PW_API_REGISTRY_IMPL int pw_registry_destroy(struct pw_registry *registry, uint32_t id) { return spa_api_method_r(int, -ENOTSUP, pw_registry, (struct spa_interface*)registry, destroy, 0, id); } +PW_API_REGISTRY_IMPL struct pw_core *pw_registry_bind_core(struct pw_registry *object, + uint32_t id, size_t user_data_size) +{ + return (struct pw_core*)pw_registry_bind(object, id, PW_TYPE_INTERFACE_Core, + PW_VERSION_CORE, user_data_size); +} + /** * \} */ diff --git a/src/pipewire/device.h b/src/pipewire/device.h index 07dcb3cee..c41c73b45 100644 --- a/src/pipewire/device.h +++ b/src/pipewire/device.h @@ -30,6 +30,10 @@ extern "C" { #define PW_VERSION_DEVICE 3 struct pw_device; +#ifndef PW_API_DEVICE_IMPL +#define PW_API_DEVICE_IMPL static inline +#endif + /** The device information. Extra information can be added in later versions */ struct pw_device_info { uint32_t id; /**< id of the global */ @@ -141,7 +145,7 @@ struct pw_device_methods { const struct spa_pod *param); }; -SPA_API_IMPL int pw_device_add_listener(struct pw_device *object, +PW_API_DEVICE_IMPL int pw_device_add_listener(struct pw_device *object, struct spa_hook *listener, const struct pw_device_events *events, void *data) @@ -150,13 +154,13 @@ SPA_API_IMPL int pw_device_add_listener(struct pw_device *object, pw_device, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_device_subscribe_params(struct pw_device *object, uint32_t *ids, uint32_t n_ids) +PW_API_DEVICE_IMPL int pw_device_subscribe_params(struct pw_device *object, uint32_t *ids, uint32_t n_ids) { return spa_api_method_r(int, -ENOTSUP, pw_device, (struct spa_interface*)object, subscribe_params, 0, ids, n_ids); } -SPA_API_IMPL int pw_device_enum_params(struct pw_device *object, +PW_API_DEVICE_IMPL int pw_device_enum_params(struct pw_device *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter) { @@ -164,7 +168,7 @@ SPA_API_IMPL int pw_device_enum_params(struct pw_device *object, pw_device, (struct spa_interface*)object, enum_params, 0, seq, id, start, num, filter); } -SPA_API_IMPL int pw_device_set_param(struct pw_device *object, uint32_t id, uint32_t flags, +PW_API_DEVICE_IMPL int pw_device_set_param(struct pw_device *object, uint32_t id, uint32_t flags, const struct spa_pod *param) { return spa_api_method_r(int, -ENOTSUP, @@ -172,6 +176,24 @@ SPA_API_IMPL int pw_device_set_param(struct pw_device *object, uint32_t id, uint id, flags, param); } +PW_API_DEVICE_IMPL void *pw_device_get_user_data(struct pw_device *object) +{ + return pw_proxy_get_user_data((struct pw_proxy *)object); +} +PW_API_DEVICE_IMPL void pw_device_add_proxy_listener(struct pw_device *object, + struct spa_hook *listener, + const struct pw_proxy_events *events, + void *data) +{ + pw_proxy_add_listener((struct pw_proxy *)object, listener, events, data); +} +PW_API_DEVICE_IMPL struct pw_device *pw_registry_bind_device(struct pw_registry *object, + uint32_t id, size_t user_data_size) +{ + return (struct pw_device*)pw_registry_bind(object, id, PW_TYPE_INTERFACE_Device, + PW_VERSION_DEVICE, user_data_size); +} + /** * \} */ diff --git a/src/pipewire/extensions/client-node.h b/src/pipewire/extensions/client-node.h index 08831f6a0..69f278e04 100644 --- a/src/pipewire/extensions/client-node.h +++ b/src/pipewire/extensions/client-node.h @@ -30,6 +30,10 @@ extern "C" { #define PW_VERSION_CLIENT_NODE 6 struct pw_client_node; +#ifndef PW_API_CLIENT_NODE_IMPL +#define PW_API_CLIENT_NODE_IMPL static inline +#endif + #define PW_EXTENSION_MODULE_CLIENT_NODE PIPEWIRE_MODULE_PREFIX "module-client-node" /** information about a buffer */ @@ -303,7 +307,7 @@ struct pw_client_node_methods { struct spa_buffer **buffers); }; -SPA_API_IMPL int pw_client_node_add_listener(struct pw_client_node *object, +PW_API_CLIENT_NODE_IMPL int pw_client_node_add_listener(struct pw_client_node *object, struct spa_hook *listener, const struct pw_client_node_events *events, void *data) @@ -311,13 +315,13 @@ SPA_API_IMPL int pw_client_node_add_listener(struct pw_client_node *object, return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL struct pw_node * +PW_API_CLIENT_NODE_IMPL struct pw_node * pw_client_node_get_node(struct pw_client_node *p, uint32_t version, size_t user_data_size) { return spa_api_method_r(struct pw_node*, NULL, pw_client_node, (struct spa_interface*)p, get_node, 0, version, user_data_size); } -SPA_API_IMPL int pw_client_node_update(struct pw_client_node *object, +PW_API_CLIENT_NODE_IMPL int pw_client_node_update(struct pw_client_node *object, uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, const struct spa_node_info *info) @@ -325,7 +329,7 @@ SPA_API_IMPL int pw_client_node_update(struct pw_client_node *object, return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object, update, 0, change_mask, n_params, params, info); } -SPA_API_IMPL int pw_client_node_port_update(struct pw_client_node *object, +PW_API_CLIENT_NODE_IMPL int pw_client_node_port_update(struct pw_client_node *object, enum spa_direction direction, uint32_t port_id, uint32_t change_mask, uint32_t n_params, const struct spa_pod **params, @@ -334,17 +338,17 @@ SPA_API_IMPL int pw_client_node_port_update(struct pw_client_node *object, return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object, port_update, 0, direction, port_id, change_mask, n_params, params, info); } -SPA_API_IMPL int pw_client_node_set_active(struct pw_client_node *object, bool active) +PW_API_CLIENT_NODE_IMPL int pw_client_node_set_active(struct pw_client_node *object, bool active) { return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object, set_active, 0, active); } -SPA_API_IMPL int pw_client_node_event(struct pw_client_node *object, const struct spa_event *event) +PW_API_CLIENT_NODE_IMPL int pw_client_node_event(struct pw_client_node *object, const struct spa_event *event) { return spa_api_method_r(int, -ENOTSUP, pw_client_node, (struct spa_interface*)object, event, 0, event); } -SPA_API_IMPL int pw_client_node_port_buffers(struct pw_client_node *object, +PW_API_CLIENT_NODE_IMPL int pw_client_node_port_buffers(struct pw_client_node *object, enum spa_direction direction, uint32_t port_id, uint32_t mix_id, uint32_t n_buffers, struct spa_buffer **buffers) { diff --git a/src/pipewire/extensions/metadata.h b/src/pipewire/extensions/metadata.h index 7434dbef5..ad0e0ac55 100644 --- a/src/pipewire/extensions/metadata.h +++ b/src/pipewire/extensions/metadata.h @@ -26,6 +26,10 @@ extern "C" { #define PW_VERSION_METADATA 3 struct pw_metadata; +#ifndef PW_API_METADATA_IMPL +#define PW_API_METADATA_IMPL static inline +#endif + #define PW_EXTENSION_MODULE_METADATA PIPEWIRE_MODULE_PREFIX "module-metadata" #define PW_METADATA_EVENT_PROPERTY 0 @@ -89,7 +93,7 @@ struct pw_metadata_methods { int (*clear) (void *object); }; -SPA_API_IMPL int pw_metadata_add_listener(struct pw_metadata *object, +PW_API_METADATA_IMPL int pw_metadata_add_listener(struct pw_metadata *object, struct spa_hook *listener, const struct pw_metadata_events *events, void *data) @@ -98,7 +102,7 @@ SPA_API_IMPL int pw_metadata_add_listener(struct pw_metadata *object, pw_metadata, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_metadata_set_property(struct pw_metadata *object, +PW_API_METADATA_IMPL int pw_metadata_set_property(struct pw_metadata *object, uint32_t subject, const char *key, const char *type, @@ -108,7 +112,7 @@ SPA_API_IMPL int pw_metadata_set_property(struct pw_metadata *object, pw_metadata, (struct spa_interface*)object, set_property, 0, subject, key, type, value); } -SPA_API_IMPL int pw_metadata_clear(struct pw_metadata *object) +PW_API_METADATA_IMPL int pw_metadata_clear(struct pw_metadata *object) { return spa_api_method_r(int, -ENOTSUP, pw_metadata, (struct spa_interface*)object, clear, 0); diff --git a/src/pipewire/factory.h b/src/pipewire/factory.h index a017d5942..9aa5484a7 100644 --- a/src/pipewire/factory.h +++ b/src/pipewire/factory.h @@ -32,6 +32,10 @@ extern "C" { #define PW_VERSION_FACTORY 3 struct pw_factory; +#ifndef PW_API_FACTORY_IMPL +#define PW_API_FACTORY_IMPL static inline +#endif + /** The factory information. Extra information can be added in later versions */ struct pw_factory_info { uint32_t id; /**< id of the global */ @@ -83,7 +87,7 @@ struct pw_factory_methods { void *data); }; -SPA_API_IMPL int pw_factory_add_listener(struct pw_factory *object, +PW_API_FACTORY_IMPL int pw_factory_add_listener(struct pw_factory *object, struct spa_hook *listener, const struct pw_factory_events *events, void *data) diff --git a/src/pipewire/impl-client.c b/src/pipewire/impl-client.c index 06e3d53bc..d46e07939 100644 --- a/src/pipewire/impl-client.c +++ b/src/pipewire/impl-client.c @@ -6,8 +6,12 @@ #include #include +#include #include +#define PW_API_CLIENT_IMPL SPA_EXPORT +#include "pipewire/client.h" + #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-device.c b/src/pipewire/impl-device.c index 0a96baaf3..71e2e266b 100644 --- a/src/pipewire/impl-device.c +++ b/src/pipewire/impl-device.c @@ -11,6 +11,7 @@ #include #include +#define PW_API_DEVICE_IMPL SPA_EXPORT #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-factory.c b/src/pipewire/impl-factory.c index 8863ef2e3..413fa3391 100644 --- a/src/pipewire/impl-factory.c +++ b/src/pipewire/impl-factory.c @@ -7,6 +7,8 @@ #include #include +#define PW_API_FACTORY_IMPL SPA_EXPORT + #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-link.c b/src/pipewire/impl-link.c index b0a14e76e..3df092ad8 100644 --- a/src/pipewire/impl-link.c +++ b/src/pipewire/impl-link.c @@ -13,6 +13,7 @@ #include #include +#define PW_API_LINK_IMPL SPA_EXPORT #include "pipewire/impl-link.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-module.c b/src/pipewire/impl-module.c index 2388760db..10aa432fe 100644 --- a/src/pipewire/impl-module.c +++ b/src/pipewire/impl-module.c @@ -16,6 +16,7 @@ #include #include +#define PW_API_MODULE_IMPL SPA_EXPORT #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 4d8d8b6c0..e7dacbf9d 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -22,6 +22,7 @@ #include #include +#define PW_API_NODE_IMPL SPA_EXPORT #include "pipewire/impl-node.h" #include "pipewire/private.h" diff --git a/src/pipewire/impl-port.c b/src/pipewire/impl-port.c index daa30f1b4..4356604af 100644 --- a/src/pipewire/impl-port.c +++ b/src/pipewire/impl-port.c @@ -19,6 +19,7 @@ #include #include +#define PW_API_PORT_IMPL SPA_EXPORT #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/link.h b/src/pipewire/link.h index 4e33a3bce..45b7507e8 100644 --- a/src/pipewire/link.h +++ b/src/pipewire/link.h @@ -36,6 +36,11 @@ extern "C" { #define PW_VERSION_LINK 3 struct pw_link; +#ifndef PW_API_LINK_IMPL +#define PW_API_LINK_IMPL static inline +#endif + + /** \enum pw_link_state The different link states */ enum pw_link_state { PW_LINK_STATE_ERROR = -2, /**< the link is in error */ @@ -108,7 +113,7 @@ struct pw_link_methods { void *data); }; -SPA_API_IMPL int pw_link_add_listener(struct pw_link *object, +PW_API_LINK_IMPL int pw_link_add_listener(struct pw_link *object, struct spa_hook *listener, const struct pw_link_events *events, void *data) diff --git a/src/pipewire/loop.c b/src/pipewire/loop.c index 64baaa7f2..2e7fb47d5 100644 --- a/src/pipewire/loop.c +++ b/src/pipewire/loop.c @@ -8,6 +8,7 @@ #include #include +#define PW_API_LOOP_IMPL SPA_EXPORT #include #include #include diff --git a/src/pipewire/loop.h b/src/pipewire/loop.h index 824b324d5..9de1cbf3f 100644 --- a/src/pipewire/loop.h +++ b/src/pipewire/loop.h @@ -34,6 +34,10 @@ struct pw_loop { const char *name; }; +#ifndef PW_API_LOOP_IMPL +#define PW_API_LOOP_IMPL static inline +#endif + struct pw_loop * pw_loop_new(const struct spa_dict *props); @@ -42,99 +46,99 @@ pw_loop_destroy(struct pw_loop *loop); int pw_loop_set_name(struct pw_loop *loop, const char *name); -SPA_API_IMPL int pw_loop_add_source(struct pw_loop *object, struct spa_source *source) +PW_API_LOOP_IMPL int pw_loop_add_source(struct pw_loop *object, struct spa_source *source) { return spa_loop_add_source(object->loop, source); } -SPA_API_IMPL int pw_loop_update_source(struct pw_loop *object, struct spa_source *source) +PW_API_LOOP_IMPL int pw_loop_update_source(struct pw_loop *object, struct spa_source *source) { return spa_loop_update_source(object->loop, source); } -SPA_API_IMPL int pw_loop_remove_source(struct pw_loop *object, struct spa_source *source) +PW_API_LOOP_IMPL int pw_loop_remove_source(struct pw_loop *object, struct spa_source *source) { return spa_loop_remove_source(object->loop, source); } -SPA_API_IMPL int pw_loop_invoke(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_invoke(struct pw_loop *object, spa_invoke_func_t func, uint32_t seq, const void *data, size_t size, bool block, void *user_data) { return spa_loop_invoke(object->loop, func, seq, data, size, block, user_data); } -SPA_API_IMPL int pw_loop_get_fd(struct pw_loop *object) +PW_API_LOOP_IMPL int pw_loop_get_fd(struct pw_loop *object) { return spa_loop_control_get_fd(object->control); } -SPA_API_IMPL void pw_loop_add_hook(struct pw_loop *object, +PW_API_LOOP_IMPL void pw_loop_add_hook(struct pw_loop *object, struct spa_hook *hook, const struct spa_loop_control_hooks *hooks, void *data) { spa_loop_control_add_hook(object->control, hook, hooks, data); } -SPA_API_IMPL void pw_loop_enter(struct pw_loop *object) +PW_API_LOOP_IMPL void pw_loop_enter(struct pw_loop *object) { spa_loop_control_enter(object->control); } -SPA_API_IMPL void pw_loop_leave(struct pw_loop *object) +PW_API_LOOP_IMPL void pw_loop_leave(struct pw_loop *object) { spa_loop_control_leave(object->control); } -SPA_API_IMPL int pw_loop_iterate(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_iterate(struct pw_loop *object, int timeout) { return spa_loop_control_iterate_fast(object->control, timeout); } -SPA_API_IMPL struct spa_source * +PW_API_LOOP_IMPL struct spa_source * pw_loop_add_io(struct pw_loop *object, int fd, uint32_t mask, bool close, spa_source_io_func_t func, void *data) { return spa_loop_utils_add_io(object->utils, fd, mask, close, func, data); } -SPA_API_IMPL int pw_loop_update_io(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_update_io(struct pw_loop *object, struct spa_source *source, uint32_t mask) { return spa_loop_utils_update_io(object->utils, source, mask); } -SPA_API_IMPL struct spa_source * +PW_API_LOOP_IMPL struct spa_source * pw_loop_add_idle(struct pw_loop *object, bool enabled, spa_source_idle_func_t func, void *data) { return spa_loop_utils_add_idle(object->utils, enabled, func, data); } -SPA_API_IMPL int pw_loop_enable_idle(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_enable_idle(struct pw_loop *object, struct spa_source *source, bool enabled) { return spa_loop_utils_enable_idle(object->utils, source, enabled); } -SPA_API_IMPL struct spa_source * +PW_API_LOOP_IMPL struct spa_source * pw_loop_add_event(struct pw_loop *object, spa_source_event_func_t func, void *data) { return spa_loop_utils_add_event(object->utils, func, data); } -SPA_API_IMPL int pw_loop_signal_event(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_signal_event(struct pw_loop *object, struct spa_source *source) { return spa_loop_utils_signal_event(object->utils, source); } -SPA_API_IMPL struct spa_source * +PW_API_LOOP_IMPL struct spa_source * pw_loop_add_timer(struct pw_loop *object, spa_source_timer_func_t func, void *data) { return spa_loop_utils_add_timer(object->utils, func, data); } -SPA_API_IMPL int pw_loop_update_timer(struct pw_loop *object, +PW_API_LOOP_IMPL int pw_loop_update_timer(struct pw_loop *object, struct spa_source *source, struct timespec *value, struct timespec *interval, bool absolute) { return spa_loop_utils_update_timer(object->utils, source, value, interval, absolute); } -SPA_API_IMPL struct spa_source * +PW_API_LOOP_IMPL struct spa_source * pw_loop_add_signal(struct pw_loop *object, int signal_number, spa_source_signal_func_t func, void *data) { return spa_loop_utils_add_signal(object->utils, signal_number, func, data); } -SPA_API_IMPL void pw_loop_destroy_source(struct pw_loop *object, +PW_API_LOOP_IMPL void pw_loop_destroy_source(struct pw_loop *object, struct spa_source *source) { return spa_loop_utils_destroy_source(object->utils, source); diff --git a/src/pipewire/module.h b/src/pipewire/module.h index c74831ef6..0bb876263 100644 --- a/src/pipewire/module.h +++ b/src/pipewire/module.h @@ -29,6 +29,10 @@ extern "C" { #define PW_VERSION_MODULE 3 struct pw_module; +#ifndef PW_API_MODULE_IMPL +#define PW_API_MODULE_IMPL static inline +#endif + /** The module information. Extra information can be added in later versions */ struct pw_module_info { uint32_t id; /**< id of the global */ @@ -81,7 +85,7 @@ struct pw_module_methods { void *data); }; -SPA_API_IMPL int pw_module_add_listener(struct pw_module *object, +PW_API_MODULE_IMPL int pw_module_add_listener(struct pw_module *object, struct spa_hook *listener, const struct pw_module_events *events, void *data) diff --git a/src/pipewire/node.h b/src/pipewire/node.h index a52a81540..b305f6a10 100644 --- a/src/pipewire/node.h +++ b/src/pipewire/node.h @@ -34,6 +34,10 @@ extern "C" { #define PW_VERSION_NODE 3 struct pw_node; +#ifndef PW_API_NODE_IMPL +#define PW_API_NODE_IMPL static inline +#endif + /** \enum pw_node_state The different node states */ enum pw_node_state { PW_NODE_STATE_ERROR = -1, /**< error state */ @@ -180,7 +184,7 @@ struct pw_node_methods { }; -SPA_API_IMPL int pw_node_add_listener(struct pw_node *object, +PW_API_NODE_IMPL int pw_node_add_listener(struct pw_node *object, struct spa_hook *listener, const struct pw_node_events *events, void *data) @@ -189,13 +193,13 @@ SPA_API_IMPL int pw_node_add_listener(struct pw_node *object, pw_node, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_node_subscribe_params(struct pw_node *object, uint32_t *ids, uint32_t n_ids) +PW_API_NODE_IMPL int pw_node_subscribe_params(struct pw_node *object, uint32_t *ids, uint32_t n_ids) { return spa_api_method_r(int, -ENOTSUP, pw_node, (struct spa_interface*)object, subscribe_params, 0, ids, n_ids); } -SPA_API_IMPL int pw_node_enum_params(struct pw_node *object, +PW_API_NODE_IMPL int pw_node_enum_params(struct pw_node *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter) { @@ -203,14 +207,14 @@ SPA_API_IMPL int pw_node_enum_params(struct pw_node *object, pw_node, (struct spa_interface*)object, enum_params, 0, seq, id, start, num, filter); } -SPA_API_IMPL int pw_node_set_param(struct pw_node *object, uint32_t id, uint32_t flags, +PW_API_NODE_IMPL int pw_node_set_param(struct pw_node *object, uint32_t id, uint32_t flags, const struct spa_pod *param) { return spa_api_method_r(int, -ENOTSUP, pw_node, (struct spa_interface*)object, set_param, 0, id, flags, param); } -SPA_API_IMPL int pw_node_send_command(struct pw_node *object, const struct spa_command *command) +PW_API_NODE_IMPL int pw_node_send_command(struct pw_node *object, const struct spa_command *command) { return spa_api_method_r(int, -ENOTSUP, pw_node, (struct spa_interface*)object, send_command, 0, command); diff --git a/src/pipewire/port.h b/src/pipewire/port.h index 3e042f4de..149721556 100644 --- a/src/pipewire/port.h +++ b/src/pipewire/port.h @@ -34,6 +34,10 @@ extern "C" { #define PW_VERSION_PORT 3 struct pw_port; +#ifndef PW_API_PORT_IMPL +#define PW_API_PORT_IMPL static inline +#endif + /** The direction of a port */ #define pw_direction spa_direction #define PW_DIRECTION_INPUT SPA_DIRECTION_INPUT @@ -141,7 +145,7 @@ struct pw_port_methods { const struct spa_pod *filter); }; -SPA_API_IMPL int pw_port_add_listener(struct pw_port *object, +PW_API_PORT_IMPL int pw_port_add_listener(struct pw_port *object, struct spa_hook *listener, const struct pw_port_events *events, void *data) @@ -150,13 +154,13 @@ SPA_API_IMPL int pw_port_add_listener(struct pw_port *object, pw_port, (struct spa_interface*)object, add_listener, 0, listener, events, data); } -SPA_API_IMPL int pw_port_subscribe_params(struct pw_port *object, uint32_t *ids, uint32_t n_ids) +PW_API_PORT_IMPL int pw_port_subscribe_params(struct pw_port *object, uint32_t *ids, uint32_t n_ids) { return spa_api_method_r(int, -ENOTSUP, pw_port, (struct spa_interface*)object, subscribe_params, 0, ids, n_ids); } -SPA_API_IMPL int pw_port_enum_params(struct pw_port *object, +PW_API_PORT_IMPL int pw_port_enum_params(struct pw_port *object, int seq, uint32_t id, uint32_t start, uint32_t num, const struct spa_pod *filter) { diff --git a/src/pipewire/thread.c b/src/pipewire/thread.c index aaccd9654..4ab00d681 100644 --- a/src/pipewire/thread.c +++ b/src/pipewire/thread.c @@ -15,6 +15,7 @@ #include #include +#define PW_API_THREAD_IMPL SPA_EXPORT #include #include #include diff --git a/src/pipewire/thread.h b/src/pipewire/thread.h index 3b8e54e76..f53e62950 100644 --- a/src/pipewire/thread.h +++ b/src/pipewire/thread.h @@ -29,24 +29,28 @@ void pw_thread_utils_set(struct spa_thread_utils *impl); struct spa_thread_utils *pw_thread_utils_get(void); void *pw_thread_fill_attr(const struct spa_dict *props, void *attr); -SPA_API_IMPL struct spa_thread *pw_thread_utils_create( +#ifndef PW_API_THREAD_IMPL +#define PW_API_THREAD_IMPL static inline +#endif + +PW_API_THREAD_IMPL struct spa_thread *pw_thread_utils_create( const struct spa_dict *props, void *(*start_routine)(void*), void *arg) { return spa_thread_utils_create(pw_thread_utils_get(), props, start_routine, arg); } -SPA_API_IMPL int pw_thread_utils_join(struct spa_thread *thread, void **retval) +PW_API_THREAD_IMPL int pw_thread_utils_join(struct spa_thread *thread, void **retval) { return spa_thread_utils_join(pw_thread_utils_get(), thread, retval); } -SPA_API_IMPL int pw_thread_utils_get_rt_range(const struct spa_dict *props, int *min, int *max) +PW_API_THREAD_IMPL int pw_thread_utils_get_rt_range(const struct spa_dict *props, int *min, int *max) { return spa_thread_utils_get_rt_range(pw_thread_utils_get(), props, min, max); } -SPA_API_IMPL int pw_thread_utils_acquire_rt(struct spa_thread *thread, int priority) +PW_API_THREAD_IMPL int pw_thread_utils_acquire_rt(struct spa_thread *thread, int priority) { return spa_thread_utils_acquire_rt(pw_thread_utils_get(), thread, priority); } -SPA_API_IMPL int pw_thread_utils_drop_rt(struct spa_thread *thread) +PW_API_THREAD_IMPL int pw_thread_utils_drop_rt(struct spa_thread *thread) { return spa_thread_utils_drop_rt(pw_thread_utils_get(), thread); }