From 118097baa73ed1e5393ac4cc511e1fdff7e4bb48 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Tue, 22 Jun 2021 10:40:50 +0900 Subject: [PATCH] tbm_module: add tbm_module_import_surface_data This imports a tbm_backend_surface_data resource with tbm_surface_buffer_data. Change-Id: I3ea0507aab1c64e8906d5d9c59298ce41c897e57 --- src/tbm_module.c | 33 +++++++++++++++++++++++++++++++++ src/tbm_module.h | 1 + 2 files changed, 34 insertions(+) diff --git a/src/tbm_module.c b/src/tbm_module.c index b752cd2..66489e1 100644 --- a/src/tbm_module.c +++ b/src/tbm_module.c @@ -679,6 +679,39 @@ tbm_module_alloc_surface_data(tbm_module *module, int width, int height, int for return surface_data; } +tbm_backend_surface_data * +tbm_module_import_surface_data(tbm_module *module, int width, int height, int format, tbm_surface_buffer_data *buffer_data, tbm_error_e *error) +{ + tbm_backend_surface_data *surface_data = NULL; + + TBM_RETURN_VAL_SET_ERR_IF_FAIL(module, NULL, *error, TBM_ERROR_INVALID_PARAMETER); + TBM_RETURN_VAL_SET_ERR_IF_FAIL(module->type == TBM_MODULE_TYPE_HAL_TBM, NULL, *error, TBM_ERROR_INVALID_OPERATION); + + surface_data = calloc(1, sizeof(struct _tbm_backend_surface_data)); + if (!surface_data) { + TBM_ERR("memory allocation failed."); + *error = TBM_ERROR_OUT_OF_MEMORY; + return NULL; + } + + surface_data->hal_surface = hal_tbm_bufmgr_import_surface(module->hal_bufmgr, + (uint32_t)width, + (uint32_t)height, + (hal_tbm_format)format, + (hal_tbm_surface_buffer_data *)buffer_data, + (hal_tbm_error *)error); + if (!surface_data->hal_surface) { + TBM_ERR("hal_tbm_bufmgr_import_surface failed. width:%d height:%d format:%d error:%s", + width, height, format, tbm_error_str(*error)); + free(surface_data); + return NULL; + } + + surface_data->module = module; + + return surface_data; +} + tbm_backend_bo_data * tbm_module_alloc_bo_data(tbm_module *module, tbm_bo bo, int size, int flags, tbm_error_e *error) { diff --git a/src/tbm_module.h b/src/tbm_module.h index df4c22f..db0a295 100644 --- a/src/tbm_module.h +++ b/src/tbm_module.h @@ -83,6 +83,7 @@ tbm_error_e tbm_module_get_supported_formats(tbm_module *module, uint32 tbm_error_e tbm_module_get_plane_data(tbm_module *module, int format, int plane_idx, uint32_t w, uint32_t h, uint32_t *size, uint32_t *offset, uint32_t *pitch, int *bo_idx); tbm_backend_surface_data *tbm_module_alloc_surface_data(tbm_module *module, int width, int height, int format, int flags, tbm_error_e *error); +tbm_backend_surface_data *tbm_module_import_surface_data(tbm_module *module, int width, int height, int format, tbm_surface_buffer_data *buffer_data, tbm_error_e *error); tbm_backend_bo_data *tbm_module_alloc_bo_data(tbm_module *module, tbm_bo bo, int size, int flags, tbm_error_e *error); tbm_backend_bo_data *tbm_module_alloc_bo_data_with_format(tbm_module *module, int format, int bo_idx, int width, int height, int bpp, tbm_bo_memory_type flags, tbm_error_e *error); -- 2.7.4