return EINA_FALSE;
}
- gbm_bo_destroy(gbo);
+ if (!e_comp_wl_tbm_gbm_bo_user_data_set(tsurface, gbo))
+ {
+ tbm_surface_destroy(tsurface);
+ gbm_bo_destroy(gbo);
+ return EINA_FALSE;
+ }
}
if ((ec) && (ec->comp_data->video_client))
#include <tbm_surface_internal.h>
#include <gbm.h>
+static uint64_t e_comp_wl_tbm_gbm_bo_key;
+#define E_COMP_WL_TBM_GBM_BO_KEY (unsigned long)(&e_comp_wl_tbm_gbm_bo_key)
+
static E_Comp_Wl_Tbm_Funcs *_e_comp_wl_tbm_funcs = NULL;
typedef struct {
if (tbo) tbm_bo_unref(tbo);
return tsurface;
}
+
+static void
+_e_comp_wl_tbm_gbm_bo_cb_tbm_surface_destroy(void *data)
+{
+ struct gbm_bo *gbo;
+
+ gbo = (struct gbm_bo *)data;
+ if (!gbo) return;
+
+ gbm_bo_destroy(gbo);
+}
+
+EINTERN Eina_Bool
+e_comp_wl_tbm_gbm_bo_user_data_set(tbm_surface_h tsurface, void *gbo)
+{
+ int ret;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(tsurface, EINA_FALSE);
+
+ ret = tbm_surface_internal_add_user_data(tsurface, E_COMP_WL_TBM_GBM_BO_KEY,
+ _e_comp_wl_tbm_gbm_bo_cb_tbm_surface_destroy);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EINA_FALSE);
+
+ ret = tbm_surface_internal_set_user_data(tsurface, E_COMP_WL_TBM_GBM_BO_KEY,
+ gbo);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(ret, EINA_FALSE);
+
+ return EINA_TRUE;
+}
E_API tbm_surface_h e_comp_wl_tbm_capturable_buffer_get(tbm_surface_h tsurface);
EINTERN tbm_surface_h e_comp_wl_tbm_egl_image_buffer_get(int width, int height, tbm_format format);
+EINTERN Eina_Bool e_comp_wl_tbm_gbm_bo_user_data_set(tbm_surface_h tsurface, void *gbo);
+
# endif
#endif