--- /dev/null
+#include "e_video_internal.h"
+
+typedef struct _E_Video_External E_Video_External;
+
+struct _E_Video_External
+{
+ E_Video_Comp_Iface base;
+ E_Client *ec;
+};
+
+static void
+_e_video_external_iface_destroy(E_Video_Comp_Iface *iface)
+{
+ E_Video_External *evs;
+
+ evs = container_of(iface, E_Video_External, base);
+
+ if (!e_object_is_del(E_OBJECT(evs->ec)))
+ {
+ /* 'ec->comp_data' is supposed to be freed when ec is deleted. */
+ evs->ec->comp_data->video_client = 0;
+ }
+
+ free(evs);
+}
+
+static void
+_e_video_external_init(E_Client *ec)
+{
+ /* Set video_client flag so that 'e_comp_wl' can ignore it. */
+ ec->comp_data->video_client = 1;
+}
+
+EINTERN E_Video_Comp_Iface *
+e_video_external_iface_create(E_Client *ec)
+{
+ E_Video_External *evs;
+
+ INF("Intializing SW Compositing mode");
+
+ evs = E_NEW(E_Video_External, 1);
+ if (!evs)
+ {
+ ERR("Failed to create E_Video_External");
+ return NULL;
+ }
+
+ _e_video_external_init(ec);
+
+ evs->ec = ec;
+ evs->base.destroy = _e_video_external_iface_destroy;
+
+ return &evs->base;
+}
E_Output *e_output;
E_Video_Layer *layer;
E_Plane *e_plane;
- Eina_Bool external_video;
Eina_List *ec_event_handler;
static Eina_Bool
_e_video_geometry_cal(E_Video_Hwc_Planes *evhp)
{
+ E_Zone *zone;
+ E_Client *topmost;
Eina_Rectangle screen = {0,};
Eina_Rectangle output_r = {0,}, input_r = {0,};
- const tdm_output_mode *mode = NULL;
- tdm_error tdm_err = TDM_ERROR_NONE;
/* get geometry information with buffer scale, transform and viewport. */
if (!_e_video_geometry_cal_viewport(evhp))
_e_video_geometry_cal_map(evhp);
- if (evhp->external_video)
- {
- tdm_err = tdm_output_get_mode(evhp->output, &mode);
- if (tdm_err != TDM_ERROR_NONE)
- return EINA_FALSE;
-
- if (mode == NULL)
- return EINA_FALSE;
-
- screen.w = mode->hdisplay;
- screen.h = mode->vdisplay;
- }
- else
- {
- E_Zone *zone;
- E_Client *topmost;
-
- topmost = e_comp_wl_topmost_parent_get(evhp->ec);
- EINA_SAFETY_ON_NULL_RETURN_VAL(topmost, EINA_FALSE);
+ topmost = e_comp_wl_topmost_parent_get(evhp->ec);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(topmost, EINA_FALSE);
- zone = e_comp_zone_xy_get(topmost->x, topmost->y);
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+ zone = e_comp_zone_xy_get(topmost->x, topmost->y);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
- screen.w = zone->w;
- screen.h = zone->h;
- }
+ screen.w = zone->w;
+ screen.h = zone->h;
e_comp_wl_video_buffer_size_get(evhp->ec, &input_r.w, &input_r.h);
// when topmost is not mapped, input size can be abnormal.
static Eina_Bool
_e_video_can_commit(E_Video_Hwc_Planes *evhp)
{
- if (!evhp->external_video)
- {
- if (e_output_dpms_get(evhp->e_output))
- return EINA_FALSE;
- }
+ if (e_output_dpms_get(evhp->e_output))
+ return EINA_FALSE;
return _e_video_is_visible(evhp);
}
evhp->ec = ec;
evhp->window = e_client_util_win_get(ec);
- if (e_config->eom_enable == EINA_TRUE)
- {
- evhp->external_video = e_eom_is_ec_external(ec);
- if (evhp->external_video)
- {
- tdm_error ret;
- unsigned int index = 0;
-
- evhp->output = e_eom_tdm_output_by_ec_get(ec);
- EINA_SAFETY_ON_NULL_RETURN_VAL(evhp->output, EINA_FALSE);
-
- ret = tdm_output_get_pipe(evhp->output, &index);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
-
- evhp->e_output = e_output_find_by_index(index);
- EINA_SAFETY_ON_NULL_RETURN_VAL(evhp->e_output, EINA_FALSE);
-
- ec->comp_data->video_client = 1;
-
- return EINA_TRUE;
- }
- }
-
EINA_SAFETY_ON_NULL_RETURN_VAL(evhp->ec->zone, EINA_FALSE);
evhp->e_output = e_output_find(evhp->ec->zone->output_id);
if (e_object_is_del(E_OBJECT(ec)))
return ECORE_CALLBACK_PASS_ON;
- /* skip external client buffer if its top parent is not current for eom anymore */
- if (evhp->external_video && e_eom_is_ec_external(ec))
- {
- VWR("skip external buffer");
- return ECORE_CALLBACK_PASS_ON;
- }
-
_e_video_render(evhp, __FUNCTION__);
return ECORE_CALLBACK_PASS_ON;
if (ec == e_comp_wl_topmost_parent_get(evhp->ec))
{
- /* skip external client buffer if its top parent is not current for eom anymore */
- if (evhp->external_video && e_eom_is_ec_external(ec))
- {
- VWR("skip external buffer");
- return ECORE_CALLBACK_PASS_ON;
- }
-
VIN("video need rendering..");
e_comp_wl_viewport_apply(ec);
_e_video_render(evhp, __FUNCTION__);