From c1b87e70ef25f5234c632bfa5535dca6925b2a0b Mon Sep 17 00:00:00 2001 From: columbarius Date: Sat, 27 Nov 2021 04:32:45 +0100 Subject: [PATCH] linux-capture: Fallback on older PipeWire versions to SHM PipeWire server versions older than 0.3.24 can be incompatible with clients build against a newer library version with respect to DMA-BUF sharing. So we want to fallback to SHM transfer. This commit adds checks for older versions. These are classified as follows: * PipeWire components older than 0.3.24: Restrict to SHM only * PipeWire components with version 0.3.24 and newer: Announce DMA-BUF support via `SPA_PARAM_BUFFERS_dataType` --- plugins/linux-capture/pipewire.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/linux-capture/pipewire.c b/plugins/linux-capture/pipewire.c index 58095e820..e17fce022 100644 --- a/plugins/linux-capture/pipewire.c +++ b/plugins/linux-capture/pipewire.c @@ -553,6 +553,7 @@ static void on_param_changed_cb(void *user_data, uint32_t id, obs_pipewire_data *obs_pw = user_data; struct spa_pod_builder pod_builder; const struct spa_pod *params[3]; + uint32_t buffer_types; uint8_t params_buffer[1024]; int result; @@ -570,6 +571,10 @@ static void on_param_changed_cb(void *user_data, uint32_t id, spa_format_video_raw_parse(param, &obs_pw->format.info.raw); + buffer_types = 1 << SPA_DATA_MemPtr; + if (check_pw_version(&obs_pw->server_version, 0, 3, 24)) + buffer_types |= 1 << SPA_DATA_DmaBuf; + blog(LOG_DEBUG, "[pipewire] Negotiated format:"); blog(LOG_DEBUG, "[pipewire] Format: %d (%s)", @@ -606,8 +611,7 @@ static void on_param_changed_cb(void *user_data, uint32_t id, /* Buffer options */ params[2] = spa_pod_builder_add_object( &pod_builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, - SPA_PARAM_BUFFERS_dataType, - SPA_POD_Int((1 << SPA_DATA_MemPtr) | (1 << SPA_DATA_DmaBuf))); + SPA_PARAM_BUFFERS_dataType, SPA_POD_Int(buffer_types)); pw_stream_update_params(obs_pw->stream, params, 3);