diff --git a/src/platform/linux/pipewire.cpp b/src/platform/linux/pipewire.cpp index a7dfc12bf4c..7e66e740a71 100644 --- a/src/platform/linux/pipewire.cpp +++ b/src/platform/linux/pipewire.cpp @@ -483,18 +483,22 @@ namespace pipewire { sizes[1] = SPA_RECTANGLE(1, 1); sizes[2] = SPA_RECTANGLE(8192, 4096); - framerates[0] = SPA_FRACTION(0, 1); // default; we only want variable rate, thus bypassing compositor pacing + framerates[0] = SPA_FRACTION(refresh_rate, 1); // default/preferred framerates[1] = SPA_FRACTION(0, 1); // min - framerates[2] = SPA_FRACTION(0, 1); // max + framerates[2] = SPA_FRACTION(1000, 1); // max spa_pod_builder_push_object(b, &object_frame, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat); spa_pod_builder_add(b, SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video), 0); spa_pod_builder_add(b, SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), 0); spa_pod_builder_add(b, SPA_FORMAT_VIDEO_format, SPA_POD_Id(format), 0); spa_pod_builder_add(b, SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(&sizes[0], &sizes[1], &sizes[2]), 0); - spa_pod_builder_add(b, SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&framerates[0]), 0); if (negotiate_maxframerate_) { + // Request variable rate for framerate when populating maxFramerate with default,min,max values + spa_pod_builder_add(b, SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&framerates[1]), 0); spa_pod_builder_add(b, SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_CHOICE_RANGE_Fraction(&framerates[0], &framerates[1], &framerates[2]), 0); + } else { + // Request target fps (refresh_rate) for framerate in fallback case + spa_pod_builder_add(b, SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&framerates[0]), 0); } if (format == SPA_VIDEO_FORMAT_xBGR_210LE) {