tbm_module: add tbm_module_import_surface_data 95/260295/1
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 22 Jun 2021 01:40:50 +0000 (10:40 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 22 Jun 2021 02:14:14 +0000 (11:14 +0900)
This imports a tbm_backend_surface_data resource with
tbm_surface_buffer_data.

Change-Id: I3ea0507aab1c64e8906d5d9c59298ce41c897e57

src/tbm_module.c
src/tbm_module.h

index b752cd2..66489e1 100644 (file)
@@ -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)
 {
index df4c22f..db0a295 100644 (file)
@@ -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);