static void _e_comp_wl_buffer_unref(E_Comp_Wl_Buffer *buffer);
static void _e_comp_wl_buffer_reference_cb_destroy(struct wl_listener *listener, void *data);
-static E_Buffer *_e_buffer_create(struct ds_buffer *ds_buffer, E_Client *ec);
+static E_Buffer *_e_buffer_create(struct ds_buffer *ds_buffer);
static E_Buffer *_e_buffer_from_base(E_Comp_Wl_Buffer *base);
static E_Buffer *_e_buffer_from_buffer(struct ds_buffer *ds_buffer);
static void _e_buffer_cb_resource_destroy(struct wl_listener *listener, void *data);
}
EINTERN E_Comp_Wl_Buffer *
-e_comp_wl_buffer_get(struct ds_buffer *ds_buffer, E_Client *ec)
+e_comp_wl_buffer_get(struct ds_buffer *ds_buffer)
{
E_Buffer *buffer;
if (buffer)
goto done;
- buffer = _e_buffer_create(ds_buffer, ec);
+ buffer = _e_buffer_create(ds_buffer);
if (!buffer)
{
ERR("Failed to create E_Comp_Wl_Buffer");
}
static Eina_Bool
-_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer,
- E_Client *ec)
+_e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer)
{
tbm_surface_h tsurface;
- if (!base || !ds_buffer || !ec) return EINA_FALSE;
-
tsurface = e_tbm_gbm_server_tbm_surface_get_from_buffer(ds_buffer);
if (!tsurface)
return EINA_FALSE;
- if (ec->comp_data->video_client)
- {
- base->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
- base->w = base->h = 1;
- base->format = 0;
- }
- else if (e_client_video_hw_composition_check(ec))
- {
- base->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
- base->w = tbm_surface_get_width(tsurface);
- base->h = tbm_surface_get_height(tsurface);
- base->format = tbm_surface_get_format(tsurface);
- }
- else
- {
- base->type = E_COMP_WL_BUFFER_TYPE_TBM;
- base->w = tbm_surface_get_width(tsurface);
- base->h = tbm_surface_get_height(tsurface);
- base->format = tbm_surface_get_format(tsurface);
- }
-
+ base->type = E_COMP_WL_BUFFER_TYPE_TBM;
+ base->w = tbm_surface_get_width(tsurface);
+ base->h = tbm_surface_get_height(tsurface);
+ base->format = tbm_surface_get_format(tsurface);
base->tbm_surface = tsurface;
return EINA_TRUE;
}
static Eina_Bool
-_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer, E_Client *ec)
+_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer)
{
struct wl_shm_buffer *shmbuff;
struct wl_resource *resource;
base->h = 1;
base->format = WL_SHM_FORMAT_ARGB8888;
}
- else if (!_e_comp_wl_buffer_tbm_type_get(base, ds_buffer, ec))
+ else if (!_e_comp_wl_buffer_tbm_type_get(base, ds_buffer))
{
ERR("Invalid resource:%u", wl_resource_get_id(resource));
return EINA_FALSE;
wl_signal_init(&base->destroy_signal);
- if (ec)
- {
- base->debug_info.owner_ptr = (void *)ec;
- base->debug_info.owner_name = eina_stringshare_add(ec->icccm.name?:"");
- }
-
- DBG("Wl Buffer Create: b %p owner '%s'(%p)",
- base, base->debug_info.owner_name, base->debug_info.owner_ptr);
+ DBG("E_Comp_Wl_Buffer Create: b %p", base);
return EINA_TRUE;
}
}
static E_Buffer *
-_e_buffer_create(struct ds_buffer *ds_buffer, E_Client *ec)
+_e_buffer_create(struct ds_buffer *ds_buffer)
{
E_Buffer *buffer;
buffer->ds_buffer = ds_buffer;
- if (!_e_comp_wl_buffer_init(&buffer->base, ds_buffer, ec))
+ if (!_e_comp_wl_buffer_init(&buffer->base, ds_buffer))
{
free(buffer);
return NULL;
}
static void
+_e_surface_buffer_video_content_type_check_and_set(E_Surface *surface, E_Comp_Wl_Buffer *buffer)
+{
+ E_Client *ec = surface->ec;
+
+ if (ec->comp_data->video_client)
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+ buffer->w = buffer->h = 1;
+ buffer->format = 0;
+ }
+ else if (e_client_video_hw_composition_check(ec))
+ {
+ buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+ }
+}
+
+static void
_e_surface_pending_buffer_update(E_Surface *surface)
{
struct ds_surface *ds_surface = surface->ds_surface;
E_Comp_Wl_Buffer *buffer = NULL;
if (ds_surface->buffer)
- buffer = e_comp_wl_buffer_get(ds_surface->buffer, ec);
+ {
+ buffer = e_comp_wl_buffer_get(ds_surface->buffer);
+ if (buffer)
+ _e_surface_buffer_video_content_type_check_and_set(surface, buffer);
+ }
e_comp_wl_client_surface_pending_buffer_set(ec, buffer,
ds_surface->current.dx,