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