tbm_error_e error = TBM_ERROR_NONE;
tbm_surface_data *surface_data = NULL;
- static int tbm_module_check_support_surface_data = 0;
-
TBM_RETURN_VAL_IF_FAIL(module, 0);
// check once support_surface_data or not.
- if (tbm_module_check_support_surface_data) {
+ if (module->check_surface_data) {
// return the value which already set.
return module->support_surface_data;
}
// check this only once
- tbm_module_check_support_surface_data = 1;
+ module->check_surface_data = 1;
if (module->type != TBM_MODULE_TYPE_HAL_TBM)
goto done;
TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER);
bo_data = calloc(1, sizeof(struct _tbm_bo_data));
- if (!bo_data) {
- TBM_ERR("memory allocation failed.");
- *error = TBM_ERROR_OUT_OF_MEMORY;
- return NULL;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data, failed, *error, TBM_ERROR_OUT_OF_MEMORY);
switch (module->type) {
case TBM_MODULE_TYPE_HAL_TBM:
bo_data->hal_bo = hal_tbm_bufmgr_alloc_bo(module->hal_bufmgr, size, flags, (hal_tbm_error *)error);
- if (!bo_data->hal_bo) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->hal_bo, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->hal_bo, failed);
break;
/* LCOV_EXCL_START */
case TBM_MODULE_TYPE_TBM_BACKEND:
bufmgr_func = module->bufmgr_func;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_alloc_bo, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_alloc_bo, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->backend_bo_data = bufmgr_func->bufmgr_alloc_bo(module->bufmgr_data, (unsigned int)size, flags, error);
- if (!bo_data->backend_bo_data) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->backend_bo_data, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->backend_bo_data, failed);
break;
case TBM_MODULE_TYPE_BUFMGR_BACKEND:
TBM_WRN("!!WARNING: This backend interface will be DEPRECATED after Tizen 6.5.");
+
backend = module->backend;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend->bo_alloc, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend->bo_alloc, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->priv = (void *)backend->bo_alloc(bo, size, flags);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data->priv, failed, *error, TBM_ERROR_INVALID_OPERATION);
+
*error = TBM_ERROR_NONE;
- free(bo_data);
break;
default:
TBM_ERR("Wrong module type:%d", module->type);
*error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
+ goto failed;
break;
/* LCOV_EXCL_STOP */
}
bo_data->module = module;
return bo_data;
+
+/* LCOV_EXCL_START */
+failed:
+ if (bo_data)
+ free(bo_data);
+
+ return NULL;
+/* LCOV_EXCL_STOP */
}
tbm_bo_data *
TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER);
bo_data = calloc(1, sizeof(struct _tbm_bo_data));
- if (!bo_data) {
- TBM_ERR("memory allocation failed.");
- *error = TBM_ERROR_OUT_OF_MEMORY;
- return NULL;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data, failed, *error, TBM_ERROR_OUT_OF_MEMORY);
switch (module->type) {
case TBM_MODULE_TYPE_HAL_TBM:
bo_data->hal_bo = hal_tbm_bufmgr_alloc_bo_with_format(module->hal_bufmgr,
format, bo_idx, width, height, bpp,
(hal_tbm_bo_memory_type)flags, (hal_tbm_error *)error);
- if (!bo_data->hal_bo) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->hal_bo, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->hal_bo, failed);
break;
/* LCOV_EXCL_START */
case TBM_MODULE_TYPE_TBM_BACKEND:
bufmgr_func = module->bufmgr_func;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func, NULL, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func, failed, *error, TBM_ERROR_INVALID_OPERATION);
if (!bufmgr_func->bufmgr_alloc_bo_with_format) {
*error = TBM_ERROR_NOT_SUPPORTED;
- return NULL;
+ goto failed;
}
bo_data->backend_bo_data = bufmgr_func->bufmgr_alloc_bo_with_format(module->bufmgr_data, format, bo_idx, width, height, flags, error);
- if (!bo_data->backend_bo_data) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->backend_bo_data, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->backend_bo_data, failed);
break;
case TBM_MODULE_TYPE_BUFMGR_BACKEND:
TBM_WRN("!!WARNING: This backend interface will be DEPRECATED after Tizen 6.5.");
- TBM_ERR("error: not supported tbm_bufmgr_internal_alloc_bo_with_format.");
+ TBM_ERR("error: not supported tbm_module_alloc_bo_data_with_format.");
*error = TBM_ERROR_NOT_SUPPORTED;
- free(bo_data);
+ goto failed;
break;
default:
TBM_ERR("Wrong module type:%d", module->type);
*error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
+ goto failed;
break;
/* LCOV_EXCL_STOP */
}
bo_data->module = module;
return bo_data;
+
+/* LCOV_EXCL_START */
+failed:
+ if (bo_data)
+ free(bo_data);
+
+ return NULL;
+/* LCOV_EXCL_STOP */
}
tbm_bo_data *
TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER);
bo_data = calloc(1, sizeof(struct _tbm_bo_data));
- if (!bo_data) {
- TBM_ERR("memory allocation failed.");
- *error = TBM_ERROR_OUT_OF_MEMORY;
- return NULL;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data, failed, *error, TBM_ERROR_OUT_OF_MEMORY);
switch (module->type) {
case TBM_MODULE_TYPE_HAL_TBM:
bo_data->hal_bo = hal_tbm_bufmgr_import_fd(module->hal_bufmgr, (hal_tbm_fd)fd, (hal_tbm_error *)error);
- if (!bo_data->hal_bo) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->hal_bo, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->hal_bo, failed);
break;
/* LCOV_EXCL_START */
case TBM_MODULE_TYPE_TBM_BACKEND:
bufmgr_func = module->bufmgr_func;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_import_fd, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_import_fd, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->backend_bo_data = bufmgr_func->bufmgr_import_fd(module->bufmgr_data, fd, error);
- if (!bo_data->backend_bo_data) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->backend_bo_data, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->backend_bo_data, failed);
break;
case TBM_MODULE_TYPE_BUFMGR_BACKEND:
TBM_WRN("!!WARNING: This backend interface will be DEPRECATED after Tizen 6.5.");
backend = module->backend;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend->bo_import_fd, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend->bo_import_fd, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->priv = (void *)backend->bo_import_fd(bo, fd);
- if (!bo_data->priv) {
- *error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->priv, NULL);
- } else {
- *error = TBM_ERROR_NONE;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data->priv, failed, *error, TBM_ERROR_INVALID_OPERATION);
+
+ *error = TBM_ERROR_NONE;
break;
default:
TBM_ERR("Wrong module type:%d", module->type);
*error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
+ goto failed;
break;
/* LCOV_EXCL_STOP */
}
bo_data->module = module;
return bo_data;
+
+/* LCOV_EXCL_START */
+failed:
+ if (bo_data)
+ free(bo_data);
+
+ return NULL;
+/* LCOV_EXCL_STOP */
}
tbm_bo_data *
TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER);
bo_data = calloc(1, sizeof(struct _tbm_bo_data));
- if (!bo_data) {
- TBM_ERR("memory allocation failed.");
- *error = TBM_ERROR_OUT_OF_MEMORY;
- return NULL;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data, failed, *error, TBM_ERROR_OUT_OF_MEMORY);
switch (module->type) {
case TBM_MODULE_TYPE_HAL_TBM:
bo_data->hal_bo = hal_tbm_bufmgr_import_key(module->hal_bufmgr, key, (hal_tbm_error *)error);
- if (!bo_data->hal_bo) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->hal_bo, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->hal_bo, failed);
break;
/* LCOV_EXCL_START */
case TBM_MODULE_TYPE_TBM_BACKEND:
bufmgr_func = module->bufmgr_func;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_import_key, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bufmgr_func->bufmgr_import_key, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->backend_bo_data = bufmgr_func->bufmgr_import_key(module->bufmgr_data, key, error);
- if (!bo_data->backend_bo_data) {
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->backend_bo_data, NULL);
- }
+ TBM_GOTO_VAL_IF_FAIL(bo_data->backend_bo_data, failed);
break;
case TBM_MODULE_TYPE_BUFMGR_BACKEND:
TBM_WRN("!!WARNING: This backend interface will be DEPRECATED after Tizen 6.5.");
backend = module->backend;
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend, NULL, *error, TBM_ERROR_INVALID_OPERATION);
- TBM_RETURN_VAL_SET_ERR_IF_FAIL(backend->bo_import, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend, failed, *error, TBM_ERROR_INVALID_OPERATION);
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(backend->bo_import, failed, *error, TBM_ERROR_NOT_SUPPORTED);
bo_data->priv = (void *)backend->bo_import(bo, key);
- if (!bo_data->priv) {
- *error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
- TBM_RETURN_VAL_IF_FAIL(bo_data->priv, NULL);
- } else {
- *error = TBM_ERROR_NONE;
- }
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data->priv, failed, *error, TBM_ERROR_INVALID_OPERATION);
+
+ *error = TBM_ERROR_NONE;
break;
default:
TBM_ERR("Wrong module type:%d", module->type);
*error = TBM_ERROR_INVALID_OPERATION;
- free(bo_data);
+ goto failed;
break;
/* LCOV_EXCL_STOP */
}
bo_data->module = module;
return bo_data;
+
+/* LCOV_EXCL_START */
+failed:
+ if (bo_data)
+ free(bo_data);
+
+ return NULL;
+/* LCOV_EXCL_STOP */
}
int
}
tbm_bo_data **
-tbm_surface_data_get_bo_data_array(tbm_surface_data *surface_data, int *num_bos, tbm_error_e *error)
+tbm_surface_data_get_bo_data_array(tbm_surface_data *surface_data, int *num_bos, int *memory_types, tbm_error_e *error)
{
tbm_bo_data **bo_data_array = NULL;
hal_tbm_bo **hal_bos = NULL;
hal_bos = hal_tbm_surface_get_bos(surface_data->hal_surface, num_bos, (hal_tbm_error *)error);
TBM_RETURN_VAL_IF_FAIL(hal_bos, NULL);
- bo_data_array = calloc(*num_bos, sizeof(struct _tbm_bo_data));
- if (bo_data_array) {
- TBM_ERR("memory allocation failed.");
- *error = TBM_ERROR_OUT_OF_MEMORY;
- return NULL;
+ bo_data_array = calloc(*num_bos, sizeof(tbm_bo_data *));
+ TBM_RETURN_VAL_IF_FAIL(bo_data_array, NULL);
+
+ for (i = 0; i < *num_bos; i++) {
+ bo_data_array[i] = calloc(*num_bos, sizeof(struct _tbm_bo_data));
+ TBM_GOTO_VAL_SET_ERR_IF_FAIL(bo_data_array[i], failed, *error, TBM_ERROR_OUT_OF_MEMORY);
}
for (i = 0; i < *num_bos; i++) {
bo_data_array[i]->module = surface_data->module;
}
+ // get memory_types(bo flags)
+ *memory_types = tbm_bo_data_get_memory_types(bo_data_array[0], error);
+ TBM_GOTO_VAL_IF_FAIL(*error == TBM_ERROR_NONE, failed);
+
return bo_data_array;
+
+/* LCOV_EXCL_START */
+failed:
+ for (i = 0; i < *num_bos; i++) {
+ if (bo_data_array[i])
+ free(bo_data_array[i]);
+ }
+ free(bo_data_array);
+
+ return NULL;
+/* LCOV_EXCL_STOP */
}
tbm_surface_buffer_data *