mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
core_proxy: prepare to rename pw_remote -> pw_core_proxy
The pw_remote object is really a wrapper around the pw_core_proxy. The events it emits are also available in the core proxy and are generally awkward to use. With some clever new pw_core_proxy_* methods and a pw_core_connect to create the core_proxy, we can convert all code away from pw_remote. This is a first step in this conversion, using the pw_remote behind the scenes. It leaks into some places because it really needs to become its own struct in a next step.
This commit is contained in:
parent
f8aabe69fe
commit
8a959ea7a1
37 changed files with 919 additions and 1185 deletions
|
|
@ -504,9 +504,6 @@ gst_pipewire_src_stream_start (GstPipeWireSrc *pwsrc)
|
|||
if (state == PW_STREAM_STATE_ERROR)
|
||||
goto start_error;
|
||||
|
||||
if (pw_remote_get_state(pwsrc->remote, &error) == PW_REMOTE_STATE_ERROR)
|
||||
goto start_error;
|
||||
|
||||
pw_thread_loop_wait (pwsrc->main_loop);
|
||||
}
|
||||
|
||||
|
|
@ -542,9 +539,6 @@ wait_negotiated (GstPipeWireSrc *this)
|
|||
if (state == PW_STREAM_STATE_ERROR)
|
||||
break;
|
||||
|
||||
if (pw_remote_get_state(this->remote, &error) == PW_REMOTE_STATE_ERROR)
|
||||
break;
|
||||
|
||||
if (this->started)
|
||||
break;
|
||||
|
||||
|
|
@ -638,9 +632,6 @@ gst_pipewire_src_negotiate (GstBaseSrc * basesrc)
|
|||
if (state == PW_STREAM_STATE_ERROR)
|
||||
goto connect_error;
|
||||
|
||||
if (pw_remote_get_state(pwsrc->remote, &error) == PW_REMOTE_STATE_ERROR)
|
||||
goto connect_error;
|
||||
|
||||
pw_thread_loop_wait (pwsrc->main_loop);
|
||||
}
|
||||
pw_thread_loop_unlock (pwsrc->main_loop);
|
||||
|
|
@ -915,26 +906,6 @@ gst_pipewire_src_stop (GstBaseSrc * basesrc)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_remote_state_changed (void *data, enum pw_remote_state old, enum pw_remote_state state, const char *error)
|
||||
{
|
||||
GstPipeWireSrc *pwsrc = data;
|
||||
|
||||
GST_DEBUG ("got remote state %s", pw_remote_state_as_string (state));
|
||||
|
||||
switch (state) {
|
||||
case PW_REMOTE_STATE_UNCONNECTED:
|
||||
case PW_REMOTE_STATE_CONNECTING:
|
||||
case PW_REMOTE_STATE_CONNECTED:
|
||||
break;
|
||||
case PW_REMOTE_STATE_ERROR:
|
||||
GST_ELEMENT_ERROR (pwsrc, RESOURCE, FAILED,
|
||||
("remote error: %s", error), (NULL));
|
||||
break;
|
||||
}
|
||||
pw_thread_loop_signal (pwsrc->main_loop, FALSE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
copy_properties (GQuark field_id,
|
||||
const GValue *value,
|
||||
|
|
@ -949,11 +920,6 @@ copy_properties (GQuark field_id,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static const struct pw_remote_events remote_events = {
|
||||
PW_VERSION_REMOTE_EVENTS,
|
||||
.state_changed = on_remote_state_changed,
|
||||
};
|
||||
|
||||
static const struct pw_stream_events stream_events = {
|
||||
PW_VERSION_STREAM_EVENTS,
|
||||
.state_changed = on_state_changed,
|
||||
|
|
@ -967,37 +933,20 @@ static gboolean
|
|||
gst_pipewire_src_open (GstPipeWireSrc * pwsrc)
|
||||
{
|
||||
struct pw_properties *props;
|
||||
const char *error = NULL;
|
||||
|
||||
if (pw_thread_loop_start (pwsrc->main_loop) < 0)
|
||||
goto mainloop_failed;
|
||||
|
||||
pw_thread_loop_lock (pwsrc->main_loop);
|
||||
if ((pwsrc->remote = pw_remote_new (pwsrc->core, NULL, 0)) == NULL)
|
||||
goto no_remote;
|
||||
|
||||
pw_remote_add_listener (pwsrc->remote,
|
||||
&pwsrc->remote_listener,
|
||||
&remote_events, pwsrc);
|
||||
|
||||
if (pwsrc->fd == -1)
|
||||
pw_remote_connect (pwsrc->remote);
|
||||
pwsrc->core_proxy = pw_core_connect (pwsrc->core, NULL, 0);
|
||||
else
|
||||
pw_remote_connect_fd (pwsrc->remote, dup(pwsrc->fd));
|
||||
pwsrc->core_proxy = pw_core_connect_fd (pwsrc->core, dup(pwsrc->fd), NULL, 0);
|
||||
|
||||
while (TRUE) {
|
||||
enum pw_remote_state state = pw_remote_get_state(pwsrc->remote, &error);
|
||||
|
||||
GST_DEBUG ("waiting for CONNECTED, now %s", pw_remote_state_as_string (state));
|
||||
if (state == PW_REMOTE_STATE_CONNECTED)
|
||||
break;
|
||||
|
||||
if (state == PW_REMOTE_STATE_ERROR)
|
||||
if (pwsrc->core_proxy == NULL)
|
||||
goto connect_error;
|
||||
|
||||
pw_thread_loop_wait (pwsrc->main_loop);
|
||||
}
|
||||
|
||||
if (pwsrc->properties) {
|
||||
props = pw_properties_new (NULL, NULL);
|
||||
gst_structure_foreach (pwsrc->properties, copy_properties, props);
|
||||
|
|
@ -1005,7 +954,8 @@ gst_pipewire_src_open (GstPipeWireSrc * pwsrc)
|
|||
props = NULL;
|
||||
}
|
||||
|
||||
if ((pwsrc->stream = pw_stream_new (pwsrc->remote, pwsrc->client_name, props)) == NULL)
|
||||
if ((pwsrc->stream = pw_stream_new (pwsrc->core_proxy,
|
||||
pwsrc->client_name, props)) == NULL)
|
||||
goto no_stream;
|
||||
|
||||
|
||||
|
|
@ -1026,14 +976,9 @@ mainloop_failed:
|
|||
GST_ELEMENT_ERROR (pwsrc, RESOURCE, FAILED, ("error starting mainloop"), (NULL));
|
||||
return FALSE;
|
||||
}
|
||||
no_remote:
|
||||
{
|
||||
GST_ELEMENT_ERROR (pwsrc, RESOURCE, FAILED, ("can't create remote"), (NULL));
|
||||
pw_thread_loop_unlock (pwsrc->main_loop);
|
||||
return FALSE;
|
||||
}
|
||||
connect_error:
|
||||
{
|
||||
GST_ELEMENT_ERROR (pwsrc, RESOURCE, FAILED, ("can't connect"), (NULL));
|
||||
pw_thread_loop_unlock (pwsrc->main_loop);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1065,8 +1010,8 @@ gst_pipewire_src_close (GstPipeWireSrc * pwsrc)
|
|||
pw_stream_destroy (pwsrc->stream);
|
||||
pwsrc->stream = NULL;
|
||||
|
||||
pw_remote_destroy (pwsrc->remote);
|
||||
pwsrc->remote = NULL;
|
||||
pw_core_proxy_disconnect (pwsrc->core_proxy);
|
||||
pwsrc->core_proxy = NULL;
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue