mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
video-play: add example of steal_fd
This commit is contained in:
parent
1c44629cf9
commit
4851a827f4
1 changed files with 44 additions and 1 deletions
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
@ -390,6 +391,48 @@ static const struct pw_remote_events remote_events = {
|
||||||
.state_changed = on_state_changed,
|
.state_changed = on_state_changed,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void connect_state_changed(void *_data, enum pw_remote_state old,
|
||||||
|
enum pw_remote_state state, const char *error)
|
||||||
|
{
|
||||||
|
struct data *data = _data;
|
||||||
|
|
||||||
|
printf("remote state: \"%s\"\n", pw_remote_state_as_string(state));
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case PW_REMOTE_STATE_ERROR:
|
||||||
|
case PW_REMOTE_STATE_CONNECTED:
|
||||||
|
pw_main_loop_quit(data->loop);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_fd(struct data *data)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
struct pw_remote *remote = pw_remote_new(data->core, NULL, 0);
|
||||||
|
struct spa_hook remote_listener;
|
||||||
|
const struct pw_remote_events revents = {
|
||||||
|
PW_VERSION_REMOTE_EVENTS,
|
||||||
|
.state_changed = connect_state_changed,
|
||||||
|
};
|
||||||
|
|
||||||
|
pw_remote_add_listener(remote, &remote_listener, &revents, data);
|
||||||
|
|
||||||
|
if (pw_remote_connect(remote) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
pw_main_loop_run(data->loop);
|
||||||
|
|
||||||
|
fd = pw_remote_steal_fd(remote);
|
||||||
|
|
||||||
|
pw_remote_destroy(remote);
|
||||||
|
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct data data = { 0, };
|
struct data data = { 0, };
|
||||||
|
|
@ -419,7 +462,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
pw_remote_add_listener(data.remote, &data.remote_listener, &remote_events, &data);
|
pw_remote_add_listener(data.remote, &data.remote_listener, &remote_events, &data);
|
||||||
|
|
||||||
pw_remote_connect(data.remote);
|
pw_remote_connect_fd(data.remote, get_fd(&data));
|
||||||
|
|
||||||
pw_main_loop_run(data.loop);
|
pw_main_loop_run(data.loop);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue