src/include/e_object.h \
src/include/e_output.h \
src/include/e_pixmap.h \
-src/include/e_plane.h \
src/include/e_pointer.h \
src/include/e_prefix.h \
-src/include/e_plane_renderer.h \
src/include/e_screensaver.h \
src/include/e_theme.h \
src/include/e_utils.h \
src/include/e_hwc.h \
src/include/e_hwc_windows.h \
src/include/e_hwc_window.h \
-src/include/e_hwc_planes.h \
src/include/e_explicit_sync.h \
src/include/e_egl_sync.h \
src/include/e_info_server_input.h \
src/bin/displaymgr/e_display.c \
src/bin/displaymgr/e_output.c \
src/bin/displaymgr/e_scale.c \
-src/bin/displaymgr/e_plane_renderer.c \
-src/bin/displaymgr/e_plane.c \
src/bin/displaymgr/e_hwc.c \
-src/bin/displaymgr/e_hwc_planes.c \
src/bin/displaymgr/e_hwc_windows.c \
src/bin/displaymgr/e_hwc_window.c \
src/bin/displaymgr/e_hwc_window_queue.c \
src/bin/displaymgr/video/e_video_hwc.c \
-src/bin/displaymgr/video/e_video_hwc_planes.c \
src/bin/displaymgr/video/e_video_hwc_windows.c \
src/bin/displaymgr/video/e_video_external.c \
src/bin/displaymgr/video/e_video_fallback.c \
#include "e_zone_intern.h"
#include "e_config_intern.h"
#include "e_screensaver_intern.h"
-#include "e_hwc_planes_intern.h"
#include "e_server_intern.h"
#include "e_display_intern.h"
if (e_comp->hwc)
{
- if (conf->hwc_reuse_cursor_buffer) e_comp->hwc_reuse_cursor_buffer = EINA_TRUE;
-
- if (conf->hwc_use_multi_plane) e_comp_hwc_multi_plane_set(EINA_TRUE);
- if (conf->hwc_sync_mode_change) e_comp->hwc_sync_mode_change = EINA_TRUE;
- if (conf->hwc_use_detach) e_comp->hwc_use_detach = EINA_TRUE;
- if (conf->hwc_ignore_primary) e_comp->hwc_ignore_primary = EINA_TRUE;
if (conf->hwc_send_redraw_request) e_comp->hwc_send_redraw_request = EINA_TRUE;
}
_e_comp_hwc_comp_override_set(Eina_Bool set)
{
E_Output *primary_output;
- E_Hwc *hwc;
primary_output = e_display_primary_output_get();
EINA_SAFETY_ON_NULL_RETURN(primary_output);
- hwc = primary_output->hwc;
- EINA_SAFETY_ON_NULL_RETURN(hwc);
-
- if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
- e_hwc_windows_comp_override_set(primary_output->hwc, set);
+ e_hwc_windows_comp_override_set(primary_output->hwc, set);
}
E_API void
EINTERN Eina_Bool
e_comp_is_on_overlay(E_Client *ec)
{
- Eina_List *l, *ll;
- E_Output *eout;
- E_Plane *ep;
E_Hwc_Window *hwc_window;
- E_Zone *zone;
EINA_SAFETY_ON_TRUE_RETURN_VAL(!ec, EINA_FALSE);
- zone = e_comp_zone_find_by_ec(ec);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!zone, EINA_FALSE);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(!zone->output_id, EINA_FALSE);
-
- eout = e_output_find(zone->output_id);
- if (!eout) return EINA_FALSE;
- if (e_hwc_policy_get(eout->hwc) == E_HWC_POLICY_PLANES)
- {
- if (!e_hwc_mode_get(eout->hwc)) return EINA_FALSE;
-
- EINA_LIST_FOREACH_SAFE(eout->planes, l, ll, ep)
- {
- E_Client *overlay_ec = ep->ec;
- if (overlay_ec == ec) return EINA_TRUE;
- }
- }
- else
- {
- hwc_window = ec->hwc_window;
- if (!hwc_window) return EINA_FALSE;
+ hwc_window = ec->hwc_window;
+ if (!hwc_window) return EINA_FALSE;
- if (e_hwc_window_is_on_hw_overlay(hwc_window)) return EINA_TRUE;
- }
+ if (e_hwc_window_is_on_hw_overlay(hwc_window)) return EINA_TRUE;
return EINA_FALSE;
}
return e_comp->hwc_prefer_gbm;
}
-/* get the hwc_ignore_primary value */
-EINTERN Eina_Bool
-e_comp_hwc_ignore_primary(void)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, EINA_FALSE);
-
- return e_comp->hwc_ignore_primary;
-}
-
-/* get the hwc_use_detach value */
-EINTERN Eina_Bool
-e_comp_hwc_use_detach(void)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, EINA_FALSE);
-
- return e_comp->hwc_use_detach;
-}
-
-/* get the hwc_reuse_cursor_buffer value */
-EINTERN Eina_Bool
-e_comp_hwc_reuse_cursor_buffer(void)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, EINA_FALSE);
-
- return e_comp->hwc_reuse_cursor_buffer;
-}
-
-/* get the hwc_sync_mode_change value */
-EINTERN Eina_Bool
-e_comp_hwc_sync_mode_change(void)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, EINA_FALSE);
-
- return e_comp->hwc_sync_mode_change;
-}
-
/* set the deactive value to the only primary output */
EINTERN void
e_comp_hwc_deactive_set(Eina_Bool set)
return e_hwc_deactive_get(primary_output->hwc);
}
-/* set the multi_plane value to the only primary output */
-EINTERN void
-e_comp_hwc_multi_plane_set(Eina_Bool set)
-{
- E_Output *primary_output = NULL;
-
- primary_output = e_display_primary_output_get();
- EINA_SAFETY_ON_NULL_RETURN(primary_output);
-
- e_hwc_planes_multi_plane_set(primary_output->hwc, EINA_TRUE);
-}
-
-/* get the multi_plane value to the only primary output */
-EINTERN Eina_Bool
-e_comp_hwc_multi_plane_get(void)
-{
- E_Output *primary_output = NULL;
-
- primary_output = e_display_primary_output_get();
- EINA_SAFETY_ON_NULL_RETURN_VAL(primary_output, EINA_FALSE);
-
- return e_hwc_planes_multi_plane_get(primary_output->hwc);
-}
-
/* end the hwc policy at the primary output */
EINTERN void
e_comp_hwc_end(const char *location)
hwc = primary_output->hwc;
EINA_SAFETY_ON_NULL_RETURN(hwc);
- if (hwc->hwc_policy == E_HWC_POLICY_PLANES)
- e_hwc_planes_end(primary_output->hwc, location);
- else if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
- e_hwc_windows_client_type_override(primary_output->hwc);
+ e_hwc_windows_client_type_override(primary_output->hwc);
}
EINTERN void
hwc = output->hwc;
EINA_SAFETY_ON_NULL_RETURN(hwc);
- if (hwc->hwc_policy == E_HWC_POLICY_PLANES)
- {
- e_hwc_planes_client_end(output->hwc, ec, location);
- }
- else if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
- {
- hwc_window = ec->hwc_window;
- EINA_SAFETY_ON_NULL_RETURN(hwc_window);
+ hwc_window = ec->hwc_window;
+ EINA_SAFETY_ON_NULL_RETURN(hwc_window);
- e_hwc_window_client_type_override(hwc_window);
- }
+ e_hwc_window_client_type_override(hwc_window);
}
EINTERN Eina_Bool
EINTERN Eina_Bool e_comp_hwc_is_configured(void);
EINTERN Eina_Bool e_comp_hwc_send_redraw_request(void);
EINTERN Eina_Bool e_comp_hwc_is_prefer_gbm(void);
-EINTERN Eina_Bool e_comp_hwc_ignore_primary(void);
-EINTERN Eina_Bool e_comp_hwc_use_detach(void);
-EINTERN Eina_Bool e_comp_hwc_reuse_cursor_buffer(void);
-EINTERN Eina_Bool e_comp_hwc_sync_mode_change(void);
EINTERN void e_comp_hwc_deactive_set(Eina_Bool set);
EINTERN Eina_Bool e_comp_hwc_deactive_get(void);
-EINTERN void e_comp_hwc_multi_plane_set(Eina_Bool set);
-EINTERN Eina_Bool e_comp_hwc_multi_plane_get(void);
EINTERN void e_comp_hwc_client_end(E_Client *ec, const char *location);
EINTERN void e_comp_hwc_end(const char *location);
EINTERN Eina_Bool e_comp_util_client_is_fullscreen(const E_Client *ec);
-EINTERN void e_comp_hook_call(E_Comp_Hook_Point hookpoint, void *data EINA_UNUSED);
-
EINTERN Eina_Bool e_comp_client_zone_is_displaying(E_Client *ec);
EINTERN void e_comp_idler_before(void);
EINTERN void e_comp_visibility_calculation_set(Eina_Bool set);
E_CONFIG_VAL(D, T, nocomp_use_timer, UCHAR);
E_CONFIG_VAL(D, T, nocomp_begin_timeout, DOUBLE);
E_CONFIG_VAL(D, T, hwc, UCHAR);
- E_CONFIG_VAL(D, T, hwc_use_multi_plane, UCHAR);
E_CONFIG_VAL(D, T, hwc_deactive, UCHAR);
- E_CONFIG_VAL(D, T, hwc_reuse_cursor_buffer, UCHAR);
- E_CONFIG_VAL(D, T, hwc_sync_mode_change, UCHAR);
- E_CONFIG_VAL(D, T, hwc_ignore_primary, UCHAR);
- E_CONFIG_VAL(D, T, hwc_use_detach, UCHAR);
E_CONFIG_VAL(D, T, hwc_send_redraw_request, UCHAR);
E_CONFIG_VAL(D, T, hwc_prefer_gbm, UCHAR);
E_CONFIG_VAL(D, T, use_native_type_buffer, UCHAR);
cfg->nocomp_use_timer = 0;
cfg->nocomp_begin_timeout = 2.0;
cfg->hwc = 0;
- cfg->hwc_use_multi_plane = 0;
cfg->hwc_deactive = 0;
- cfg->hwc_reuse_cursor_buffer = 0;
- cfg->hwc_sync_mode_change = 0;
- cfg->hwc_ignore_primary = 0;
- cfg->hwc_use_detach = 0;
cfg->hwc_send_redraw_request = 0;
cfg->hwc_prefer_gbm = 0;
cfg->use_native_type_buffer = 0; // 1 if use_native(wl_buffer), 0 if use_tbm(tbm_surface)
Eldbus_Object *obj;
/* topvwins */
- int use_gl, use_hwc, use_multi_layer, hwc, hwc_windows;
+ int use_gl, use_hwc, hwc;
int use_buffer_flush, deiconify_approve;
int config_engine;
const char *engine;
Eina_List *mode_list;
int gl;
- /* pending_commit */
- Eina_List *pending_commit_list;
-
/* layer fps */
Eina_List *fps_list;
int focused;
int hwc; // hwc enable/disable
int hwc_policy; // hwc policy
- int pl_zpos; // hwc value : (hwc_windows: hwc window state) (hwc_planes: zpos of the plane)
+ int pl_zpos; // hwc value : (hwc_windows: hwc window state)
Ecore_Window parent_id;
const char *layer_name; // layer name
Eina_Bool has_input_region;
const char *name;
} E_Info_Output_Mode;
-typedef struct _E_Pending_Commit_Info
-{
- unsigned int plane;
- int zpos;
- unsigned int data;
- unsigned int tsurface;
-} E_Pending_Commit_Info;
-
typedef struct _E_Fps_Info
{
E_Info_Fps_Type type;
res = eldbus_message_error_get(msg, &name, &text);
EINA_SAFETY_ON_TRUE_GOTO(res, finish);
- res = eldbus_message_arguments_get(msg, "iia("VALUE_TYPE_FOR_TOPVWINS")", &e_info_client.hwc, &e_info_client.hwc_windows, &array);
+ res = eldbus_message_arguments_get(msg, "ia("VALUE_TYPE_FOR_TOPVWINS")", &e_info_client.hwc, &array);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
_e_win_info_make_array(array);
res = eldbus_message_error_get(msg, &name, &text);
EINA_SAFETY_ON_TRUE_GOTO(res, finish);
- res = eldbus_message_arguments_get(msg, "iiiiisiiia("VALUE_TYPE_FOR_TOPVWINS")",
- &e_info_client.use_gl, &e_info_client.use_hwc, &e_info_client.use_multi_layer,
- &e_info_client.hwc, &e_info_client.hwc_windows,
+ res = eldbus_message_arguments_get(msg, "iiisiiia("VALUE_TYPE_FOR_TOPVWINS")",
+ &e_info_client.use_gl, &e_info_client.use_hwc,
+ &e_info_client.hwc,
&engine, &e_info_client.config_engine,
&e_info_client.use_buffer_flush, &e_info_client.deiconify_approve,
&array);
res = eldbus_message_error_get(msg, &name, &text);
EINA_SAFETY_ON_TRUE_GOTO(res, finish);
- res = eldbus_message_arguments_get(msg, "iia("VALUE_TYPE_FOR_TOPVWINS")", &e_info_client.hwc, &e_info_client.hwc_windows, &array);
+ res = eldbus_message_arguments_get(msg, "ia("VALUE_TYPE_FOR_TOPVWINS")", &e_info_client.hwc, &array);
EINA_SAFETY_ON_FALSE_GOTO(res, finish);
_e_win_info_make_array(array);
printf("--------------------------------------------[ topvwins ]------------------------------------------------------------------------------\n");
else
printf("--------------------------------------------[ topwins ]------------------------------------------------------------------------------\n");
- if (e_info_client.hwc_windows)
- printf(" No Win_ID RcsID PID T w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
- else
- printf(" No Win_ID RcsID PID T w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent TP Title\n");
+ printf(" No Win_ID RcsID PID T w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
printf("--------------------------------------------------------------------------------------------------------------------------------------\n");
if (!e_info_client.win_list)
if (win->hwc >= 0)
{
- if (win->hwc_policy == E_HWC_POLICY_WINDOWS) // hwc windows
- {
- switch(win->pl_zpos)
- {
- case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
- case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
- case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
- case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
- case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
- default: snprintf(tmp, sizeof(tmp), " - "); break;
- }
- }
- else // hwc planes
+ switch(win->pl_zpos)
{
- if ((!win->iconic) && (win->frame_visible))
- {
- if (win->pl_zpos == -999)
- snprintf(tmp, sizeof(tmp), " - ");
- else
- {
- if (win->hwc) snprintf(tmp, sizeof(tmp), "hwc@%i", win->pl_zpos);
- else snprintf(tmp, sizeof(tmp), "comp@%i", win->pl_zpos);
- }
- }
- else
- snprintf(tmp, sizeof(tmp), " - ");
+ case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
+ case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
+ case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
+ case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
+ case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
+ default: snprintf(tmp, sizeof(tmp), " - "); break;
}
}
else
if (e_info_client.use_hwc)
{
if (e_info_client.hwc)
- {
- printf("HWC: ");
- if (e_info_client.hwc_windows)
- printf("hwc windows policy\n");
- else
- printf("hwc planes policy and multiple plane is %s\n", e_info_client.use_multi_layer ? "on":"off");
- }
+ printf("HWC: hwc windows policy\n");
else
printf("HWC: off");
}
printf("%d Top level windows in evas object list\n", eina_list_count(e_info_client.win_list));
printf("--------------------------------------[ topvwins ]----------------------------------------------------------------------------------\n");
- if (e_info_client.hwc_windows)
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
- else
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent TP Title\n");
+ printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
printf("------------------------------------------------------------------------------------------------------------------------------------\n");
if (!e_info_client.win_list)
if (win->hwc >= 0)
{
- if (win->hwc_policy == E_HWC_POLICY_WINDOWS) // hwc windows
- {
- switch(win->pl_zpos)
- {
- case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
- case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
- case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
- case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
- case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
- default: snprintf(tmp, sizeof(tmp), " - "); break;
- }
- }
- else // hwc planes
+ switch(win->pl_zpos)
{
- if ((!win->iconic) && (win->frame_visible))
- {
- if (win->pl_zpos == -999)
- snprintf(tmp, sizeof(tmp), " - ");
- else
- {
- if (win->hwc) snprintf(tmp, sizeof(tmp), "hwc@%i", win->pl_zpos);
- else snprintf(tmp, sizeof(tmp), "comp@%i", win->pl_zpos);
- }
- }
- else
- snprintf(tmp, sizeof(tmp), " - ");
+ case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
+ case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
+ case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
+ case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
+ case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
+ default: snprintf(tmp, sizeof(tmp), " - "); break;
}
}
else
printf("%d Top level windows\n", eina_list_count(e_info_client.win_list));
printf("--------------------------------------[ topwins ]----------------------------------------------------------------------------------\n");
- if (e_info_client.hwc_windows)
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
- else
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent TP Title\n");
+ printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
printf("------------------------------------------------------------------------------------------------------------------------------------\n");
if (!e_info_client.win_list)
if (win->hwc >= 0)
{
- if (win->hwc_policy == E_HWC_POLICY_WINDOWS) // hwc windows
- {
- switch(win->pl_zpos)
- {
- case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
- case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
- case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
- case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
- case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
- default: snprintf(tmp, sizeof(tmp), " - "); break;
- }
- }
- else // hwc planes
+ switch(win->pl_zpos)
{
- if ((!win->iconic) && (win->frame_visible))
- {
- if (win->pl_zpos == -999)
- snprintf(tmp, sizeof(tmp), " - ");
- else
- {
- if (win->hwc) snprintf(tmp, sizeof(tmp), "hwc@%i", win->pl_zpos);
- else snprintf(tmp, sizeof(tmp), "comp@%i", win->pl_zpos);
- }
- }
- else
- snprintf(tmp, sizeof(tmp), " - ");
+ case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
+ case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
+ case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
+ case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
+ case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
+ default: snprintf(tmp, sizeof(tmp), " - "); break;
}
}
else
}
-static void
-_e_info_client_proc_show_plane_state(int argc, char **argv)
-{
- if (!_e_info_client_eldbus_message("show_plane_state", NULL))
- return;
-
- printf("e20 print planes state with eina_log\n");
-}
-
-static E_Pending_Commit_Info *
-_e_pending_commit_info_new(unsigned int plane, int zpos, unsigned int data, unsigned int tsurface)
-{
- E_Pending_Commit_Info *pending_commit = NULL;
-
- pending_commit = E_NEW(E_Pending_Commit_Info, 1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(pending_commit, NULL);
-
- pending_commit->plane = plane;
- pending_commit->zpos = zpos;
- pending_commit->data = data;
- pending_commit->tsurface = tsurface;
-
- return pending_commit;
-}
-
-static void
-_e_pending_commit_info_free(E_Pending_Commit_Info *pending_commit)
-{
- E_FREE(pending_commit);
-}
-
-static void
-_cb_pending_commit_info_get(const Eldbus_Message *msg)
-{
- const char *name = NULL, *text = NULL;
- Eldbus_Message_Iter *array, *eldbus_msg;
- Eina_Bool res;
-
- res = eldbus_message_error_get(msg, &name, &text);
- EINA_SAFETY_ON_TRUE_GOTO(res, finish);
-
- res = eldbus_message_arguments_get(msg, "a("VALUE_TYPE_FOR_PENDING_COMMIT")", &array);
- EINA_SAFETY_ON_FALSE_GOTO(res, finish);
-
- while (eldbus_message_iter_get_and_next(array, 'r', &eldbus_msg))
- {
- E_Pending_Commit_Info *pending_commit = NULL;
- unsigned int plane, tsurface, data;
- int zpos;
- res = eldbus_message_iter_arguments_get(eldbus_msg,
- VALUE_TYPE_FOR_PENDING_COMMIT,
- &plane,
- &zpos,
- &data,
- &tsurface);
- if (!res)
- {
- printf("Failed to get pending_commit info\n");
- continue;
- }
-
- pending_commit = _e_pending_commit_info_new(plane, zpos, data, tsurface);
- if (!pending_commit) continue;
-
- e_info_client.pending_commit_list = eina_list_append(e_info_client.pending_commit_list, pending_commit);
- }
-
-finish:
- if ((name) || (text))
- {
- printf("errname:%s errmsg:%s\n", name, text);
- }
-}
-
-static void
-_e_info_client_proc_show_pending_commit(int argc, char **argv)
-{
- Eina_List *l;
- int i = 0;
- E_Pending_Commit_Info *pending_commit;
-
- if (!_e_info_client_eldbus_message("show_pending_commit", _cb_pending_commit_info_get))
- return;
-
- printf("----------------------------[ pending commit ]-----------------------------------\n");
- printf(" No Plane Zpos Data tsurface\n");
- printf("---------------------------------------------------------------------------------\n");
-
- if (!e_info_client.pending_commit_list)
- {
- printf("no peding commit\n");
- return;
- }
-
- EINA_LIST_FOREACH(e_info_client.pending_commit_list, l, pending_commit)
- {
- i++;
- printf("%3d %12zx %5d %12zx %12zx\n",
- i,
- (uintptr_t)pending_commit->plane,
- pending_commit->zpos,
- (uintptr_t)pending_commit->data,
- (uintptr_t)pending_commit->tsurface);
- }
-
- E_FREE_LIST(e_info_client.pending_commit_list, _e_pending_commit_info_free);
-}
-
static E_Fps_Info *
_e_fps_info_new(E_Info_Fps_Type type, const char *output, int zpos, unsigned int window, double fps)
{
res_id, pid, x, y, w, h, border_size, alpha ? 32 : 24,
focused, opaque, obscured, iconic, visible ? "Visible" : "Not visible",
frame_visible, redirected ? "yes" : "no", layer_name);
- if (e_info_client.hwc_windows)
- printf(" HWC_ST:");
- else
- printf(" PL@ZPos:");
+ printf(" HWC_ST:");
if (e_info_client.hwc)
{
- if (e_info_client.hwc_windows) // hwc windows
+ switch(pl_zpos)
{
- switch(pl_zpos)
- {
- case E_HWC_WINDOW_STATE_NONE: printf(" NO "); break;
- case E_HWC_WINDOW_STATE_CLIENT: printf(" CL "); break;
- case E_HWC_WINDOW_STATE_DEVICE: printf(" DV "); break;
- case E_HWC_WINDOW_STATE_VIDEO: printf(" VD "); break;
- case E_HWC_WINDOW_STATE_CURSOR: printf(" CS "); break;
- default: printf(" - "); break;
- }
- }
- else // hwc planes
- {
- if (hwc >= 0)
- {
- if ((!iconic) && (frame_visible))
- {
- if (pl_zpos == -999)
- printf(" - ");
- else
- {
- if (hwc) printf(" hwc@%i\n", pl_zpos);
- else printf(" comp@%i\n", pl_zpos);
- }
- }
- else
- printf(" - \n");
- }
- else
- {
- printf(" - \n");
- }
+ case E_HWC_WINDOW_STATE_NONE: printf(" NO "); break;
+ case E_HWC_WINDOW_STATE_CLIENT: printf(" CL "); break;
+ case E_HWC_WINDOW_STATE_DEVICE: printf(" DV "); break;
+ case E_HWC_WINDOW_STATE_VIDEO: printf(" VD "); break;
+ case E_HWC_WINDOW_STATE_CURSOR: printf(" CS "); break;
+ default: printf(" - "); break;
}
}
else
res = eldbus_message_error_get(msg, &name, &text);
EINA_SAFETY_ON_TRUE_GOTO(res, finish);
- res = eldbus_message_arguments_get(msg, "iiiiisiiia("VALUE_TYPE_FOR_TOPVWINS")",
- &e_info_client.use_gl, &e_info_client.use_hwc, &e_info_client.use_multi_layer,
- &e_info_client.hwc, &e_info_client.hwc_windows,
+ res = eldbus_message_arguments_get(msg, "iiisiiia("VALUE_TYPE_FOR_TOPVWINS")",
+ &e_info_client.use_gl, &e_info_client.use_hwc,
+ &e_info_client.hwc,
&engine, &e_info_client.config_engine,
&e_info_client.use_buffer_flush, &e_info_client.deiconify_approve,
&array);
if (e_info_client.use_hwc)
{
if (e_info_client.hwc)
- {
- printf("HWC: ");
- if (e_info_client.hwc_windows)
- printf("hwc windows policy\n");
- else
- printf("hwc planes policy and multiple plane is %s\n", e_info_client.use_multi_layer ? "on":"off");
- }
+ printf("HWC: hwc windows policy\n");
else
printf("HWC: off");
}
printf("%d Top level windows in view tree\n", eina_list_count(e_info_client.win_list));
printf("--------------------------------------[ topvwins ]----------------------------------------------------------------------------------\n");
- if (e_info_client.hwc_windows)
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
- else
- printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame PL@ZPos Parent TP Title\n");
+ printf(" No Win_ID RcsID PID w h x y L Zone Foc InReg Dep Opaq Vsbt Icon Vis Map Frame HWC_ST Parent TP Title\n");
printf("------------------------------------------------------------------------------------------------------------------------------------\n");
if (!e_info_client.win_list)
if (win->hwc >= 0)
{
- if (win->hwc_policy == E_HWC_POLICY_WINDOWS) // hwc windows
- {
- switch(win->pl_zpos)
- {
- case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
- case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
- case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
- case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
- case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
- default: snprintf(tmp, sizeof(tmp), " - "); break;
- }
- }
- else // hwc planes
+ switch(win->pl_zpos)
{
- if ((!win->iconic) && (win->frame_visible))
- {
- if (win->pl_zpos == -999)
- snprintf(tmp, sizeof(tmp), " - ");
- else
- {
- if (win->hwc) snprintf(tmp, sizeof(tmp), "hwc@%i", win->pl_zpos);
- else snprintf(tmp, sizeof(tmp), "comp@%i", win->pl_zpos);
- }
- }
- else
- snprintf(tmp, sizeof(tmp), " - ");
+ case E_HWC_WINDOW_STATE_NONE: snprintf(tmp, sizeof(tmp), " NO "); break;
+ case E_HWC_WINDOW_STATE_CLIENT: snprintf(tmp, sizeof(tmp), " CL "); break;
+ case E_HWC_WINDOW_STATE_DEVICE: snprintf(tmp, sizeof(tmp), " DV "); break;
+ case E_HWC_WINDOW_STATE_VIDEO: snprintf(tmp, sizeof(tmp), " VD "); break;
+ case E_HWC_WINDOW_STATE_CURSOR: snprintf(tmp, sizeof(tmp), " CS "); break;
+ default: snprintf(tmp, sizeof(tmp), " - "); break;
}
}
else
_e_info_client_proc_output_mode
},
{
- "show_plane_state",
- NULL,
- "Print state of plane",
- _e_info_client_proc_show_plane_state
- },
- {
- "show_pending_commit",
- NULL,
- "Print state of pending commit",
- _e_info_client_proc_show_pending_commit
- },
- {
"fps",
FPS_USAGE,
"Print FPS in every sec per",
static void
_e_info_server_ec_hwc_info_get(E_Client *ec, int *hwc, int *hwc_policy, int *pl_zpos)
{
- Eina_List *l;
- E_Output *eout;
- E_Zone *zone;
- E_Plane *ep;
E_Hwc_Window *hwc_window = NULL;
*hwc = -1;
*hwc = 0;
- zone = e_comp_zone_find_by_ec(ec);
- if (!zone) return;
- eout = e_output_find(zone->output_id);
- if (!eout) return;
-
- *hwc_policy = e_hwc_policy_get(eout->hwc);
-
- if (*hwc_policy == E_HWC_POLICY_PLANES)
- {
- EINA_LIST_FOREACH(eout->planes, l, ep)
- {
- if (e_plane_is_fb_target(ep))
- *pl_zpos = ep->zpos;
-
- if (ep->ec == ec)
- {
- *hwc = 1;
- *pl_zpos = ep->zpos;
- break;
- }
- }
- }
- else
- {
- if (!ec->hwc_window) return;
- hwc_window = ec->hwc_window;
- if (e_hwc_window_is_on_hw_overlay(hwc_window))
- *hwc = 1;
+ if (!ec->hwc_window) return;
+ hwc_window = ec->hwc_window;
+ if (e_hwc_window_is_on_hw_overlay(hwc_window))
+ *hwc = 1;
- *pl_zpos = e_hwc_window_accepted_state_get(hwc_window);
- }
+ *pl_zpos = e_hwc_window_accepted_state_get(hwc_window);
}
static Eldbus_Message *
eldbus_message_iter_container_close(iter, array_of_ec);
}
-static int
-_e_info_server_is_hwc_windows()
-{
- E_Output *primary_output;
-
- primary_output = e_display_primary_output_get();
- if (!primary_output)
- return 0;
-
- if (e_hwc_policy_get(primary_output->hwc) == E_HWC_POLICY_WINDOWS)
- return 1;
-
- return 0;
-}
-
/* Method Handlers */
static Eldbus_Message *
_e_info_server_cb_window_info_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
eldbus_message_iter_basic_append(iter, 'i', e_comp_gl_get());
eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc);
- eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc_use_multi_plane);
eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
- eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
eldbus_message_iter_basic_append(iter, 's', ecore_evas_engine_name_get(e_comp->ee));
eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->engine);
eldbus_message_iter_basic_append(iter, 'i', e_config->use_buffer_flush);
Eldbus_Message_Iter *iter = eldbus_message_iter_get(reply);
eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
- eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
_msg_ecs_append(iter, EINA_TRUE);
Eldbus_Message_Iter *iter = eldbus_message_iter_get(reply);
eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
- eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
_msg_ecs_append(iter, EINA_FALSE);
Eldbus_Message_Iter *iter = eldbus_message_iter_get(reply);
eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
- eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
_msg_clients_append(iter, EINA_FALSE);
if (onoff == 0 || onoff == 1)
{
- e_plane_hwc_trace_debug(onoff);
e_hwc_windows_trace_debug(onoff);
}
return reply;
}
-static Eldbus_Message *
-e_info_server_cb_show_plane_state(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
-{
- Eina_List *output_l, *plane_l;
- E_Output *output = NULL;
- E_Plane *plane = NULL;
- Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-
- EINA_LIST_FOREACH(e_display_outputs_get(), output_l, output)
- {
- if (!output) continue;
-
- EINA_LIST_FOREACH(output->planes, plane_l, plane)
- {
- if (!plane) continue;
-
- e_plane_show_state(plane);
- }
- }
-
- return reply;
-}
-
-static void
-_msg_show_pending_commit_append(Eldbus_Message_Iter *iter)
-{
- Eina_List *output_l, *plane_l, *data_l;
- Eldbus_Message_Iter *array_of_pending_commit;
- E_Output *output = NULL;
- E_Plane *plane = NULL;
- E_Plane_Commit_Data *data = NULL;
-
- eldbus_message_iter_arguments_append(iter, "a("VALUE_TYPE_FOR_PENDING_COMMIT")", &array_of_pending_commit);
-
- EINA_LIST_FOREACH(e_display_outputs_get(), output_l, output)
- {
- if (!output) continue;
-
- EINA_LIST_FOREACH(output->planes, plane_l, plane)
- {
- if (!plane) continue;
-
- EINA_LIST_FOREACH(plane->commit_data_list, data_l, data)
- {
- Eldbus_Message_Iter* struct_of_pending_commit;
-
- if (!data) continue;
-
- eldbus_message_iter_arguments_append(array_of_pending_commit, "("VALUE_TYPE_FOR_PENDING_COMMIT")", &struct_of_pending_commit);
-
- eldbus_message_iter_arguments_append
- (struct_of_pending_commit, VALUE_TYPE_FOR_PENDING_COMMIT,
- (uintptr_t)plane,
- plane->zpos,
- (uintptr_t)data,
- (uintptr_t)data->tsurface);
-
- eldbus_message_iter_container_close(array_of_pending_commit, struct_of_pending_commit);
- }
- }
- }
-
- eldbus_message_iter_container_close(iter, array_of_pending_commit);
-}
-
-static Eldbus_Message *
-e_info_server_cb_show_pending_commit(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
-{
- Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-
- _msg_show_pending_commit_append(eldbus_message_iter_get(reply));
-
- return reply;
-}
-
static E_Client *
_e_info_server_find_client_by_win_id(uint64_t win_id)
{
static void
_msg_output_fps_append(Eldbus_Message_Iter *iter)
{
- Eina_List *output_l, *plane_l, *hwc_l;
+ Eina_List *output_l, *hwc_l;
Eldbus_Message_Iter *array_of_fps;
E_Hwc_Window *hwc_window = NULL;
E_Output *output = NULL;
- E_Plane *plane = NULL;
double fps = 0.0;
char output_name[30];
if (output->hwc)
{
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_WINDOWS)
+ if (e_hwc_windows_fps_get(output->hwc, &fps))
{
- if (e_hwc_windows_fps_get(output->hwc, &fps))
- {
- Eldbus_Message_Iter* struct_of_fps;
-
- eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
-
- eldbus_message_iter_arguments_append
- (struct_of_fps, VALUE_TYPE_FOR_FPS,
- E_INFO_FPS_TYPE_OUTPUT,
- output_name,
- -999,
- 0,
- fps);
-
- eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
- }
-
- EINA_LIST_FOREACH(output->hwc->hwc_windows, hwc_l, hwc_window)
- {
- E_Hwc_Window_State state;
- Eldbus_Message_Iter* struct_of_fps;
+ Eldbus_Message_Iter* struct_of_fps;
- if(!hwc_window) continue;
-
- state = e_hwc_window_accepted_state_get(hwc_window);
- if ((state == E_HWC_WINDOW_STATE_CLIENT) || (state == E_HWC_WINDOW_STATE_NONE)) continue;
- if (!e_hwc_window_fps_get(hwc_window, &fps)) continue;
-
- eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
-
- eldbus_message_iter_arguments_append
- (struct_of_fps, VALUE_TYPE_FOR_FPS,
- hwc_window->is_target ? E_INFO_FPS_TYPE_HWC_COMP : E_INFO_FPS_TYPE_HWC_WIN,
- output_name,
- hwc_window->zpos,
- hwc_window->is_target ? 0 : e_client_util_win_get(hwc_window->ec),
- fps);
-
- eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
- }
+ eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
+ eldbus_message_iter_arguments_append
+ (struct_of_fps, VALUE_TYPE_FOR_FPS,
+ E_INFO_FPS_TYPE_OUTPUT,
+ output_name,
+ -999,
+ 0,
+ fps);
+ eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
}
- else
+
+ EINA_LIST_FOREACH(output->hwc->hwc_windows, hwc_l, hwc_window)
{
- EINA_LIST_FOREACH(output->planes, plane_l, plane)
- {
- if (!plane) continue;
- if (!e_plane_fps_get(plane, &fps)) continue;
+ E_Hwc_Window_State state;
+ Eldbus_Message_Iter* struct_of_fps;
- Eldbus_Message_Iter* struct_of_fps;
+ if(!hwc_window) continue;
- eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
+ state = e_hwc_window_accepted_state_get(hwc_window);
+ if ((state == E_HWC_WINDOW_STATE_CLIENT) || (state == E_HWC_WINDOW_STATE_NONE)) continue;
- eldbus_message_iter_arguments_append
- (struct_of_fps, VALUE_TYPE_FOR_FPS,
- E_INFO_FPS_TYPE_LAYER,
- output_name,
- plane->zpos,
- 0,
- plane->fps);
+ if (!e_hwc_window_fps_get(hwc_window, &fps)) continue;
- eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
- }
+ eldbus_message_iter_arguments_append(array_of_fps, "("VALUE_TYPE_FOR_FPS")", &struct_of_fps);
+ eldbus_message_iter_arguments_append
+ (struct_of_fps, VALUE_TYPE_FOR_FPS,
+ hwc_window->is_target ? E_INFO_FPS_TYPE_HWC_COMP : E_INFO_FPS_TYPE_HWC_WIN,
+ output_name,
+ hwc_window->zpos,
+ hwc_window->is_target ? 0 : e_client_util_win_get(hwc_window->ec),
+ fps);
+ eldbus_message_iter_container_close(array_of_fps, struct_of_fps);
}
}
else
eldbus_message_iter_basic_append(iter, 'i', e_comp_gl_get());
eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc);
- eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->hwc_use_multi_plane);
eldbus_message_iter_basic_append(iter, 'i', e_comp->hwc);
- eldbus_message_iter_basic_append(iter, 'i', _e_info_server_is_hwc_windows());
eldbus_message_iter_basic_append(iter, 's', ecore_evas_engine_name_get(e_comp->ee));
eldbus_message_iter_basic_append(iter, 'i', e_comp_config_get()->engine);
eldbus_message_iter_basic_append(iter, 'i', e_config->use_buffer_flush);
//{ "method_name", arguments_from_client, return_values_to_client, _method_cb, ELDBUS_METHOD_FLAG },
static const Eldbus_Method methods[] = {
- { "get_window_info", NULL, ELDBUS_ARGS({"iiiiisiiia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_window_info_get, 0 },
- { "get_ec_info", NULL, ELDBUS_ARGS({"iia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}),_e_info_server_cb_ec_info_get, 0 },
- { "get_all_ec_info", NULL, ELDBUS_ARGS({"iia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}),_e_info_server_cb_all_ec_info_get, 0 },
- { "get_all_window_info", NULL, ELDBUS_ARGS({"iia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_all_window_info_get, 0 },
+ { "get_window_info", NULL, ELDBUS_ARGS({"iiisiiia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_window_info_get, 0 },
+ { "get_ec_info", NULL, ELDBUS_ARGS({"ia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}),_e_info_server_cb_ec_info_get, 0 },
+ { "get_all_ec_info", NULL, ELDBUS_ARGS({"ia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}),_e_info_server_cb_all_ec_info_get, 0 },
+ { "get_all_window_info", NULL, ELDBUS_ARGS({"ia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_all_window_info_get, 0 },
{ "get_zone_info", NULL, ELDBUS_ARGS({"("VALUE_TYPE_FOR_ZONE")", "array of zone"}), _e_info_server_cb_zone_info_get, 0 },
{ "compobjs", NULL, ELDBUS_ARGS({"a("SIGNATURE_COMPOBJS_CLIENT")", "array of comp objs"}), _e_info_server_cb_compobjs, 0 },
{ "subsurface", NULL, ELDBUS_ARGS({"a("SIGNATURE_SUBSURFACE")", "array of ec"}), _e_info_server_cb_subsurface, 0 },
{ "trace_message_damage", ELDBUS_ARGS({"i", "trace_message_damage"}), NULL, e_info_server_cb_damage_trace_message, 0},
{ "trace_message_blur", ELDBUS_ARGS({"i", "trace_message_damage"}), NULL, e_info_server_cb_blur_trace_message, 0},
{ "hwc", ELDBUS_ARGS({"i", "hwc"}), NULL, e_info_server_cb_hwc, 0},
- { "show_plane_state", NULL, NULL, e_info_server_cb_show_plane_state, 0},
- { "show_pending_commit", NULL, ELDBUS_ARGS({"a("VALUE_TYPE_FOR_PENDING_COMMIT")", "array of pending commit"}), e_info_server_cb_show_pending_commit, 0},
{ "get_fps_info", ELDBUS_ARGS({"s", "fps request"}), ELDBUS_ARGS({"a("VALUE_TYPE_FOR_FPS")", "array of fps"}), _e_info_server_cb_fps_info_get, 0},
{ "get_keymap", NULL, ELDBUS_ARGS({"hi", "keymap fd"}), _e_info_server_cb_keymap_info_get, 0},
{ "effect_control", ELDBUS_ARGS({"i", "effect_control"}), NULL, e_info_server_cb_effect_control, 0},
{ "input_region", ELDBUS_ARGS({"siiii", "options"}), ELDBUS_ARGS({"a(iiii)", "path"}), _e_info_server_cb_input_region, 0},
{ "hwc_wins", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"as", "hwc wins info"}), _e_info_server_cb_hwc_wins_info_get, 0 },
{ "screen_info", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"as", "screen info"}), _e_info_server_cb_screen_info_get, 0 },
- { "view_info", NULL, ELDBUS_ARGS({"iiiiisiiia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_view_info_get, 0 },
+ { "view_info", NULL, ELDBUS_ARGS({"iiisiiia("VALUE_TYPE_FOR_TOPVWINS")", "array of ec"}), _e_info_server_cb_view_info_get, 0 },
{ "focus_policy_ext_set", ELDBUS_ARGS({"i", "option"}), ELDBUS_ARGS({"bi", "isChanged and result"}), _e_info_server_cb_focus_policy_ext_set, 0 },
{ "focus_history", NULL, ELDBUS_ARGS({"a(ubbbs)", "history array"}), _e_info_server_cb_focus_history, 0 },
{ "init_device", ELDBUS_ARGS({"us", "device information"}), ELDBUS_ARGS({"s", "result message"}), _e_info_server_cb_init_device, 0},
#include "e_display_intern.h"
#include "e_hwc_intern.h"
#include "e_hwc_windows_intern.h"
-#include "e_hwc_planes_intern.h"
#include "e_utils_intern.h"
#include "e_scale_intern.h"
#include "e_comp_screen_intern.h"
}
}
-static tdm_layer *
-_e_display_video_tdm_layer_get(tdm_output *output)
-{
- int i, count = 0;
-#ifdef CHECKING_PRIMARY_ZPOS
- int primary_idx = 0, primary_zpos = 0;
- tdm_layer *primary_layer;
-#endif
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
-
- tdm_output_get_layer_count(output, &count);
- for (i = 0; i < count; i++)
- {
- tdm_layer *layer = tdm_output_get_layer(output, i, NULL);
- tdm_layer_capability capabilities = 0;
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_VIDEO)
- return layer;
- }
-
-#ifdef CHECKING_PRIMARY_ZPOS
- tdm_output_get_primary_index(output, &primary_idx);
- primary_layer = tdm_output_get_layer(output, primary_idx, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(primary_layer, NULL);
- tdm_layer_get_zpos(primary_layer, &primary_zpos);
-#endif
-
- for (i = 0; i < count; i++)
- {
- tdm_layer *layer = tdm_output_get_layer(output, i, NULL);
- tdm_layer_capability capabilities = 0;
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_OVERLAY)
- {
-#ifdef CHECKING_PRIMARY_ZPOS
- int zpos = 0;
- tdm_layer_get_zpos(layer, &zpos);
- if (zpos >= primary_zpos) continue;
-#endif
- return layer;
- }
- }
-
- return NULL;
-}
-
static E_Output *
_e_display_eoutput_get_by_toutput(tdm_output *output)
{
return NULL;
}
-static char *
-_layer_cap_to_str(tdm_layer_capability caps, tdm_layer_capability cap)
-{
- if (caps & cap)
- {
- if (cap == TDM_LAYER_CAPABILITY_CURSOR) return "cursor ";
- else if (cap == TDM_LAYER_CAPABILITY_PRIMARY) return "primary ";
- else if (cap == TDM_LAYER_CAPABILITY_OVERLAY) return "overlay ";
- else if (cap == TDM_LAYER_CAPABILITY_GRAPHIC) return "graphics ";
- else if (cap == TDM_LAYER_CAPABILITY_VIDEO) return "video ";
- else if (cap == TDM_LAYER_CAPABILITY_TRANSFORM) return "transform ";
- else if (cap == TDM_LAYER_CAPABILITY_RESEVED_MEMORY) return "reserved_memory ";
- else if (cap == TDM_LAYER_CAPABILITY_NO_CROP) return "no_crop ";
- else return "unknown";
- }
- return "";
-}
-
static void
_display_output_mode_change_cb(tdm_output *toutput, unsigned int index, void *user_data)
{
e_hwc_ecore_evas_deinit();
e_hwc_deinit();
e_hwc_windows_deinit();
- e_hwc_planes_deinit();
e_output_shutdown();
}
goto fail;
}
- if (!e_hwc_planes_init())
- {
- ERR("e_hwc_planes_init failed");
- goto fail;
- }
-
if (!e_hwc_windows_init())
{
ERR("e_hwc_windows_init failed");
{
E_Output *output;
tdm_output *toutput;
- tdm_layer *layer;
tdm_error error;
*count = 0;
if (!output)
return EINA_FALSE;
- if (e_hwc_policy_get(output->hwc) != E_HWC_POLICY_WINDOWS)
- {
- /* get the first suitable layer */
- layer = _e_display_video_tdm_layer_get(toutput);
- if (layer)
- {
- tdm_layer_get_available_formats(layer, formats, count);
- }
- else
- {
- *formats = sw_formats;
- *count = NUM_SW_FORMAT;
- }
- }
- else
+ error = tdm_hwc_get_video_supported_formats(output->hwc->thwc, formats, count);
+ if (error != TDM_ERROR_NONE)
{
- error = tdm_hwc_get_video_supported_formats(output->hwc->thwc, formats, count);
- if (error != TDM_ERROR_NONE)
- {
- *formats = sw_formats;
- *count = NUM_SW_FORMAT;
- }
+ *formats = sw_formats;
+ *count = NUM_SW_FORMAT;
}
return EINA_TRUE;
E_Display *display = g_display;
E_Output *output = NULL;
- E_Plane *plane = NULL;
Eina_List *l_o, *ll_o;
- Eina_List *l_l, *ll_l;
- tdm_output_conn_status conn_status;
int output_idx = 0;
- tdm_layer_capability layer_capabilities;
- char layer_cap[4096] = {0, };
int i;
const tdm_prop *tprops;
int count;
INF("HWC: HWC Information ==========================================================");
EINA_LIST_FOREACH_SAFE(display->outputs, l_o, ll_o, output)
{
- tdm_error err = TDM_ERROR_NONE;
-
if (!output) continue;
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
+ /* TODO: construct debug info for outputs managed by the hwc-wins */
+ INF("HWC: HWC Output(%d) managed by hwc-wins.", ++output_idx);
+
+ if (!e_hwc_windows_get_available_properties(output->hwc, &tprops, &count))
{
- err = tdm_output_get_conn_status(output->toutput, &conn_status);
- if (err != TDM_ERROR_NONE) continue;
- if (conn_status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED) continue;
-
- INF("HWC: HWC Output(%d):(x, y, w, h)=(%d, %d, %d, %d) Information.",
- ++output_idx,
- output->config.geom.x, output->config.geom.y, output->config.geom.w, output->config.geom.h);
- INF("HWC: num_layers=%d", output->plane_count);
- EINA_LIST_FOREACH_SAFE(output->planes, l_l, ll_l, plane)
- {
- if (!plane) continue;
- /* FIXME: hwc extension doesn't provide thing like layer */
- tdm_layer_get_capabilities(plane->tlayer, &layer_capabilities);
- snprintf(layer_cap, sizeof(layer_cap), "%s%s%s%s%s%s%s%s",
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_CURSOR),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_PRIMARY),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_OVERLAY),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_GRAPHIC),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_VIDEO),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_TRANSFORM),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_RESEVED_MEMORY),
- _layer_cap_to_str(layer_capabilities, TDM_LAYER_CAPABILITY_NO_CROP));
- INF("HWC: index=%d zpos=%d ec=%p %s",
- plane->index, plane->zpos,
- plane->ec?plane->ec:NULL,
- layer_cap);
- }
+ ERR("e_hwc_windows_get_video_available_properties failed");
+ return;
}
- else
- {
- /* TODO: construct debug info for outputs managed by the hwc-wins */
- INF("HWC: HWC Output(%d) managed by hwc-wins.", ++output_idx);
- if (!e_hwc_windows_get_available_properties(output->hwc, &tprops, &count))
- {
- ERR("e_hwc_windows_get_video_available_properties failed");
- return;
- }
- INF(">>>>>>>> Available UI props : count = %d", count);
- for (i = 0; i < count; i++)
- INF(" [%d] %s, %u", i, tprops[i].name, tprops[i].id);
+ INF(">>>>>>>> Available UI props : count = %d", count);
- if (!e_hwc_windows_get_video_available_properties(output->hwc, &tprops, &count))
- {
- ERR("e_hwc_windows_get_video_available_properties failed");
- return;
- }
- INF(">>>>>>>> Available VIDEO props : count = %d", count);
- for (i = 0; i < count; i++)
- INF(" [%d] %s, %u", i, tprops[i].name, tprops[i].id);
+ for (i = 0; i < count; i++)
+ INF(" [%d] %s, %u", i, tprops[i].name, tprops[i].id);
+
+ if (!e_hwc_windows_get_video_available_properties(output->hwc, &tprops, &count))
+ {
+ ERR("e_hwc_windows_get_video_available_properties failed");
+ return;
}
+
+ INF(">>>>>>>> Available VIDEO props : count = %d", count);
+
+ for (i = 0; i < count; i++)
+ INF(" [%d] %s, %u", i, tprops[i].name, tprops[i].id);
}
INF("HWC: =========================================================================");
}
#include "e_hwc_windows_intern.h"
-#include "e_hwc_planes_intern.h"
#include "e_hwc_intern.h"
#include "e_utils_intern.h"
#include "e_comp_screen_intern.h"
static int E_EVENT_HWC_PROPERTY_CHANGED = -1;
-static int _e_hwc_intercept_hooks_delete = 0;
-static int _e_hwc_intercept_hooks_walking = 0;
-
-static Eina_Inlist *_e_hwc_intercept_hooks[] =
-{
- [E_HWC_INTERCEPT_HOOK_PREPARE_PLANE] = NULL,
- [E_HWC_INTERCEPT_HOOK_END_ALL_PLANE] = NULL,
-};
-
static int _e_hwc_hooks_delete = 0;
static int _e_hwc_hooks_walking = 0;
};
static void
-_e_hwc_intercept_hooks_clean(void)
-{
- Eina_Inlist *l;
- E_Hwc_Intercept_Hook *ch;
- unsigned int x;
-
- for (x = 0; x < E_HWC_INTERCEPT_HOOK_LAST; x++)
- EINA_INLIST_FOREACH_SAFE(_e_hwc_intercept_hooks[x], l, ch)
- {
- if (!ch->delete_me) continue;
- _e_hwc_intercept_hooks[x] = eina_inlist_remove(_e_hwc_intercept_hooks[x], EINA_INLIST_GET(ch));
- free(ch);
- }
-}
-
-EINTERN Eina_Bool
-e_hwc_intercept_hook_call(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc *hwc)
-{
- E_Hwc_Intercept_Hook *ch;
- Eina_Bool ret = EINA_TRUE;
-
- _e_hwc_intercept_hooks_walking++;
- EINA_INLIST_FOREACH(_e_hwc_intercept_hooks[hookpoint], ch)
- {
- if (ch->delete_me) continue;
- if (!(ch->func(ch->data, hwc)))
- {
- ret = EINA_FALSE;
- break;
- }
- }
- _e_hwc_intercept_hooks_walking--;
- if ((_e_hwc_intercept_hooks_walking == 0) && (_e_hwc_intercept_hooks_delete > 0))
- _e_hwc_intercept_hooks_clean();
-
- return ret;
-}
-
-E_API E_Hwc_Intercept_Hook *
-e_hwc_intercept_hook_add(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc_Intercept_Hook_Cb func, const void *data)
-{
- E_Hwc_Intercept_Hook *ch;
-
- EINA_SAFETY_ON_TRUE_RETURN_VAL(hookpoint >= E_HWC_INTERCEPT_HOOK_LAST, NULL);
- ch = E_NEW(E_Hwc_Intercept_Hook, 1);
- if (!ch) return NULL;
- ch->hookpoint = hookpoint;
- ch->func = func;
- ch->data = (void*)data;
- _e_hwc_intercept_hooks[hookpoint] = eina_inlist_append(_e_hwc_intercept_hooks[hookpoint], EINA_INLIST_GET(ch));
- return ch;
-}
-
-E_API void
-e_hwc_intercept_hook_del(E_Hwc_Intercept_Hook *ch)
-{
- ch->delete_me = 1;
- if (_e_hwc_intercept_hooks_walking == 0)
- {
- _e_hwc_intercept_hooks[ch->hookpoint] = eina_inlist_remove(_e_hwc_intercept_hooks[ch->hookpoint], EINA_INLIST_GET(ch));
- free(ch);
- }
- else
- _e_hwc_intercept_hooks_delete++;
-}
-
-static void
_e_hwc_hooks_clean(void)
{
Eina_Inlist *l;
e_main_ts(buf);
}
- if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
- {
- if (!e_hwc_windows_ecore_evas_set(hwc, ee))
- {
- ERR("fail to e_hwc_windows_ecore_evas_set");
- e_hwc_ecore_evas_deinit();
- return EINA_FALSE;
- }
- }
- else
+ if (!e_hwc_windows_ecore_evas_set(hwc, ee))
{
- if (!e_hwc_planes_ecore_evas_set(hwc, ee))
- {
- ERR("fail to e_hwc_planes_ecore_evas_set");
- e_hwc_ecore_evas_deinit();
- return EINA_FALSE;
- }
+ ERR("fail to e_hwc_windows_ecore_evas_set");
+ e_hwc_ecore_evas_deinit();
+ return EINA_FALSE;
}
return EINA_TRUE;
hwc->commit_fence_fd = -1;
- /*
- * E20 has two hwc policy options.
- * 1. One is the E_HWC_POLICY_PLANES.
- * - E20 decides the hwc policy with the E_Planes associated with the tdm_layers.
- * - E20 manages how to set the surface(buffer) of the ec to the E_Plane.
- * 2. Another is the E_HWC_POLICY_WIDNOWS.
- * - The tdm-backend decides the hwc policy with the E_Hwc_Windows associated with the tdm_hwc_window.
- * - E20 asks to verify the composition types of the E_Hwc_Window of the ec.
- */
- if (!output->tdm_hwc)
+ hwc->hwc_policy = E_HWC_POLICY_WINDOWS;
+ EHINF("Use the HWC WINDOWS Policy.", hwc);
+
+ hwc->thwc = tdm_output_get_hwc(output->toutput, &error);
+ if (!hwc->thwc)
{
- hwc->hwc_policy = E_HWC_POLICY_PLANES;
- EHINF("Use the HWC PLANES Policy.", hwc);
+ EHERR("tdm_output_get_hwc failed", hwc);
+ goto fail;
}
- else
- {
- hwc->hwc_policy = E_HWC_POLICY_WINDOWS;
- EHINF("Use the HWC WINDOWS Policy.", hwc);
-
- hwc->thwc = tdm_output_get_hwc(output->toutput, &error);
- if (!hwc->thwc)
- {
- EHERR("tdm_output_get_hwc failed", hwc);
- goto fail;
- }
-
- error = tdm_hwc_get_capabilities(hwc->thwc, &hwc_caps);
- if (error != TDM_ERROR_NONE)
- {
- EHERR("fail to tdm_hwc_get_capabilities", hwc);
- goto fail;
- }
- /* hwc video capabilities */
- if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_STREAM)
- hwc->tdm_hwc_video_stream = EINA_TRUE;
- if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_SCALE)
- hwc->tdm_hwc_video_scale = EINA_TRUE;
- if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_TRANSFORM)
- hwc->tdm_hwc_video_transform = EINA_TRUE;
- if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_SCANOUT)
- hwc->tdm_hwc_video_scanout = EINA_TRUE;
- if (hwc_caps & TDM_HWC_CAPABILITY_FENCE)
- hwc->tdm_hwc_fence = EINA_TRUE;
+ error = tdm_hwc_get_capabilities(hwc->thwc, &hwc_caps);
+ if (error != TDM_ERROR_NONE)
+ {
+ EHERR("fail to tdm_hwc_get_capabilities", hwc);
+ goto fail;
}
+ /* hwc video capabilities */
+ if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_STREAM)
+ hwc->tdm_hwc_video_stream = EINA_TRUE;
+ if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_SCALE)
+ hwc->tdm_hwc_video_scale = EINA_TRUE;
+ if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_TRANSFORM)
+ hwc->tdm_hwc_video_transform = EINA_TRUE;
+ if (hwc_caps & TDM_HWC_CAPABILITY_VIDEO_SCANOUT)
+ hwc->tdm_hwc_video_scanout = EINA_TRUE;
+ if (hwc_caps & TDM_HWC_CAPABILITY_FENCE)
+ hwc->tdm_hwc_fence = EINA_TRUE;
+
tdm_output_get_available_size(output->toutput,
&hwc->output_available.min_w,
&hwc->output_available.min_h,
/* set the pirmary_output */
hwc->primary_output = primary_output;
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_WINDOWS)
+ /* create the target_window to the hwc */
+ hwc->target_hwc_window = e_hwc_windows_target_window_new(hwc, EINA_FALSE);
+ if (!hwc->target_hwc_window)
+ {
+ EHERR("e_hwc_windows_target_window_new failed", hwc);
+ goto fail;
+ }
+
+ if (primary_output)
{
- /* create the target_window to the hwc */
- hwc->target_hwc_window = e_hwc_windows_target_window_new(hwc, EINA_FALSE);
- if (!hwc->target_hwc_window)
+ hwc->root_target_hwc_window = e_hwc_windows_target_window_new(hwc, EINA_TRUE);
+ if (!hwc->root_target_hwc_window)
{
EHERR("e_hwc_windows_target_window_new failed", hwc);
goto fail;
}
-
- if (primary_output)
- {
- hwc->root_target_hwc_window = e_hwc_windows_target_window_new(hwc, EINA_TRUE);
- if (!hwc->root_target_hwc_window)
- {
- EHERR("e_hwc_windows_target_window_new failed", hwc);
- goto fail;
- }
- }
}
/* default active hwc */
if (!hwc) return;
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_WINDOWS)
+ if (hwc->target_hwc_window)
{
- if (hwc->target_hwc_window)
- {
- e_hwc_windows_target_window_del(hwc->target_hwc_window);
- hwc->target_hwc_window = NULL;
- }
+ e_hwc_windows_target_window_del(hwc->target_hwc_window);
+ hwc->target_hwc_window = NULL;
+ }
- if (hwc->root_target_hwc_window)
- {
- e_hwc_windows_target_window_del(hwc->root_target_hwc_window);
- hwc->root_target_hwc_window = NULL;
- }
+ if (hwc->root_target_hwc_window)
+ {
+ e_hwc_windows_target_window_del(hwc->root_target_hwc_window);
+ hwc->root_target_hwc_window = NULL;
}
e_hwc_window_queue_buffer_reference(&hwc->pp_update.queue_buffer_ref, NULL);
if (hwc->hwc_deactive == set) return;
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- e_hwc_planes_end(hwc, __FUNCTION__);
-
hwc->hwc_deactive = set;
if (set)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, NULL);
- if (e_hwc_policy_get(hwc) != E_HWC_POLICY_WINDOWS)
- {
- EHERR("fail to get target_buffer_queue. It is not E_HWC_POLICY_WINDOWS>", hwc);
- return NULL;
- }
-
return hwc->target_buffer_queue;
}
{
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, NULL);
- if (e_hwc_policy_get(hwc) != E_HWC_POLICY_WINDOWS)
- {
- EHERR("fail to get target_buffer_queue. It is not E_HWC_POLICY_WINDOWS", hwc);
- return NULL;
- }
-
if (width) *width = hwc->gsurface_width;
if (height) *height = hwc->gsurface_height;
if (format) *format = hwc->gsurface_format;
EINTERN Eina_Bool
e_client_hwc_on_plane(E_Client *ec)
{
- E_Output *output = NULL;
- E_Plane *plane = NULL;
- E_Client *plane_ec = NULL;
E_Hwc_Window *hwc_window;
- E_Zone *zone;
- Eina_List *l = NULL;
- Eina_Bool ret = EINA_FALSE;
EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
- zone = e_comp_zone_find_by_ec(ec);
- EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
-
- output = e_output_find(zone->output_id);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
-
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
-
- EINA_LIST_FOREACH(output->planes, l, plane)
- {
- plane_ec = e_plane_ec_get(plane);
- if (plane_ec == ec)
- {
- ret = EINA_TRUE;
- break;
- }
- }
- }
- else
- {
- hwc_window = ec->hwc_window;
- EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
- ret = e_hwc_window_is_on_hw_overlay(hwc_window);
- }
+ hwc_window = ec->hwc_window;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE);
- return ret;
+ return e_hwc_window_is_on_hw_overlay(hwc_window);
}
E_API Eina_Bool
E_Hwc_Sync_Callback *sync_callback;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, NULL);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc->hwc_policy == E_HWC_POLICY_WINDOWS, NULL);
sync_callback = E_NEW(E_Hwc_Sync_Callback, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(sync_callback, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, NULL);
hwc = hwc_window->hwc;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, NULL);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc->hwc_policy == E_HWC_POLICY_WINDOWS, NULL);
callback = E_NEW(E_Hwc_Presentation_Callback, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(callback, NULL);
return hwc->hwc_policy;
}
-
-E_API void
-e_hwc_hwc_use_multi_plane_set(E_Hwc *hwc, Eina_Bool set)
-{
- EINA_SAFETY_ON_NULL_RETURN(hwc);
-
- hwc->hwc_use_multi_plane = set;
-}
-
-E_API Eina_Bool
-e_hwc_hwc_use_multi_plane_get(E_Hwc *hwc)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
-
- return hwc->hwc_use_multi_plane;
-}
unsigned char delete_me : 1;
};
-struct _E_Hwc_Intercept_Hook
-{
- EINA_INLIST;
- E_Hwc_Intercept_Hook_Point hookpoint;
- E_Hwc_Intercept_Hook_Cb func;
- void *data;
- unsigned char delete_me : 1;
-};
-
struct _E_Hwc_Sync_Callback
{
E_Hwc *hwc;
EINTERN void e_hwc_del(E_Hwc *hwc);
EINTERN Eina_Bool e_hwc_client_is_above_hwc(E_Client *ec, E_Client *hwc_ec);
EINTERN int e_hwc_output_index_get(E_Hwc *hwc);
-EINTERN Eina_Bool e_client_hwc_on_plane(E_Client *ec);
EINTERN void e_hwc_norender_push(E_Hwc *hwc);
EINTERN void e_hwc_norender_pop(E_Hwc *hwc);
EINTERN E_Hwc_Hook *e_hwc_hook_add(E_Hwc_Hook_Point hookpoint, E_Hwc_Hook_Cb func, const void *data);
EINTERN void e_hwc_hook_del(E_Hwc_Hook *ch);
-EINTERN Eina_Bool e_hwc_intercept_hook_call(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc *hwc);
-
EINTERN Eina_Bool e_hwc_sync_callback_call(E_Hwc_Sync_Callback *sync_callback);
EINTERN Eina_Bool e_hwc_presentation_callback_call(E_Hwc_Presentation_Callback *callback);
+++ /dev/null
-#ifndef E_HWC_PLANES_INTERN_H
-#define E_HWC_PLANES_INTERN_H
-
-#include "e_intern.h"
-#include "e_hwc_planes.h"
-
-/* used by e_hwc */
-EINTERN Eina_Bool e_hwc_planes_init(void);
-EINTERN void e_hwc_planes_deinit(void);
-
-EINTERN void e_hwc_planes_client_end(E_Hwc *hwc, E_Client *ec, const char *location);
-EINTERN void e_hwc_planes_apply(E_Hwc *hwc);
-
-EINTERN void e_hwc_planes_multi_plane_set(E_Hwc *hwc, Eina_Bool set);
-EINTERN Eina_Bool e_hwc_planes_multi_plane_get(E_Hwc *hwc);
-
-EINTERN Eina_Bool e_hwc_planes_mirror_set(E_Hwc *hwc, E_Hwc *src_hwc, Eina_Rectangle *rect);
-EINTERN void e_hwc_planes_mirror_unset(E_Hwc *hwc);
-EINTERN Eina_Bool e_hwc_planes_presentation_update(E_Hwc *hwc, E_Client *ec);
-EINTERN Eina_Bool e_hwc_planes_external_commit(E_Hwc *hwc);
-
-EINTERN Eina_Bool e_hwc_planes_ecore_evas_set(E_Hwc *hwc, Ecore_Evas *ee);
-
-#endif
output = e_output_find(zone->output_id);
EINA_SAFETY_ON_NULL_RETURN(output);
- /* If an e_client belongs to the e_output managed by hwc_plane policy,
- * there's no need to deal with hwc_windows. */
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- return;
-
if (e_hwc_window_is_video(hwc_window)) return;
e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_DELETED);
output = e_output_find(zone->output_id);
EINA_SAFETY_ON_NULL_RETURN(output);
- /* If an e_client belongs to the e_output managed by hwc_plane policy,
- * there's no need to deal with hwc_windows. */
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES) return;
-
if (_e_hwc_window_client_transform_restriction_check(ec, output))
e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_TRANSFORM);
else
output = e_output_find(zone->output_id);
EINA_SAFETY_ON_NULL_RETURN_VAL(output, ECORE_CALLBACK_PASS_ON);
- /* If an e_client belongs to the e_output managed by hwc_plane policy,
- * there's no need to deal with hwc_windows. */
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- return ECORE_CALLBACK_PASS_ON;
-
if (e_object_is_del(E_OBJECT(ec)))
return ECORE_CALLBACK_PASS_ON;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- return EINA_FALSE;
-
target_hwc_window = hwc->root_target_hwc_window;
EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, NULL);
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc->thwc, NULL);
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- return NULL;
-
target_hwc_window = E_OBJECT_ALLOC(E_Hwc_Window_Target, E_HWC_WINDOW_TYPE, _e_hwc_windows_target_window_free);
EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, NULL);
Eina_List *l;
EINA_SAFETY_ON_NULL_RETURN_VAL(hwc, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc->hwc_policy == E_HWC_POLICY_WINDOWS, EINA_FALSE);
root_target_hwc_window = _e_hwc_windows_root_target_hwc_window_get(hwc);
EINA_SAFETY_ON_NULL_RETURN_VAL(root_target_hwc_window, EINA_FALSE);
#include "e_input_device_intern.h"
#include "e_error_intern.h"
#include "e_hwc_windows_intern.h"
-#include "e_hwc_planes_intern.h"
#include "e_hwc_intern.h"
#include "e_comp_wl_video_buffer_intern.h"
#include "e_zone_intern.h"
static void
_e_output_zoom_rotate(E_Output *output)
{
- E_Plane *ep = NULL;
- Eina_List *l;
int w, h;
EINA_SAFETY_ON_NULL_RETURN(output);
EOINF("zoom_rect rotate(x:%d,y:%d) (w:%d,h:%d)",
output, output->zoom_conf.rect.x, output->zoom_conf.rect.y,
output->zoom_conf.rect.w, output->zoom_conf.rect.h);
+ e_hwc_windows_zoom_set(output->hwc, &output->zoom_conf.rect);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- EINA_LIST_FOREACH(output->planes, l, ep)
- {
- if (!e_plane_is_fb_target(ep)) continue;
-
- e_plane_zoom_set(ep, &output->zoom_conf.rect);
- break;
- }
-
- if (!_e_output_zoom_touch_set(output))
- EOERR("fail _e_output_zoom_touch_set", output);
-
- /* update the ecore_evas */
- _e_output_render_update(output);
- }
- else
- {
- e_hwc_windows_zoom_set(output->hwc, &output->zoom_conf.rect);
-
- if (!_e_output_zoom_touch_set(output))
- EOERR("fail _e_output_zoom_touch_set", output);
+ if (!_e_output_zoom_touch_set(output))
+ EOERR("fail _e_output_zoom_touch_set", output);
- /* update the ecore_evas */
- if (e_hwc_windows_pp_commit_possible_check(output->hwc))
- _e_output_render_update(output);
- }
+ /* update the ecore_evas */
+ if (e_hwc_windows_pp_commit_possible_check(output->hwc))
+ _e_output_render_update(output);
}
EINTERN void
}
}
-static Eina_Bool
-_e_output_fb_over_plane_check(E_Output *output)
-{
- Eina_List *p_l;
- E_Plane *ep, *fb;
- Eina_Bool check = EINA_FALSE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- fb = e_output_default_fb_target_get(output);
-
- EINA_LIST_REVERSE_FOREACH(output->planes, p_l, ep)
- {
- if (!ep) continue;
-
- if (ep == fb)
- break;
-
- if (ep->display_info.tsurface)
- check = EINA_TRUE;
- }
-
- return check;
-}
-
-static void
-_e_output_update_fps()
-{
- static double time = 0.0;
- static double lapse = 0.0;
- static int cframes = 0;
- static int flapse = 0;
-
- if (e_comp->calc_fps)
- {
- double dt;
- double tim = ecore_time_get();
-
- dt = tim - e_comp->frametimes[0];
- e_comp->frametimes[0] = tim;
-
- time += dt;
- cframes++;
-
- if (lapse == 0.0)
- {
- lapse = tim;
- flapse = cframes;
- }
- else if ((tim - lapse) >= 0.5)
- {
- e_comp->fps = (cframes - flapse) / (tim - lapse);
- lapse = tim;
- flapse = cframes;
- time = 0.0;
- }
- }
-}
-
EINTERN Eina_Bool
e_output_init(void)
{
else return "Unknown";
}
-static int
-_e_output_cb_planes_sort(const void *d1, const void *d2)
-{
- E_Plane *plane1 = (E_Plane *)d1;
- E_Plane *plane2 = (E_Plane *)d2;
-
- if (!plane1) return(1);
- if (!plane2) return(-1);
-
- return (plane1->zpos - plane2->zpos);
-}
-
static tdm_capture *
_e_output_tdm_capture_create(E_Output *output, tdm_capture_capability cap)
{
}
static Eina_Bool
-_e_output_capture_src_crop_get(E_Output *output, tdm_layer *layer, Eina_Rectangle *fit, Eina_Rectangle *showing_rect)
-{
- tdm_info_layer info;
- tdm_error error = TDM_ERROR_NONE;
- const tdm_output_mode *mode = NULL;
- float ratio_x, ratio_y;
- Eina_Rectangle out_rect;
- Eina_Rectangle dst_rect;
-
- fit->x = 0;
- fit->y = 0;
- fit->w = 0;
- fit->h = 0;
-
- error = tdm_output_get_mode(output->toutput, &mode);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(error == TDM_ERROR_NONE, EINA_FALSE);
-
- out_rect.x = 0;
- out_rect.y = 0;
- out_rect.w = mode->hdisplay;
- out_rect.h = mode->vdisplay;
-
- error = tdm_layer_get_info(layer, &info);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(error == TDM_ERROR_NONE, EINA_FALSE);
-
- dst_rect.x = info.dst_pos.x;
- dst_rect.y = info.dst_pos.y;
- dst_rect.w = info.dst_pos.w;
- dst_rect.h = info.dst_pos.h;
-
- _e_output_capture_showing_rect_get(&out_rect, &dst_rect, showing_rect);
-
- fit->x = info.src_config.pos.x;
- fit->y = info.src_config.pos.y;
-
- if (info.transform % 2 == 0)
- {
- ratio_x = (float)info.src_config.pos.w / dst_rect.w;
- ratio_y = (float)info.src_config.pos.h / dst_rect.h;
-
- fit->w = showing_rect->w * ratio_x;
- fit->h = showing_rect->h * ratio_y;
- }
- else
- {
- ratio_x = (float)info.src_config.pos.w / dst_rect.h;
- ratio_y = (float)info.src_config.pos.h / dst_rect.w;
-
- fit->w = showing_rect->h * ratio_x;
- fit->h = showing_rect->w * ratio_y;
- }
-
- return EINA_TRUE;
-}
-
-static void
-_e_output_capture_dst_crop_get(E_Output *output, E_Comp_Wl_Video_Buf *tmp, E_Comp_Wl_Video_Buf *dst, tdm_layer *layer,
- int w, int h, Eina_Rectangle *pos, Eina_Rectangle *showing_pos,
- Eina_Rectangle *dst_crop, int rotate)
-{
- tdm_info_layer info;
- tdm_error error = TDM_ERROR_NONE;
-
- dst_crop->x = 0;
- dst_crop->y = 0;
- dst_crop->w = 0;
- dst_crop->h = 0;
-
- error = tdm_layer_get_info(layer, &info);
- EINA_SAFETY_ON_FALSE_RETURN(error == TDM_ERROR_NONE);
-
- if (info.src_config.pos.w == w && info.src_config.pos.h == h &&
- pos->x == 0 && pos->y == 0 && pos->w == tmp->width && pos->h == tmp->height)
- {
- dst_crop->x = pos->x;
- dst_crop->y = pos->y;
- dst_crop->w = pos->w;
- dst_crop->h = pos->h;
- }
- else if ((w == pos->w) && (h == pos->h) && (showing_pos->w == pos->w) && (showing_pos->h == pos->h))
- {
- dst_crop->x = info.dst_pos.x + pos->x;
- dst_crop->y = info.dst_pos.y + pos->y;
- dst_crop->w = info.dst_pos.w;
- dst_crop->h = info.dst_pos.h;
- }
- else if (rotate == 0)
- {
- dst_crop->x = showing_pos->x * pos->w / w + pos->x;
- dst_crop->y = showing_pos->y * pos->h / h + pos->y;
- dst_crop->w = showing_pos->w * pos->w / w;
- dst_crop->h = showing_pos->h * pos->h / h;
- }
- else if (rotate == 90)
- {
- dst_crop->x = (h - showing_pos->y - showing_pos->h) * pos->w / h + pos->x;
- dst_crop->y = showing_pos->x * pos->h / w + pos->y;
- dst_crop->w = showing_pos->h * pos->w / h;
- dst_crop->h = showing_pos->w * pos->h / w;
- }
- else if (rotate == 180)
- {
- dst_crop->x = (w - showing_pos->x - showing_pos->w) * pos->w / w + pos->x;
- dst_crop->y = (h - showing_pos->y - showing_pos->h) * pos->h / h + pos->y;
- dst_crop->w = showing_pos->w * pos->w / w;
- dst_crop->h = showing_pos->h * pos->h / h;
- }
- else if (rotate == 270)
- {
- dst_crop->x = showing_pos->y * pos->w / h + pos->x;
- dst_crop->y = (w - showing_pos->x - showing_pos->w) * pos->h / w + pos->y;
- dst_crop->w = showing_pos->h * pos->w / h;
- dst_crop->h = showing_pos->w * pos->h / w;
- }
- else
- {
- dst_crop->x = pos->x;
- dst_crop->y = pos->y;
- dst_crop->w = pos->w;
- dst_crop->h = pos->h;
- EOERR("get_cropinfo: unknown case error", output);
- }
-}
-
-static Eina_Bool
_e_output_capture_src_crop_get_hwc_window(E_Output *output, E_Hwc_Window *hwc_window, Eina_Rectangle *fit, Eina_Rectangle *showing_rect)
{
tdm_error error = TDM_ERROR_NONE;
}
static int
-_e_output_layer_sort_cb(const void *d1, const void *d2)
-{
- E_Output_Layer *e_layer_1 = (E_Output_Layer *)d1;
- E_Output_Layer *e_layer_2 = (E_Output_Layer *)d2;
-
- if (!e_layer_1) return(1);
- if (!e_layer_2) return(-1);
-
- return (e_layer_1->zpos - e_layer_2->zpos);
-}
-
-static int
_e_output_cb_hwc_window_sort(const void *d1, const void *d2)
{
E_Hwc_Window *hwc_window1 = (E_Hwc_Window *)d1;
}
static Eina_Bool
-_e_output_vbuf_capture(E_Output *output, E_Comp_Wl_Video_Buf *vbuf, int rotate, Eina_Bool rotate_check)
-{
- tdm_error error = TDM_ERROR_NONE;
- int width = 0, height = 0;
- int i, count;
- E_Output_Layer *e_layer = NULL;
- Eina_List *layers = NULL;
- Eina_List *l;
- Eina_Bool ret = EINA_FALSE;
-
- e_output_size_get(output, &width, &height);
- if (width == 0 || height == 0)
- return ret;
-
- error = tdm_output_get_layer_count(output->toutput, &count);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(error == TDM_ERROR_NONE, ret);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(count >= 0, ret);
-
- for (i = 0; i < count; i++)
- {
- int zpos;
- tdm_layer *layer;
- E_Output_Layer *e_layer = E_NEW(E_Output_Layer, 1);
- EINA_SAFETY_ON_NULL_GOTO(e_layer, release);
-
- layers = eina_list_append(layers, e_layer);
-
- layer = tdm_output_get_layer(output->toutput, i, &error);
- EINA_SAFETY_ON_FALSE_GOTO(error == TDM_ERROR_NONE, release);
-
- tdm_layer_get_zpos(layer, &zpos);
- e_layer->layer = layer;
- e_layer->zpos = zpos;
- }
- layers = eina_list_sort(layers, eina_list_count(layers), _e_output_layer_sort_cb);
-
- EINA_LIST_FOREACH(layers, l, e_layer)
- {
- E_Comp_Wl_Video_Buf *tmp = NULL;
- tdm_layer *layer;
- tdm_layer_capability capability;
- tbm_surface_h tsurface = NULL, capturable_tsurface = NULL;
- Eina_Rectangle showing_pos = {0, };
- Eina_Rectangle dst_pos = {0, };
- Eina_Rectangle src_crop = {0, };
- Eina_Rectangle dst_crop = {0, };
- Eina_Bool ret;
-
- if (!e_layer) continue;
-
- if (e_layer->zpos < 0) continue;
- layer = e_layer->layer;
-
- error = tdm_layer_get_capabilities(layer, &capability);
- EINA_SAFETY_ON_FALSE_GOTO(error == TDM_ERROR_NONE, release);
-
- if (capability & TDM_LAYER_CAPABILITY_VIDEO)
- continue;
-
- tsurface = tdm_layer_get_displaying_buffer(layer, &error);
- if (tsurface == NULL)
- continue;
-
- capturable_tsurface = e_comp_wl_tbm_capturable_buffer_get(tsurface);
- if (!capturable_tsurface) continue;
-
- tmp = e_comp_wl_video_buffer_create_tbm(tsurface);
- if (tmp == NULL)
- {
- tbm_surface_internal_unref(capturable_tsurface);
- continue;
- }
-
- ret = _e_output_capture_src_crop_get(output, layer, &src_crop, &showing_pos);
- if (ret == EINA_FALSE)
- {
- tbm_surface_internal_unref(capturable_tsurface);
- e_comp_wl_video_buffer_unref(tmp);
- continue;
- }
-
- ret = _e_output_capture_position_get(output, vbuf->width, vbuf->height, &dst_pos, rotate_check);
- if (ret == EINA_FALSE)
- {
- tbm_surface_internal_unref(capturable_tsurface);
- e_comp_wl_video_buffer_unref(tmp);
- continue;
- }
-
- _e_output_capture_dst_crop_get(output, tmp, vbuf, layer, width, height,
- &dst_pos, &showing_pos, &dst_crop, rotate);
-
- e_comp_wl_video_buffer_convert(tmp, vbuf,
- src_crop.x, src_crop.y, src_crop.w, src_crop.h,
- dst_crop.x, dst_crop.y, dst_crop.w, dst_crop.h,
- EINA_TRUE, rotate, 0, 0);
-
- tbm_surface_internal_unref(capturable_tsurface);
- e_comp_wl_video_buffer_unref(tmp);
- }
-
- ret = EINA_TRUE;
-
-release:
- if (layers)
- {
- E_Output_Layer *e_layer = NULL;
- Eina_List *l, *ll;
-
- EINA_LIST_FOREACH_SAFE(layers, l, ll, e_layer)
- {
- E_FREE(e_layer);
- }
- eina_list_free(layers);
- }
-
- return ret;
-}
-
-static Eina_Bool
_e_output_capture(E_Output *output, tbm_surface_h tsurface, Eina_Bool auto_rotate)
{
E_Comp_Wl_Video_Buf *vbuf = NULL;
rotated = _e_output_capture_transform_check(output, auto_rotate, &transform);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_WINDOWS)
- ret = _e_output_vbuf_capture_hwc_window(output, vbuf, transform, rotated);
- else
- ret = _e_output_vbuf_capture(output, vbuf, transform, rotated);
+ ret = _e_output_vbuf_capture_hwc_window(output, vbuf, transform, rotated);
e_comp_wl_video_buffer_unref(vbuf);
_e_output_center_rect_get(src_w, src_h, dst_w, dst_h, rect);
}
-static Eina_Bool
-_e_output_planes_commit(E_Output *output)
-{
- E_Plane *plane = NULL, *fb_target = NULL;
- Eina_List *l;
- Eina_Bool fb_commit = EINA_FALSE;
-
- fb_target = e_output_fb_target_get(output);
-
- /* fetch the fb_target at first */
- fb_commit = e_plane_fetch(fb_target);
- // TODO: to be fixed. check fps of fb_target currently.
- if (fb_commit) _e_output_update_fps();
-
- if (output->zoom_conf.unset_skip == EINA_TRUE)
- {
- output->zoom_conf.unset_skip = EINA_FALSE;
- if (output->dpms != E_OUTPUT_DPMS_OFF)
- {
- e_output_zoom_rotating_check(output);
- if (!e_plane_pp_commit(fb_target))
- EOERR("fail to e_plane_pp_commit", output);
- return EINA_TRUE;
- }
- }
-
- /* set planes */
- EINA_LIST_FOREACH(output->planes, l, plane)
- {
- /* skip the fb_target fetch because we do this previously */
- if (e_plane_is_fb_target(plane)) continue;
-
- /* if the plane is the candidate to unset,
- set the plane to be unset_try */
- if (e_plane_is_unset_candidate(plane))
- e_plane_unset_try_set(plane, EINA_TRUE);
-
- /* if the plane is trying to unset,
- * 1. if fetching the fb is not available, continue.
- * 2. if fetching the fb is available, verify the unset commit check. */
- if (e_plane_is_unset_try(plane))
- {
- if (!e_plane_unset_commit_check(plane, fb_commit))
- continue;
- }
-
- if (!e_plane_set_commit_check(plane, fb_commit)) continue;
-
- /* fetch the surface to the plane */
- if (!e_plane_fetch(plane)) continue;
-
- if (e_plane_is_unset_try(plane))
- e_plane_unset_try_set(plane, EINA_FALSE);
- }
-
- EINA_LIST_FOREACH(output->planes, l, plane)
- {
- if (e_plane_is_fetch_retry(plane))
- {
- if (!e_plane_fetch(plane)) continue;
- if (e_plane_is_fb_target(plane))
- {
- fb_commit = EINA_TRUE;
- _e_output_update_fps();
- }
- }
- }
-
- EINA_LIST_FOREACH(output->planes, l, plane)
- {
- if (e_plane_is_unset_try(plane)) continue;
-
- if ((output->dpms == E_OUTPUT_DPMS_OFF) || output->fake_config)
- {
- if (!e_plane_offscreen_commit(plane))
- EOERR("fail to e_plane_offscreen_commit", output);
- }
- else
- {
- if ((output->zoom_set) && e_plane_is_fb_target(plane))
- {
- e_output_zoom_rotating_check(output);
- if (!e_plane_pp_commit(plane))
- EOERR("fail to e_plane_pp_commit", output);
- }
- else
- {
- if (!e_plane_commit(plane))
- EOERR("fail to e_plane_commit", output);
- }
- }
- }
-
- return EINA_TRUE;
-
-}
-
-static Eina_Bool
-_e_output_planes_init(E_Output *output)
-{
- E_Plane *plane = NULL;
- E_Plane *default_fb = NULL;
- tdm_output *toutput = output->toutput;
- int num_layers, i;
-
- tdm_output_get_layer_count(toutput, &num_layers);
- if (num_layers < 1)
- {
- EOERR("fail to get tdm_output_get_layer_count\n", output);
- goto fail;
- }
- output->plane_count = num_layers;
- EOINF("num_planes %i", output, output->plane_count);
-
- if (!e_plane_init())
- {
- EOERR("fail to e_plane_init.", output);
- goto fail;
- }
-
- for (i = 0; i < output->plane_count; i++)
- {
- plane = e_plane_new(output, i);
- if (!plane)
- {
- EOERR("fail to create the e_plane.", output);
- goto fail;
- }
- output->planes = eina_list_append(output->planes, plane);
- }
-
- output->planes = eina_list_sort(output->planes, eina_list_count(output->planes), _e_output_cb_planes_sort);
-
- default_fb = e_output_default_fb_target_get(output);
- if (!default_fb)
- {
- EOERR("fail to get default_fb_target plane", output);
- goto fail;
- }
-
- if (!e_plane_fb_target_set(default_fb, EINA_TRUE))
- {
- EOERR("fail to set fb_target plane", output);
- goto fail;
- }
-
- return EINA_TRUE;
-
-fail:
- return EINA_FALSE;
-}
-
EINTERN E_Output *
e_output_new1(int index)
{
goto fail;
}
- /* The E20 works the hwc_windows policy when tdm_output supports hwc capability e20.
- * The E_Plane, E_Plane_Renderer resource is not used in E20.
- */
if (output_caps & TDM_OUTPUT_CAPABILITY_HWC)
output->tdm_hwc = EINA_TRUE;
else
- if (!_e_output_planes_init(output))
- goto fail;
+ goto fail;
if (output_caps & TDM_OUTPUT_CAPABILITY_ASYNC_DPMS)
output->dpms_async = EINA_TRUE;
EINTERN void
e_output_del(E_Output *output)
{
- E_Plane *plane;
E_Output_Mode *m;
if (!output) return;
if (output->hwc) e_hwc_del(output->hwc);
- e_plane_shutdown();
-
if (output->id) free(output->id);
if (output->info.screen) free(output->info.screen);
if (output->info.name) free(output->info.name);
EINA_LIST_FREE(output->info.modes, m) free(m);
- EINA_LIST_FREE(output->planes, plane) e_plane_free(plane);
-
free(output);
}
}
}
- if (val == E_OUTPUT_DPMS_OFF)
- {
- E_Plane *ep;
- EINA_LIST_FOREACH(output->planes, l, ep)
- {
- e_plane_dpms_off(ep);
- }
- }
-
if (val == E_OUTPUT_DPMS_ON) hookpoint = E_OUTPUT_INTERCEPT_HOOK_DPMS_ON;
else if (val == E_OUTPUT_DPMS_STANDBY) hookpoint = E_OUTPUT_INTERCEPT_HOOK_DPMS_STANDBY;
else if (val == E_OUTPUT_DPMS_SUSPEND) hookpoint = E_OUTPUT_INTERCEPT_HOOK_DPMS_SUSPEND;
EINTERN Eina_Bool
e_output_render(E_Output *output)
{
- E_Plane *plane = NULL;
- Eina_List *l;
-
EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- EINA_LIST_REVERSE_FOREACH(output->planes, l, plane)
- {
- if (!e_plane_render(plane))
- {
- EOERR("fail to e_plane_render.", output);
- return EINA_FALSE;
- }
- }
- }
- else
- {
- /* render the only primary output */
- if (output != e_display_primary_output_get())
- return EINA_TRUE;
+ /* render the only primary output */
+ if (output != e_display_primary_output_get())
+ return EINA_TRUE;
- if (!e_hwc_windows_render(output->hwc))
- {
- EOERR("fail to e_hwc_windows_render.", output);
- return EINA_FALSE;
- }
+ if (!e_hwc_windows_render(output->hwc))
+ {
+ EOERR("fail to e_hwc_windows_render.", output);
+ return EINA_FALSE;
}
return EINA_TRUE;
primary_output = e_display_primary_output_get();
EINA_SAFETY_ON_NULL_RETURN_VAL(primary_output, EINA_FALSE);
-
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
+ if (output == primary_output)
{
- e_hwc_planes_apply(output->hwc);
-
- if (output == primary_output)
- {
- if (!_e_output_planes_commit(output))
- {
- EOERR("fail to _e_output_commit.", output);
- return EINA_FALSE;
- }
- }
- else
- {
- display_mode = e_output_display_mode_get(output);
-
- /* output donot care about the external_commit
- when tdm has the mirror capability */
- if (display_mode == E_OUTPUT_DISPLAY_MODE_MIRROR &&
- output->tdm_mirror)
- return EINA_TRUE;
-
- if (!e_hwc_planes_external_commit(output->hwc))
- {
- EOERR("fail e_hwc_planes_external_commit", output);
- return EINA_FALSE;
- }
- }
+ if (output->zoom_set)
+ e_output_zoom_rotating_check(output);
}
- else
- {
- if (output == primary_output)
- {
- if (output->zoom_set)
- e_output_zoom_rotating_check(output);
- }
- display_mode = e_output_display_mode_get(output);
+ display_mode = e_output_display_mode_get(output);
- /* The output do not commit when tdm has the mirror capability */
- if (display_mode == E_OUTPUT_DISPLAY_MODE_MIRROR && output->tdm_mirror)
- return EINA_TRUE;
+ /* The output do not commit when tdm has the mirror capability */
+ if (display_mode == E_OUTPUT_DISPLAY_MODE_MIRROR && output->tdm_mirror)
+ return EINA_TRUE;
- if (!e_hwc_windows_commit(output->hwc, display_mode))
- {
- EOERR("fail e_hwc_windows_commit", output);
- return EINA_FALSE;
- }
+ if (!e_hwc_windows_commit(output->hwc, display_mode))
+ {
+ EOERR("fail e_hwc_windows_commit", output);
+ return EINA_FALSE;
}
_e_output_force_render_unset(output);
return NULL;
}
-E_API const Eina_List *
-e_output_planes_get(E_Output *output)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, NULL);
-
- return output->planes;
-}
-
-EINTERN void
-e_output_util_planes_print(void)
-{
- Eina_List *l, *ll, *p_l;
- E_Output * output = NULL;
-
- EINA_LIST_FOREACH_SAFE(e_display_outputs_get(), l, ll, output)
- {
- E_Plane *plane;
- E_Client *ec;
-
- if (!output || !output->planes) continue;
-
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- fprintf(stderr, "HWC in %s .. \n", output->id);
- fprintf(stderr, "HWC \tzPos \t on_plane \t\t\t\t on_prepare \t \n");
-
- EINA_LIST_REVERSE_FOREACH(output->planes, p_l, plane)
- {
- ec = plane->ec;
- if (ec) fprintf(stderr, "HWC \t[%d]%s\t %s (%8p)",
- plane->zpos,
- plane->is_primary ? "--" : " ",
- ec->icccm.title, ec->frame);
-
- ec = plane->prepare_ec;
- if (ec) fprintf(stderr, "\t\t\t %s (%8p)",
- ec->icccm.title, ec->frame);
- fputc('\n', stderr);
- }
- fputc('\n', stderr);
- }
- }
-}
-
-EINTERN Eina_Bool
-e_output_is_fb_composing(E_Output *output)
-{
- Eina_List *p_l;
- E_Plane *ep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- {
- if (e_plane_is_fb_target(ep))
- {
- if(ep->ec == NULL) return EINA_TRUE;
- }
- }
-
- return EINA_FALSE;
-}
-
-EINTERN Eina_Bool
-e_output_is_fb_full_compositing(E_Output *output)
-{
- Eina_List *p_l;
- E_Plane *ep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- if(ep->ec) return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-EINTERN E_Plane *
-e_output_fb_target_get(E_Output *output)
-{
- Eina_List *p_l;
- E_Plane *ep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- {
- if (e_plane_is_fb_target(ep))
- return ep;
- }
-
- return NULL;
-}
-
-EINTERN E_Plane *
-e_output_default_fb_target_get(E_Output *output)
-{
- Eina_List *p_l;
- E_Plane *ep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- if (e_comp->hwc_ignore_primary)
- {
- /* find lowest zpos graphic type layer */
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- {
- Eina_Bool available_rgb = EINA_FALSE;
- const tbm_format *formats;
- int count, i;
-
- if (e_plane_type_get(ep) != E_PLANE_TYPE_GRAPHIC) continue;
-
- if (!e_plane_available_formats_get(ep, &formats, &count))
- continue;
-
- for (i = 0; i < count; i++)
- {
- if (formats[i] == TBM_FORMAT_ARGB8888 ||
- formats[i] == TBM_FORMAT_XRGB8888)
- {
- available_rgb = EINA_TRUE;
- break;
- }
- }
-
- if (!available_rgb) continue;
-
- return ep;
- }
- }
- else
- {
- /* find primary layer */
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- {
- if (ep->is_primary)
- return ep;
- }
- }
-
- return NULL;
-}
-
E_API E_Output *
e_output_find_by_index(int index)
{
return NULL;
}
-E_API E_Plane *
-e_output_plane_get_by_zpos(E_Output *output, int zpos)
-{
- Eina_List *p_l;
- E_Plane *ep;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(output->planes, EINA_FALSE);
-
- EINA_LIST_FOREACH(output->planes, p_l, ep)
- {
- if (ep->zpos == zpos)
- return ep;
- }
-
- return NULL;
-}
-
EINTERN Eina_Bool
e_output_zoom_set(E_Output *output, double zoomx, double zoomy, int cx, int cy)
{
- E_Plane *ep = NULL;
int w, h;
int angle = 0;
E_Output *primary_output = NULL;
_e_output_zoom_coordinate_cal(output);
_e_output_zoom_touch_rect_get(output);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
+ if (!e_hwc_windows_zoom_set(output->hwc, &output->zoom_conf.rect))
{
- ep = e_output_fb_target_get(output);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ep, EINA_FALSE);
-
- if (!output->zoom_set)
- {
- if (_e_output_fb_over_plane_check(output))
- output->zoom_conf.unset_skip = EINA_TRUE;
- }
-
- e_hwc_planes_multi_plane_set(output->hwc, EINA_FALSE);
-
- if (!e_plane_zoom_set(ep, &output->zoom_conf.rect))
- {
- EOERR("e_plane_zoom_set failed.", output);
- output->zoom_conf.unset_skip = EINA_FALSE;
- e_hwc_planes_multi_plane_set(output->hwc, EINA_TRUE);
-
- return EINA_FALSE;
- }
-
- /* update the ecore_evas */
- if (e_plane_pp_commit_possible_check(ep))
- _e_output_render_update(output);
+ EOERR("e_hwc_windows_zoom_set failed.", output);
+ return EINA_FALSE;
}
- else
- {
- if (!e_hwc_windows_zoom_set(output->hwc, &output->zoom_conf.rect))
- {
- EOERR("e_hwc_windows_zoom_set failed.", output);
- return EINA_FALSE;
- }
- /* update the ecore_evas */
- if (e_hwc_windows_pp_commit_possible_check(output->hwc))
- _e_output_render_update(output);
- }
+ /* update the ecore_evas */
+ if (e_hwc_windows_pp_commit_possible_check(output->hwc))
+ _e_output_render_update(output);
if (!_e_output_zoom_touch_set(output))
EOERR("fail _e_output_zoom_touch_set", output);
EINTERN void
e_output_zoom_unset(E_Output *output)
{
- E_Plane *ep = NULL;
-
EINA_SAFETY_ON_NULL_RETURN(output);
if (!output->zoom_set) return;
if (!_e_output_zoom_touch_unset(output))
EOERR("fail _e_output_zoom_touch_unset", output);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- ep = e_output_fb_target_get(output);
- if (ep) e_plane_zoom_unset(ep);
-
- e_hwc_planes_multi_plane_set(output->hwc, EINA_TRUE);
- }
- else
- {
- e_hwc_windows_zoom_unset(output->hwc);
- }
+ e_hwc_windows_zoom_unset(output->hwc);
output->zoom_conf.zoomx = 0;
output->zoom_conf.zoomy = 0;
Eina_List *l;
Eina_Bool found = EINA_FALSE;
E_Output *primary_output = NULL;
- E_Plane *ep = NULL;
int w, h, p_w, p_h;
EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
EOINF("mode change output: (%dx%d)", output, w, h);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- ep = e_output_fb_target_get(output);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ep, EINA_FALSE);
-
- e_plane_external_reset(ep, &output->zoom_conf.rect);
- }
- else
- {
- /* TODO: HWC Windows */;
- }
-
_e_output_render_update(primary_output);
EOINF("e_output_external_reset done.(%dx%d)", output, mode->w, mode->h);
_e_output_external_rect_get(src_output, p_w, p_h, w, h, &output->zoom_conf.rect);
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- {
- if (!e_hwc_planes_mirror_set(output->hwc, src_output->hwc, &output->zoom_conf.rect))
- {
- EOERR("e_hwc_planes_mirror_set failed.", output);
- return EINA_FALSE;
- }
- }
- else
+ if (!e_hwc_windows_mirror_set(output->hwc, src_output->hwc))
{
- if (!e_hwc_windows_mirror_set(output->hwc, src_output->hwc))
- {
- EOERR("e_hwc_windows_mirror_set failed.", output);
- return EINA_FALSE;
- }
+ EOERR("e_hwc_windows_mirror_set failed.", output);
+ return EINA_FALSE;
}
}
}
else
{
- if (e_hwc_policy_get(output->hwc) == E_HWC_POLICY_PLANES)
- e_hwc_planes_mirror_unset(output->hwc);
- else
- e_hwc_windows_mirror_unset(output->hwc);
+ e_hwc_windows_mirror_unset(output->hwc);
}
}
EINTERN Eina_Bool
e_output_presentation_update(E_Output *output, E_Client *ec)
{
- E_Hwc *hwc;
-
EINA_SAFETY_ON_FALSE_RETURN_VAL(output, EINA_FALSE);
EINA_SAFETY_ON_FALSE_RETURN_VAL(ec, EINA_FALSE);
- hwc = output->hwc;
- EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc, EINA_FALSE);
-
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- {
- if (!e_hwc_planes_presentation_update(hwc, ec))
- {
- EOERR("e_hwc_planes_presentation_update fails.", output);
- return EINA_FALSE;
- }
- EOINF("e_output_presentation_update done: E_OUTPUT_DISPLAY_MODE_PRESENTATION", output);
- }
-
_e_output_display_mode_set(output, E_OUTPUT_DISPLAY_MODE_PRESENTATION);
output->external_set = EINA_TRUE;
_e_output_display_mode_set(output, E_OUTPUT_DISPLAY_MODE_NONE);
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- {
- e_hwc_planes_presentation_update(hwc, NULL);
- }
- else
+ if (output->presentation_ec)
{
- if (output->presentation_ec)
- {
- primary_output = e_display_primary_output_get();
- EINA_SAFETY_ON_NULL_GOTO(primary_output, done);
+ primary_output = e_display_primary_output_get();
+ EINA_SAFETY_ON_NULL_GOTO(primary_output, done);
- zone = e_comp_zone_find(e_output_output_id_get(primary_output));
- EINA_SAFETY_ON_NULL_RETURN(zone);
+ zone = e_comp_zone_find(e_output_output_id_get(primary_output));
+ EINA_SAFETY_ON_NULL_RETURN(zone);
- cdata = e_client_cdata_get(output->presentation_ec);
- EINA_SAFETY_ON_NULL_RETURN(cdata);
+ cdata = e_client_cdata_get(output->presentation_ec);
+ EINA_SAFETY_ON_NULL_RETURN(cdata);
- e_zone_client_add(zone, output->presentation_ec);
+ e_zone_client_add(zone, output->presentation_ec);
- EINA_LIST_FOREACH(cdata->sub.list, l, subc)
- e_zone_client_add(zone, subc);
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_zone_client_add(zone, subc);
- EINA_LIST_FOREACH(cdata->sub.list, l, subc)
- e_zone_client_add(zone, subc);
- }
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_zone_client_add(zone, subc);
}
done:
EINTERN E_OUTPUT_DPMS e_output_dpms_get(E_Output *output);
EINTERN Eina_Bool e_output_dpms_async_check(E_Output *output);
EINTERN void e_output_phys_size_get(E_Output *output, int *phys_w, int *phys_h);
-EINTERN E_Plane * e_output_default_fb_target_get(E_Output *output);
EINTERN Eina_Bool e_output_fake_config_set(E_Output *output, int x, int y);
EINTERN void e_output_position_get(E_Output *output, int *x, int *y);
EINTERN void e_output_position_set(E_Output *output, int x, int y);
EINTERN void e_output_norender_pop(E_Output *output);
EINTERN int e_output_norender_get(E_Output *output);
-EINTERN void e_output_util_planes_print(void);
-EINTERN Eina_Bool e_output_is_fb_composing(E_Output *output);
-EINTERN Eina_Bool e_output_is_fb_full_compositing(E_Output *output);
-EINTERN E_Plane * e_output_fb_target_get(E_Output *output);
EINTERN E_Output_Hook * e_output_hook_add(E_Output_Hook_Point hookpoint, E_Output_Hook_Cb func, const void *data);
EINTERN void e_output_hook_del(E_Output_Hook *ch);
EINTERN E_Output_Intercept_Hook * e_output_intercept_hook_add(E_Output_Intercept_Hook_Point hookpoint, E_Output_Intercept_Hook_Cb func, const void *data);
static Eina_Bool
_e_video_hwc_iface_property_delay_set(E_Video_Comp_Iface *iface, unsigned int id, tdm_value value)
{
- IFACE_ENTRY;
-
- if (evh->hwc_policy != E_HWC_POLICY_PLANES)
- return EINA_FALSE;
- return e_video_hwc_planes_property_delay_set(evh, id, value);
+ return EINA_FALSE;
}
static Eina_Bool
}
hwc_policy = e_zone_video_hwc_policy_get(zone);
- if (hwc_policy == E_HWC_POLICY_PLANES)
- evh = e_video_hwc_planes_create(output, ec);
- else if (hwc_policy == E_HWC_POLICY_WINDOWS)
+ if (hwc_policy == E_HWC_POLICY_WINDOWS)
evh = e_video_hwc_windows_create(output, ec);
else
{
EINTERN void e_video_hwc_client_mask_update(E_Video_Hwc *evh);
EINTERN Eina_Bool e_video_hwc_current_fb_update(E_Video_Hwc *evh);
-/* Functions for HWC Planes */
-EINTERN E_Video_Hwc *e_video_hwc_planes_create(E_Output *output, E_Client *ec);
-EINTERN Eina_Bool e_video_hwc_planes_property_delay_set(E_Video_Hwc *evh, unsigned int id, tdm_value value);
-
/* Functions for HWC Windows */
EINTERN E_Video_Hwc *e_video_hwc_windows_create(E_Output *output, E_Client *ec);
EINTERN Eina_Bool e_video_hwc_windows_info_get(E_Video_Hwc *evh, E_Client_Video_Info *info);
+++ /dev/null
-#include "e_video_hwc_intern.h"
-#include "e_comp_screen_intern.h"
-#include "e_comp_wl_intern.h"
-#include "e_comp_wl_subsurface_intern.h"
-#include "e_comp_wl_video_buffer_intern.h"
-#include "e_video_debug_intern.h"
-#include "e_view_client_intern.h"
-
-#include <tdm.h>
-#include <tdm_helper.h>
-
-typedef struct _E_Video_Hwc_Planes E_Video_Hwc_Planes;
-
-struct _E_Video_Hwc_Planes
-{
- E_Video_Hwc base;
- E_Plane *e_plane;
- E_Plane_Hook *video_plane_ready_handler;
-
- struct
- {
- tdm_output *output;
- tdm_layer *layer;
- /* attributes */
- Eina_List *prop_list;
- Eina_List *late_prop_list;
- } tdm;
-
- struct
- {
- E_Comp_Wl_Video_Buf *vbuf;
- E_Client_Video_Info info;
- } pending;
-
- struct
- {
- Eina_Bool commit;
- Eina_Bool vblank;
- } wait_flag;
- struct wl_listener hide_listener;
-};
-
-typedef struct _Tdm_Prop_Value
-{
- unsigned int id;
- char name[TDM_NAME_LEN];
- tdm_value value;
-} Tdm_Prop_Value;
-
-static Eina_List *video_layers = NULL;
-
-static Eina_Bool _e_video_hwc_planes_buffer_commit(E_Video_Hwc_Planes *evhp, E_Comp_Wl_Video_Buf *vbuf, E_Client_Video_Info *info);
-
-static void
-_e_video_hwc_planes_pending_buffer_commit(E_Video_Hwc_Planes *evhp)
-{
- E_Comp_Wl_Video_Buf *vbuf;
-
- if (evhp->pending.vbuf)
- {
- vbuf = evhp->pending.vbuf;
- evhp->pending.vbuf = NULL;
- _e_video_hwc_planes_buffer_commit(evhp, vbuf, &evhp->pending.info);
- }
- else
- e_video_hwc_wait_buffer_commit((E_Video_Hwc *)evhp);
-}
-
-static Eina_Bool
-_e_video_hwc_planes_prop_list_update(Eina_List *prop_list, const char *name, tdm_value value)
-{
- Tdm_Prop_Value *prop;
- Eina_List *l;
-
- EINA_LIST_FOREACH(prop_list, l, prop)
- {
- if (strncmp(name, prop->name, TDM_NAME_LEN))
- continue;
-
- VDB("update property(%s) value(%d -> %d)",
- NULL, name, prop->value.u32, value.u32);
-
- prop->value.u32 = value.u32;
-
- return EINA_TRUE;
- }
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_prop_list_append(Eina_List **prop_list, unsigned int id, const char *name, tdm_value value)
-{
- Tdm_Prop_Value *prop;
-
- prop = calloc(1, sizeof(Tdm_Prop_Value));
- if (!prop)
- {
- VER("failed to alloc memory: property(%s) value(%d)",
- NULL, name, value.u32);
- return EINA_FALSE;
- }
-
- prop->value.u32 = value.u32;
- prop->id = id;
- memcpy(prop->name, name, sizeof(TDM_NAME_LEN));
-
- VIN("Add property(%s) value(%d)", NULL, name, value.u32);
-
- *prop_list = eina_list_append(*prop_list, prop);
-
- return EINA_TRUE;
-}
-
-static tdm_layer *
-_tdm_output_video_layer_get(tdm_output *output)
-{
- tdm_layer *layer;
- tdm_layer_capability capabilities = 0;
- int i, count = 0;
-#ifdef CHECKING_PRIMARY_ZPOS
- int primary_idx = 0, primary_zpos = 0;
- tdm_layer *primary_layer;
-#endif
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
-
- tdm_output_get_layer_count(output, &count);
- for (i = 0; i < count; i++)
- {
- layer = tdm_output_get_layer(output, i, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_VIDEO)
- return layer;
- }
-
-#ifdef CHECKING_PRIMARY_ZPOS
- tdm_output_get_primary_index(output, &primary_idx);
- primary_layer = tdm_output_get_layer(output, primary_idx, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(primary_layer, NULL);
- tdm_layer_get_zpos(primary_layer, &primary_zpos);
-#endif
-
- for (i = 0; i < count; i++)
- {
- layer = tdm_output_get_layer(output, i, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_OVERLAY)
- {
-#ifdef CHECKING_PRIMARY_ZPOS
- int zpos = 0;
- tdm_layer_get_zpos(layer, &zpos);
- if (zpos >= primary_zpos) continue;
-#endif
- return layer;
- }
- }
-
- return NULL;
-}
-
-static Eina_Bool
-_tdm_output_video_layer_exists(tdm_output *toutput)
-{
- tdm_layer *layer;
- tdm_layer_capability lyr_capabilities = 0;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(toutput, EINA_FALSE);
-
- /* get the first suitable layer */
- layer = _tdm_output_video_layer_get(toutput);
- if (!layer)
- return EINA_FALSE;
-
- tdm_layer_get_capabilities(layer, &lyr_capabilities);
- if (lyr_capabilities & TDM_LAYER_CAPABILITY_VIDEO)
- return EINA_TRUE;
-
- return EINA_FALSE;
-}
-
-static tdm_error
-_tdm_layer_info_get(tdm_layer *layer, E_Client_Video_Info *vinfo)
-{
- tdm_error ret = TDM_ERROR_NONE;
- tdm_info_layer tinfo = {0};
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_INVALID_PARAMETER);
- EINA_SAFETY_ON_NULL_RETURN_VAL(vinfo, TDM_ERROR_INVALID_PARAMETER);
-
- ret = tdm_layer_get_info(layer, &tinfo);
- EINA_SAFETY_ON_TRUE_RETURN_VAL(ret != TDM_ERROR_NONE, ret);
-
- memcpy(&vinfo->src_config, &tinfo.src_config, sizeof(tdm_info_config));
- memcpy(&vinfo->dst_pos, &tinfo.dst_pos, sizeof(tdm_pos));
- vinfo->transform = tinfo.transform;
-
- return ret;
-}
-
-static tdm_error
-_tdm_layer_info_set(tdm_layer *layer, E_Client_Video_Info *vinfo)
-{
- tdm_error ret = TDM_ERROR_NONE;
- tdm_info_layer info_layer = {0};
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_INVALID_PARAMETER);
- EINA_SAFETY_ON_NULL_RETURN_VAL(vinfo, TDM_ERROR_INVALID_PARAMETER);
-
- memcpy(&info_layer.src_config, &vinfo->src_config, sizeof(tdm_info_config));
- memcpy(&info_layer.dst_pos, &vinfo->dst_pos, sizeof(tdm_pos));
- info_layer.transform = vinfo->transform;
-
- ret = tdm_layer_set_info(layer, &info_layer);
-
- return ret;
-}
-
-static tdm_error
-_tdm_layer_buffer_set(tdm_layer *layer, tbm_surface_h buff)
-{
- tdm_error ret = TDM_ERROR_NONE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
- EINA_SAFETY_ON_NULL_RETURN_VAL(buff, TDM_ERROR_BAD_REQUEST);
-
- ret = tdm_layer_set_buffer(layer, buff);
-
- return ret;
-}
-
-static tdm_error
-_tdm_layer_buffer_unset(tdm_layer *layer)
-{
- tdm_error ret;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
-
- ret = tdm_layer_unset_buffer(layer);
-
- return ret;
-}
-
-/*
- * This function checks if this layer was set
- */
-static tdm_error
-_tdm_layer_usable_get(tdm_layer *layer, unsigned int *usable)
-{
- tdm_error ret;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
- EINA_SAFETY_ON_NULL_RETURN_VAL(usable, TDM_ERROR_BAD_REQUEST);
-
- ret = tdm_layer_is_usable(layer, usable);
- return ret;
-}
-
-static tdm_error
-_tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_data)
-{
- tdm_error ret = TDM_ERROR_NONE;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
-
- ret = tdm_layer_commit(layer, func, user_data);
-
- return ret;
-}
-
-static tbm_surface_h
-_tdm_layer_displaying_buffer_get(tdm_layer *layer, int *tdm_error)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- return tdm_layer_get_displaying_buffer(layer, tdm_error);
-}
-
-static tdm_error
-_tdm_layer_property_set(tdm_layer *layer, Tdm_Prop_Value *prop)
-{
- tdm_error ret;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
-
- ret = tdm_layer_set_property(layer, prop->id, prop->value);
- return ret;
-}
-
-static tdm_error
-_tdm_layer_property_get(tdm_layer *layer, unsigned id, tdm_value *value)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, TDM_ERROR_BAD_REQUEST);
- EINA_SAFETY_ON_NULL_RETURN_VAL(value, TDM_ERROR_BAD_REQUEST);
-
- return tdm_layer_get_property(layer, id, value);
-}
-
-static void
-_tdm_layer_property_list_set(tdm_layer *layer, Eina_List **list)
-{
- Tdm_Prop_Value *prop;
-
- EINA_LIST_FREE((*list), prop)
- {
- VIN("call property(%s), value(%d)", NULL, prop->name,
- (unsigned int)prop->value.u32);
- _tdm_layer_property_set(layer, prop);
- free(prop);
- }
-}
-
-static void
-_e_video_hwc_planes_cb_eplane_video_set_hook(void *data, E_Plane *plane)
-{
- E_Video_Hwc_Planes *evhp;
-
- evhp = (E_Video_Hwc_Planes *)data;
- if (evhp->e_plane != plane) return;
-
- E_FREE_FUNC(evhp->video_plane_ready_handler, e_plane_hook_del);
-
- if (evhp->wait_flag.vblank) return;
-
- _e_video_hwc_planes_pending_buffer_commit(evhp);
-}
-
-static void
-_e_video_hwc_planes_tdm_layer_usable_set(tdm_layer *layer, Eina_Bool usable)
-{
- tdm_layer *used_layer;
- Eina_List *l = NULL;
-
- if (usable)
- video_layers = eina_list_remove(video_layers, layer);
- else
- {
- EINA_LIST_FOREACH(video_layers, l, used_layer)
- if (used_layer == layer) return;
- video_layers = eina_list_append(video_layers, layer);
- }
-}
-
-static Eina_Bool
-_e_video_hwc_planes_tdm_layer_usable_get(tdm_layer *layer)
-{
- tdm_layer *used_layer;
- Eina_List *l = NULL;
-
- EINA_LIST_FOREACH(video_layers, l, used_layer)
- if (used_layer == layer)
- return EINA_FALSE;
- return EINA_TRUE;
-}
-
-static tdm_layer *
-_e_video_hwc_planes_available_video_tdm_layer_get(tdm_output *output)
-{
- tdm_layer *layer;
- tdm_layer_capability capabilities = 0;
- Eina_Bool has_video_layer = EINA_FALSE;
- int i, count = 0;
-#ifdef CHECKING_PRIMARY_ZPOS
- int primary_idx = 0, primary_zpos = 0;
- tdm_layer *primary_layer;
-#endif
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
-
- /* check video layers first */
- tdm_output_get_layer_count(output, &count);
- for (i = 0; i < count; i++)
- {
- layer = tdm_output_get_layer(output, i, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_VIDEO)
- {
- has_video_layer = EINA_TRUE;
- if (!_e_video_hwc_planes_tdm_layer_usable_get(layer)) continue;
- return layer;
- }
- }
-
- /* if a output has video layers, it means that there is no available video layer for video */
- if (has_video_layer)
- return NULL;
-
- /* check graphic layers second */
-#ifdef CHECKING_PRIMARY_ZPOS
- tdm_output_get_primary_index(output, &primary_idx);
- primary_layer = tdm_output_get_layer(output, primary_idx, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(primary_layer, NULL);
- tdm_layer_get_zpos(primary_layer, &primary_zpos);
-#endif
-
- for (i = 0; i < count; i++)
- {
- layer = tdm_output_get_layer(output, i, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(layer, NULL);
-
- tdm_layer_get_capabilities(layer, &capabilities);
- if (capabilities & TDM_LAYER_CAPABILITY_OVERLAY)
- {
-#ifdef CHECKING_PRIMARY_ZPOS
- int zpos = 0;
- tdm_layer_get_zpos(layer, &zpos);
- if (zpos >= primary_zpos) continue;
-#endif
- if (!_e_video_hwc_planes_tdm_layer_usable_get(layer)) continue;
- return layer;
- }
- }
-
- return NULL;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_tdm_layer_set(E_Video_Hwc_Planes *evhp)
-{
- E_Plane *plane = NULL;
- Eina_Bool need_wait;
- tdm_layer *layer;
- tdm_error ret;
- int zpos;
-
- if (evhp->tdm.layer)
- return EINA_TRUE;
-
- layer = _e_video_hwc_planes_available_video_tdm_layer_get(evhp->tdm.output);
- if (!layer)
- {
- VWR("no available layer for evhp", NULL);
- return EINA_FALSE;
- }
-
- _e_video_hwc_planes_tdm_layer_usable_set(layer, EINA_FALSE);
-
- ret = tdm_layer_get_zpos(layer, &zpos);
- if (ret == TDM_ERROR_NONE)
- plane = e_output_plane_get_by_zpos(evhp->base.e_output, zpos);
-
- if (!plane)
- {
- VWR("fail get e_plane", NULL);
- goto err_plane;
- }
-
- if (!e_plane_video_set(plane, EINA_TRUE, &need_wait))
- {
- VWR("fail set video to e_plane", NULL);
- goto err_plane;
- }
-
- if (need_wait)
- {
- evhp->video_plane_ready_handler =
- e_plane_hook_add(E_PLANE_HOOK_VIDEO_SET,
- _e_video_hwc_planes_cb_eplane_video_set_hook, evhp);
- }
-
- evhp->tdm.layer = layer;
- evhp->e_plane = plane;
-
- VIN("assign layer: %p", NULL, evhp->tdm.layer);
-
- return EINA_TRUE;
-
-err_plane:
- _e_video_hwc_planes_tdm_layer_usable_set(evhp->tdm.layer, EINA_TRUE);
-
- return EINA_FALSE;
-}
-
-static void
-_e_video_hwc_planes_cb_commit_handler(tdm_layer *layer, unsigned int sequence,
- unsigned int tv_sec, unsigned int tv_usec,
- void *user_data)
-{
- E_Video_Hwc_Planes *evhp;
-
- evhp = user_data;
- if (!evhp) return;
-
- if (!evhp->wait_flag.commit)
- NEVER_GET_HERE();
-
- evhp->wait_flag.commit = EINA_FALSE;
-
- e_video_hwc_current_fb_update((E_Video_Hwc *)evhp);
-}
-
-static void
-_e_video_hwc_planes_cb_vblank_handler(tdm_output *output, unsigned int sequence,
- unsigned int tv_sec, unsigned int tv_usec,
- void *user_data)
-{
- E_Video_Hwc_Planes *evhp;
- tdm_error err;
-
- evhp = user_data;
- if (!evhp) return;
-
- evhp->wait_flag.vblank = EINA_FALSE;
-
- if (evhp->video_plane_ready_handler) return;
-
- if (evhp->wait_flag.commit)
- {
- /* wait next vblank in case commit handler is not called yet. Because
- * that means committed buffer is not on display yet. */
- err = tdm_output_wait_vblank(evhp->tdm.output, 1, 0,
- _e_video_hwc_planes_cb_vblank_handler,
- evhp);
- if (err != TDM_ERROR_NONE)
- {
- VER("failed to set handler for wait vblank", evhp->base.ec);
- return;
- }
-
- evhp->wait_flag.vblank = EINA_TRUE;
- }
- else
- _e_video_hwc_planes_pending_buffer_commit(evhp);
-}
-
-static Eina_Bool
-_e_video_hwc_planes_buffer_commit(E_Video_Hwc_Planes *evhp, E_Comp_Wl_Video_Buf *vbuf, E_Client_Video_Info *info)
-{
- E_Client_Video_Info old_info;
- tdm_error ret;
-
- if (!evhp->tdm.layer)
- {
- VIN("set layer: show", evhp->base.ec);
- if (!_e_video_hwc_planes_tdm_layer_set(evhp))
- {
- VER("set layer failed", evhp->base.ec);
- return EINA_FALSE;
- }
- }
-
- if (evhp->video_plane_ready_handler)
- {
- VIN("wait for video plane ready: Pending commit vbuf(%p)",
- evhp->base.ec, vbuf);
-
- if (evhp->pending.vbuf)
- {
- /* Cannot reach here because following buffers are supposed
- * to be queued by 'e_video_hwc' until calling fb_update by
- * this child module. */
- NEVER_GET_HERE();
-
- return EINA_FALSE;
- }
-
- evhp->pending.vbuf = vbuf;
- memcpy(&evhp->pending.info, info, sizeof(E_Client_Video_Info));
-
- return EINA_TRUE;
- }
-
- if (evhp->tdm.prop_list)
- {
- // need call tdm property in list
- _tdm_layer_property_list_set(evhp->tdm.layer, &evhp->tdm.prop_list);
- }
-
- CLEAR(old_info);
- ret = _tdm_layer_info_get(evhp->tdm.layer, &old_info);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
-
- if (memcmp(&old_info, info, sizeof(tdm_info_layer)))
- {
- ret = _tdm_layer_info_set(evhp->tdm.layer, info);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
- }
-
- ret = _tdm_layer_buffer_set(evhp->tdm.layer, vbuf->tbm_surface);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
-
- ret = _tdm_layer_commit(evhp->tdm.layer, _e_video_hwc_planes_cb_commit_handler, evhp);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
-
- ret = tdm_output_wait_vblank(evhp->tdm.output, 1, 0, _e_video_hwc_planes_cb_vblank_handler, evhp);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(ret == TDM_ERROR_NONE, EINA_FALSE);
-
- evhp->wait_flag.commit = EINA_TRUE;
- evhp->wait_flag.vblank = EINA_TRUE;
-
- _tdm_layer_property_list_set(evhp->tdm.layer, &evhp->tdm.late_prop_list);
-
- e_video_hwc_client_mask_update((E_Video_Hwc *)evhp);
-
- struct wl_resource *surface = e_comp_wl_client_surface_get(evhp->base.ec);
- DBG("Client(%s):PID(%d) RscID(%d), Buffer(%p, refcnt:%d) is shown."
- "Geometry details are : buffer size(%dx%d) src(%d,%d, %dx%d)"
- " dst(%d,%d, %dx%d), transform(%d)",
- e_client_util_name_get(evhp->base.ec) ?: "No Name" , evhp->base.ec->netwm.pid,
- wl_resource_get_id(surface), vbuf, vbuf->ref_cnt,
- info->src_config.size.h, info->src_config.size.v, info->src_config.pos.x,
- info->src_config.pos.y, info->src_config.pos.w, info->src_config.pos.h,
- info->dst_pos.x, info->dst_pos.y, info->dst_pos.w, info->dst_pos.h, info->transform);
-
- return EINA_TRUE;
-}
-
-static void
-_e_video_hwc_planes_tdm_layer_unset(E_Video_Hwc_Planes *evhp)
-{
- unsigned int usable = 1;
-
- if (!evhp->tdm.layer) return;
-
- if (evhp->wait_flag.commit)
- {
- tdm_layer_remove_commit_handler(evhp->tdm.layer, _e_video_hwc_planes_cb_commit_handler, evhp);
- evhp->wait_flag.commit = EINA_FALSE;
- }
-
- _tdm_layer_usable_get(evhp->tdm.layer, &usable);
- if (!usable && !evhp->video_plane_ready_handler)
- {
- VIN("stop video", evhp->base.ec);
- _tdm_layer_buffer_unset(evhp->tdm.layer);
- _tdm_layer_commit(evhp->tdm.layer, NULL, NULL);
- }
-
- VIN("release layer: %p", evhp->base.ec, evhp->tdm.layer);
- _e_video_hwc_planes_tdm_layer_usable_set(evhp->tdm.layer, EINA_TRUE);
- evhp->tdm.layer = NULL;
- evhp->base.old_comp_buffer = NULL;
-
- e_plane_video_set(evhp->e_plane, EINA_FALSE, NULL);
- evhp->e_plane = NULL;
-
- E_FREE_FUNC(evhp->video_plane_ready_handler, e_plane_hook_del);
-}
-
-static void
-_e_video_hwc_planes_cb_hide(struct wl_listener *listener, void *data)
-{
- E_Video_Hwc_Planes *evhp = wl_container_of(listener, evhp, hide_listener);
-
- /* if stand_alone is true, not hide */
- if ((e_comp_wl_subsurface_check(evhp->base.ec)) &&
- (e_comp_wl_subsurface_stand_alone_mode_get(evhp->base.ec)))
- return;
-
- VIN("e_client hide", evhp->base.ec);
- if (evhp->tdm.layer)
- {
- VIN("unset layer: hide", evhp->base.ec);
- _e_video_hwc_planes_tdm_layer_unset(evhp);
- }
-}
-
-static tdm_error
-_e_video_hwc_planes_available_properties_get(E_Video_Hwc_Planes *evhp,
- const tdm_prop **props,
- int *count)
-{
- tdm_layer *tlayer;
- tdm_error ret = TDM_ERROR_OPERATION_FAILED;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(evhp, TDM_ERROR_BAD_REQUEST);
- EINA_SAFETY_ON_NULL_RETURN_VAL(props, TDM_ERROR_BAD_REQUEST);
- EINA_SAFETY_ON_NULL_RETURN_VAL(count, TDM_ERROR_BAD_REQUEST);
-
- tlayer = evhp->tdm.layer;
- /* if layer wasn't set then get an any available tdm_layer */
- if (tlayer == NULL)
- tlayer = _e_video_hwc_planes_available_video_tdm_layer_get(evhp->tdm.output);
- ret = tdm_layer_get_available_properties(tlayer, props, count);
-
- return ret;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_init(E_Video_Hwc_Planes *evhp, E_Output *output)
-{
- /* If tdm offers video layers, we will assign a tdm layer when showing */
- if (!_tdm_output_video_layer_exists(output->toutput))
- {
- /* If tdm doesn't offer video layers, we assign a tdm layer now. If
- * failed, video will be displayed via the UI rendering path. */
- if (!_e_video_hwc_planes_tdm_layer_set(evhp))
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static void
-_e_video_hwc_planes_destroy(E_Video_Hwc_Planes *evhp)
-{
- Tdm_Prop_Value *tdm_prop;
-
- if (!evhp)
- return;
-
- VIN("destroy", evhp->base.ec);
-
- if (evhp->tdm.prop_list)
- {
- EINA_LIST_FREE(evhp->tdm.prop_list, tdm_prop)
- free(tdm_prop);
- }
- if (evhp->tdm.late_prop_list)
- {
- EINA_LIST_FREE(evhp->tdm.late_prop_list, tdm_prop)
- free(tdm_prop);
- }
-
- if (evhp->tdm.prop_list)
- NEVER_GET_HERE();
- if (evhp->tdm.late_prop_list)
- NEVER_GET_HERE();
-
- if (evhp->wait_flag.vblank)
- {
- tdm_output_remove_vblank_handler(evhp->tdm.output, _e_video_hwc_planes_cb_vblank_handler, evhp);
- evhp->wait_flag.vblank = EINA_FALSE;
- }
-
- if (evhp->tdm.layer)
- {
- VIN("unset layer: destroy", evhp->base.ec);
- _e_video_hwc_planes_tdm_layer_unset(evhp);
- }
-
- free(evhp);
-}
-
-static void
-_e_video_hwc_planes_ec_event_deinit(E_Video_Hwc_Planes *evhp)
-{
- E_View_Client* view_client = e_client_view_get(evhp->base.ec);
-
- if (view_client)
- {
- e_view_event_listener_del(e_view_client_view_get(view_client), E_VIEW_HIDE, &evhp->hide_listener);
- evhp->hide_listener.notify = NULL;
- }
-}
-
-const char *
-_e_video_hwc_planes_prop_name_get_by_id(E_Video_Hwc_Planes *evhp, unsigned int id)
-{
- tdm_layer *layer;
- const tdm_prop *props;
- int i, count = 0;
-
- layer = _tdm_output_video_layer_get(evhp->tdm.output);
- tdm_layer_get_available_properties(layer, &props, &count);
- for (i = 0; i < count; i++)
- {
- if (props[i].id == id)
- {
- VDB("check property(%s)", evhp->base.ec, props[i].name);
- return props[i].name;
- }
- }
-
- return NULL;
-}
-
-static void
-_e_video_hwc_planes_property_post_set(E_Video_Hwc_Planes *evhp,
- unsigned int id,
- const char *name,
- tdm_value value)
-{
- Eina_Bool res;
-
- VDB("property_post_set: property(%s) value(%d)",
- evhp->base.ec, name, value.u32);
-
- res = _e_video_hwc_planes_prop_list_update(evhp->tdm.late_prop_list,
- name,
- value);
- if (res)
- return;
-
- _e_video_hwc_planes_prop_list_append(&evhp->tdm.late_prop_list,
- id, name, value);
-}
-
-static Eina_Bool
-_e_video_hwc_planes_property_pre_set(E_Video_Hwc_Planes *evhp,
- unsigned int id,
- const char *name,
- tdm_value value)
-{
- Eina_Bool res;
-
- VDB("property_pre_set: property(%s) value(%d)",
- evhp->base.ec, name, value.u32);
-
- res = _e_video_hwc_planes_prop_list_update(evhp->tdm.prop_list,
- name,
- value);
- if (res)
- return EINA_TRUE;
-
- res = _e_video_hwc_planes_prop_list_update(evhp->tdm.late_prop_list,
- name,
- value);
- if (res)
- return EINA_TRUE;
-
- res = _e_video_hwc_planes_prop_list_append(&evhp->tdm.prop_list,
- id, name, value);
-
- return res;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_property_save(E_Video_Hwc_Planes *evhp, unsigned int id, const char *name, tdm_value value)
-{
- return _e_video_hwc_planes_property_pre_set(evhp, id, name, value);
-}
-
-static void
-_e_video_hwc_planes_ec_event_init(E_Video_Hwc_Planes *evhp, E_Client *ec)
-{
- E_View_Client* view_client = e_client_view_get(ec);
-
- if (view_client)
- {
- evhp->hide_listener.notify = _e_video_hwc_planes_cb_hide;
- e_view_event_listener_add(e_view_client_view_get(view_client), E_VIEW_HIDE, &evhp->hide_listener);
- }
-}
-
-static void
-_e_video_hwc_planes_iface_destroy(E_Video_Hwc *evh)
-{
- E_Video_Hwc_Planes *evhp;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- _e_video_hwc_planes_ec_event_deinit(evhp);
- _e_video_hwc_planes_destroy(evhp);
-}
-
-static Eina_Bool
-_e_video_hwc_planes_iface_property_get(E_Video_Hwc *evh, unsigned int id, tdm_value *value)
-{
- E_Video_Hwc_Planes *evhp;
- tdm_error ret;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- ret = _tdm_layer_property_get(evhp->tdm.layer, id, value);
- if (ret != TDM_ERROR_NONE)
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_iface_property_set(E_Video_Hwc *evh, unsigned int id, tdm_value value, Eina_Bool sync)
-{
- E_Video_Hwc_Planes *evhp;
- Tdm_Prop_Value prop;
- const char *name;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- VIN("set layer: set_attribute", evhp->base.ec);
-
- name = _e_video_hwc_planes_prop_name_get_by_id(evhp, id);
-
- if (!evhp->tdm.layer)
- {
- /* FIXME
- * Set property with assigning layer right away if allowed_attribute
- * flag is set. The reason why we have to do like this isn't figured
- * yet. It's for backward compatibility. */
- if ((e_client_video_property_allow_get(evhp->base.ecv)) ||
- (sync == EINA_TRUE))
- {
- if (!_e_video_hwc_planes_tdm_layer_set(evhp))
- {
- VER("set layer failed", evhp->base.ec);
- return EINA_FALSE;
- }
-
- if (evhp->video_plane_ready_handler)
- {
- VIN("wait for video plane ready", evhp->base.ec);
- goto save;
- }
- }
- else
- {
- VIN("layer is not yet assigned", evhp->base.ec);
- goto save;
- }
- }
-
- VIN("set layer: call property(%s), value(%d)", evhp->base.ec, name, value.u32);
-
- prop.id = id;
- prop.value = value;
- _tdm_layer_property_set(evhp->tdm.layer, &prop);
-
- return EINA_TRUE;
-
-save:
- VIN("save property value", evhp->base.ec);
- if (!_e_video_hwc_planes_property_save(evhp, id, name, value))
- {
- VER("save property failed", evhp->base.ec);
- return EINA_FALSE;
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_iface_available_properties_get(E_Video_Hwc *evh, const tdm_prop **props, int *count)
-{
- E_Video_Hwc_Planes *evhp;
- tdm_error ret;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- ret = _e_video_hwc_planes_available_properties_get(evhp, props, count);
- if (ret != TDM_ERROR_NONE)
- return EINA_FALSE;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_iface_buffer_commit(E_Video_Hwc *evh, E_Comp_Wl_Video_Buf *vbuf)
-{
- E_Video_Hwc_Planes *evhp;
- E_Client_Video_Info info;
- Eina_Bool ret = EINA_TRUE;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- if (!vbuf)
- {
- if (evhp->tdm.layer)
- {
- VIN("unset layer: hide", evhp->base.ec);
- _e_video_hwc_planes_tdm_layer_unset(evhp);
- }
- }
- else
- {
- CLEAR(info);
- info.src_config.size.h = vbuf->width_from_pitch;
- info.src_config.size.v = vbuf->height_from_size;
- info.src_config.pos.x = vbuf->content_r.x;
- info.src_config.pos.y = vbuf->content_r.y;
- info.src_config.pos.w = vbuf->content_r.w;
- info.src_config.pos.h = vbuf->content_r.h;
- info.src_config.format = vbuf->tbmfmt;
- info.dst_pos.x = evhp->base.geo.tdm.output_r.x;
- info.dst_pos.y = evhp->base.geo.tdm.output_r.y;
- info.dst_pos.w = evhp->base.geo.tdm.output_r.w;
- info.dst_pos.h = evhp->base.geo.tdm.output_r.h;
- info.transform = vbuf->content_t;
-
- ret = _e_video_hwc_planes_buffer_commit(evhp, vbuf, &info);
- }
-
- return ret;
-}
-
-static Eina_Bool
-_e_video_hwc_planes_iface_check_if_pp_needed(E_Video_Hwc *evh)
-{
- E_Video_Hwc_Planes *evhp;
- E_Comp_Screen *e_comp_screen;
- int i, count = 0;
- const tbm_format *formats;
- Eina_Bool found = EINA_FALSE;
- tdm_layer_capability capabilities = 0;
-
- evhp = (E_Video_Hwc_Planes *)evh;
-
- tdm_layer *layer = _tdm_output_video_layer_get(evhp->tdm.output);
-
- tdm_layer_get_capabilities(layer, &capabilities);
-
- /* don't need pp if a layer has TDM_LAYER_CAPABILITY_VIDEO capability*/
- if (capabilities & TDM_LAYER_CAPABILITY_VIDEO)
- return EINA_FALSE;
-
- /* check formats */
- tdm_layer_get_available_formats(layer, &formats, &count);
- for (i = 0; i < count; i++)
- if (formats[i] == evhp->base.tbmfmt)
- {
- found = EINA_TRUE;
- break;
- }
-
- if (!found)
- {
- if (formats && count > 0)
- evhp->base.pp_tbmfmt = formats[0];
- else
- {
- WRN("No layer format information!!!");
- evhp->base.pp_tbmfmt = TBM_FORMAT_ARGB8888;
- }
- return EINA_TRUE;
- }
-
- if (capabilities & TDM_LAYER_CAPABILITY_SCANOUT)
- goto need_pp;
-
- /* check size */
- if (evhp->base.geo.input_r.w != evhp->base.geo.output_r.w || evhp->base.geo.input_r.h != evhp->base.geo.output_r.h)
- if (!(capabilities & TDM_LAYER_CAPABILITY_SCALE))
- goto need_pp;
-
- /* check rotate */
- e_comp_screen = e_comp_screen_get();
- if (evhp->base.geo.transform || (e_comp_screen && e_comp_screen->rotation > 0))
- if (!(capabilities & TDM_LAYER_CAPABILITY_TRANSFORM))
- goto need_pp;
-
- return EINA_FALSE;
-
-need_pp:
- evhp->base.pp_tbmfmt = evhp->base.tbmfmt;
- return EINA_TRUE;
-}
-
-static tbm_surface_h
-_e_video_hwc_planes_iface_displaying_buffer_get(E_Video_Hwc *evh)
-{
- E_Video_Hwc_Planes *evhp;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- return _tdm_layer_displaying_buffer_get(evhp->tdm.layer, NULL);
-}
-
-static void
-_e_video_hwc_planes_iface_set(E_Video_Hwc_Iface *iface)
-{
- iface->destroy = _e_video_hwc_planes_iface_destroy;
- iface->property_get = _e_video_hwc_planes_iface_property_get;
- iface->property_set = _e_video_hwc_planes_iface_property_set;
- iface->available_properties_get = _e_video_hwc_planes_iface_available_properties_get;
- iface->buffer_commit = _e_video_hwc_planes_iface_buffer_commit;
- iface->check_if_pp_needed = _e_video_hwc_planes_iface_check_if_pp_needed;
- iface->displaying_buffer_get = _e_video_hwc_planes_iface_displaying_buffer_get;
-}
-
-EINTERN E_Video_Hwc *
-e_video_hwc_planes_create(E_Output *output, E_Client *ec)
-{
- E_Video_Hwc_Planes *evhp;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, NULL);
-
- VIN("Create HWC Planes backend", ec);
-
- evhp = E_NEW(E_Video_Hwc_Planes, 1);
- EINA_SAFETY_ON_NULL_RETURN_VAL(evhp, NULL);
-
- evhp->base.e_output = output;
- evhp->tdm.output = output->toutput;
-
- if (!_e_video_hwc_planes_init(evhp, output))
- {
- ERR("Failed to init 'E_Video_Hwc_Planes'");
- free(evhp);
- return NULL;
- }
-
- _e_video_hwc_planes_ec_event_init(evhp, ec);
- _e_video_hwc_planes_iface_set(&evhp->base.backend);
-
- return (E_Video_Hwc *)evhp;
-}
-
-EINTERN Eina_Bool
-e_video_hwc_planes_property_delay_set(E_Video_Hwc *evh, unsigned int id, tdm_value value)
-{
- E_Video_Hwc_Planes *evhp;
- const char *name;
-
- evhp = (E_Video_Hwc_Planes *)evh;
- name = _e_video_hwc_planes_prop_name_get_by_id(evhp, id);
-
- _e_video_hwc_planes_property_post_set(evhp, id, name, value);
-
- return EINA_TRUE;
-}
#include "e_config_intern.h"
#include "e_dbus_conn_intern.h"
#include "e_main_intern.h"
-#include "e_hwc_planes_intern.h"
#include "e_linux_dmabuf_intern.h"
#include "e_comp_input_intern.h"
#include "e_screen_rotation_intern.h"
E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
E_Comp_Wl_Buffer_Viewport *vp = &cdata->scaler.buffer_viewport;
E_Surface *surface = e_surface_from_ec(ec);
- E_Zone *zone;
if (ec->ignored)
{
/* buffer transform */
if (vp->buffer.transform != state->buffer_viewport.buffer.transform)
{
- E_Output *eout;
int transform_change = (4 + state->buffer_viewport.buffer.transform - vp->buffer.transform) & 0x3;
/* when buffer is transformed, we have to apply the new evas-map */
if (transform_change == vp->wait_for_transform_change)
vp->wait_for_transform_change = 0;
-
- // TODO: This logic has to move to e_comp_hwc or e_hwc_window and it is
- // triggered by E_CLIENT_HOOK calls at those file.
- zone = e_comp_zone_find_by_ec(ec);
- if (zone)
- {
- eout = e_output_find(zone->output_id);
- if (eout && eout->hwc)
- {
- if (e_hwc_policy_get(eout->hwc) == E_HWC_POLICY_PLANES)
- {
- if (e_comp_is_on_overlay(ec))
- e_comp_hwc_client_end(ec, __FUNCTION__);
- }
- }
- }
}
/* assign a new buffer_vieport to cdata->scaler.buffer_viewport */
E_Client *ec;
E_Comp_Wl_Tizen_Hwc *tizen_hwc;
E_Comp_Wl_Tizen_Hwc_Commit_Feedback* hwc_commit_feedback;
- E_Hwc *hwc;
E_Surface *surface;
tizen_hwc = wl_resource_get_user_data(tizen_hwc_resource);
tizen_hwc->hwc_commit_feeback_list = eina_list_append(tizen_hwc->hwc_commit_feeback_list, hwc_commit_feedback);
ELOGF("TIZEN-HWC", "Request Commit Feedback by Client.(%p)", hwc_commit_feedback->ec, hwc_commit_feedback);
-
- if (!ec->hwc_window)
- {
- hwc = _e_comp_wl_tizen_hwc_client_hwc_get(ec);
- if (hwc)
- {
- if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- {
- ELOGF("TIZEN-HWC", "Not Supported in hwc planes policy.(%p)",
- hwc_commit_feedback->ec, hwc_commit_feedback);
- tizen_hwc_commit_feedback_send_committed(hwc_commit_feedback->resource,
- hwc_commit_feedback->serial);
- wl_resource_destroy(hwc_commit_feedback->resource);
- }
- }
- }
}
static const struct tizen_hwc_interface _e_comp_wl_tizen_hwc_implementation = {
static E_EomPtr g_eom = NULL;
-static Eina_Bool
-_e_eom_cb_comp_object_redirected(void *data, E_Client *ec)
-{
- E_EomCompObjectInterceptHookData *hook_data;
-
- EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_TRUE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_TRUE);
-
- hook_data = (E_EomCompObjectInterceptHookData* )data;
-
- if (!hook_data->ec || !hook_data->hook)
- return EINA_TRUE;
-
- if (hook_data->ec != ec)
- return EINA_TRUE;
-
- /* Hide the window from Enlightenment main screen */
- e_client_redirected_set(ec, EINA_FALSE);
-
- EOMINF("Redirect ec->frame:%p", ec, hook_data->eom_output->output, ec->frame);
-
- e_comp_object_intercept_hook_del(hook_data->hook);
- g_eom->comp_object_intercept_hooks = eina_list_remove(g_eom->comp_object_intercept_hooks, hook_data);
-
- free(hook_data);
-
- return EINA_TRUE;
-}
-
static inline eom_output_attribute_e
_e_eom_output_attribute_get(E_EomOutputPtr eom_output)
{
_e_eom_output_send_configure_event(E_EomOutput *eom_output, E_Client *ec)
{
E_Comp_Wl_Client_Data *cdata;
- E_EomCompObjectInterceptHookData *hook_data = NULL;
- E_Comp_Object_Intercept_Hook *hook = NULL;
int w, h;
cdata = e_client_cdata_get(ec);
EINA_SAFETY_ON_NULL_RETURN(cdata);
EINA_SAFETY_ON_NULL_RETURN(cdata->shell.configure_send);
- if (e_hwc_policy_get(eom_output->output->hwc) != E_HWC_POLICY_WINDOWS)
- {
- hook_data = E_NEW(E_EomCompObjectInterceptHookData, 1);
- EINA_SAFETY_ON_NULL_RETURN(hook_data);
-
- hook = e_comp_object_intercept_hook_add(E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER,
- _e_eom_cb_comp_object_redirected, hook_data);
- EINA_SAFETY_ON_NULL_GOTO(hook, err);
-
- hook_data->ec = ec;
- hook_data->eom_output = eom_output;
- hook_data->hook = hook;
-
- g_eom->comp_object_intercept_hooks = eina_list_append(g_eom->comp_object_intercept_hooks, hook_data);
- }
-
/* get the output size */
e_output_size_get(eom_output->output, &w, &h);
e_client_shell_configure_send(ec, 0, w, h);
EOMINF("Send Configure Event for Presentation (%d X %d)", ec, eom_output->output, w, h);
return;
-err:
- if (hook_data)
- free(hook_data);
}
static E_EomClientPtr
{
if (!output) continue;
if (!output->hwc) continue;
- if (output->hwc->hwc_policy != E_HWC_POLICY_WINDOWS) continue;
if (!output->hwc->tdm_hwc_fence) continue;
ret = EINA_TRUE;
{
E_Comp_Screen_Tzsr *tzsr;
E_Client *ec;
- E_Hwc_Policy hwc_policy;
- E_Output *output;
- E_Zone *zone;
- Eina_Bool ignore = EINA_TRUE;
+ Eina_Bool ignore = EINA_FALSE;
struct ds_tizen_screen_rotation_info *info;
struct ds_surface *ds_surface;
struct wl_resource *surface_resource;
tzsr_list = eina_list_append(tzsr_list, tzsr);
- zone = e_comp_zone_find_by_ec(ec);
- if (zone)
- {
- output = e_output_find(zone->output_id);
- if (output)
- {
- hwc_policy = e_hwc_policy_get(output->hwc);
- if (hwc_policy == E_HWC_POLICY_WINDOWS)
- ignore = EINA_FALSE;
- }
- }
-
ELOGF("TRANSFORM", "|tzsr(%p) client_ignore(%d) ignore(%d)",
ec, tzsr, e_config->screen_rotation_client_ignore, ignore);
#include <e_zone.h>
#include <e_actions.h>
#include <e_util_transform.h>
-#include <e_plane_renderer.h>
#include <e_pixmap.h>
#include <e_bindings.h>
#include <e_config.h>
E_Indicator_Visible_Type visible_type;
} indicator;
- E_Plane_Renderer_Client *renderer_client;
+ EINA_DEPRECATED void *renderer_client;
struct
{
int nocomp_override; //number of times hwc override has been requested
Eina_Bool nocomp : 1; // TODO: remove it from E_Comp!!
Eina_Bool hwc : 1;
- Eina_Bool hwc_reuse_cursor_buffer;
- Eina_Bool hwc_sync_mode_change;
- Eina_Bool hwc_use_detach;
- Eina_Bool hwc_ignore_primary;
+ EINA_DEPRECATED Eina_Bool hwc_reuse_cursor_buffer;
+ EINA_DEPRECATED Eina_Bool hwc_sync_mode_change;
+ EINA_DEPRECATED Eina_Bool hwc_use_detach;
+ EINA_DEPRECATED Eina_Bool hwc_ignore_primary;
Eina_Bool hwc_send_redraw_request;
Eina_Bool hwc_prefer_gbm;
Eina_Bool use_native_type_buffer : 1; // use native buffer type
unsigned char nocomp_use_timer;
double nocomp_begin_timeout;
unsigned char hwc;
- unsigned char hwc_use_multi_plane; // 0: regards hwc layer is single. comp or nocomp switches only, 1: regards hwc layer is multiple
+ EINA_DEPRECATED unsigned char hwc_use_multi_plane;
unsigned char hwc_deactive; // 0: run hwc policy if capable of, 1: not to run hwc policy
- unsigned char hwc_reuse_cursor_buffer; // 0: none, 1: reuse hwc cursor buffer when cursor image is changed
- unsigned char hwc_sync_mode_change; // 0: none, 1: synchronize scanout buffer when hwc mode change in reserved memory plane
- unsigned char hwc_ignore_primary; // 0: none, 1: hwc use plane has lowest zpos and support rgb to default ui layer
- unsigned char hwc_use_detach; // 0: hwc use dequeue protocol, 1: hwc use detach request when synchronize scanout buffer
+ EINA_DEPRECATED unsigned char hwc_reuse_cursor_buffer;
+ EINA_DEPRECATED unsigned char hwc_sync_mode_change;
+ EINA_DEPRECATED unsigned char hwc_ignore_primary;
+ EINA_DEPRECATED unsigned char hwc_use_detach;
unsigned char hwc_send_redraw_request; // 0: none, 1: send redraw request to client when client need to redraw for hwc
unsigned char hwc_prefer_gbm; //0: prefer creating ecore_evas with tbm, 1: prefer creating ecore_evas with gbm
unsigned char use_native_type_buffer; // 0: use the tbm_buffer(tbm_surface), 1: use the native_buffer(wl_buffer)
typedef enum _E_Hwc_Policy
{
E_HWC_POLICY_NONE = 0,
- E_HWC_POLICY_PLANES, // hwc_planes policy that controls the hwc policy at e20 with e_planes
+ E_HWC_POLICY_PLANES, // deprecated
E_HWC_POLICY_WINDOWS, // hwc_windows policy that controls the hwc policy at tdm-backend with e_hwc_windows
} E_Hwc_Policy;
-typedef enum _E_Hwc_Intercept_Hook_Point
-{
- E_HWC_INTERCEPT_HOOK_PREPARE_PLANE,
- E_HWC_INTERCEPT_HOOK_END_ALL_PLANE,
- E_HWC_INTERCEPT_HOOK_LAST,
-} E_Hwc_Intercept_Hook_Point;
-
typedef enum _E_Hwc_Hook_Point
{
E_HWC_HOOK_NORENDER_SET,
hwc_value_type type;
} hwc_prop;
-typedef Eina_Bool (*E_Hwc_Intercept_Hook_Cb)(void *data, E_Hwc *hwc);
-typedef struct _E_Hwc_Intercept_Hook E_Hwc_Intercept_Hook;
-
typedef void (*E_Hwc_Hook_Cb)(void *data, E_Hwc *hwc);
typedef struct _E_Hwc_Hook E_Hwc_Hook;
Eina_Bool primary_output;
- /* variables for hwc_planes polic */
- Eina_Bool hwc_use_multi_plane;
-
/* variables for hwc_windows policy */
tdm_hwc *thwc;
Eina_Bool hwc_wins;
E_API extern int E_EVENT_HWC_ACTIVE;
E_API extern int E_EVENT_HWC_DEACTIVE;
-E_API E_Hwc_Intercept_Hook *e_hwc_intercept_hook_add(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc_Intercept_Hook_Cb func, const void *data);
-E_API void e_hwc_intercept_hook_del(E_Hwc_Intercept_Hook *ch);
-
E_API E_Hwc_Policy e_hwc_policy_get(E_Hwc *hwc);
E_API Eina_Bool e_hwc_available_properties_get(E_Hwc *hwc, const hwc_prop **props, int *count);
E_API Eina_Bool e_hwc_deactive_get(E_Hwc *hwc);
E_API E_Output *e_hwc_output_get(E_Hwc *hwc);
E_API E_Hwc_Policy e_hwc_hwc_policy_get(E_Hwc *hwc);
-E_API void e_hwc_hwc_use_multi_plane_set(E_Hwc *hwc, Eina_Bool set);
-E_API Eina_Bool e_hwc_hwc_use_multi_plane_get(E_Hwc *hwc);
#endif
+++ /dev/null
-#ifndef E_HWC_PLANES_H
-#define E_HWC_PLANES_H
-
-#include <e_types.h>
-
-E_API void e_hwc_planes_end(E_Hwc *hwc, const char *location);
-
-#endif
#include "e_comp_canvas.h"
#include "e_utils.h"
#include "e_hints.h"
-#include "e_plane.h"
-#include "e_plane_renderer.h"
#include "e_output.h"
-#include "e_hwc_planes.h"
#include "e_hwc_windows.h"
#include "e_hwc_window.h"
#include "e_hwc.h"
#include <e_comp_screen.h>
#include <e_hwc.h>
#include <e_client.h>
-#include <e_plane.h>
#include <tbm_surface.h>
#include <tdm.h>
Eina_Bool enabled : 1; // should this monitor be enabled?
} config;
- int plane_count;
- Eina_List *planes;
+ EINA_DEPRECATED int plane_count;
+ EINA_DEPRECATED Eina_List *planes;
E_Zone *zone;
tdm_output *toutput;
E_API E_Output *e_output_find(const char *id);
E_API E_Output *e_output_find_by_index(int index);
-E_API const Eina_List *e_output_planes_get(E_Output *output);
-E_API E_Plane *e_output_plane_get_by_zpos(E_Output *output, int zpos);
E_API Eina_Bool e_output_available_properties_get(E_Output *output, const output_prop **props, int *count);
E_API Eina_Bool e_output_property_get(E_Output *output, unsigned int id, output_prop_value *value);
+++ /dev/null
-#ifndef E_PLANE_H
-#define E_PLANE_H
-
-//TODO: This file will be deprecated and will be removed.
-
-
-#include <e_types.h>
-#include <e_comp_screen.h>
-#include <e_output.h>
-#include <e_plane_renderer.h>
-#include <e_comp_wl.h>
-#include <e_plane_renderer.h>
-#include <e_client.h>
-
-#define E_PLANE_TYPE (int)0xE0b11001
-
-typedef struct _E_Plane_Commit_Data E_Plane_Commit_Data;
-typedef struct _E_Event_Plane_Win_Change E_Event_Plane_Win_Change;
-typedef struct _E_Plane_Hook E_Plane_Hook;
-typedef void (*E_Plane_Hook_Cb) (void *data, E_Plane *plane);
-
-typedef enum _E_Plane_Type
-{
- E_PLANE_TYPE_INVALID,
- E_PLANE_TYPE_VIDEO,
- E_PLANE_TYPE_GRAPHIC,
- E_PLANE_TYPE_CURSOR
-} E_Plane_Type;
-
-typedef enum _E_Plane_Role
-{
- E_PLANE_ROLE_NONE,
- E_PLANE_ROLE_VIDEO,
- E_PLANE_ROLE_OVERLAY,
- E_PLANE_ROLE_CURSOR
-} E_Plane_Role;
-
-typedef enum _E_Plane_Color
-{
- E_PLANE_COLOR_INVALID,
- E_PLANE_COLOR_YUV,
- E_PLANE_COLOR_RGB
-} E_Plane_Color;
-
-
-struct _E_Plane
-{
- int index;
- int zpos;
- const char *name;
- E_Plane_Type type;
- E_Plane_Color color;
- Eina_Bool is_primary;
- Eina_Bool is_fb; // fb target
- Eina_Bool is_reserved; // surface assignment reserved
-
- E_Client *ec;
- E_Client *prepare_ec;
- Eina_Bool ec_redirected;
-
- Eina_Bool reserved_memory;
-
- tdm_layer *tlayer;
- tdm_info_layer info;
- tbm_surface_h tsurface;
- int buffer_transform;
-
- E_Plane_Renderer *renderer;
- E_Output *output;
-
- unsigned int buffer_flags;
- Eina_Bool wait_commit;
- Eina_List *commit_data_list;
- Eina_Bool unset_candidate;
- Eina_Bool unset_try;
- Eina_Bool unset_commit;
- int unset_counter;
-
- Eina_Bool is_video;
- Eina_Bool reserved_video;
-
- Eina_Bool fetch_retry;
-
- E_Plane *fb_change;
- int fb_change_counter;
-
- Eina_Bool commit_per_vblank;
-
- /* true if plane's ec is set or unset.
- * false when E_Event_Plane_Win_Change has been generated.
- */
- Eina_Bool need_ev;
-
- E_Plane_Role role;
-
- Eina_Bool skip_surface_set;
-
- Eina_List *available_formats;
-
- /* for pp */
- tdm_pp *tpp;
- Eina_List *pp_data_list;
- Eina_List *pending_pp_data_list;
- Eina_List *pending_pp_commit_data_list;
- tbm_surface_queue_h pp_tqueue;
- tbm_surface_h pp_tsurface;
- Eina_Bool pp_set_info;
- Eina_Bool pp_set;
- Eina_Bool pp_commit;
- Eina_Bool pp_layer_commit;
- E_Plane_Commit_Data *pp_layer_commit_data;
- Eina_Rectangle pp_rect;
-
- /* for external */
- Eina_Bool is_external;
- Eina_Rectangle mirror_rect;
- E_Output_Display_Mode display_mode;
- E_Output *output_primary;
-
- /* current display information */
- struct
- {
- E_Comp_Wl_Buffer_Ref buffer_ref;
- tbm_surface_h tsurface;
- E_Plane_Renderer *renderer;
- E_Client *ec;
- } display_info;
-
- double fps;
- double old_fps;
- double frametimes[122];
- double time;
- double lapse;
- int cframes;
- int flapse;
-
- int set_counter;
- Eina_Bool fb_sync_wait;
- Eina_Bool fb_sync_done;
-
- Eina_Bool unset_ec_pending;
-};
-
-struct _E_Plane_Commit_Data {
- tbm_surface_h tsurface;
- E_Plane *plane;
- E_Plane_Renderer *renderer;
- E_Client *ec;
- E_Comp_Wl_Buffer_Ref buffer_ref;
-};
-
-typedef enum _E_Plane_Hook_Point
-{
- E_PLANE_HOOK_VIDEO_SET,
- E_PLANE_HOOK_UNSET,
- E_PLANE_HOOK_LAST
-} E_Plane_Hook_Point;
-
-struct _E_Plane_Hook
-{
- EINA_INLIST;
- E_Plane_Hook_Point hookpoint;
- E_Plane_Hook_Cb func;
- void *data;
- unsigned char delete_me : 1;
-};
-
-struct _E_Event_Plane_Win_Change
-{
- E_Plane *ep;
- E_Client *ec;
-};
-
-E_API extern int E_EVENT_PLANE_WIN_CHANGE;
-
-EINTERN Eina_Bool e_plane_init(void);
-EINTERN void e_plane_shutdown(void);
-EINTERN E_Plane *e_plane_new(E_Output *output, int index);
-EINTERN void e_plane_free(E_Plane *plane);
-EINTERN Eina_Bool e_plane_setup(E_Plane *plane);
-EINTERN Eina_Bool e_plane_fetch(E_Plane *plane);
-EINTERN void e_plane_unfetch(E_Plane *plane);
-EINTERN E_Plane_Commit_Data *e_plane_commit_data_aquire(E_Plane *plane);
-EINTERN void e_plane_commit_data_release(E_Plane *plane, E_Plane_Commit_Data *data);
-EINTERN void e_plane_hwc_trace_debug(Eina_Bool onoff);
-EINTERN Eina_Bool e_plane_render(E_Plane *plane);
-EINTERN Eina_Bool e_plane_commit(E_Plane *plane);
-EINTERN Eina_Bool e_plane_offscreen_commit(E_Plane *plane);
-EINTERN void e_plane_show_state(E_Plane *plane);
-EINTERN Eina_Bool e_plane_is_unset_candidate(E_Plane *plane);
-EINTERN Eina_Bool e_plane_is_unset_try(E_Plane *plane);
-EINTERN void e_plane_unset_try_set(E_Plane *plane, Eina_Bool set);
-EINTERN Eina_Bool e_plane_unset_commit_check(E_Plane *plane, Eina_Bool fb_commit);
-EINTERN Eina_Bool e_plane_set_commit_check(E_Plane *plane, Eina_Bool fb_commit);
-EINTERN Eina_Bool e_plane_is_fetch_retry(E_Plane *plane);
-EINTERN Eina_Bool e_plane_fb_target_set(E_Plane *plane, Eina_Bool set);
-EINTERN Eina_Bool e_plane_available_formats_get(E_Plane *plane, const tbm_format **formats, int *count);
-EINTERN Eina_Bool e_plane_pp_commit(E_Plane *plane);
-EINTERN Eina_Bool e_plane_pp_commit_possible_check(E_Plane *plane);
-EINTERN Eina_Bool e_plane_zoom_set(E_Plane *plane, Eina_Rectangle *rect);
-EINTERN void e_plane_zoom_unset(E_Plane *plane);
-EINTERN Eina_Bool e_plane_fps_get(E_Plane *plane, double *fps);
-EINTERN void e_plane_dpms_off(E_Plane *plane);
-EINTERN Eina_Bool e_plane_external_fetch(E_Plane *plane);
-EINTERN Eina_Bool e_plane_external_commit(E_Plane *plane);
-EINTERN Eina_Bool e_plane_external_set(E_Plane *plane, Eina_Rectangle *rect, E_Output_Display_Mode display_mode);
-EINTERN Eina_Bool e_plane_external_reset(E_Plane *plane, Eina_Rectangle *rect);
-EINTERN void e_plane_external_unset(E_Plane *plane);
-EINTERN void e_plane_renderer_unset(E_Plane *plane);
-EINTERN void e_plane_renderer_clean(E_Plane *plane);
-
-
-EINTERN Eina_Bool e_plane_type_set(E_Plane *plane, E_Plane_Type type);
-EINTERN E_Plane_Type e_plane_type_get(E_Plane *plane);
-EINTERN Eina_Bool e_plane_role_set(E_Plane *plane, E_Plane_Role role);
-EINTERN E_Plane_Role e_plane_role_get(E_Plane *plane);
-E_API E_Client *e_plane_ec_get(E_Plane *plane);
-E_API Eina_Bool e_plane_ec_set(E_Plane *plane, E_Client *ec);
-E_API E_Client *e_plane_ec_prepare_get(E_Plane *plane);
-E_API Eina_Bool e_plane_ec_prepare_set(E_Plane *plane, E_Client *ec);
-E_API const char *e_plane_ec_prepare_set_last_error_get(E_Plane *plane);
-E_API Eina_Bool e_plane_is_primary(E_Plane *plane);
-E_API Eina_Bool e_plane_is_cursor(E_Plane *plane);
-E_API E_Plane_Color e_plane_color_val_get(E_Plane *plane);
-E_API Eina_Bool e_plane_is_fb_target(E_Plane *plane);
-E_API Eina_Bool e_plane_is_reserved(E_Plane *plane);
-E_API void e_plane_reserved_set(E_Plane *plane, Eina_Bool set);
-
-EINTERN Eina_Bool e_plane_video_usable(E_Plane *plane);
-E_API Eina_Bool e_plane_video_set(E_Plane *plane, Eina_Bool set, Eina_Bool *wait);
-E_API Eina_Bool e_plane_is_video_get(E_Plane *plane);
-
-E_API E_Plane_Hook *e_plane_hook_add(E_Plane_Hook_Point hookpoint, E_Plane_Hook_Cb func, const void *data);
-E_API void e_plane_hook_del(E_Plane_Hook *ch);
-
-E_API int e_plane_zpos_get(E_Plane *plane);
-E_API E_Output *e_plane_output_get(E_Plane *plane);
-E_API tdm_layer *e_plane_tdm_layer_get(E_Plane *plane);
-
-#endif
+++ /dev/null
-#ifndef E_PLANE_RENDERER_H
-#define E_PLANE_RENDERER_H
-
-//TODO: This file will be deprecated and will be removed.
-
-
-#include <e_types.h>
-#include <e_comp_screen.h>
-#include <e_output.h>
-#include <e_plane.h>
-
-typedef struct _E_Plane_Renderer_Client E_Plane_Renderer_Client;
-typedef struct _E_Plane_Renderer_Buffer E_Plane_Renderer_Buffer;
-
-typedef enum _E_Plane_Renderer_State
-{
- E_PLANE_RENDERER_STATE_NONE,
- E_PLANE_RENDERER_STATE_CANDIDATE,
- E_PLANE_RENDERER_STATE_ACTIVATE,
- E_PLANE_RENDERER_STATE_PENDING_DEACTIVATE,
-} E_Plane_Renderer_State;
-
-struct _E_Plane_Renderer {
- tbm_surface_queue_h tqueue;
- int tqueue_width;
- int tqueue_height;
- int tqueue_size;
-
- tbm_surface_h cursor_tsurface;
- int cursor_rotation;
- E_Client *ec;
- E_Plane_Renderer_State state;
-
- tbm_surface_h displaying_tsurface; /* current tsurface displaying */
- tbm_surface_h previous_tsurface; /* previous tsurface displayed */
-
- Eina_List *disp_surfaces;
- Eina_List *exported_surfaces;
- Eina_List *released_surfaces;
-
- Ecore_Evas *ee;
- Evas *evas;
- Eina_Bool update_ee;
- Eina_Bool update_exist;
-
- E_Plane *plane;
-
- Ecore_Fd_Handler *event_hdlr;
- int event_fd;
- int mode_change_age;
-
- Eina_List *renderer_buffers;
- Eina_Bool pending_deactivate;
-
- Eina_Bool rendered;
-
- Eina_Bool need_change_buffer_transform;
-
- int exported_wl_buffer_count;
-
- tbm_surface_h render_dequeued_tsurface;
-
- Eina_Bool send_dequeue;
-
- struct {
- int width;
- int height;
- } recreate_info;
-};
-
-EINTERN Eina_Bool e_plane_renderer_init(void);
-EINTERN void e_plane_renderer_shutdown(void);
-EINTERN E_Plane_Renderer *e_plane_renderer_new(E_Plane *plane);
-EINTERN void e_plane_renderer_del(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_render(E_Plane_Renderer *renderer, Eina_Bool is_fb);
-EINTERN Eina_Bool e_plane_renderer_norender(E_Plane_Renderer *renderer, Eina_Bool is_fb);
-EINTERN Eina_Bool e_plane_renderer_activate(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN Eina_Bool e_plane_renderer_deactivate(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_reserved_activate(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN Eina_Bool e_plane_renderer_reserved_deactivate(E_Plane_Renderer *renderer);
-EINTERN E_Plane_Renderer_State e_plane_renderer_state_get(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_update_exist_set(E_Plane_Renderer *renderer, Eina_Bool update_exit);
-EINTERN Eina_Bool e_plane_renderer_update_exist_check(E_Plane_Renderer *renderer);
-EINTERN E_Plane *e_plane_renderer_plane_get(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_displaying_surface_set(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-EINTERN tbm_surface_h e_plane_renderer_displaying_surface_get(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_previous_surface_set(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-
-EINTERN E_Plane_Renderer_Client *e_plane_renderer_client_new(E_Client *ec);
-EINTERN void e_plane_renderer_client_free(E_Plane_Renderer_Client *renderer_client);
-EINTERN E_Plane_Renderer_Client *e_plane_renderer_client_get(E_Client *ec);
-EINTERN tbm_surface_h e_plane_renderer_client_surface_recieve(E_Plane_Renderer_Client *renderer_client);
-EINTERN E_Plane_Renderer *e_plane_renderer_client_renderer_get(E_Plane_Renderer_Client *renderer_client);
-
-EINTERN tbm_surface_queue_h e_plane_renderer_surface_queue_create(E_Plane_Renderer *renderer, int width, int height, unsigned int buffer_flags);
-EINTERN tbm_surface_queue_h e_plane_renderer_surface_queue_recreate(E_Plane_Renderer *renderer, int width, int height, unsigned int buffer_flags);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_set(E_Plane_Renderer *renderer, tbm_surface_queue_h tqueue);
-EINTERN void e_plane_renderer_surface_queue_destroy(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_can_acquire(E_Plane_Renderer *renderer);
-EINTERN tbm_surface_h e_plane_renderer_surface_queue_acquire(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_cancel_acquire(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-EINTERN void e_plane_renderer_surface_queue_release(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_enqueue(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_can_dequeue(E_Plane_Renderer *renderer);
-EINTERN tbm_surface_h e_plane_renderer_surface_queue_dequeue(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_surface_queue_clear(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_surface_queue_sync_count_set(E_Plane_Renderer *renderer, unsigned int sync_count);
-EINTERN void e_plane_renderer_surface_send(E_Plane_Renderer *renderer, E_Client *ec, tbm_surface_h tsurface);
-EINTERN Eina_Bool e_plane_renderer_surface_usable_send(E_Plane_Renderer *renderer, E_Client *ec, tbm_surface_h tsurface);
-EINTERN Eina_Bool e_plane_renderer_ec_set(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN Eina_Bool e_plane_renderer_cursor_ec_set(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN tbm_surface_h e_plane_renderer_cursor_surface_get(E_Plane_Renderer *renderer);
-EINTERN Eina_Bool e_plane_renderer_cursor_surface_refresh(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN Eina_Bool e_plane_renderer_ecore_evas_use(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_sent_surface_recevie(E_Plane_Renderer *renderer, tbm_surface_h tsurface);
-EINTERN Eina_Bool e_plane_renderer_ec_valid_check(E_Plane_Renderer *renderer, E_Client *ec);
-EINTERN int e_plane_renderer_render_count_get(E_Plane_Renderer *renderer);
-EINTERN void e_plane_renderer_ecore_evas_force_render(E_Plane_Renderer *renderer);
-
-EINTERN void e_plane_renderer_hwc_trace_debug(Eina_Bool onoff);
-EINTERN void e_plane_renderer_show_state(E_Plane_Renderer *renderer);
-
-#endif
typedef struct _E_Hwc_Window_Queue E_Hwc_Window_Queue; // type of e_hwc_window_queue_intern.h
typedef struct _E_Hwc_Window_Queue_Buffer E_Hwc_Window_Queue_Buffer; // type of e_hwc_window_queue_intern.h
typedef struct _E_Hwc_Window_Queue_Buffer_Ref E_Hwc_Window_Queue_Buffer_Ref; // type of e_hwc_window_queue_intern.h
-typedef struct _E_Plane E_Plane; // type of e_plane.h
-typedef struct _E_Plane_Renderer E_Plane_Renderer; // type of e_plane_renderer.h
typedef struct _E_Comp_Wl_Buffer E_Comp_Wl_Buffer; // type of e_comp_wl.h
typedef struct _E_Comp_Wl_Buffer_Ref E_Comp_Wl_Buffer_Ref; // type of e_comp_wl.h
typedef struct _E_Object E_Object; // type of e_object.h