diff --git a/plugins/linux-capture/pipewire.c b/plugins/linux-capture/pipewire.c index 147d35d31..f5c5d0fa6 100644 --- a/plugins/linux-capture/pipewire.c +++ b/plugins/linux-capture/pipewire.c @@ -446,9 +446,11 @@ static bool build_format_params(obs_pipewire_data *obs_pw, return false; } + if (!check_pw_version(&obs_pw->server_version, 0, 3, 33)) + goto build_shm; + for (size_t i = 0; i < obs_pw->format_info.num; i++) { - if (obs_pw->format_info.array[i].modifiers.num == 0 || - !check_pw_version(&obs_pw->server_version, 0, 3, 33)) { + if (obs_pw->format_info.array[i].modifiers.num == 0) { continue; } params[params_count++] = build_format( @@ -457,6 +459,8 @@ static bool build_format_params(obs_pipewire_data *obs_pw, obs_pw->format_info.array[i].modifiers.array, obs_pw->format_info.array[i].modifiers.num); } + +build_shm: for (size_t i = 0; i < obs_pw->format_info.num; i++) { params[params_count++] = build_format( pod_builder, &obs_pw->video_info, @@ -554,6 +558,13 @@ static void remove_modifier_from_format(obs_pipewire_data *obs_pw, if (obs_pw->format_info.array[i].spa_format != spa_format) continue; + if (!check_pw_version(&obs_pw->server_version, 0, 3, 40)) { + da_erase_range( + obs_pw->format_info.array[i].modifiers, 0, + obs_pw->format_info.array[i].modifiers.num - 1); + continue; + } + int idx = da_find(obs_pw->format_info.array[i].modifiers, &modifier, 0); while (idx != -1) {