backend-vnc: store backend on struct vnc_output
To avoid retrieving the backend from the compositor all the time, store a pointer to the vnc backend on its vnc_output structures. This will be useful once the compositor contains more than one backend. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
parent
30cca75086
commit
c2d2525aaa
@ -75,6 +75,7 @@ struct vnc_backend {
|
|||||||
|
|
||||||
struct vnc_output {
|
struct vnc_output {
|
||||||
struct weston_output base;
|
struct weston_output base;
|
||||||
|
struct vnc_backend *backend;
|
||||||
struct wl_event_source *finish_frame_timer;
|
struct wl_event_source *finish_frame_timer;
|
||||||
struct nvnc_display *display;
|
struct nvnc_display *display;
|
||||||
|
|
||||||
@ -612,7 +613,7 @@ vnc_output_enable(struct weston_output *base)
|
|||||||
|
|
||||||
assert(output);
|
assert(output);
|
||||||
|
|
||||||
backend = to_vnc_backend(base->compositor);
|
backend = output->backend;
|
||||||
backend->output = output;
|
backend->output = output;
|
||||||
|
|
||||||
if (pixman_renderer_output_create(&output->base, &options) < 0)
|
if (pixman_renderer_output_create(&output->base, &options) < 0)
|
||||||
@ -651,7 +652,7 @@ vnc_output_disable(struct weston_output *base)
|
|||||||
|
|
||||||
assert(output);
|
assert(output);
|
||||||
|
|
||||||
backend = to_vnc_backend(base->compositor);
|
backend = output->backend;
|
||||||
|
|
||||||
if (!output->base.enabled)
|
if (!output->base.enabled)
|
||||||
return 0;
|
return 0;
|
||||||
@ -698,6 +699,8 @@ vnc_create_output(struct weston_backend *backend, const char *name)
|
|||||||
output->base.enable = vnc_output_enable;
|
output->base.enable = vnc_output_enable;
|
||||||
output->base.attach_head = NULL;
|
output->base.attach_head = NULL;
|
||||||
|
|
||||||
|
output->backend = b;
|
||||||
|
|
||||||
weston_compositor_add_pending_output(&output->base, b->compositor);
|
weston_compositor_add_pending_output(&output->base, b->compositor);
|
||||||
|
|
||||||
return &output->base;
|
return &output->base;
|
||||||
@ -774,7 +777,7 @@ vnc_output_repaint(struct weston_output *base, pixman_region32_t *damage)
|
|||||||
{
|
{
|
||||||
struct vnc_output *output = to_vnc_output(base);
|
struct vnc_output *output = to_vnc_output(base);
|
||||||
struct weston_compositor *ec = output->base.compositor;
|
struct weston_compositor *ec = output->base.compositor;
|
||||||
struct vnc_backend *backend = to_vnc_backend(ec);
|
struct vnc_backend *backend = output->backend;
|
||||||
struct timespec now, target;
|
struct timespec now, target;
|
||||||
int refresh_nsec = millihz_to_nsec(output->base.current_mode->refresh);
|
int refresh_nsec = millihz_to_nsec(output->base.current_mode->refresh);
|
||||||
int refresh_msec = refresh_nsec / 1000000;
|
int refresh_msec = refresh_nsec / 1000000;
|
||||||
@ -837,19 +840,19 @@ vnc_insert_new_mode(struct weston_output *output, int width, int height,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct weston_mode *
|
static struct weston_mode *
|
||||||
vnc_ensure_matching_mode(struct weston_output *output,
|
vnc_ensure_matching_mode(struct vnc_output *output,
|
||||||
struct weston_mode *target)
|
struct weston_mode *target)
|
||||||
{
|
{
|
||||||
struct vnc_backend *backend = to_vnc_backend(output->compositor);
|
struct vnc_backend *backend = output->backend;
|
||||||
struct weston_mode *local;
|
struct weston_mode *local;
|
||||||
|
|
||||||
wl_list_for_each(local, &output->mode_list, link) {
|
wl_list_for_each(local, &output->base.mode_list, link) {
|
||||||
if ((local->width == target->width) &&
|
if ((local->width == target->width) &&
|
||||||
(local->height == target->height))
|
(local->height == target->height))
|
||||||
return local;
|
return local;
|
||||||
}
|
}
|
||||||
|
|
||||||
return vnc_insert_new_mode(output, target->width, target->height,
|
return vnc_insert_new_mode(&output->base, target->width, target->height,
|
||||||
backend->vnc_monitor_refresh_rate);
|
backend->vnc_monitor_refresh_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,7 +865,7 @@ vnc_switch_mode(struct weston_output *base, struct weston_mode *target_mode)
|
|||||||
|
|
||||||
assert(output);
|
assert(output);
|
||||||
|
|
||||||
local_mode = vnc_ensure_matching_mode(base, target_mode);
|
local_mode = vnc_ensure_matching_mode(output, target_mode);
|
||||||
|
|
||||||
if (local_mode == base->current_mode)
|
if (local_mode == base->current_mode)
|
||||||
return 0;
|
return 0;
|
||||||
@ -888,7 +891,7 @@ static int
|
|||||||
vnc_output_set_size(struct weston_output *base, int width, int height)
|
vnc_output_set_size(struct weston_output *base, int width, int height)
|
||||||
{
|
{
|
||||||
struct vnc_output *output = to_vnc_output(base);
|
struct vnc_output *output = to_vnc_output(base);
|
||||||
struct vnc_backend *backend = to_vnc_backend(base->compositor);
|
struct vnc_backend *backend = output->backend;
|
||||||
struct weston_mode *current_mode;
|
struct weston_mode *current_mode;
|
||||||
struct weston_mode init_mode;
|
struct weston_mode init_mode;
|
||||||
|
|
||||||
@ -901,7 +904,7 @@ vnc_output_set_size(struct weston_output *base, int width, int height)
|
|||||||
init_mode.height = height;
|
init_mode.height = height;
|
||||||
init_mode.refresh = backend->vnc_monitor_refresh_rate;
|
init_mode.refresh = backend->vnc_monitor_refresh_rate;
|
||||||
|
|
||||||
current_mode = vnc_ensure_matching_mode(&output->base, &init_mode);
|
current_mode = vnc_ensure_matching_mode(output, &init_mode);
|
||||||
current_mode->flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
|
current_mode->flags = WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED;
|
||||||
|
|
||||||
output->base.current_mode = output->base.native_mode = current_mode;
|
output->base.current_mode = output->base.native_mode = current_mode;
|
||||||
|
Loading…
Reference in New Issue
Block a user