use opaque types for proxies

This makes it easier to implement the proxies
This commit is contained in:
Wim Taymans 2019-12-06 17:37:41 +01:00
parent 7dc8a33e3e
commit af605cdda2
7 changed files with 28 additions and 34 deletions

View file

@ -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;
}

View file

@ -32,7 +32,7 @@ extern "C" {
#include <spa/utils/defs.h>
#include <spa/param/param.h>
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;

View file

@ -31,7 +31,7 @@ extern "C" {
#include <spa/utils/defs.h>
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; \

View file

@ -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; \

View file

@ -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; \

View file

@ -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);

View file

@ -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);