{
tdm_fbdev_data *fbdev_data;
tdm_fbdev_display_buffer *display_buffer;
- tbm_bo bo;
if (!user_data) {
TDM_ERR("no user_data");
LIST_DEL(&display_buffer->link);
- if (display_buffer->mem != NULL) {
- bo = tbm_surface_internal_get_bo(buffer, 0);
-
- /*
- * TODO: Check tbm_bo_unmap return status
- */
- tbm_bo_unmap(bo);
-
- TDM_DBG("unmap success");
- } else {
- TDM_DBG("unmap was not called");
- }
-
free(display_buffer);
}
tdm_fbdev_output_data *fbdev_output = (tdm_fbdev_output_data *) output;
tdm_fbdev_layer_data *fbdev_layer;
tdm_fbdev_display_buffer *display_buffer;
+ tbm_bo bo;
+ tbm_bo_handle bo_handle;
RETURN_VAL_IF_FAIL(fbdev_output, TDM_ERROR_INVALID_PARAMETER);
display_buffer = fbdev_layer->display_buffer;
+ bo = tbm_surface_internal_get_bo(display_buffer->buffer, 0);
+ if (!bo) {
+ TDM_ERR("get bo fail");
+ return TDM_ERROR_OPERATION_FAILED;
+ }
+
+ bo_handle = tbm_bo_map(bo, TBM_DEVICE_CPU, TBM_OPTION_READ);
+ if (!bo_handle.ptr) {
+ TDM_ERR("map bo fail");
+ return TDM_ERROR_OPERATION_FAILED;
+ }
+
/*
* Display buffer's content to screen
*/
- memcpy(fbdev_output->mem, display_buffer->mem, display_buffer->size * sizeof(char));
+ memcpy(fbdev_output->mem, bo_handle.ptr, tbm_bo_size(bo) * sizeof(char));
+
+ tbm_bo_unmap(bo);
if (fbdev_output->commit_func) {
TDM_ERR("trace");
tdm_fbdev_layer_data *fbdev_layer = (tdm_fbdev_layer_data *) layer;
tdm_fbdev_display_buffer *display_buffer;
tdm_fbdev_data *fbdev_data;
- int opt = 0;
- unsigned int format;
- tbm_bo bo;
- tbm_bo_handle bo_handle;
tdm_error err = TDM_ERROR_NONE;
RETURN_VAL_IF_FAIL(fbdev_layer, TDM_ERROR_INVALID_PARAMETER);
}
display_buffer->buffer = buffer;
+ display_buffer->width = tbm_surface_get_width(buffer);
+ display_buffer->height = tbm_surface_get_height(buffer);
err = tdm_buffer_add_destroy_handler(buffer, _tdm_fbdev_display_cb_destroy_buffer, fbdev_data);
if (err != TDM_ERROR_NONE) {
LIST_ADDTAIL(&display_buffer->link, &fbdev_data->buffer_list);
}
- if (display_buffer->mem == NULL) {
- display_buffer->width = tbm_surface_get_width(buffer);
- display_buffer->height = tbm_surface_get_height(buffer);
-
- /*
- * TODO: We have got drm format here, have to be checked whether
- * Framebuffer device supports this format.
- * Do we need it at all?
- */
- format = tbm_surface_get_format(buffer);
- (void) format;
-
- bo = tbm_surface_internal_get_bo(buffer, 0);
- bo_handle = tbm_bo_map(bo, TBM_DEVICE_CPU, opt);
-
- display_buffer->size = tbm_bo_size(bo);
-
- /*
- * When surface will be about to be destroyed there will have been
- * invoked our destroy handler which will unmap bo and free
- * display_buffer memory
- */
- display_buffer->mem = bo_handle.ptr;
-
- TDM_DBG("mmap success");
- }
-
fbdev_layer->display_buffer = display_buffer;
fbdev_layer->display_buffer_changed = 1;