From af605cdda241821cc6736367ec67aeec2ce0f483 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 6 Dec 2019 17:37:41 +0100 Subject: [PATCH] use opaque types for proxies This makes it easier to implement the proxies --- src/examples/media-session/metadata.c | 6 ++--- src/extensions/client-node.h | 7 +++--- src/extensions/metadata.h | 5 ++-- .../session-manager/impl-interfaces.h | 10 ++++---- src/extensions/session-manager/interfaces.h | 24 ++++++++----------- .../module-client-device/proxy-device.c | 5 ++-- src/modules/module-metadata/proxy-metadata.c | 5 ++-- 7 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/examples/media-session/metadata.c b/src/examples/media-session/metadata.c index fd5d86bd6..edfbb2cc8 100644 --- a/src/examples/media-session/metadata.c +++ b/src/examples/media-session/metadata.c @@ -62,7 +62,7 @@ static void set_item(struct item *item, uint32_t subject, const char *key, const } struct metadata { - struct pw_metadata impl; + struct spa_interface iface; struct sm_media_session *session; struct spa_hook_list hooks; @@ -189,7 +189,7 @@ void *sm_metadata_start(struct sm_media_session *sess) md->properties = pw_properties_new(NULL, NULL); pw_array_init(&md->metadata, 4096); - md->impl.iface = SPA_INTERFACE_INIT( + md->iface = SPA_INTERFACE_INIT( PW_TYPE_INTERFACE_Metadata, PW_VERSION_METADATA, &impl_metadata, md); @@ -198,7 +198,7 @@ void *sm_metadata_start(struct sm_media_session *sess) md->proxy = sm_media_session_export(sess, PW_TYPE_INTERFACE_Metadata, NULL, - &md->impl, + md, 0); return md; } diff --git a/src/extensions/client-node.h b/src/extensions/client-node.h index 73cb2e5a3..4ef8de68c 100644 --- a/src/extensions/client-node.h +++ b/src/extensions/client-node.h @@ -32,7 +32,7 @@ extern "C" { #include #include -struct pw_client_node_proxy { struct spa_interface iface; }; +struct pw_client_node_proxy; #define PW_VERSION_CLIENT_NODE 3 @@ -284,8 +284,7 @@ struct pw_client_node_proxy_methods { #define pw_client_node_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_client_node_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)o, \ struct pw_client_node_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ @@ -297,7 +296,7 @@ static inline struct pw_node_proxy * pw_client_node_proxy_get_node(struct pw_client_node_proxy *p, uint32_t version, size_t user_data_size) { struct pw_node_proxy *res = NULL; - spa_interface_call_res(&p->iface, + spa_interface_call_res((struct spa_interface*)p, struct pw_client_node_proxy_methods, res, get_node, 0, version, user_data_size); return res; diff --git a/src/extensions/metadata.h b/src/extensions/metadata.h index 2ca8098fc..c688ada6f 100644 --- a/src/extensions/metadata.h +++ b/src/extensions/metadata.h @@ -31,7 +31,7 @@ extern "C" { #include -struct pw_metadata { struct spa_interface iface; }; +struct pw_metadata; #define PW_VERSION_METADATA 3 @@ -80,8 +80,7 @@ struct pw_metadata_methods { #define pw_metadata_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_metadata *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)o, \ struct pw_metadata_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ diff --git a/src/extensions/session-manager/impl-interfaces.h b/src/extensions/session-manager/impl-interfaces.h index 59ca03cef..9635eb65f 100644 --- a/src/extensions/session-manager/impl-interfaces.h +++ b/src/extensions/session-manager/impl-interfaces.h @@ -37,7 +37,7 @@ extern "C" { #endif #define PW_VERSION_CLIENT_ENDPOINT_PROXY 0 -struct pw_client_endpoint_proxy { struct spa_interface iface; }; +struct pw_client_endpoint_proxy; #define PW_CLIENT_ENDPOINT_PROXY_EVENT_SET_SESSION_ID 0 #define PW_CLIENT_ENDPOINT_PROXY_EVENT_SET_PARAM 1 @@ -156,8 +156,7 @@ struct pw_client_endpoint_proxy_methods { #define pw_client_endpoint_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_client_endpoint_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)&o, \ struct pw_client_endpoint_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ @@ -169,7 +168,7 @@ struct pw_client_endpoint_proxy_methods { #define PW_VERSION_CLIENT_SESSION_PROXY 0 -struct pw_client_session_proxy { struct spa_interface iface; }; +struct pw_client_session_proxy; #define PW_CLIENT_SESSION_PROXY_EVENT_SET_PARAM 0 #define PW_CLIENT_SESSION_PROXY_EVENT_LINK_SET_PARAM 1 @@ -270,8 +269,7 @@ struct pw_client_session_proxy_methods { #define pw_client_session_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_client_session_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)&o, \ struct pw_client_session_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ diff --git a/src/extensions/session-manager/interfaces.h b/src/extensions/session-manager/interfaces.h index 6b5d51b77..6f5918d4f 100644 --- a/src/extensions/session-manager/interfaces.h +++ b/src/extensions/session-manager/interfaces.h @@ -36,13 +36,13 @@ extern "C" { #endif #define PW_VERSION_SESSION_PROXY 0 -struct pw_session_proxy { struct spa_interface iface; }; +struct pw_session_proxy; #define PW_VERSION_ENDPOINT_PROXY 0 -struct pw_endpoint_proxy { struct spa_interface iface; }; +struct pw_endpoint_proxy; #define PW_VERSION_ENDPOINT_STREAM_PROXY 0 -struct pw_endpoint_stream_proxy { struct spa_interface iface; }; +struct pw_endpoint_stream_proxy; #define PW_VERSION_ENDPOINT_LINK_PROXY 0 -struct pw_endpoint_link_proxy { struct spa_interface iface; }; +struct pw_endpoint_link_proxy; /* Session */ @@ -134,8 +134,7 @@ struct pw_session_proxy_methods { #define pw_session_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_session_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)o, \ struct pw_session_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ @@ -239,8 +238,7 @@ struct pw_endpoint_proxy_methods { #define pw_endpoint_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_endpoint_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)o, \ struct pw_endpoint_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ @@ -338,12 +336,11 @@ struct pw_endpoint_stream_proxy_methods { const struct spa_pod *param); }; -#define pw_endpoint_stream_proxy_method(o,method,version,...) \ +#define pw_endpoint_stream_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_endpoint_stream_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ - struct pw_endpoint_stream_proxy_methods, _res, \ + spa_interface_call_res((struct spa_interface*)o, \ + struct pw_endpoint_stream_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ }) @@ -446,8 +443,7 @@ struct pw_endpoint_link_proxy_methods { #define pw_endpoint_link_proxy_method(o,method,version,...) \ ({ \ int _res = -ENOTSUP; \ - struct pw_endpoint_link_proxy *_p = o; \ - spa_interface_call_res(&_p->iface, \ + spa_interface_call_res((struct spa_interface*)o, \ struct pw_endpoint_link_proxy_methods, _res, \ method, version, ##__VA_ARGS__); \ _res; \ diff --git a/src/modules/module-client-device/proxy-device.c b/src/modules/module-client-device/proxy-device.c index 6b4fc7dcc..bf1929aa3 100644 --- a/src/modules/module-client-device/proxy-device.c +++ b/src/modules/module-client-device/proxy-device.c @@ -57,7 +57,7 @@ struct pw_proxy *pw_core_proxy_spa_device_export(struct pw_core_proxy *core_prox size_t user_data_size) { struct spa_device *device = object; - struct spa_interface *iface; + struct spa_interface *iface, *diface; struct pw_proxy *proxy; struct device_data *data; @@ -78,11 +78,12 @@ struct pw_proxy *pw_core_proxy_spa_device_export(struct pw_core_proxy *core_prox data->proxy = proxy; iface = (struct spa_interface*)proxy; + diface = (struct spa_interface*)device; pw_proxy_add_listener(proxy, &data->proxy_listener, &proxy_events, data); pw_proxy_add_object_listener(proxy, &data->device_methods, - device->iface.cb.funcs, device->iface.cb.data); + diface->cb.funcs, diface->cb.data); spa_device_add_listener(device, &data->device_listener, iface->cb.funcs, iface->cb.data); diff --git a/src/modules/module-metadata/proxy-metadata.c b/src/modules/module-metadata/proxy-metadata.c index 8c6d3b63a..d51b2c8d9 100644 --- a/src/modules/module-metadata/proxy-metadata.c +++ b/src/modules/module-metadata/proxy-metadata.c @@ -57,7 +57,7 @@ struct pw_proxy *pw_core_proxy_metadata_export(struct pw_core_proxy *core_proxy, size_t user_data_size) { struct pw_metadata *meta = object; - struct spa_interface *iface; + struct spa_interface *iface, *miface; struct pw_proxy *proxy; struct object_data *data; @@ -78,13 +78,14 @@ struct pw_proxy *pw_core_proxy_metadata_export(struct pw_core_proxy *core_proxy, data->proxy = proxy; iface = (struct spa_interface*)proxy; + miface = (struct spa_interface*)meta; pw_proxy_install_marshal(proxy, true); pw_proxy_add_listener(proxy, &data->proxy_listener, &proxy_events, data); pw_proxy_add_object_listener(proxy, &data->object_methods, - meta->iface.cb.funcs, meta->iface.cb.data); + miface->cb.funcs, miface->cb.data); pw_metadata_add_listener(meta, &data->object_listener, iface->cb.funcs, iface->cb.data);