tbm_surface_internal: implement tbm_surface_internal_export 73/258173/1
authorSooChan Lim <sc1.lim@samsung.com>
Tue, 11 May 2021 23:39:07 +0000 (08:39 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Tue, 11 May 2021 23:39:07 +0000 (08:39 +0900)
It returns a buffer_data.

Change-Id: I4cb6cdfd86815abe478429e5cfb792b9b9d66594

src/tbm_surface_internal.c

index 18a922c..00f9454 100644 (file)
@@ -2947,8 +2947,35 @@ tbm_surface_internal_remove_destroy_handler(tbm_surface_h surface, tbm_surface_i
 tbm_surface_buffer_data *
 tbm_surface_internal_export(tbm_surface_h surface, tbm_error_e *error)
 {
-       // TODO: implement
-       return NULL;
+       tbm_surface_buffer_data *buffer_data = NULL;
+       struct _tbm_surface *surf;
+       struct _tbm_bufmgr *bufmgr;
+
+       _tbm_surface_mutex_lock();
+
+       surf = (struct _tbm_surface *)surface;
+       TBM_SURFACE_RETURN_VAL_SET_ERR_IF_FAIL(_tbm_surface_internal_is_valid(surface), NULL, *error, TBM_ERROR_INVALID_PARAMETER);
+
+       bufmgr = surf->bufmgr;
+       TBM_SURFACE_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr != NULL, NULL, *error, TBM_ERROR_INVALID_PARAMETER);
+
+       // this function supports when it comes to be use_hal.
+       TBM_SURFACE_RETURN_VAL_SET_ERR_IF_FAIL(bufmgr->use_hal_tbm, NULL, *error, TBM_ERROR_NOT_SUPPORTED);
+
+       // export a surface
+       buffer_data = (tbm_surface_buffer_data *)hal_tbm_surface_export((hal_tbm_surface *)surf->hal_surface,
+                                                                                                                                       (hal_tbm_error *)error);
+       TBM_SURFACE_RETURN_VAL_ERR_IF_FAIL(buffer_data != NULL, NULL, *error);
+
+       TBM_TRACE_SURFACE_INTERNAL("tbm_surface(%p) buffer_data(%p)", surface, buffer_data);
+
+       if (error)
+               *error = TBM_ERROR_NONE;
+
+       _tbm_set_last_result(TBM_ERROR_NONE);
+       _tbm_surface_mutex_unlock();
+
+       return buffer_data;
 }
 
 tbm_surface_h