From 600d683613bdfb079b2df67e8e10ce6ddedf2c03 Mon Sep 17 00:00:00 2001 From: Seunghun Lee Date: Tue, 14 Jan 2020 09:12:39 +0900 Subject: [PATCH] video: Redraw video client whenever viewport changes. Without this patch, redrawing video client could be delayed in case client only changes viewport without any other changes. Change-Id: Iea5b9846b5ce814a56ba234e2baeb167a505999b --- src/bin/video/iface/e_video_hwc.c | 19 +++++++++++++++++++ src/bin/video/iface/e_video_hwc.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/bin/video/iface/e_video_hwc.c b/src/bin/video/iface/e_video_hwc.c index cfaeeea8eb..dbe1d2e24c 100644 --- a/src/bin/video/iface/e_video_hwc.c +++ b/src/bin/video/iface/e_video_hwc.c @@ -1640,9 +1640,26 @@ _e_video_hwc_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA _e_video_hwc_buffer_show(evh, evh->current_fb, evh->current_fb->content_t); } +static void +_e_video_hwc_cb_surface_viewport(struct wl_listener *listener, void *data) +{ + E_Video_Hwc *evh; + + evh = container_of(listener, E_Video_Hwc, surface_viewport_listener); + + VDB("Apply Viewport Signal", evh->ec); + evh->render.redraw = EINA_TRUE; + _e_video_hwc_render_queue(evh); +} + static void _e_video_hwc_client_event_init(E_Video_Hwc *evh) { + /* In order to try to redraw video whenever viewport changes. */ + evh->surface_viewport_listener.notify = _e_video_hwc_cb_surface_viewport; + wl_signal_add(&evh->ec->comp_data->apply_viewport_signal, + &evh->surface_viewport_listener); + evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_SHOW, _e_video_hwc_cb_evas_show, evh); evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_RESIZE, @@ -1659,6 +1676,8 @@ _e_video_hwc_client_event_init(E_Video_Hwc *evh) static void _e_video_hwc_client_event_deinit(E_Video_Hwc *evh) { + wl_list_remove(&evh->surface_viewport_listener.link); + evas_object_event_callback_del_full(evh->ec->frame, EVAS_CALLBACK_SHOW, _e_video_hwc_cb_evas_show, evh); evas_object_event_callback_del_full(evh->ec->frame, EVAS_CALLBACK_RESIZE, diff --git a/src/bin/video/iface/e_video_hwc.h b/src/bin/video/iface/e_video_hwc.h index 8dfe00fa03..e414207a69 100644 --- a/src/bin/video/iface/e_video_hwc.h +++ b/src/bin/video/iface/e_video_hwc.h @@ -90,6 +90,8 @@ struct _E_Video_Hwc E_Comp_Wl_Video_Buf *committed_vbuf; /* A committed video buffer to backend */ E_Comp_Wl_Video_Buf *current_fb; /* buffer which is showing on screen currently */ + struct wl_listener surface_viewport_listener; + struct { Ecore_Job *job; -- 2.34.1