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;
uint32_t dmabuf_width, dmabuf_height;
uint32_t fourcc;
double rate_limit;
};
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"
" -s,--seat=<name> Select seat by name.\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"
"\n";
@ -628,8 +629,9 @@ int main(int argc, char* argv[])
const char* seat_name = NULL;
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;
static const struct option longopts[] = {
@ -638,6 +640,7 @@ int main(int argc, char* argv[])
{ "keyboard", required_argument, NULL, 'k' },
{ "seat", required_argument, NULL, 's' },
{ "render-cursor", no_argument, NULL, 'r' },
{ "max-fps", required_argument, NULL, 'f' },
{ "help", no_argument, NULL, 'h' },
{ NULL, 0, NULL, 0 }
};
@ -663,6 +666,9 @@ int main(int argc, char* argv[])
case 'r':
overlay_cursor = true;
break;
case 'f':
max_rate = atoi(optarg);
break;
case 'h':
return wayvnc_usage(stdout, 0);
default:
@ -740,6 +746,7 @@ int main(int argc, char* argv[])
self.selected_output = out;
self.selected_seat = seat;
self.screencopy.wl_output = out->wl_output;
self.screencopy.rate_limit = max_rate;
self.keyboard_backend.virtual_keyboard =
zwp_virtual_keyboard_manager_v1_create_virtual_keyboard(

View File

@ -32,7 +32,6 @@
#include "time-util.h"
#include "usdt.h"
#define RATE_LIMIT 30.0 // Hz
#define DELAY_SMOOTHER_TIME_CONSTANT 0.5 // s
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();
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;