diff options
author | Veeresh Kadasani <external.vkadasani@jp.adit-jv.com> | 2019-08-05 10:36:28 +0900 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2019-08-05 21:52:08 +0000 |
commit | db8af531ce0c44796a59675f34fab892c10940bf (patch) | |
tree | 3e503ffb936a86c9af1d76aaac4ad5d6cf3422d8 /waltham-transmitter/transmitter-plugin/output.c | |
parent | 6b673b5726dea2d2f8d39caee34d0ca850cc146e (diff) |
waltham-transmitter: Migrate to weston 6.0
SPEC-2696
Change-Id: Ideeb27c8cf65e4370777a9127868ef800645be26
Signed-off-by: Veeresh Kadasani <external.vkadasani@jp.adit-jv.com>
(cherry picked from commit 0fc0e974749f4ce35e14c23b050aa8fe693c3ce5)
Diffstat (limited to 'waltham-transmitter/transmitter-plugin/output.c')
-rw-r--r-- | waltham-transmitter/transmitter-plugin/output.c | 109 |
1 files changed, 69 insertions, 40 deletions
diff --git a/waltham-transmitter/transmitter-plugin/output.c b/waltham-transmitter/transmitter-plugin/output.c index 6768eee..dc7d5d8 100644 --- a/waltham-transmitter/transmitter-plugin/output.c +++ b/waltham-transmitter/transmitter-plugin/output.c @@ -122,10 +122,10 @@ transmitter_output_destroy(struct weston_transmitter_output *output) { wl_list_remove(&output->link); + struct weston_head *head=weston_output_get_first_head(&output->base); free_mode_list(&output->base.mode_list); - free(output->base.serial_number); - free(output->base.model); - free(output->base.make); + weston_head_release(head); + free(head); weston_output_destroy(&output->base); free(output); @@ -139,20 +139,26 @@ transmitter_output_destroy_(struct weston_output *base) transmitter_output_destroy(output); } +static int +transmitter_output_finish_frame_handler(void *data) +{ + struct weston_transmitter_output *output = data; + struct timespec now; + weston_compositor_read_presentation_clock(output->base.compositor, &now); + weston_output_finish_frame(&output->base, &now, 0); + return 0; +} static void transmitter_start_repaint_loop(struct weston_output *base) { - struct timespec ts; struct weston_transmitter_output *output = wl_container_of(base, output, base); - - weston_compositor_read_presentation_clock(output->base.compositor, &ts); - weston_output_finish_frame(&output->base, &ts, 0); + weston_output_finish_frame(&output->base,NULL, WP_PRESENTATION_FEEDBACK_INVALID); } static int transmitter_output_repaint(struct weston_output *base, - pixman_region32_t *damage) + pixman_region32_t *damage,void *repaint_data) { struct weston_transmitter_output* output = wl_container_of(base, output, base); struct weston_transmitter_remote* remote = output->remote; @@ -222,19 +228,16 @@ transmitter_output_repaint(struct weston_output *base, if (!found_output) goto out; - weston_compositor_read_presentation_clock(output->base.compositor, &ts); - weston_output_finish_frame(&output->base, &ts, 0); - + wl_event_source_timer_update(output->finish_frame_timer,1); return 0; out: - transmitter_start_repaint_loop(base); - + wl_event_source_timer_update(output->finish_frame_timer,1); return 0; } static void -transmitter_assign_planes(struct weston_output *base) { +transmitter_assign_planes(struct weston_output *base,void *repaint_data) { /* * This function prevents compositor releasing buffer early. */ @@ -259,6 +262,7 @@ static int transmitter_output_enable(struct weston_output *base) { struct weston_transmitter_output *output = wl_container_of(base, output, base); + struct wl_event_loop *loop; if (!output) { weston_log("No weston output found\n"); return -1; @@ -268,6 +272,27 @@ transmitter_output_enable(struct weston_output *base) output->base.set_dpms = NULL; output->base.switch_mode = NULL; + loop = wl_display_get_event_loop(base->compositor->wl_display); + output->finish_frame_timer = + wl_event_loop_add_timer(loop, + transmitter_output_finish_frame_handler, + output); + return 0; +} + +/* FIXME:This is a dummy call we just return 0(success)*/ +int transmitter_output_attach_head(struct weston_output *output, + struct weston_head *head) +{ + weston_log("%s is called\n",__func__); + return 0; +} + +/* FIXME:This is a dummy call we just return 0(success)*/ +int transmitter_output_detach_head(struct weston_output *output, + struct weston_head *head) +{ + weston_log("%s is called\n",__func__); return 0; } @@ -277,7 +302,17 @@ transmitter_remote_create_output(struct weston_transmitter_remote *remote, { struct weston_transmitter_output *output; struct weston_transmitter *txr = remote->transmitter; - struct weston_output *def_output; + struct weston_head *head; + const char *make = strdup(WESTON_TRANSMITTER_OUTPUT_MAKE); + const char *model = make_model(remote, 1); + const char *serial_number = strdup("0"); + const char *connector_name = make_model(remote, 1); + + head=zalloc(sizeof *head); + if (!head){ + weston_log("allocation failed for head\n"); + return -1; + } output = zalloc(sizeof *output); if (!output) @@ -285,36 +320,24 @@ transmitter_remote_create_output(struct weston_transmitter_remote *remote, output->parent.draw_initial_frame = true; - output->base.subpixel = info->subpixel; + weston_head_init(head,connector_name); + weston_head_set_subpixel(head, info->subpixel); + weston_head_set_monitor_strings(head, make, model, serial_number); + + head->compositor=remote->transmitter->compositor; - output->base.name = make_model(remote, 1); - output->base.make = strdup(WESTON_TRANSMITTER_OUTPUT_MAKE); - output->base.model = make_model(remote, 1); - output->base.serial_number = strdup("0"); /* x and y is fake value */ wl_list_init(&output->base.mode_list); + output->base.name = make_model(remote, 1); + /* WL_OUTPUT_MODE_CURRENT already set */ + weston_output_init(&output->base, remote->transmitter->compositor,output->base.name); if (make_mode_list(&output->base.mode_list, info) < 0) goto fail; output->base.current_mode = get_current_mode(&output->base.mode_list); output->base.height = output->base.current_mode->height; output->base.width = output->base.current_mode->width; - /* WL_OUTPUT_MODE_CURRENT already set */ - weston_output_init(&output->base, remote->transmitter->compositor); - - /* - * renderer_output_create skipped: - * no renderer awareness is needed for this output - */ - /* - * weston_compositor_add_output() skipped: - * Most other code uses weston_compositor::output_list when traversing - * all outputs, we do not want any of that. - * Also weston_compositor::output_created_signal must not trigger - * for this output, since we must not involve input device management - * or color management or any kind of local management. - */ output->base.enable = transmitter_output_enable; output->base.start_repaint_loop = transmitter_start_repaint_loop; output->base.repaint = transmitter_output_repaint; @@ -330,6 +353,9 @@ transmitter_remote_create_output(struct weston_transmitter_remote *remote, output->base.scale = 1; output->base.transform = WL_OUTPUT_TRANSFORM_NORMAL; + output->base.attach_head = transmitter_output_attach_head; + output->base.detach_head = transmitter_output_detach_head; + output->remote = remote; wl_list_insert(&remote->output_list, &output->link); @@ -338,16 +364,19 @@ transmitter_remote_create_output(struct weston_transmitter_remote *remote, return -1; } - weston_output_enable(&output->base); + if(!weston_output_attach_head(&output->base,head)){ + weston_log("Weston head attached successfully to output\n"); + } + + if(weston_output_enable(&output->base)<0){ + weston_log("Failed to enable weston output\n"); + } return 0; fail: free_mode_list(&output->base.mode_list); - free(output->base.serial_number); - free(output->base.model); - free(output->base.make); - free(output->base.name); + free(head); free(output); return -1; |