Skip to content

Commit

Permalink
Use pw_stream_new instead of pw_stream_new_simple
Browse files Browse the repository at this point in the history
pw_stream_new_simple creates a new context for every stream and if different streams were connected to the same target, some of them got disconnected
  • Loading branch information
dimtpap committed Jan 27, 2022
1 parent aab0770 commit 60fc657
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 13 deletions.
17 changes: 9 additions & 8 deletions pipewire-input.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ struct pipewire_data {
DARRAY(struct pipewire_node) nodes_arr;
uint32_t pw_target_id;

struct spa_hook *registry_listener;
struct spa_hook registry_listener;
struct spa_hook stream_listener;
struct pw_stream *pw_stream;

uint32_t frame_size;
Expand Down Expand Up @@ -437,12 +438,11 @@ pipewire_capture_create(obs_data_t *settings, obs_source_t *source,
if (capture_type == PIPEWIRE_AUDIO_CAPTURE_INPUT)
capture_sink = false;

lpwa->pw_stream =
pipewire_stream_new(capture_sink, &stream_callbacks, lpwa);
lpwa->pw_stream = pipewire_stream_new(
capture_sink, &lpwa->stream_listener, &stream_callbacks, lpwa);
lpwa->pw_self_id = pw_stream_get_node_id(lpwa->pw_stream);

lpwa->registry_listener = bzalloc(sizeof(struct spa_hook));
pipewire_add_registry_listener(true, lpwa->registry_listener,
pipewire_add_registry_listener(true, &lpwa->registry_listener,
&registry_events_enum, lpwa);

pipewire_capture_update(lpwa, settings);
Expand All @@ -464,11 +464,12 @@ static void pipewire_capture_destroy(void *data)

da_free(lpwa->nodes_arr);

if (lpwa->pw_stream)
if (lpwa->pw_stream) {
spa_hook_remove(&lpwa->stream_listener);
pipewire_stream_destroy(lpwa->pw_stream);
}

spa_hook_remove(lpwa->registry_listener);
bfree(lpwa->registry_listener);
spa_hook_remove(&lpwa->registry_listener);

bfree(lpwa);

Expand Down
11 changes: 6 additions & 5 deletions pipewire-wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ void pipewire_add_registry_listener(bool call_now, struct spa_hook *hook,
}

struct pw_stream *pipewire_stream_new(bool capture_sink,
struct spa_hook *stream_listener,
const struct pw_stream_events *callbacks,
void *data)
{
Expand All @@ -136,8 +137,8 @@ struct pw_stream *pipewire_stream_new(bool capture_sink,
pipewire_lock();

struct pw_stream *stream =
pw_stream_new_simple(pw_thread_loop_get_loop(pipewire_mainloop),
"OBS Studio", props, callbacks, data);
pw_stream_new(pipewire_core, "OBS Studio", props);
pw_stream_add_listener(stream, stream_listener, callbacks, data);

pipewire_unlock();
return stream;
Expand All @@ -150,9 +151,9 @@ int pipewire_stream_connect(struct pw_stream *stream,

int res = -1;
res = pw_stream_connect(stream, PW_DIRECTION_INPUT, node_id,
PW_STREAM_FLAG_AUTOCONNECT |
PW_STREAM_FLAG_MAP_BUFFERS,
params, 1);
PW_STREAM_FLAG_AUTOCONNECT |
PW_STREAM_FLAG_MAP_BUFFERS,
params, 1);

pipewire_unlock();

Expand Down
1 change: 1 addition & 0 deletions pipewire-wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ void pipewire_add_registry_listener(bool call_now, struct spa_hook *hook, const
* in order to get data from it
*/
struct pw_stream *pipewire_stream_new(bool capture_sink,
struct spa_hook *stream_listener,
const struct pw_stream_events *callbacks,
void *data);

Expand Down

0 comments on commit 60fc657

Please sign in to comment.