video: 'E_Video_Hwc' handles event of client buffer change for HWC Planes/Windows. 93/204493/1
authorSeunghun Lee <shiin.lee@samsung.com>
Mon, 15 Apr 2019 04:56:26 +0000 (13:56 +0900)
committerSeunghun Lee <shiin.lee@samsung.com>
Wed, 24 Apr 2019 06:33:35 +0000 (15:33 +0900)
Change-Id: I740ae3f5b9d4885f88f2d4492ab45aeb97f52423

src/bin/video/iface/e_video_hwc.c
src/bin/video/iface/e_video_hwc_planes.c
src/bin/video/iface/e_video_hwc_windows.c

index 4ff039f..3c9acb2 100644 (file)
@@ -1218,6 +1218,30 @@ e_video_hwc_child_client_get(E_Client *ec)
    return NULL;
 }
 
+static Eina_Bool
+_e_video_hwc_cb_client_buffer_change(void *data, int type, void *event)
+{
+   E_Client *ec;
+   E_Event_Client *ev = event;
+   E_Video_Hwc *evh;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(ev->ec, ECORE_CALLBACK_PASS_ON);
+
+   evh = data;
+   ec = ev->ec;
+
+   if (evh->ec != ec)
+     return ECORE_CALLBACK_PASS_ON;
+
+   if (e_object_is_del(E_OBJECT(ec)))
+     return ECORE_CALLBACK_PASS_ON;
+
+   _e_video_hwc_render(evh, __FUNCTION__);
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
 static void
 _e_video_hwc_iface_destroy(E_Video_Comp_Iface *iface)
 {
@@ -1403,6 +1427,13 @@ _e_video_hwc_create(E_Client *ec)
    return evh;
 }
 
+static void
+_e_video_hwc_client_event_init(E_Video_Hwc *evh)
+{
+   E_LIST_HANDLER_APPEND(evh->ec_event_handler, E_EVENT_CLIENT_BUFFER_CHANGE,
+                         _e_video_hwc_cb_client_buffer_change, evh);
+}
+
 EINTERN E_Video_Comp_Iface *
 e_video_hwc_iface_create(E_Client *ec)
 {
@@ -1415,6 +1446,8 @@ e_video_hwc_iface_create(E_Client *ec)
    if (!evh)
        return NULL;
 
+   _e_video_hwc_client_event_init(evh);
+
    if (evh->hwc_policy == E_HWC_POLICY_PLANES)
      res = e_video_hwc_planes_init(evh);
    else
index f788ebd..c997054 100644 (file)
@@ -837,30 +837,6 @@ need_pp:
 }
 
 static Eina_Bool
-_e_video_cb_ec_buffer_change(void *data, int type, void *event)
-{
-   E_Client *ec;
-   E_Event_Client *ev = event;
-   E_Video_Hwc_Planes *evhp;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ev->ec, ECORE_CALLBACK_PASS_ON);
-
-   evhp = data;
-   ec = ev->ec;
-
-   if (evhp->base.ec != ec)
-     return ECORE_CALLBACK_PASS_ON;
-
-   if (e_object_is_del(E_OBJECT(ec)))
-     return ECORE_CALLBACK_PASS_ON;
-
-   e_video_hwc_render((E_Video_Hwc *)evhp, __FUNCTION__);
-
-   return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
 _e_video_cb_ec_client_show(void *data, int type, void *event)
 {
    E_Event_Client *ev = event;
@@ -1244,8 +1220,6 @@ _e_video_hwc_planes_ec_event_init(E_Video_Hwc_Planes *evhp)
    evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE,
                                   _e_video_cb_evas_hide, evhp);
 
-   E_LIST_HANDLER_APPEND(evhp->base.ec_event_handler, E_EVENT_CLIENT_BUFFER_CHANGE,
-                         _e_video_cb_ec_buffer_change, evhp);
    E_LIST_HANDLER_APPEND(evhp->base.ec_event_handler, E_EVENT_CLIENT_SHOW,
                          _e_video_cb_ec_client_show, evhp);
    E_LIST_HANDLER_APPEND(evhp->base.ec_event_handler, E_EVENT_REMOTE_SURFACE_PROVIDER_VISIBILITY_CHANGE,
index e40161f..e723c9a 100644 (file)
@@ -356,34 +356,6 @@ need_pp:
 }
 
 static Eina_Bool
-_e_video_cb_ec_buffer_change(void *data, int type, void *event)
-{
-   E_Client *ec;
-   E_Event_Client *ev = event;
-   E_Video_Hwc_Windows *evhw;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ev, ECORE_CALLBACK_PASS_ON);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(ev->ec, ECORE_CALLBACK_PASS_ON);
-
-   evhw = data;
-   ec = ev->ec;
-
-   if (evhw->base.ec != ec)
-     return ECORE_CALLBACK_PASS_ON;
-
-   if (e_object_is_del(E_OBJECT(ec)))
-     return ECORE_CALLBACK_PASS_ON;
-
-   /* not interested with non video_surface */
-   if (!evhw->base.ec->comp_data->video_client)
-     return ECORE_CALLBACK_PASS_ON;
-
-   e_video_hwc_render((E_Video_Hwc *)evhw, __FUNCTION__);
-
-   return ECORE_CALLBACK_PASS_ON;
-}
-
-static Eina_Bool
 _e_video_cb_ec_client_show(void *data, int type, void *event)
 {
    E_Event_Client *ev = event;
@@ -587,8 +559,6 @@ _e_video_hwc_windows_ec_event_init(E_Video_Hwc_Windows *evhw)
       e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
                          _e_video_hwc_windows_cb_hook_subsurface_create, evhw);
 
-   E_LIST_HANDLER_APPEND(evhw->base.ec_event_handler, E_EVENT_CLIENT_BUFFER_CHANGE,
-                         _e_video_cb_ec_buffer_change, evhw);
    E_LIST_HANDLER_APPEND(evhw->base.ec_event_handler, E_EVENT_CLIENT_SHOW,
                          _e_video_cb_ec_client_show, evhw);
    E_LIST_HANDLER_APPEND(evhw->base.ec_event_handler, E_EVENT_REMOTE_SURFACE_PROVIDER_VISIBILITY_CHANGE,