return evh;
}
+static void
+_e_video_hwc_show(E_Video_Hwc *evh)
+{
+ E_Client *ec;
+
+ ec = evh->ec;
+ if (e_object_is_del(E_OBJECT(ec)))
+ return;
+
+ if (evh->need_force_render)
+ {
+ VIN("video forcely rendering..", evh->ec);
+ _e_video_hwc_render(evh, __FUNCTION__);
+ }
+
+ /* if stand_alone is true, not show */
+ if ((ec->comp_data->sub.data && ec->comp_data->sub.data->stand_alone) ||
+ (ec->comp_data->sub.data && evh->follow_topmost_visibility))
+ {
+#if 0 //mute off is managed by client. mute off in server made many issues.
+ if (!evhp->layer) return;
+
+ if (evhp->tdm_mute_id != -1)
+ {
+ Tdm_Prop_Value prop = {.id = evhp->tdm_mute_id, .value.u32 = 0};
+ VIN("video surface show. mute off (ec:%p)", evhp->ec);
+ _e_video_layer_set_property(evhp->layer, &prop);
+ }
+#endif
+ return;
+ }
+
+ /* FIXME It seems unnecessary. */
+ if (evh->hwc_policy == E_HWC_POLICY_PLANES)
+ {
+ if (!e_video_hwc_planes_properties_commit(evh))
+ return;
+ }
+
+ VIN("evas show", evh->ec);
+ if (evh->current_fb)
+ {
+ if (evh->hwc_policy == E_HWC_POLICY_PLANES)
+ e_video_hwc_planes_buffer_show(evh, evh->current_fb, evh->current_fb->content_t);
+ else
+ e_video_hwc_windows_buffer_show(evh, evh->current_fb, evh->current_fb->content_t);
+ }
+}
+
+static void
+_e_video_hwc_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ E_Video_Hwc *evh;
+
+ evh = data;
+ _e_video_hwc_show(evh);
+}
+
static void
_e_video_hwc_client_event_init(E_Video_Hwc *evh)
{
+ evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_SHOW,
+ _e_video_hwc_cb_evas_show, evh);
E_LIST_HANDLER_APPEND(evh->ec_event_handler, E_EVENT_CLIENT_SHOW,
_e_video_hwc_cb_client_show, evh);
E_LIST_HANDLER_APPEND(evh->ec_event_handler, E_EVENT_CLIENT_BUFFER_CHANGE,
{
return _e_video_hwc_current_fb_update(evh);
}
+
+EINTERN void
+e_video_hwc_show(E_Video_Hwc *evh)
+{
+ _e_video_hwc_show(evh);
+}
EINTERN void e_video_hwc_planes_buffer_show(E_Video_Hwc *evh, E_Comp_Wl_Video_Buf *vbuf, unsigned int transform);
EINTERN Eina_Bool e_video_hwc_planes_frame_buffer_show(E_Video_Hwc *evh, E_Comp_Wl_Video_Buf *vbuf);
EINTERN Eina_Bool e_video_hwc_planes_check_if_pp_needed(E_Video_Hwc *evh);
+EINTERN Eina_Bool e_video_hwc_planes_properties_commit(E_Video_Hwc *evh);
EINTERN tbm_surface_h e_video_hwc_planes_displaying_buffer_get(E_Video_Hwc *evh);
EINTERN E_Video_Hwc *e_video_hwc_windows_create(void);
EINTERN Eina_Bool e_video_hwc_windows_check_if_pp_needed(E_Video_Hwc *evh);
EINTERN tbm_surface_h e_video_hwc_windows_displaying_buffer_get(E_Video_Hwc *evh);
+EINTERN void e_video_hwc_show(E_Video_Hwc *evh);
EINTERN void e_video_hwc_render(E_Video_Hwc *evh, const char *func);
EINTERN Eina_Bool e_video_hwc_can_commit(E_Video_Hwc *evh);
EINTERN Eina_Bool e_video_hwc_commit_done(E_Video_Hwc *evh);
_e_video_buffer_show(evhp, vbuf, transform);
}
-static void
-_e_video_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- E_Video_Hwc_Planes *evhp = data;
-
- if (e_object_is_del(E_OBJECT(evhp->base.ec))) return;
-
- if (evhp->base.need_force_render)
- {
- VIN("video forcely rendering..", evhp->base.ec);
- e_video_hwc_render((E_Video_Hwc *)evhp, __FUNCTION__);
- }
-
- /* if stand_alone is true, not show */
- if ((evhp->base.ec->comp_data->sub.data && evhp->base.ec->comp_data->sub.data->stand_alone) ||
- (evhp->base.ec->comp_data->sub.data && evhp->base.follow_topmost_visibility))
- {
-#if 0 //mute off is managed by client. mute off in server made many issues.
- if (!evhp->layer) return;
-
- if (evhp->tdm_mute_id != -1)
- {
- Tdm_Prop_Value prop = {.id = evhp->tdm_mute_id, .value.u32 = 0};
- VIN("video surface show. mute off (ec:%p)", evhp->ec);
- _e_video_layer_set_property(evhp->layer, &prop);
- }
-#endif
- return;
- }
-
- if (!evhp->layer)
- {
- VIN("set layer: show", evhp->base.ec);
- if (!_e_video_set_layer(evhp))
- {
- VER("set layer failed", evhp->base.ec);
- return;
- }
- // need call tdm property in list
- Tdm_Prop_Value *prop;
- EINA_LIST_FREE(evhp->tdm_prop_list, prop)
- {
- VIN("call property(%s), value(%d)", evhp->base.ec,
- prop->name, (unsigned int)prop->value.u32);
- _e_video_layer_set_property(evhp->layer, prop);
- free(prop);
- }
- }
-
- VIN("evas show", evhp->base.ec);
- if (evhp->base.current_fb)
- _e_video_buffer_show(evhp, evhp->base.current_fb, evhp->base.current_fb->content_t);
-}
-
static void
_e_video_cb_evas_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
_e_video_cb_evas_hide(evhp, NULL, NULL, NULL);
break;
case E_VISIBILITY_UNOBSCURED:
- _e_video_cb_evas_show(evhp, NULL, NULL, NULL);
+ e_video_hwc_show((E_Video_Hwc *)evhp);
break;
default:
VER("Not implemented", evhp->base.ec);
break;
case E_VISIBILITY_UNOBSCURED:
VIN("follow_topmost_visibility: UNOBSCURED", ec);
- _e_video_cb_evas_show(evhp, NULL, NULL, NULL);
+ e_video_hwc_show((E_Video_Hwc *)evhp);
break;
default:
return ECORE_CALLBACK_PASS_ON;
ec = evhp->base.ec;
- evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, evhp);
evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_HIDE,
_e_video_cb_evas_hide, evhp);
ec = evhp->base.ec;
- evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, evhp);
evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE,
_e_video_cb_evas_hide, evhp);
return EINA_TRUE;
}
+
+EINTERN Eina_Bool
+e_video_hwc_planes_properties_commit(E_Video_Hwc *evh)
+{
+ E_Video_Hwc_Planes *evhp;
+
+ evhp = (E_Video_Hwc_Planes *)evh;
+ if (!evhp->layer)
+ {
+ VIN("set layer: show", evhp->base.ec);
+ if (!_e_video_set_layer(evhp))
+ {
+ VER("set layer failed", evhp->base.ec);
+ return EINA_FALSE;
+ }
+ // need call tdm property in list
+ Tdm_Prop_Value *prop;
+ EINA_LIST_FREE(evhp->tdm_prop_list, prop)
+ {
+ VIN("call property(%s), value(%d)", evhp->base.ec,
+ prop->name, (unsigned int)prop->value.u32);
+ _e_video_layer_set_property(evhp->layer, prop);
+ free(prop);
+ }
+ }
+
+ return EINA_TRUE;
+}
_e_video_buffer_show(evhw, vbuf, transform);
}
-static void
-_e_video_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- E_Video_Hwc_Windows *evhw = data;
-
- if (e_object_is_del(E_OBJECT(evhw->base.ec))) return;
-
- if (!evhw->base.ec->comp_data->video_client)
- return;
-
- if (evhw->base.need_force_render)
- {
- VIN("video forcely rendering..", evhw->base.ec);
- e_video_hwc_render((E_Video_Hwc *)evhw, __FUNCTION__);
- }
-
- /* if stand_alone is true, not show */
- if ((evhw->base.ec->comp_data->sub.data && evhw->base.ec->comp_data->sub.data->stand_alone) ||
- (evhw->base.ec->comp_data->sub.data && evhw->base.follow_topmost_visibility))
- {
- return;
- }
-
- VIN("evas show", evhw->base.ec);
- if (evhw->base.current_fb)
- _e_video_buffer_show(evhw, evhw->base.current_fb, evhw->base.current_fb->content_t);
-}
-
static Eina_Bool
_e_video_hwc_windows_init(E_Video_Hwc_Windows *evhw)
{
static void
_e_video_hwc_windows_ec_event_deinit(E_Video_Hwc_Windows *evhw)
{
- E_Client *ec;
-
- ec = evhw->base.ec;
-
- evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, evhw);
-
E_FREE_FUNC(evhw->hook_subsurf_create, e_comp_wl_hook_del);
E_FREE_LIST(evhw->base.ec_event_handler, ecore_event_handler_del);
}
static void
_e_video_hwc_windows_ec_event_init(E_Video_Hwc_Windows *evhw)
{
- E_Client *ec;
-
- ec = evhw->base.ec;
-
- evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW,
- _e_video_cb_evas_show, evhw);
-
evhw->hook_subsurf_create =
e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE,
_e_video_hwc_windows_cb_hook_subsurface_create, evhw);