Allow the user to adjust the FPS limit

pixman-rendering
Andri Yngvason 2020-07-07 14:22:38 +00:00
parent 0ed6ed9e3c
commit 39976ab776
3 changed files with 11 additions and 3 deletions

View File

@ -68,6 +68,8 @@ struct screencopy {
bool have_linux_dmabuf; bool have_linux_dmabuf;
uint32_t dmabuf_width, dmabuf_height; uint32_t dmabuf_width, dmabuf_height;
uint32_t fourcc; uint32_t fourcc;
double rate_limit;
}; };
void screencopy_init(struct screencopy* self); void screencopy_init(struct screencopy* self);

View File

@ -571,6 +571,7 @@ int wayvnc_usage(FILE* stream, int rc)
" -k,--keyboard=<layout> Select keyboard layout.\n" " -k,--keyboard=<layout> Select keyboard layout.\n"
" -s,--seat=<name> Select seat by name.\n" " -s,--seat=<name> Select seat by name.\n"
" -r,--render-cursor Enable overlay cursor rendering.\n" " -r,--render-cursor Enable overlay cursor rendering.\n"
" -f,--max-fps=<fps> Set the rate limit (default 30).\n"
" -h,--help Get help (this text).\n" " -h,--help Get help (this text).\n"
"\n"; "\n";
@ -628,8 +629,9 @@ int main(int argc, char* argv[])
const char* seat_name = NULL; const char* seat_name = NULL;
bool overlay_cursor = false; bool overlay_cursor = false;
int max_rate = 30;
static const char* shortopts = "C:o:k:s:rh"; static const char* shortopts = "C:o:k:s:rf:h";
int drm_fd = -1; int drm_fd = -1;
static const struct option longopts[] = { static const struct option longopts[] = {
@ -638,6 +640,7 @@ int main(int argc, char* argv[])
{ "keyboard", required_argument, NULL, 'k' }, { "keyboard", required_argument, NULL, 'k' },
{ "seat", required_argument, NULL, 's' }, { "seat", required_argument, NULL, 's' },
{ "render-cursor", no_argument, NULL, 'r' }, { "render-cursor", no_argument, NULL, 'r' },
{ "max-fps", required_argument, NULL, 'f' },
{ "help", no_argument, NULL, 'h' }, { "help", no_argument, NULL, 'h' },
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
@ -663,6 +666,9 @@ int main(int argc, char* argv[])
case 'r': case 'r':
overlay_cursor = true; overlay_cursor = true;
break; break;
case 'f':
max_rate = atoi(optarg);
break;
case 'h': case 'h':
return wayvnc_usage(stdout, 0); return wayvnc_usage(stdout, 0);
default: default:
@ -740,6 +746,7 @@ int main(int argc, char* argv[])
self.selected_output = out; self.selected_output = out;
self.selected_seat = seat; self.selected_seat = seat;
self.screencopy.wl_output = out->wl_output; self.screencopy.wl_output = out->wl_output;
self.screencopy.rate_limit = max_rate;
self.keyboard_backend.virtual_keyboard = self.keyboard_backend.virtual_keyboard =
zwp_virtual_keyboard_manager_v1_create_virtual_keyboard( zwp_virtual_keyboard_manager_v1_create_virtual_keyboard(

View File

@ -32,7 +32,6 @@
#include "time-util.h" #include "time-util.h"
#include "usdt.h" #include "usdt.h"
#define RATE_LIMIT 30.0 // Hz
#define DELAY_SMOOTHER_TIME_CONSTANT 0.5 // s #define DELAY_SMOOTHER_TIME_CONSTANT 0.5 // s
void screencopy_stop(struct screencopy* self) void screencopy_stop(struct screencopy* self)
@ -231,7 +230,7 @@ static int screencopy__start(struct screencopy* self, bool is_immediate_copy)
uint64_t now = gettime_us(); uint64_t now = gettime_us();
double dt = (now - self->last_time) * 1.0e-6; double dt = (now - self->last_time) * 1.0e-6;
double time_left = (1.0 / RATE_LIMIT - dt - self->delay) * 1.0e3; double time_left = (1.0 / self->rate_limit - dt - self->delay) * 1.0e3;
self->status = SCREENCOPY_IN_PROGRESS; self->status = SCREENCOPY_IN_PROGRESS;