client: alloc attached buffer if format of queue and buffer are rgb8888 98/202598/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Mon, 1 Apr 2019 08:59:53 +0000 (17:59 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Mon, 1 Apr 2019 10:12:42 +0000 (19:12 +0900)
Change-Id: Iea8fa2006f498f64ad8fd1ae14b4a3bdc5030bce

src/wayland-tbm-client.c

index f8edafe..222eae8 100644 (file)
@@ -111,6 +111,8 @@ static struct wl_tbm_monitor *tbm_monitor;
 #define WL_TBM_TRACE(fmt, ...)
 #endif
 
+#define IS_RGB(f) ((f) == TBM_FORMAT_XRGB8888 || (f) == TBM_FORMAT_ARGB8888)
+
 struct wayland_tbm_buffer *
 _wayland_tbm_client_find_tbm_buffer_wl_buffer(struct wayland_tbm_client *tbm_client,
                                struct wl_buffer *wl_buffer);
@@ -1010,11 +1012,14 @@ static int
 _wayland_tbm_client_is_valid_attach_bufs(struct wayland_tbm_surface_queue *queue_info,
         struct wayland_tbm_buffer *buffer)
 {
-       if (queue_info->width != buffer->width ||
-               queue_info->height != buffer->height ||
-               queue_info->format != buffer->format)
+       if ((queue_info->width != buffer->width) || (queue_info->height != buffer->height))
                return 0;
 
+       if (queue_info->format != buffer->format) {
+               if (!IS_RGB(queue_info->format) || !IS_RGB(buffer->format))
+                       return 0;
+       }
+
        return 1;
 }
 
@@ -1773,9 +1778,7 @@ wayland_tbm_client_queue_check_activate(struct wayland_tbm_client *tbm_client, t
                }
 
                wl_list_for_each(buffer, &queue_info->attach_bufs, link) {
-                       if ((queue_info->width != buffer->width) ||
-                               (queue_info->height != buffer->height) ||
-                               (queue_info->format != buffer->format)) {
+                       if (!_wayland_tbm_client_is_valid_attach_bufs(queue_info, buffer)) {
                                pthread_mutex_unlock(&queue_info->lock);
                                return 0;
                        }