tbm_surface_queue: add a function for get buffers 12/74012/4
authorSangjin Lee <lsj119@samsung.com>
Fri, 10 Jun 2016 10:38:38 +0000 (19:38 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Tue, 14 Jun 2016 08:05:22 +0000 (17:05 +0900)
This function just query tbm_surfaces in a tbm_surface_queue.

Change-Id: I0199af904a9a0feccc182d4d433baf455065087c

src/tbm_surface_queue.c
src/tbm_surface_queue.h

index cf6a1fe..cfb3f1a 100644 (file)
@@ -955,6 +955,33 @@ tbm_surface_queue_flush(tbm_surface_queue_h surface_queue)
        return TBM_SURFACE_QUEUE_ERROR_NONE;
 }
 
+tbm_surface_queue_error_e
+tbm_surface_queue_get_surfaces(tbm_surface_queue_h surface_queue,
+                       tbm_surface_h *surfaces, int *num)
+{
+       TBM_RETURN_VAL_IF_FAIL(surface_queue != NULL,
+                              TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE);
+       TBM_RETURN_VAL_IF_FAIL(num != NULL,
+                              TBM_SURFACE_QUEUE_ERROR_INVALID_PARAMETER);
+
+       queue_node *node = NULL;
+       queue_node *tmp = NULL;
+
+       pthread_mutex_lock(&surface_queue->lock);
+
+       *num = 0;
+       LIST_FOR_EACH_ENTRY_SAFE(node, tmp, &surface_queue->list, link) {
+               if (surfaces) {
+                       surfaces[*num] = node->surface;
+               }
+               *num = *num + 1;
+       }
+
+       pthread_mutex_unlock(&surface_queue->lock);
+
+       return TBM_SURFACE_QUEUE_ERROR_NONE;
+}
+
 typedef struct {
        int queue_size;
        int num_attached;
index e3587b5..8803a60 100644 (file)
@@ -127,6 +127,10 @@ tbm_surface_queue_error_e tbm_surface_queue_set_alloc_cb(
        tbm_surface_free_cb free_cb,
        void *data);
 
+tbm_surface_queue_error_e tbm_surface_queue_get_surfaces(
+       tbm_surface_queue_h surface_queue,
+       tbm_surface_h *surfaces, int *num);
+
 /*The functions of queue factory*/
 tbm_surface_queue_h tbm_surface_queue_create(int queue_size, int width,
                int height, int format, int flags);