+_tbm_backend_load_hal_tbm(tbm_bufmgr bufmgr)
+{
+ hal_tbm_backend *hal_backend = NULL;
+ hal_tbm_bufmgr_capability capability;
+ hal_tbm_bufmgr *hal_bufmgr;
+ hal_tbm_error ret = HAL_TBM_ERROR_NONE;
+
+ hal_backend = hal_tbm_get_backend(&ret);
+ if (hal_backend == NULL || ret != HAL_TBM_ERROR_NONE) {
+ TBM_ERR("get backend fail");
+ return 0;
+ }
+
+ hal_bufmgr = hal_tbm_backend_get_bufmgr(hal_backend, &ret);
+ if (hal_bufmgr == NULL || ret != HAL_TBM_ERROR_NONE) {
+ TBM_ERR("get hal_bufmgr fail");
+ goto get_backend_fail;
+ }
+
+ capability = hal_tbm_bufmgr_get_capabilities(hal_bufmgr, &ret);
+ if (ret != HAL_TBM_ERROR_NONE) {
+ TBM_ERR("hal_tbm_bufmgr_get_capabilities fail.");
+ goto get_backend_fail;
+ }
+
+ if (capability == HAL_TBM_BUFMGR_CAPABILITY_NONE) {
+ TBM_ERR("The capabilities of the backend module is TBM_BUFMGR_CAPABILITY_NONE.");
+ TBM_ERR("TBM_BUFMGR_CAPABILITY_SHARE_FD is the essential capability.");
+ goto get_backend_fail;
+ }
+ if (!(capability & HAL_TBM_BUFMGR_CAPABILITY_SHARE_FD)) {
+ TBM_ERR("The capabilities of the backend module had no TBM_BUFMGR_CAPABILITY_SHARE_FD.");
+ TBM_ERR("The tbm backend has to get TBM_BUFMGR_CAPABILITY_SHARE_FD. ");
+ goto get_backend_fail;
+ }
+ bufmgr->capabilities = capability;
+
+ bufmgr->hal_backend = hal_backend;
+ bufmgr->hal_bufmgr = hal_bufmgr;
+
+ bufmgr->use_hal_tbm = 1;
+
+ TBM_INFO("use hal tbm");
+
+ return 1;
+
+get_backend_fail:
+ hal_tbm_put_backend(hal_backend);
+ return 0;
+}
+
+static int