video: Redraw video client whenever viewport changes. 67/222467/2
authorSeunghun Lee <shiin.lee@samsung.com>
Tue, 14 Jan 2020 00:12:39 +0000 (09:12 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 16 Jan 2020 02:09:00 +0000 (02:09 +0000)
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
src/bin/video/iface/e_video_hwc.h

index cfaeeea8ebc67c254b631ec582476b55d449fbb7..dbe1d2e24ca681a1bd4757fbaa3ddaf5c52e895e 100644 (file)
@@ -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,
index 8dfe00fa033c7bce4730e7322fe88fc12859efa3..e414207a699a82d15cd8c561319dbeb3a169ab57 100644 (file)
@@ -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;