tbm_surface_queue: pending delete queue_node until released queue
[platform/core/uifw/libtbm.git] / src / tbm_surface_queue.h
1 /**************************************************************************
2
3 libtbm
4
5 Copyright 2014 Samsung Electronics co., Ltd. All Rights Reserved.
6
7 Contact: SooChan Lim <sc1.lim@samsung.com>, Sangjin Lee <lsj119@samsung.com>
8 Boram Park <boram1288.park@samsung.com>, Changyeon Lee <cyeon.lee@samsung.com>
9
10 Permission is hereby granted, free of charge, to any person obtaining a
11 copy of this software and associated documentation files (the
12 "Software"), to deal in the Software without restriction, including
13 without limitation the rights to use, copy, modify, merge, publish,
14 distribute, sub license, and/or sell copies of the Software, and to
15 permit persons to whom the Software is furnished to do so, subject to
16 the following conditions:
17
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
20 of the Software.
21
22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
25 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30 **************************************************************************/
31
32 #ifndef _TBM_SURFACE_QUEUE_H_
33 #define _TBM_SURFACE_QUEUE_H_
34
35 #include <tbm_surface.h>
36
37 typedef enum {
38         TBM_SURFACE_QUEUE_ERROR_NONE = 0,                                         /**< Successful */
39         TBM_SURFACE_QUEUE_ERROR_INVALID_SURFACE = -1,
40         TBM_SURFACE_QUEUE_ERROR_INVALID_QUEUE = -2,
41         TBM_SURFACE_QUEUE_ERROR_EMPTY = -3,
42         TBM_SURFACE_QUEUE_ERROR_INVALID_PARAMETER = -4,
43         TBM_SURFACE_QUEUE_ERROR_SURFACE_ALLOC_FAILED = -5,
44         TBM_SURFACE_QUEUE_ERROR_ALREADY_EXIST = -6,
45         TBM_SURFACE_QUEUE_ERROR_UNKNOWN_SURFACE = -7,
46 } tbm_surface_queue_error_e;
47
48 typedef enum {
49         TBM_SURFACE_QUEUE_TRACE_NONE = 0,                                         /**< Successful */
50         TBM_SURFACE_QUEUE_TRACE_DEQUEUE = 1,
51         TBM_SURFACE_QUEUE_TRACE_ENQUEUE = 2,
52         TBM_SURFACE_QUEUE_TRACE_ACQUIRE = 3,
53         TBM_SURFACE_QUEUE_TRACE_RELEASE = 4,
54         TBM_SURFACE_QUEUE_TRACE_CANCEL_DEQUEUE = 5,
55         TBM_SURFACE_QUEUE_TRACE_CANCEL_ACQUIRE = 6,
56 } tbm_surface_queue_trace;
57
58 typedef struct _tbm_surface_queue *tbm_surface_queue_h;
59
60 typedef void (*tbm_surface_queue_notify_cb)(tbm_surface_queue_h surface_queue,
61                 void *data);
62
63 typedef tbm_surface_h(*tbm_surface_alloc_cb)(tbm_surface_queue_h surface_queue,
64                 void *data);
65
66 typedef void (*tbm_surface_free_cb)(tbm_surface_queue_h surface_queue,
67                 void *data, tbm_surface_h surface);
68
69 typedef void (*tbm_surface_queue_trace_cb)(tbm_surface_queue_h surface_queue,
70                 tbm_surface_h surface, tbm_surface_queue_trace trace, void *data);
71
72 #ifdef __cplusplus
73 extern "C" {
74 #endif
75
76 tbm_surface_queue_error_e tbm_surface_queue_enqueue(
77                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
78
79 tbm_surface_queue_error_e tbm_surface_queue_cancel_dequeue(
80                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
81
82 tbm_surface_queue_error_e tbm_surface_queue_dequeue(
83                 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
84
85 tbm_surface_queue_error_e tbm_surface_queue_release(
86                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
87
88 tbm_surface_queue_error_e tbm_surface_queue_cancel_acquire(
89                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
90
91 tbm_surface_queue_error_e tbm_surface_queue_acquire(
92                 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
93
94 int tbm_surface_queue_can_dequeue(tbm_surface_queue_h surface_queue, int wait);
95
96 int tbm_surface_queue_can_acquire(tbm_surface_queue_h surface_queue, int wait);
97
98 void tbm_surface_queue_destroy(tbm_surface_queue_h surface_queue);
99
100 int tbm_surface_queue_get_width(tbm_surface_queue_h surface_queue);
101
102 int tbm_surface_queue_get_height(tbm_surface_queue_h surface_queue);
103
104 int tbm_surface_queue_get_format(tbm_surface_queue_h surface_queue);
105
106 int tbm_surface_queue_get_size(tbm_surface_queue_h surface_queue);
107
108 tbm_surface_queue_error_e tbm_surface_queue_reset(
109                 tbm_surface_queue_h surface_queue, int width, int height, int format);
110
111 tbm_surface_queue_error_e tbm_surface_queue_set_size(
112                 tbm_surface_queue_h surface_queue, int queue_size, int flush);
113
114 tbm_surface_queue_error_e tbm_surface_queue_flush(tbm_surface_queue_h surface_queue);
115 tbm_surface_queue_error_e tbm_surface_queue_free_flush(tbm_surface_queue_h surface_queue);
116
117 tbm_surface_queue_error_e tbm_surface_queue_notify_reset(tbm_surface_queue_h surface_queue);
118
119 tbm_surface_queue_error_e tbm_surface_queue_add_reset_cb(
120         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
121         void *data);
122
123 tbm_surface_queue_error_e tbm_surface_queue_remove_reset_cb(
124         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
125         void *data);
126
127 tbm_surface_queue_error_e tbm_surface_queue_add_destroy_cb(
128         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
129         void *data);
130
131 tbm_surface_queue_error_e tbm_surface_queue_remove_destroy_cb(
132         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
133         void *data);
134
135 tbm_surface_queue_error_e tbm_surface_queue_add_dequeuable_cb(
136         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
137         void *data);
138
139 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeuable_cb(
140         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
141         void *data);
142
143 tbm_surface_queue_error_e tbm_surface_queue_add_dequeue_cb(
144         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
145         void *data);
146
147 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeue_cb(
148         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
149         void *data);
150
151 tbm_surface_queue_error_e tbm_surface_queue_add_can_dequeue_cb(
152         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
153         void *data);
154
155 tbm_surface_queue_error_e tbm_surface_queue_remove_can_dequeue_cb(
156         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
157         void *data);
158
159 tbm_surface_queue_error_e tbm_surface_queue_add_acquirable_cb(
160         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
161         void *data);
162
163 tbm_surface_queue_error_e tbm_surface_queue_remove_acquirable_cb(
164         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
165         void *data);
166
167 tbm_surface_queue_error_e tbm_surface_queue_add_trace_cb(
168         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
169         void *data);
170
171 tbm_surface_queue_error_e tbm_surface_queue_remove_trace_cb(
172         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
173         void *data);
174
175 tbm_surface_queue_error_e tbm_surface_queue_set_alloc_cb(
176         tbm_surface_queue_h surface_queue,
177         tbm_surface_alloc_cb alloc_cb,
178         tbm_surface_free_cb free_cb,
179         void *data);
180
181 tbm_surface_queue_error_e tbm_surface_queue_get_surfaces(
182         tbm_surface_queue_h surface_queue,
183         tbm_surface_h *surfaces, int *num);
184
185 tbm_surface_queue_error_e tbm_surface_queue_get_trace_surface_num(
186                         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace trace, int *num);
187
188 /*The functions of queue factory*/
189 tbm_surface_queue_h tbm_surface_queue_create(int queue_size, int width,
190                 int height, int format, int flags);
191 tbm_surface_queue_h tbm_surface_queue_sequence_create(int queue_size, int width,
192                 int height, int format, int flags);
193
194 #ifdef __cplusplus
195 }
196 #endif
197 #endif                                                  /* _TBM_SURFACE_H_ */