remoting: Add DPMS support in remoting pluging
authorMarius Vlad <marius.vlad@collabora.com>
Thu, 27 Aug 2020 11:14:27 +0000 (14:14 +0300)
committerMarius Vlad <marius.vlad@collabora.com>
Thu, 27 Aug 2020 11:14:27 +0000 (14:14 +0300)
Just like pipewire, add DPMS support in remoting plug-in. Mechanical
change mimicking a24a326bb19ec5.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
remoting/remoting-plugin.c

index 0928a6b10121f05b56f52d09ab6c7a924717ab1c..85b6bcfd576efb3efedb9a530ad0b9ce87e4e525 100644 (file)
@@ -119,6 +119,7 @@ struct remoted_output {
        struct remoted_gstpipe gstpipe;
        GstClockTime start_time;
        int retry_count;
+       enum dpms_enum dpms;
 };
 
 struct mem_free_cb_data {
@@ -477,8 +478,12 @@ remoting_output_finish_frame_handler(void *data)
                api->finish_frame(output->output, &now, 0);
        }
 
-       msec = millihz_to_nsec(output->output->current_mode->refresh) / 1000000;
-       wl_event_source_timer_update(output->finish_frame_timer, msec);
+       if (output->dpms == WESTON_DPMS_ON) {
+               msec = millihz_to_nsec(output->output->current_mode->refresh) / 1000000;
+               wl_event_source_timer_update(output->finish_frame_timer, msec);
+       } else {
+               wl_event_source_timer_update(output->finish_frame_timer, 0);
+       }
        return 0;
 }
 
@@ -666,6 +671,18 @@ remoting_output_start_repaint_loop(struct weston_output *output)
        return 0;
 }
 
+static void
+remoting_output_set_dpms(struct weston_output *base_output, enum dpms_enum level)
+{
+       struct remoted_output *output = lookup_remoted_output(base_output);
+
+       if (output->dpms == level)
+               return;
+
+       output->dpms = level;
+       remoting_output_finish_frame_handler(output);
+}
+
 static int
 remoting_output_enable(struct weston_output *output)
 {
@@ -684,6 +701,7 @@ remoting_output_enable(struct weston_output *output)
 
        remoted_output->saved_start_repaint_loop = output->start_repaint_loop;
        output->start_repaint_loop = remoting_output_start_repaint_loop;
+       output->set_dpms = remoting_output_set_dpms;
 
        ret = remoting_gst_pipeline_init(remoted_output);
        if (ret < 0) {
@@ -697,6 +715,7 @@ remoting_output_enable(struct weston_output *output)
                                        remoting_output_finish_frame_handler,
                                        remoted_output);
 
+       remoted_output->dpms = WESTON_DPMS_ON;
        return 0;
 }