tbm_surface_internal: implement tbm_surface_internal_export
[platform/core/uifw/libtbm.git] / 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