projects
/
platform
/
core
/
uifw
/
libtdm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
virtual: add attach_buffer protocol
[platform/core/uifw/libtdm.git]
/
src
/
tdm_server.c
diff --git
a/src/tdm_server.c
b/src/tdm_server.c
index
e301ab3
..
aa546e6
100644
(file)
--- a/
src/tdm_server.c
+++ b/
src/tdm_server.c
@@
-71,7
+71,7
@@
typedef struct _tdm_server_output_info {
typedef struct _tdm_server_voutput_buffer {
struct list_head link;
struct wl_resource *wl_buffer;
typedef struct _tdm_server_voutput_buffer {
struct list_head link;
struct wl_resource *wl_buffer;
- tbm_surface_h
surface
;
+ tbm_surface_h
buffer
;
} tdm_server_voutput_buffer;
typedef struct _tdm_server_voutput_info {
} tdm_server_voutput_buffer;
typedef struct _tdm_server_voutput_info {
@@
-93,6
+93,7
@@
typedef struct _tdm_server_voutput_info {
struct list_head buffer_list;
tdm_server_voutput_buffer *attach_buffer;
struct list_head buffer_list;
tdm_server_voutput_buffer *attach_buffer;
+ int committing;
} tdm_server_voutput_info;
typedef struct _tdm_server_vblank_info {
} tdm_server_voutput_info;
typedef struct _tdm_server_vblank_info {
@@
-813,6
+814,9
@@
_tdm_voutput_cb_commit_done(struct wl_client *client, struct wl_resource *resour
// handle error
return;
}
// handle error
return;
}
+// tdm_output_commit_done(voutput_info->output, voutput_info->attach_buffer->buffer);
+ voutput_info->committing = 0;
+ voutput_info->attach_buffer = NULL;
}
static const struct wl_tdm_voutput_interface tdm_voutput_implementation = {
}
static const struct wl_tdm_voutput_interface tdm_voutput_implementation = {
@@
-845,7
+849,7
@@
_tdm_voutput_buffer_destory(struct wl_resource *wl_buffer)
LIST_FOR_EACH_ENTRY(vb, &voutput_info->buffer_list, link) {
if (vb->wl_buffer == wl_buffer) {
LIST_FOR_EACH_ENTRY(vb, &voutput_info->buffer_list, link) {
if (vb->wl_buffer == wl_buffer) {
- tbm_surface_internal_unref(vb->
surface
);
+ tbm_surface_internal_unref(vb->
buffer
);
wl_resource_set_user_data(wl_buffer, NULL);
free(vb);
}
wl_resource_set_user_data(wl_buffer, NULL);
free(vb);
}
@@
-873,7
+877,7
@@
_tdm_voutput_create_wl_buffer(tdm_server_voutput_info *voutput_info)
struct wl_resource *
_tdm_voutput_export_buffer(tdm_server_voutput_info *voutput_info,
struct wl_resource *
_tdm_voutput_export_buffer(tdm_server_voutput_info *voutput_info,
- tbm_surface_h
surface
)
+ tbm_surface_h
buffer
)
{
int bufs[TBM_SURF_PLANE_MAX] = { -1, -1, -1, -1};
struct wl_resource *wl_buffer = NULL;
{
int bufs[TBM_SURF_PLANE_MAX] = { -1, -1, -1, -1};
struct wl_resource *wl_buffer = NULL;
@@
-884,9
+888,9
@@
_tdm_voutput_export_buffer(tdm_server_voutput_info *voutput_info,
int *p;
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, NULL);
int *p;
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, NULL);
- TDM_RETURN_VAL_IF_FAIL(
surface
!= NULL, NULL);
+ TDM_RETURN_VAL_IF_FAIL(
buffer
!= NULL, NULL);
- if (tbm_surface_get_info(
surface
, &info) != TBM_SURFACE_ERROR_NONE) {
+ if (tbm_surface_get_info(
buffer
, &info) != TBM_SURFACE_ERROR_NONE) {
TDM_ERR("Failed to create buffer from surface");
return NULL;
}
TDM_ERR("Failed to create buffer from surface");
return NULL;
}
@@
-896,14
+900,14
@@
_tdm_voutput_export_buffer(tdm_server_voutput_info *voutput_info,
return NULL;
}
return NULL;
}
- num_buf = tbm_surface_internal_get_num_bos(
surface
);
+ num_buf = tbm_surface_internal_get_num_bos(
buffer
);
if (num_buf == 0) {
TDM_ERR("surface doesn't have any bo.");
return NULL;
}
for (i = 0; i < num_buf; i++) {
if (num_buf == 0) {
TDM_ERR("surface doesn't have any bo.");
return NULL;
}
for (i = 0; i < num_buf; i++) {
- tbm_bo bo = tbm_surface_internal_get_bo(
surface
, i);
+ tbm_bo bo = tbm_surface_internal_get_bo(
buffer
, i);
if (bo == NULL) {
TDM_ERR("Failed to get bo from surface");
goto err;
if (bo == NULL) {
TDM_ERR("Failed to get bo from surface");
goto err;
@@
-944,7
+948,7
@@
_tdm_voutput_export_buffer(tdm_server_voutput_info *voutput_info,
for (i = 0; i < 3; i++) {
p = wl_array_add(&plane_buf_idx, sizeof(int));
for (i = 0; i < 3; i++) {
p = wl_array_add(&plane_buf_idx, sizeof(int));
- *p = tbm_surface_internal_get_plane_bo_idx(
surface
, i);
+ *p = tbm_surface_internal_get_plane_bo_idx(
buffer
, i);
p = wl_array_add(&plane_offset, sizeof(int));
*p = info.planes[i].offset;
p = wl_array_add(&plane_stride, sizeof(int));
p = wl_array_add(&plane_offset, sizeof(int));
*p = info.planes[i].offset;
p = wl_array_add(&plane_stride, sizeof(int));
@@
-991,47
+995,47
@@
err:
}
tdm_server_voutput_buffer *
}
tdm_server_voutput_buffer *
-_tdm_output_get_voutput_buffer(tdm_server_voutput_info *voutput_info, tbm_surface_h
surface
)
+_tdm_output_get_voutput_buffer(tdm_server_voutput_info *voutput_info, tbm_surface_h
buffer
)
{
tdm_server_voutput_buffer *voutput_buffer = NULL, *vb = NULL;
LIST_FOR_EACH_ENTRY(vb, &voutput_info->buffer_list, link) {
{
tdm_server_voutput_buffer *voutput_buffer = NULL, *vb = NULL;
LIST_FOR_EACH_ENTRY(vb, &voutput_info->buffer_list, link) {
- if (vb && vb->
surface == surface
)
+ if (vb && vb->
buffer == buffer
)
return vb;
}
return vb;
}
- tbm_surface_internal_ref(
surface
);
+ tbm_surface_internal_ref(
buffer
);
voutput_buffer = calloc(1, sizeof *voutput_buffer);
if (!voutput_buffer) {
/* LCOV_EXCL_START */
TDM_ERR("fail calloc");
voutput_buffer = calloc(1, sizeof *voutput_buffer);
if (!voutput_buffer) {
/* LCOV_EXCL_START */
TDM_ERR("fail calloc");
- tbm_surface_internal_unref(
surface
);
+ tbm_surface_internal_unref(
buffer
);
return NULL;
/* LCOV_EXCL_STOP */
}
return NULL;
/* LCOV_EXCL_STOP */
}
- voutput_buffer->wl_buffer = _tdm_voutput_export_buffer(voutput_info,
surface
);
+ voutput_buffer->wl_buffer = _tdm_voutput_export_buffer(voutput_info,
buffer
);
if (!voutput_buffer->wl_buffer) {
/* LCOV_EXCL_START */
TDM_ERR("fail export buffer");
free(voutput_buffer);
if (!voutput_buffer->wl_buffer) {
/* LCOV_EXCL_START */
TDM_ERR("fail export buffer");
free(voutput_buffer);
- tbm_surface_internal_unref(
surface
);
+ tbm_surface_internal_unref(
buffer
);
return NULL;
/* LCOV_EXCL_STOP */
}
return NULL;
/* LCOV_EXCL_STOP */
}
- voutput_buffer->
surface = surface
;
+ voutput_buffer->
buffer = buffer
;
LIST_ADDTAIL(&voutput_info->link, &voutput_info->buffer_list);
return voutput_buffer;
}
INTERN tdm_error
LIST_ADDTAIL(&voutput_info->link, &voutput_info->buffer_list);
return voutput_buffer;
}
INTERN tdm_error
-tdm_output_send_buffer(tdm_output *output, tbm_surface_h
surface
)
+tdm_output_send_buffer(tdm_output *output, tbm_surface_h
buffer
)
{
tdm_private_server *private_server = keep_private_server;
tdm_server_voutput_info *voutput_info = NULL, *vo = NULL;
{
tdm_private_server *private_server = keep_private_server;
tdm_server_voutput_info *voutput_info = NULL, *vo = NULL;
@@
-1046,16
+1050,19
@@
tdm_output_send_buffer(tdm_output *output, tbm_surface_h surface)
}
}
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, TDM_ERROR_INVALID_PARAMETER);
}
}
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, TDM_ERROR_INVALID_PARAMETER);
+ TDM_RETURN_VAL_IF_FAIL(voutput_info->attach_buffer == NULL, TDM_ERROR_OPERATION_FAILED);
- voutput_buffer = _tdm_output_get_voutput_buffer(voutput_info,
surface
);
+ voutput_buffer = _tdm_output_get_voutput_buffer(voutput_info,
buffer
);
TDM_RETURN_VAL_IF_FAIL(voutput_buffer != NULL, TDM_ERROR_OUT_OF_MEMORY);
voutput_info->attach_buffer = voutput_buffer;
TDM_RETURN_VAL_IF_FAIL(voutput_buffer != NULL, TDM_ERROR_OUT_OF_MEMORY);
voutput_info->attach_buffer = voutput_buffer;
+ wl_tdm_voutput_send_attach_buffer(voutput_info->resource, voutput_buffer->wl_buffer);
+
return TDM_ERROR_NONE;
}
return TDM_ERROR_NONE;
}
-tdm_error
+
INTERN
tdm_error
tdm_output_commit_buffer(tdm_output *output)
{
tdm_private_server *private_server = keep_private_server;
tdm_output_commit_buffer(tdm_output *output)
{
tdm_private_server *private_server = keep_private_server;
@@
-1070,7
+1077,10
@@
tdm_output_commit_buffer(tdm_output *output)
}
}
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, TDM_ERROR_INVALID_PARAMETER);
}
}
TDM_RETURN_VAL_IF_FAIL(voutput_info != NULL, TDM_ERROR_INVALID_PARAMETER);
- TDM_RETURN_VAL_IF_FAIL(voutput_info->attach_buffer != NULL, TDM_ERROR_INVALID_PARAMETER);
+ TDM_RETURN_VAL_IF_FAIL(voutput_info->attach_buffer != NULL, TDM_ERROR_OPERATION_FAILED);
+ TDM_RETURN_VAL_IF_FAIL(voutput_info->committing == 0, TDM_ERROR_OPERATION_FAILED);
+
+ voutput_info->committing = 1;
wl_tdm_voutput_send_commit(voutput_info->resource);
wl_tdm_voutput_send_commit(voutput_info->resource);