hal_tbm_backend_bo_func *bo_func;
} hal_backend_tbm_funcs;
-int hal_tbm_backend_bufmgr_query_display_server(tbm_bufmgr bufmgr, tbm_error_e *error);
+int hal_tbm_backend_bufmgr_query_display_server(tbm_bufmgr bufmgr, tbm_error_e *error);
+hal_tbm_backend_bufmgr_func *hal_tbm_backend_bufmgr_alloc_bufmgr_func(tbm_bufmgr bufmgr, tbm_error_e *error);
+void hal_tbm_backend_bufmgr_free_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func);
+tbm_error_e hal_tbm_backend_bufmgr_register_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func);
+hal_tbm_backend_bo_func *hal_tbm_backend_bufmgr_alloc_bo_func(tbm_bufmgr bufmgr, tbm_error_e *error);
+void hal_tbm_backend_bufmgr_free_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func);
+tbm_error_e hal_tbm_backend_bufmgr_register_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func);
#ifdef __cplusplus
}
#include <stdio.h>
#include <stdint.h>
+#include <stdlib.h>
#include <dlfcn.h>
#include <dlog.h>
static hal_backend_tbm_funcs *g_tbm_funcs = NULL;
-EXTERN
-int hal_tbm_get_backend(void)
+EXTERN tbm_error_e
+hal_tbm_get_backend(tbm_bufmgr bufmgr)
{
int ret;
+ if (!bufmgr)
+ return TBM_ERROR_INVALID_PARAMETER;
+
if (g_tbm_funcs)
- return 0;
+ return TBM_ERROR_INVALID_OPERATION;
- ret = hal_common_get_backend(HAL_MODULE_TBM, (void **)&g_tbm_funcs);
+ g_tbm_funcs = calloc(1, sizeof(hal_backend_tbm_funcs));
+ if (!g_tbm_funcs)
+ return TBM_ERROR_OUT_OF_MEMORY;
+
+ ret = hal_common_get_backend(HAL_MODULE_TBM, (void **)&bufmgr);
if (ret < 0) {
_E("Failed to get backend\n");
- return -EINVAL;
+ free(g_tbm_funcs);
+ g_tbm_funcs = NULL;
+ return TBM_ERROR_NOT_SUPPORTED;
}
- return 0;
+ _I("hal_tbm_get_backend");
+
+ return TBM_ERROR_NONE;
}
-EXTERN
-int hal_tbm_put_backend(void)
+EXTERN void
+hal_tbm_put_backend(void)
{
if (!g_tbm_funcs)
- return 0;
+ return;
- hal_common_put_backend(HAL_MODULE_TBM, (void *)g_tbm_funcs);
+ hal_common_put_backend(HAL_MODULE_TBM, NULL);
+ free(g_tbm_funcs);
g_tbm_funcs = NULL;
- return 0;
+ _I("hal_tbm_put_backend");
}
{
return tbm_backend_bufmgr_query_display_server(bufmgr, error);
}
+
+EXTERN hal_tbm_backend_bufmgr_func *
+hal_tbm_backend_bufmgr_alloc_bufmgr_func(tbm_bufmgr bufmgr, tbm_error_e *error)
+{
+ hal_tbm_backend_bufmgr_func *bufmgr_func;
+
+ bufmgr_func = calloc(1, sizeof(hal_tbm_backend_bufmgr_func));
+ if (!bufmgr_func) {
+ _E("error: fail to allocate the tbm_backend_bufmgr_func\n");
+ if (error)
+ *error = TBM_ERROR_OUT_OF_MEMORY;
+ return NULL;
+ }
+
+ if (error)
+ *error = TBM_ERROR_NONE;
+
+ return bufmgr_func;
+}
+
+EXTERN void
+hal_tbm_backend_bufmgr_free_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func)
+{
+ if (!bufmgr)
+ return;
+
+ if (func)
+ free(func);
+}
+
+EXTERN tbm_error_e
+hal_tbm_backend_bufmgr_register_bufmgr_func(tbm_bufmgr bufmgr, hal_tbm_backend_bufmgr_func *func)
+{
+ if (!g_tbm_funcs) return TBM_ERROR_INVALID_OPERATION;
+ if (g_tbm_funcs->bufmgr_func) return TBM_ERROR_INVALID_OPERATION;
+ if (!bufmgr || !func) return TBM_ERROR_INVALID_PARAMETER;
+ g_tbm_funcs->bufmgr_func = func;
+ return TBM_ERROR_NONE;
+}
+
+EXTERN hal_tbm_backend_bo_func *
+hal_tbm_backend_bufmgr_alloc_bo_func(tbm_bufmgr bufmgr, tbm_error_e *error)
+{
+ hal_tbm_backend_bo_func *bo_func;
+
+ bo_func = calloc(1, sizeof(hal_tbm_backend_bo_func));
+ if (!bo_func) {
+ _E("error: fail to allocate the tbm_backend_bufmgr_func\n");
+ if (error)
+ *error = TBM_ERROR_OUT_OF_MEMORY;
+ return NULL;
+ }
+
+ if (error)
+ *error = TBM_ERROR_NONE;
+
+ return bo_func;
+}
+
+EXTERN void
+hal_tbm_backend_bufmgr_free_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func)
+{
+ if (!bufmgr)
+ return;
+
+ if (func)
+ free(func);
+}
+
+EXTERN tbm_error_e
+hal_tbm_backend_bufmgr_register_bo_func(tbm_bufmgr bufmgr, hal_tbm_backend_bo_func *func)
+{
+ if (!g_tbm_funcs) return TBM_ERROR_INVALID_OPERATION;
+ if (g_tbm_funcs->bo_func) return TBM_ERROR_INVALID_OPERATION;
+ if (!bufmgr || !func) return TBM_ERROR_INVALID_PARAMETER;
+ g_tbm_funcs->bo_func = func;
+ return TBM_ERROR_NONE;
+}
\ No newline at end of file