Turn output power on when starting capture

Signed-off-by: Jim Ramsay <i.am@jimramsay.com>
pull/199/head
Jim Ramsay 2022-11-30 04:52:18 -05:00 committed by Andri Yngvason
parent 3cba374172
commit 6b44a6648e
3 changed files with 22 additions and 2 deletions

View File

@ -69,6 +69,7 @@ void output_set_xdg_output(struct output* output,
struct zxdg_output_v1* xdg_output); struct zxdg_output_v1* xdg_output);
void output_set_wlr_output_power(struct output* output, void output_set_wlr_output_power(struct output* output,
struct zwlr_output_power_v1* wlr_output_power); struct zwlr_output_power_v1* wlr_output_power);
int output_set_power_state(struct output* output, enum output_power_state state);
void output_list_destroy(struct wl_list* list); void output_list_destroy(struct wl_list* list);
struct output* output_find_by_id(struct wl_list* list, uint32_t id); struct output* output_find_by_id(struct wl_list* list, uint32_t id);
struct output* output_find_by_name(struct wl_list* list, const char* name); struct output* output_find_by_name(struct wl_list* list, const char* name);

View File

@ -750,8 +750,10 @@ int wayvnc_start_capture_immediate(struct wayvnc* self)
return 0; return 0;
if (self->selected_output->power == OUTPUT_POWER_OFF) { if (self->selected_output->power == OUTPUT_POWER_OFF) {
nvnc_log(NVNC_LOG_WARNING, "Output is in powersaving mode. Delaying capture until it turns on."); nvnc_log(NVNC_LOG_WARNING, "Selected output is in powersaving mode. Delaying capture until it turns on.");
// TODO: Attempt to turn it on? if (output_set_power_state(self->selected_output, OUTPUT_POWER_ON)
== 0)
nvnc_log(NVNC_LOG_WARNING, "Requested power ON.");
return 0; return 0;
} }

View File

@ -19,6 +19,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdbool.h> #include <stdbool.h>
#include <errno.h>
#include <assert.h>
#include <wayland-client-protocol.h> #include <wayland-client-protocol.h>
#include <wayland-client.h> #include <wayland-client.h>
#include <neatvnc.h> #include <neatvnc.h>
@ -315,6 +317,21 @@ void output_set_wlr_output_power(struct output* self,
&wlr_output_power_listener, self); &wlr_output_power_listener, self);
} }
int output_set_power_state(struct output* output, enum output_power_state state)
{
assert(state != OUTPUT_POWER_UNKNOWN);
if (!output->wlr_output_power) {
errno = ENOENT;
return -1;
}
nvnc_log(NVNC_LOG_TRACE, "Output %s requesting power %s", output->name,
output_power_state_name(state));
int mode = (state == OUTPUT_POWER_ON) ? ZWLR_OUTPUT_POWER_V1_MODE_ON :
ZWLR_OUTPUT_POWER_V1_MODE_OFF;
zwlr_output_power_v1_set_mode(output->wlr_output_power, mode);
return 0;
}
struct output* output_find_by_id(struct wl_list* list, uint32_t id) struct output* output_find_by_id(struct wl_list* list, uint32_t id)
{ {
struct output* output; struct output* output;