tbm_drm_helper: remove setenv usage in client side
[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 enum {
59         TBM_SURFACE_QUEUE_MODE_NONE = 0,
60         /**
61          * GUARANTEE_CYCLE mode must do enqueue/aquire/release or cancel_dequeue
62          * for the tbm_surface which is dequeued before tbm_surface_queue is reset.
63          */
64         TBM_SURFACE_QUEUE_MODE_GUARANTEE_CYCLE = (1 << 0),
65 } tbm_surface_queue_mode;
66
67 typedef struct _tbm_surface_queue *tbm_surface_queue_h;
68
69 typedef void (*tbm_surface_queue_notify_cb)(tbm_surface_queue_h surface_queue,
70                 void *data);
71
72 typedef tbm_surface_h(*tbm_surface_alloc_cb)(tbm_surface_queue_h surface_queue,
73                 void *data);
74
75 typedef void (*tbm_surface_free_cb)(tbm_surface_queue_h surface_queue,
76                 void *data, tbm_surface_h surface);
77
78 typedef void (*tbm_surface_queue_trace_cb)(tbm_surface_queue_h surface_queue,
79                 tbm_surface_h surface, tbm_surface_queue_trace trace, void *data);
80
81 #ifdef __cplusplus
82 extern "C" {
83 #endif
84
85 tbm_surface_queue_error_e tbm_surface_queue_enqueue(
86                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
87
88 tbm_surface_queue_error_e tbm_surface_queue_cancel_dequeue(
89                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
90
91 tbm_surface_queue_error_e tbm_surface_queue_dequeue(
92                 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
93
94 tbm_surface_queue_error_e tbm_surface_queue_release(
95                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
96
97 tbm_surface_queue_error_e tbm_surface_queue_cancel_acquire(
98                 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
99
100 tbm_surface_queue_error_e tbm_surface_queue_acquire(
101                 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
102
103 int tbm_surface_queue_can_dequeue(tbm_surface_queue_h surface_queue, int wait);
104
105 int tbm_surface_queue_can_acquire(tbm_surface_queue_h surface_queue, int wait);
106
107 void tbm_surface_queue_destroy(tbm_surface_queue_h surface_queue);
108
109 int tbm_surface_queue_get_width(tbm_surface_queue_h surface_queue);
110
111 int tbm_surface_queue_get_height(tbm_surface_queue_h surface_queue);
112
113 int tbm_surface_queue_get_format(tbm_surface_queue_h surface_queue);
114
115 int tbm_surface_queue_get_size(tbm_surface_queue_h surface_queue);
116
117 tbm_surface_queue_error_e tbm_surface_queue_reset(
118                 tbm_surface_queue_h surface_queue, int width, int height, int format);
119
120 tbm_surface_queue_error_e tbm_surface_queue_set_size(
121                 tbm_surface_queue_h surface_queue, int queue_size, int flush);
122
123 tbm_surface_queue_error_e tbm_surface_queue_flush(tbm_surface_queue_h surface_queue);
124 tbm_surface_queue_error_e tbm_surface_queue_free_flush(tbm_surface_queue_h surface_queue);
125
126 tbm_surface_queue_error_e tbm_surface_queue_notify_reset(tbm_surface_queue_h surface_queue);
127
128 tbm_surface_queue_error_e tbm_surface_queue_add_reset_cb(
129         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
130         void *data);
131
132 tbm_surface_queue_error_e tbm_surface_queue_remove_reset_cb(
133         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
134         void *data);
135
136 tbm_surface_queue_error_e tbm_surface_queue_add_destroy_cb(
137         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
138         void *data);
139
140 tbm_surface_queue_error_e tbm_surface_queue_remove_destroy_cb(
141         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
142         void *data);
143
144 tbm_surface_queue_error_e tbm_surface_queue_add_dequeuable_cb(
145         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
146         void *data);
147
148 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeuable_cb(
149         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
150         void *data);
151
152 tbm_surface_queue_error_e tbm_surface_queue_add_dequeue_cb(
153         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
154         void *data);
155
156 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeue_cb(
157         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
158         void *data);
159
160 tbm_surface_queue_error_e tbm_surface_queue_add_can_dequeue_cb(
161         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
162         void *data);
163
164 tbm_surface_queue_error_e tbm_surface_queue_remove_can_dequeue_cb(
165         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
166         void *data);
167
168 tbm_surface_queue_error_e tbm_surface_queue_add_acquirable_cb(
169         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
170         void *data);
171
172 tbm_surface_queue_error_e tbm_surface_queue_remove_acquirable_cb(
173         tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
174         void *data);
175
176 tbm_surface_queue_error_e tbm_surface_queue_add_trace_cb(
177         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
178         void *data);
179
180 tbm_surface_queue_error_e tbm_surface_queue_remove_trace_cb(
181         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
182         void *data);
183
184 tbm_surface_queue_error_e tbm_surface_queue_set_alloc_cb(
185         tbm_surface_queue_h surface_queue,
186         tbm_surface_alloc_cb alloc_cb,
187         tbm_surface_free_cb free_cb,
188         void *data);
189
190 tbm_surface_queue_error_e tbm_surface_queue_get_surfaces(
191         tbm_surface_queue_h surface_queue,
192         tbm_surface_h *surfaces, int *num);
193
194 tbm_surface_queue_error_e tbm_surface_queue_get_trace_surface_num(
195                         tbm_surface_queue_h surface_queue, tbm_surface_queue_trace trace, int *num);
196
197 tbm_surface_queue_error_e tbm_surface_queue_set_modes(
198                         tbm_surface_queue_h surface_queue, int modes);
199
200 /*The functions of queue factory*/
201 tbm_surface_queue_h tbm_surface_queue_create(int queue_size, int width,
202                 int height, int format, int flags);
203 tbm_surface_queue_h tbm_surface_queue_sequence_create(int queue_size, int width,
204                 int height, int format, int flags);
205
206 #ifdef __cplusplus
207 }
208 #endif
209 #endif                                                  /* _TBM_SURFACE_H_ */