change buffer type from tdm_buffer to tbm_surface 14/55214/1
authorBoram Park <boram1288.park@samsung.com>
Tue, 22 Dec 2015 07:43:06 +0000 (16:43 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 22 Dec 2015 07:43:06 +0000 (16:43 +0900)
Change-Id: Idd7dc7aea84488b76ba78b91c9b98a02ea4563c5

include/tdm.h
include/tdm_backend.h
include/tdm_types.h
src/tdm_buffer.c
src/tdm_capture.c
src/tdm_display.c
src/tdm_pp.c
src/tdm_private.h

index 4a6708e..98daa25 100644 (file)
@@ -112,7 +112,7 @@ tdm_error   tdm_layer_set_property(tdm_layer *layer, unsigned int id, tdm_value
 tdm_error   tdm_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value);
 tdm_error   tdm_layer_set_info(tdm_layer *layer, tdm_info_layer *info);
 tdm_error   tdm_layer_get_info(tdm_layer *layer, tdm_info_layer *info);
-tdm_error   tdm_layer_set_buffer(tdm_layer *layer, tdm_buffer *buffer); // layer has only one buffer
+tdm_error   tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer); // layer has only one buffer
 tdm_error   tdm_layer_unset_buffer(tdm_layer *layer);
 tdm_error   tdm_layer_is_usable(tdm_layer *layer, unsigned int *usable);
 tdm_error   tdm_layer_set_video_pos(tdm_layer *layer, int zpos);
@@ -123,26 +123,23 @@ tdm_capture *tdm_layer_create_capture(tdm_layer *layer, tdm_error *error);
 
 void         tdm_pp_destroy(tdm_pp *pp);
 tdm_error    tdm_pp_set_info(tdm_pp *pp, tdm_info_pp *info);
-tdm_error    tdm_pp_attach(tdm_pp *pp, tdm_buffer *src, tdm_buffer *dst);
+tdm_error    tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst);
 tdm_error    tdm_pp_commit(tdm_pp *pp);
 
 ///////////////////////////////////////////////////////////////////////////////
 
 void         tdm_capture_destroy(tdm_capture *capture);
 tdm_error    tdm_capture_set_info(tdm_capture *capture, tdm_info_capture *info);
-tdm_error    tdm_capture_attach(tdm_capture *capture, tdm_buffer *buffer);
+tdm_error    tdm_capture_attach(tdm_capture *capture, tbm_surface_h buffer);
 tdm_error    tdm_capture_commit(tdm_capture *capture);
 
 ///////////////////////////////////////////////////////////////////////////////
 
-typedef void (*tdm_buffer_release_handler)(tdm_buffer *buffer, void *user_data);
+typedef void (*tdm_buffer_release_handler)(tbm_surface_h buffer, void *user_data);
 
 /* not pthread safe */
-tdm_buffer *tdm_buffer_create(tbm_surface_h buffer, tdm_error *error);
-tdm_buffer *tdm_buffer_ref(tdm_buffer *buffer, tdm_error *error);
-void        tdm_buffer_unref(tdm_buffer *buffer);
-tdm_error   tdm_buffer_add_release_handler(tdm_buffer *buffer, tdm_buffer_release_handler func, void *user_data);
-void        tdm_buffer_remove_release_handler(tdm_buffer *buffer, tdm_buffer_release_handler func, void *user_data);
+tdm_error   tdm_buffer_add_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data);
+void        tdm_buffer_remove_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data);
 
 #ifdef __cplusplus
 }
index bfb6119..461a632 100644 (file)
@@ -147,7 +147,7 @@ typedef struct _tdm_func_display
     tdm_error    (*layer_get_property)(tdm_layer *layer, unsigned int id, tdm_value *value);
     tdm_error    (*layer_set_info)(tdm_layer *layer, tdm_info_layer *info);
     tdm_error    (*layer_get_info)(tdm_layer *layer, tdm_info_layer *info);
-    tdm_error    (*layer_set_buffer)(tdm_layer *layer, tdm_buffer *buffer);
+    tdm_error    (*layer_set_buffer)(tdm_layer *layer, tbm_surface_h buffer);
     tdm_error    (*layer_unset_buffer)(tdm_layer *layer);
     tdm_error    (*layer_set_video_pos)(tdm_layer *layer, int zpos);
     tdm_capture *(*layer_create_capture)(tdm_layer *layer, tdm_error *error);
@@ -164,13 +164,13 @@ typedef struct _tdm_func_pp
     tdm_error    (*pp_set_done_handler)(tdm_pp *pp, tdm_pp_done_handler func, void *user_data);
 } tdm_func_pp;
 
-typedef void (*tdm_capture_done_handler)(tdm_capture *capture, tdm_buffer *buffer, void *user_data);
+typedef void (*tdm_capture_done_handler)(tdm_capture *capture, tbm_surface_h buffer, void *user_data);
 
 typedef struct _tdm_func_capture
 {
     void         (*capture_destroy)(tdm_capture *capture); /* init */
     tdm_error    (*capture_set_info)(tdm_capture *capture, tdm_info_capture *info);
-    tdm_error    (*capture_attach)(tdm_capture *capture, tdm_buffer *buffer);
+    tdm_error    (*capture_attach)(tdm_capture *capture, tbm_surface_h buffer);
     tdm_error    (*capture_commit)(tdm_capture *capture); /* init */
     tdm_error    (*capture_set_done_handler)(tdm_capture *capture, tdm_capture_done_handler func, void *user_data);
 } tdm_func_capture;
@@ -199,14 +199,12 @@ tdm_error tdm_backend_register_func_display(tdm_display *dpy, tdm_func_display *
 tdm_error tdm_backend_register_func_pp(tdm_display *dpy, tdm_func_pp *func_pp);
 tdm_error tdm_backend_register_func_capture(tdm_display *dpy, tdm_func_capture *func_capture);
 
-typedef void (*tdm_buffer_destroy_handler)(tdm_buffer *buffer, void *user_data);
+typedef void (*tdm_buffer_destroy_handler)(tbm_surface_h buffer, void *user_data);
 
-tdm_buffer*   tdm_buffer_ref_backend(tdm_buffer *buffer);
-void          tdm_buffer_unref_backend(tdm_buffer *buffer);
-tbm_surface_h tdm_buffer_get_surface(tdm_buffer *buffer);
-tdm_buffer*   tdm_buffer_get(tbm_surface_h buffer);
-tdm_error     tdm_buffer_add_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler func, void *user_data);
-void          tdm_buffer_remove_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler func, void *user_data);
+tbm_surface_h tdm_buffer_ref_backend(tbm_surface_h buffer);
+void          tdm_buffer_unref_backend(tbm_surface_h buffer);
+tdm_error     tdm_buffer_add_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data);
+void          tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data);
 
 
 #ifdef __cplusplus
index e5e577b..c054d04 100644 (file)
@@ -242,7 +242,6 @@ typedef struct _tdm_info_capture
 typedef void tdm_display;
 typedef void tdm_output;
 typedef void tdm_layer;
-typedef void tdm_buffer;
 typedef void tdm_capture;
 typedef void tdm_pp;
 
index 508b9bd..149b944 100644 (file)
@@ -41,6 +41,9 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "tdm_private.h"
 #include "tdm_list.h"
 
+static int tdm_buffer_key;
+#define TDM_BUFFER_KEY ((unsigned long)&tdm_buffer_key)
+
 typedef struct _tdm_buffer_func_info
 {
     tdm_buffer_release_handler release_func;
@@ -54,27 +57,21 @@ typedef struct _tdm_buffer_info
 {
     tbm_surface_h buffer;
 
-    /* ref_count for frontend */
-    int ref_count;
-
     /* ref_count for backend */
     int backend_ref_count;
 
     struct list_head release_funcs;
     struct list_head destroy_funcs;
-    struct list_head link;
 } tdm_buffer_info;
 
-static int buffer_list_init;
-static struct list_head buffer_list;
-
 static void
-_tdm_buffer_destroy(tdm_buffer_info *buf_info)
+_tdm_buffer_destroy_info(void *user_data)
 {
+    tdm_buffer_info *buf_info = (tdm_buffer_info*)user_data;
     tdm_buffer_func_info *func_info = NULL, *next = NULL;
 
-    TDM_WARNING_IF_FAIL(buf_info->ref_count == 0);
-    TDM_WARNING_IF_FAIL(buf_info->backend_ref_count == 0);
+    if (buf_info->backend_ref_count > 0)
+        TDM_NEVER_GET_HERE();
 
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link)
     {
@@ -83,7 +80,7 @@ _tdm_buffer_destroy(tdm_buffer_info *buf_info)
     }
 
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->destroy_funcs, link)
-        func_info->destroy_func(buf_info, func_info->user_data);
+        func_info->destroy_func(buf_info->buffer, func_info->user_data);
 
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->destroy_funcs, link)
     {
@@ -91,105 +88,39 @@ _tdm_buffer_destroy(tdm_buffer_info *buf_info)
         free(func_info);
     }
 
-    LIST_DEL(&buf_info->link);
-
-    tbm_surface_internal_unref(buf_info->buffer);
     free(buf_info);
 }
 
-EXTERN tdm_buffer*
-tdm_buffer_create(tbm_surface_h buffer, tdm_error *error)
+static tdm_buffer_info*
+_tdm_buffer_get_info(tbm_surface_h buffer)
 {
-    tdm_buffer_info *buf_info;
-
-    if (!buffer_list_init)
-    {
-        LIST_INITHEAD(&buffer_list);
-        buffer_list_init = 1;
-    }
+    tdm_buffer_info *buf_info = NULL;
+    tbm_bo bo;
 
-    if (!buffer)
-    {
-        if (error)
-            *error = TDM_ERROR_INVALID_PARAMETER;
+    bo = tbm_surface_internal_get_bo(buffer, 0);
+    TDM_RETURN_VAL_IF_FAIL(bo != NULL, NULL);
 
-        TDM_ERR("'buffer != NULL' failed");
+    tbm_bo_get_user_data(bo, TDM_BUFFER_KEY, (void**)&buf_info);
 
-        return NULL;
-    }
-
-    buf_info = calloc(1, sizeof(tdm_buffer_info));
     if (!buf_info)
     {
-        if (error)
-            *error = TDM_ERROR_OUT_OF_MEMORY;
-
-        TDM_ERR("'buf_info != NULL' failed");
-
-        return NULL;
-    }
-
-    buf_info->ref_count = 1;
-
-    tbm_surface_internal_ref(buffer);
-    buf_info->buffer = buffer;
+        buf_info = calloc(1, sizeof(tdm_buffer_info));
+        TDM_RETURN_VAL_IF_FAIL(buffer != NULL, NULL);
 
-    LIST_INITHEAD(&buf_info->release_funcs);
-    LIST_INITHEAD(&buf_info->destroy_funcs);
-    LIST_ADDTAIL(&buf_info->link, &buffer_list);
+        buf_info->buffer = buffer;
 
-    if (error)
-        *error = TDM_ERROR_NONE;
+        LIST_INITHEAD(&buf_info->release_funcs);
+        LIST_INITHEAD(&buf_info->destroy_funcs);
 
-    return (tdm_buffer*)buf_info;
-}
-
-EXTERN tdm_buffer*
-tdm_buffer_ref(tdm_buffer *buffer, tdm_error *error)
-{
-    tdm_buffer_info *buf_info;
-
-    if (!buffer)
-    {
-        if (error)
-            *error = TDM_ERROR_INVALID_PARAMETER;
-
-        TDM_ERR("'buffer != NULL' failed");
-
-        return NULL;
+        tbm_bo_add_user_data(bo, TDM_BUFFER_KEY, _tdm_buffer_destroy_info);
+        tbm_bo_set_user_data(bo, TDM_BUFFER_KEY, buf_info);
     }
 
-    buf_info = buffer;
-    buf_info->ref_count++;
-
-    if (error)
-        *error = TDM_ERROR_NONE;
-
-    return buffer;
-}
-
-EXTERN void
-tdm_buffer_unref(tdm_buffer *buffer)
-{
-    tdm_buffer_info *buf_info;
-
-    if (!buffer)
-        return;
-
-    buf_info = buffer;
-    TDM_RETURN_IF_FAIL (buf_info->ref_count > 0);
-
-    buf_info->ref_count--;
-
-    /* destroy tdm_buffer when both ref_count and backend_ref_count are 0. */
-    if (buf_info->ref_count > 0 || buf_info->backend_ref_count > 0)
-        return;
-
-    _tdm_buffer_destroy(buf_info);
+    return buf_info;
 }
 
 EXTERN tdm_error
-tdm_buffer_add_release_handler(tdm_buffer *buffer,
+tdm_buffer_add_release_handler(tbm_surface_h buffer,
                                tdm_buffer_release_handler func, void *user_data)
 {
     tdm_buffer_info *buf_info;
@@ -198,20 +129,22 @@ tdm_buffer_add_release_handler(tdm_buffer *buffer,
     TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER);
     TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
 
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, TDM_ERROR_OUT_OF_MEMORY);
+
     func_info = calloc(1, sizeof(tdm_buffer_func_info));
     TDM_RETURN_VAL_IF_FAIL(func_info != NULL, TDM_ERROR_OUT_OF_MEMORY);
 
     func_info->release_func = func;
     func_info->user_data = user_data;
 
-    buf_info = buffer;
     LIST_ADD(&func_info->link, &buf_info->release_funcs);
 
     return TDM_ERROR_NONE;
 }
 
 EXTERN void
-tdm_buffer_remove_release_handler(tdm_buffer *buffer, tdm_buffer_release_handler func, void *user_data)
+tdm_buffer_remove_release_handler(tbm_surface_h buffer, tdm_buffer_release_handler func, void *user_data)
 {
     tdm_buffer_info *buf_info;
     tdm_buffer_func_info *func_info = NULL, *next = NULL;
@@ -219,7 +152,9 @@ tdm_buffer_remove_release_handler(tdm_buffer *buffer, tdm_buffer_release_handler
     TDM_RETURN_IF_FAIL(buffer != NULL);
     TDM_RETURN_IF_FAIL(func != NULL);
 
-    buf_info = buffer;
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_IF_FAIL(buf_info != NULL);
+
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link)
     {
         if (func_info->release_func != func || func_info->user_data != user_data)
@@ -233,82 +168,47 @@ tdm_buffer_remove_release_handler(tdm_buffer *buffer, tdm_buffer_release_handler
 }
 
 
-EXTERN tdm_buffer*
-tdm_buffer_ref_backend(tdm_buffer *buffer)
+EXTERN tbm_surface_h
+tdm_buffer_ref_backend(tbm_surface_h buffer)
 {
     tdm_buffer_info *buf_info;
 
     TDM_RETURN_VAL_IF_FAIL(buffer != NULL, NULL);
 
-    buf_info = buffer;
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, NULL);
+
     buf_info->backend_ref_count++;
 
     return buffer;
 }
 
 EXTERN void
-tdm_buffer_unref_backend(tdm_buffer *buffer)
+tdm_buffer_unref_backend(tbm_surface_h buffer)
 {
     tdm_buffer_info *buf_info;
     tdm_buffer_func_info *func_info = NULL, *next = NULL;
-    int old_ref_count;
 
     TDM_RETURN_IF_FAIL(buffer != NULL);
 
-    buf_info = buffer;
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_IF_FAIL(buf_info != NULL);
+
     buf_info->backend_ref_count--;
 
     if (buf_info->backend_ref_count > 0)
         return;
 
-    /* ref_count can become 0 in user release function. In that case, buf_info
-     * will be destroyed in tbm_buffer_unref. So we destroy buf_info in this
-     * function only in case that old_ref_count is 0.
-     */
-    old_ref_count = buf_info->ref_count;
-
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->release_funcs, link)
-        func_info->release_func(buffer, func_info->user_data);
-
-    /* finally, both ref_count and backend_ref_count are 0. destroy tdm_buffer */
-    if (old_ref_count == 0 && buf_info->ref_count == 0)
-        _tdm_buffer_destroy(buf_info);
-}
-
-EXTERN tbm_surface_h
-tdm_buffer_get_surface(tdm_buffer *buffer)
-{
-    tdm_buffer_info *buf_info = buffer;
-
-    TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, NULL);
-
-    return buf_info->buffer;
-}
-
-EXTERN tdm_buffer*
-tdm_buffer_get(tbm_surface_h buffer)
-{
-    tdm_buffer_info *found;
-
-    TDM_RETURN_VAL_IF_FAIL(buffer != NULL, NULL);
-
-    if (!buffer_list_init)
-    {
-        LIST_INITHEAD(&buffer_list);
-        buffer_list_init = 1;
-    }
-
-    LIST_FOR_EACH_ENTRY(found, &buffer_list, link)
     {
-        if (found->buffer == buffer)
-            return found;
+        tbm_surface_internal_ref(buffer);
+        func_info->release_func(buffer, func_info->user_data);
+        tbm_surface_internal_unref(buffer);
     }
-
-    return NULL;
 }
 
 EXTERN tdm_error
-tdm_buffer_add_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler func, void *user_data)
+tdm_buffer_add_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data)
 {
     tdm_buffer_info *buf_info;
     tdm_buffer_func_info *func_info;
@@ -316,20 +216,22 @@ tdm_buffer_add_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler fu
     TDM_RETURN_VAL_IF_FAIL(buffer != NULL, TDM_ERROR_INVALID_PARAMETER);
     TDM_RETURN_VAL_IF_FAIL(func != NULL, TDM_ERROR_INVALID_PARAMETER);
 
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_VAL_IF_FAIL(buf_info != NULL, TDM_ERROR_OUT_OF_MEMORY);
+
     func_info = calloc(1, sizeof(tdm_buffer_func_info));
     TDM_RETURN_VAL_IF_FAIL(func_info != NULL, TDM_ERROR_OUT_OF_MEMORY);
 
     func_info->destroy_func = func;
     func_info->user_data = user_data;
 
-    buf_info = buffer;
     LIST_ADD(&func_info->link, &buf_info->destroy_funcs);
 
     return TDM_ERROR_NONE;
 }
 
 EXTERN void
-tdm_buffer_remove_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler func, void *user_data)
+tdm_buffer_remove_destroy_handler(tbm_surface_h buffer, tdm_buffer_destroy_handler func, void *user_data)
 {
     tdm_buffer_info *buf_info;
     tdm_buffer_func_info *func_info = NULL, *next = NULL;
@@ -337,7 +239,9 @@ tdm_buffer_remove_destroy_handler(tdm_buffer *buffer, tdm_buffer_destroy_handler
     TDM_RETURN_IF_FAIL(buffer != NULL);
     TDM_RETURN_IF_FAIL(func != NULL);
 
-    buf_info = buffer;
+    buf_info = _tdm_buffer_get_info(buffer);
+    TDM_RETURN_IF_FAIL(buf_info != NULL);
+
     LIST_FOR_EACH_ENTRY_SAFE(func_info, next, &buf_info->destroy_funcs, link)
     {
         if (func_info->destroy_func != func || func_info->user_data != user_data)
index 56610c7..92e306a 100644 (file)
@@ -52,7 +52,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     func_capture = private_capture->func_capture
 
 static void
-_tdm_caputre_cb_done(tdm_capture *capture_backend, tdm_buffer *buffer, void *user_data)
+_tdm_caputre_cb_done(tdm_capture *capture_backend, tbm_surface_h buffer, void *user_data)
 {
     tdm_private_capture *private_capture = user_data;
     tdm_private_display *private_display = private_capture->private_display;
@@ -245,7 +245,7 @@ tdm_capture_set_info(tdm_capture *capture, tdm_info_capture *info)
 }
 
 EXTERN tdm_error
-tdm_capture_attach(tdm_capture *capture, tdm_buffer *buffer)
+tdm_capture_attach(tdm_capture *capture, tbm_surface_h buffer)
 {
     CAPTURE_FUNC_ENTRY();
 
@@ -260,8 +260,7 @@ tdm_capture_attach(tdm_capture *capture, tdm_buffer *buffer)
     }
 
     tdm_buffer_ref_backend(buffer);
-    ret = func_capture->capture_attach(private_capture->capture_backend,
-                                       tdm_buffer_get_surface(buffer));
+    ret = func_capture->capture_attach(private_capture->capture_backend, buffer);
 
     pthread_mutex_unlock(&private_display->lock);
 
index 3b9d12e..862c3d4 100644 (file)
@@ -1012,7 +1012,7 @@ tdm_layer_get_info(tdm_layer *layer, tdm_info_layer *info)
 }
 
 EXTERN tdm_error
-tdm_layer_set_buffer(tdm_layer *layer, tdm_buffer *buffer)
+tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
 {
     tdm_func_display *func_display;
     LAYER_FUNC_ENTRY();
index a8f1858..492db45 100644 (file)
@@ -68,8 +68,8 @@ _tdm_pp_cb_done(tdm_pp *pp_backend, tbm_surface_h src, tbm_surface_h dst, void *
         lock_after_cb_done = 1;
     }
 
-    tdm_buffer_unref_backend(tdm_buffer_get(src));
-    tdm_buffer_unref_backend(tdm_buffer_get(dst));
+    tdm_buffer_unref_backend(src);
+    tdm_buffer_unref_backend(dst);
 
     if (lock_after_cb_done)
         pthread_mutex_lock(&private_display->lock);
@@ -190,7 +190,7 @@ tdm_pp_set_info(tdm_pp *pp, tdm_info_pp *info)
 }
 
 EXTERN tdm_error
-tdm_pp_attach(tdm_pp *pp, tdm_buffer *src, tdm_buffer *dst)
+tdm_pp_attach(tdm_pp *pp, tbm_surface_h src, tbm_surface_h dst)
 {
     PP_FUNC_ENTRY();
 
@@ -207,9 +207,7 @@ tdm_pp_attach(tdm_pp *pp, tdm_buffer *src, tdm_buffer *dst)
 
     tdm_buffer_ref_backend(src);
     tdm_buffer_ref_backend(dst);
-    ret = func_pp->pp_attach(private_pp->pp_backend,
-                             tdm_buffer_get_surface(src),
-                             tdm_buffer_get_surface(dst));
+    ret = func_pp->pp_attach(private_pp->pp_backend, src, dst);
 
     pthread_mutex_unlock(&private_display->lock);
 
index 657ef4b..1a9df49 100644 (file)
@@ -206,8 +206,8 @@ struct _tdm_private_layer
     tdm_caps_layer caps;
     tdm_layer *layer_backend;
 
-    tdm_buffer *waiting_buffer;
-    tdm_buffer *showing_buffer;
+    tbm_surface_h waiting_buffer;
+    tbm_surface_h showing_buffer;
 
     struct list_head capture_list;