1 /**************************************************************************
5 Copyright 2014 Samsung Electronics co., Ltd. All Rights Reserved.
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>
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:
18 The above copyright notice and this permission notice (including the
19 next paragraph) shall be included in all copies or substantial portions
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.
30 **************************************************************************/
32 #ifndef _TBM_SURFACE_QUEUE_H_
33 #define _TBM_SURFACE_QUEUE_H_
35 #include <tbm_surface.h>
36 #include <tbm_type_common.h>
37 #include <tbm_error.h>
40 TBM_SURFACE_QUEUE_TRACE_NONE = 0,
41 TBM_SURFACE_QUEUE_TRACE_DEQUEUE = 1,
42 TBM_SURFACE_QUEUE_TRACE_ENQUEUE = 2,
43 TBM_SURFACE_QUEUE_TRACE_ACQUIRE = 3,
44 TBM_SURFACE_QUEUE_TRACE_RELEASE = 4,
45 TBM_SURFACE_QUEUE_TRACE_CANCEL_DEQUEUE = 5,
46 TBM_SURFACE_QUEUE_TRACE_CANCEL_ACQUIRE = 6,
47 } tbm_surface_queue_trace;
50 TBM_SURFACE_QUEUE_MODE_NONE = 0,
52 * GUARANTEE_CYCLE mode must do enqueue/aquire/release or cancel_dequeue
53 * for the tbm_surface which is dequeued before tbm_surface_queue is reset.
55 TBM_SURFACE_QUEUE_MODE_GUARANTEE_CYCLE = (1 << 0),
56 } tbm_surface_queue_mode;
58 typedef struct _tbm_surface_queue *tbm_surface_queue_h;
60 typedef void (*tbm_surface_queue_notify_cb)(tbm_surface_queue_h surface_queue,
63 typedef tbm_surface_h (*tbm_surface_alloc_cb)(tbm_surface_queue_h surface_queue,
66 typedef tbm_surface_h (*tbm_surface_alloc_cb2)(tbm_surface_queue_h surface_queue,
67 int width, int height, int format, int flags, void *data);
69 typedef void (*tbm_surface_free_cb)(tbm_surface_queue_h surface_queue,
70 void *data, tbm_surface_h surface);
72 typedef void (*tbm_surface_queue_trace_cb)(tbm_surface_queue_h surface_queue,
73 tbm_surface_h surface, tbm_surface_queue_trace trace, void *data);
80 * @brief Creates the tbm_surface_queue_h.
81 * @details This function creates the tbm_surfac_queue_h with the given queue_size, width, height, format, flags.
83 * @param[in] queue_size The size of the tbm_surface_queue
84 * @param[in] width The width of the tbm_surface_queue
85 * @param[in] height The height of the tbm_surface_queue
86 * @param[in] format The format of the tbm_surface_queue
87 * @param[in] flags The flags of the tbm_surface_queue
89 * @return #tbm_surface_queue_h on success,
92 * @see tbm_surface_queue_destroy()
96 #include <tbm_surface_queue.h>
98 tbm_surface_queue_h surface_queue;
100 surface_queue = tbm_surface_queue_create(3, 128, 128, TBM_FORMAT_ARGB888, TBM_BO_DEFAULT);
104 tbm_surface_queue_destroy (surface_queue);
107 tbm_surface_queue_h tbm_surface_queue_create(int queue_size, int width,
108 int height, int format, int flags);
111 * @brief Creates the sequence tbm_surface_queue_h.
112 * @details This function creates the sequence tbm_surface_queue_h with the given queue_size, width, height, format, flags.
114 * @param[in] queue_size The size of the tbm_surface_queue
115 * @param[in] width The width of the tbm_surface_queue
116 * @param[in] height The height of the tbm_surface_queue
117 * @param[in] format The format of the tbm_surface_queue
118 * @param[in] flags The flags of the tbm_surface_queue
120 * @return #tbm_surface_queue_h on success,
123 * @see tbm_surface_queue_destroy()
127 #include <tbm_surface_queue.h>
129 tbm_surface_queue_h surface_queue;
131 surface_queue = tbm_surface_queue_sequence_create(3, 128, 128, TBM_FORMAT_ARGB888, TBM_BO_DEFAULT);
135 tbm_surface_queue_destroy (surface_queue);
138 tbm_surface_queue_h tbm_surface_queue_sequence_create(int queue_size, int width,
139 int height, int format, int flags);
142 * @brief Destroys the tbm_surface_queue.
144 * @param[in] surface_queue The #tbm_surface_queue_h
146 * @return #TBM_SURFACE_QUEUE_ERROR_NONE on success,
147 * otherwise an error status value
149 * @see tbm_surface_queue_create()
150 * @see tbm_surface_queue_sequence_create()
154 #include <tbm_surface_queue.h>
156 tbm_surface_queue_h surface_queue;
158 surface_queue = tbm_surface_queue_create(3, 128, 128, TBM_FORMAT_ARGB888, TBM_BO_DEFAULT);
162 tbm_surface_queue_destroy(surface_queue);
165 void tbm_surface_queue_destroy(tbm_surface_queue_h surface_queue);
168 * @brief Sets allocate callback to the tbm_surface_queue.
169 * alloc_cb is called when the tbm_surface_queue try to allocate the tbm_surface and
170 * the tbm_surface_queue dequeue the tbm_surface returned in alloc_cb
171 * free_cb is called when the tbm_surface_queue unreference the tbm_surface.
173 * @remarks You must use either tbm_surface_queue_set_alloc_cb or tbm_surface_queue_set_alloc_cb2
175 * @param[in] surface_queue The #tbm_surface_queue_h
176 * @param[in] alloc_cb The callback of allocate
177 * @param[in] free_cb The callback of free
178 * @param[in] data The user data
180 * @return #TBM_SURFACE_QUEUE_ERROR_NONE on success,
181 * otherwise an error status value
183 tbm_surface_queue_error_e tbm_surface_queue_set_alloc_cb(
184 tbm_surface_queue_h surface_queue,
185 tbm_surface_alloc_cb alloc_cb,
186 tbm_surface_free_cb free_cb,
190 * @brief Sets allocate callback to the tbm_surface_queue.
191 * alloc_cb2 is called when the tbm_surface_queue try to allocate the tbm_surface and
192 * the tbm_surface_queue dequeue the tbm_surface returned in alloc_cb2
193 * free_cb is called when the tbm_surface_queue unreference the tbm_surface.
195 * @remarks You must use either tbm_surface_queue_set_alloc_cb or tbm_surface_queue_set_alloc_cb2
197 * @param[in] surface_queue The #tbm_surface_queue_h
198 * @param[in] alloc_cb2 The callback of allocate
199 * @param[in] free_cb The callback of free
200 * @param[in] data The user data
202 * @return #TBM_SURFACE_QUEUE_ERROR_NONE on success,
203 * otherwise an error status value
205 tbm_surface_queue_error_e tbm_surface_queue_set_alloc_cb2(
206 tbm_surface_queue_h surface_queue,
207 tbm_surface_alloc_cb2 alloc_cb2,
208 tbm_surface_free_cb free_cb,
212 * @brief Gets the width of the tbm_surface_queue.
214 * @param[in] surface_queue The #tbm_surface_queue_h
216 * @return The width of the tbm_surface_queue on success,
217 * otherwise an error status value
219 int tbm_surface_queue_get_width(tbm_surface_queue_h surface_queue);
222 * @brief Gets the height of the tbm_surface_queue.
224 * @param[in] surface_queue The #tbm_surface_queue_h
226 * @return The height of the tbm_surface_queue on success,
227 * otherwise an error status value
229 int tbm_surface_queue_get_height(tbm_surface_queue_h surface_queue);
232 * @brief Gets the format of the tbm_surface_queue.
234 * @param[in] surface_queue The #tbm_surface_queue_h
236 * @return The format of the tbm_surface_queue on success,
237 * otherwise an error status value
239 int tbm_surface_queue_get_format(tbm_surface_queue_h surface_queue);
242 * @brief Gets the size of the tbm_surface_queue.
244 * @param[in] surface_queue The #tbm_surface_queue_h
246 * @return The size of the tbm_surface_queue on success,
247 * otherwise an error status value
249 int tbm_surface_queue_get_size(tbm_surface_queue_h surface_queue);
252 * @brief Gets the tbm_surfaces used by tbm_surface_queue.
253 * Return only surfaces are allocated and current used by the tbm_surface_queue.
254 * the tbm_surface_queue allocate surface when can_dequeue or dequeue.
255 * if the tbm_surface_queue allocate 2 surface even if queue size is 3,
256 * this function will return 2 surfaces.
257 * if the tbm_surface_queue is flushed, this function will return none surfaces.
259 * @remarks You must release the surfaces using free().
261 * @param[in] surface_queue The #tbm_surface_queue_h
262 * @param[out] surfaces The array of the tbm_surfaces
263 * @param[out] num The number of the array
265 * @return #TBM_SURFACE_ERROR_NONE on success,
266 * otherwise an error status value
271 #include <tbm_surface_queue.h>
273 tbm_surface_queue_h surface_queue;
274 tbm_surface_h *surfaces;
276 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
280 tsq_err = tbm_surface_queue_get_surfaces(surface_queue, surfaces, &num);
281 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
291 tbm_surface_queue_error_e tbm_surface_queue_get_surfaces(
292 tbm_surface_queue_h surface_queue,
293 tbm_surface_h *surfaces, int *num);
295 tbm_surface_queue_error_e tbm_surface_queue_get_acquirable_surfaces(
296 tbm_surface_queue_h surface_queue,
297 tbm_surface_h *surfaces, int *num);
300 * @brief Gets number of the tbm_surfaces by tbm_surface_queue_trace.
302 * @param[in] surface_queue The #tbm_surface_queue_h
303 * @param[in] trace The #tbm_surface_queue_trace
304 * @param[out] num The number of the surfaces
306 * @return #TBM_SURFACE_ERROR_NONE on success,
307 * otherwise an error status value
312 #include <tbm_surface_queue.h>
314 tbm_surface_queue_h surface_queue;
316 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
320 tsq_err = tbm_surface_queue_get_trace_surface_num(surface_queue, TBM_SURFACE_QUEUE_TRACE_DEQUEUE, &num);
321 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
329 tbm_surface_queue_error_e tbm_surface_queue_get_trace_surface_num(
330 tbm_surface_queue_h surface_queue, tbm_surface_queue_trace trace, int *num);
333 * @brief Sets size of the tbm_surface_queue.
335 * @param[in] surface_queue The #tbm_surface_queue_h
336 * @param[in] queue_size The size of the tbm_surface_queue
337 * @param[in] flush flush the tbm_surface_queue
339 * @return #TBM_SURFACE_ERROR_NONE on success,
340 * otherwise an error status value
345 #include <tbm_surface_queue.h>
347 tbm_surface_queue_h surface_queue;
348 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
352 tsq_err = tbm_surface_queue_set_size(surface_queue, 2, 1);
353 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
361 tbm_surface_queue_error_e tbm_surface_queue_set_size(
362 tbm_surface_queue_h surface_queue, int queue_size, int flush);
365 * @brief Sets modes of the tbm_surface_queue.
367 * @param[in] surface_queue The #tbm_surface_queue_h
368 * @param[in] modes modes of The #tbm_surface_queue_mode
370 * @return #TBM_SURFACE_ERROR_NONE on success,
371 * otherwise an error status value
376 #include <tbm_surface_queue.h>
378 tbm_surface_queue_h surface_queue;
379 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
381 surface_queue = tbm_surface_queue_create(3, 128, 128, TBM_FORMAT_ARGB888, TBM_BO_DEFAULT);
385 tsq_err = tbm_surface_queue_set_modes(surface_queue, TBM_SURFACE_QUEUE_MODE_GUARANTEE_CYCLE);
386 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
394 tbm_surface_queue_error_e tbm_surface_queue_set_modes(
395 tbm_surface_queue_h surface_queue, int modes);
398 * @brief Sets sync count of the tbm_surface_queue.
400 * @param[in] surface_queue The #tbm_surface_queue_h
401 * @param[in] sync_count The sync count
403 * @return #TBM_SURFACE_ERROR_NONE on success,
404 * otherwise an error status value
406 tbm_surface_queue_error_e tbm_surface_queue_set_sync_count(
407 tbm_surface_queue_h surface_queue, unsigned int sync_count);
410 * @brief Check the tbm_surface_queue can dequeue the tbm_surface.
411 * if wait is 1, this function isn't return until another thread release
412 * the tbm_surface to the tbm_surface_queue
414 * @param[in] surface_queue The #tbm_surface_queue_h
415 * @param[in] wait wait releasing the tbm_surface
417 * @return 1 if it can it, otherwise 0.
422 #include <tbm_surface_queue.h>
424 tbm_surface_queue_h surface_queue;
428 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
436 int tbm_surface_queue_can_dequeue(tbm_surface_queue_h surface_queue, int wait);
439 * @brief Check the tbm_surface_queue can acquire the tbm_surface.
440 * if wait is 1, this function isn't return until another thread enqueue
441 * the tbm_surface to the tbm_surface_queue
443 * @param[in] surface_queue The #tbm_surface_queue_h
444 * @param[in] wait wait enqueueing the tbm_surface
446 * @return 1 if it can it, otherwise 0.
451 #include <tbm_surface_queue.h>
453 tbm_surface_queue_h surface_queue;
457 if (tbm_surface_queue_can_acquire(surface_queue, 0)) {
465 int tbm_surface_queue_can_acquire(tbm_surface_queue_h surface_queue, int wait);
468 * @brief Dequeue the tbm_surface from the tbm_surface_queue.
470 * @param[in] surface_queue The #tbm_surface_queue_h
471 * @param[out] surface The #tbm_surface_h
473 * @return #TBM_SURFACE_ERROR_NONE on success,
474 * otherwise an error status value
479 #include <tbm_surface_queue.h>
481 tbm_surface_queue_h surface_queue;
482 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
483 tbm_surface_h surface;
487 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
488 tsq_err = tbm_surface_queue_dequeue(surface_queue, &surface);
489 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
498 tbm_surface_queue_error_e tbm_surface_queue_dequeue(
499 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
502 * @brief Enqueue the tbm_surface to the tbm_surface_queue.
504 * @param[in] surface_queue The #tbm_surface_queue_h
505 * @param[in] surface The #tbm_surface_h
507 * @return #TBM_SURFACE_ERROR_NONE on success,
508 * otherwise an error status value
513 #include <tbm_surface_queue.h>
515 tbm_surface_queue_h surface_queue;
516 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
517 tbm_surface_h surface;
519 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
520 tsq_err = tbm_surface_queue_dequeue(surface_queue, &surface);
521 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
530 tsq_err = tbm_surface_queue_enqueue(surface_queue, surface);
531 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
539 tbm_surface_queue_error_e tbm_surface_queue_enqueue(
540 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
543 * @brief Acquire the tbm_surface from the tbm_surface_queue.
545 * @param[in] surface_queue The #tbm_surface_queue_h
546 * @param[out] surface The #tbm_surface_h
548 * @return #TBM_SURFACE_ERROR_NONE on success,
549 * otherwise an error status value
554 #include <tbm_surface_queue.h>
556 tbm_surface_queue_h surface_queue;
557 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
558 tbm_surface_h surface, surface2;
560 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
561 tsq_err = tbm_surface_queue_dequeue(surface_queue, &surface);
562 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
571 tsq_err = tbm_surface_queue_enqueue(surface_queue, surface);
572 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
578 if (tbm_surface_queue_can_acquire(surface_queue, 0)) {
579 tsq_err = tbm_surface_queue_acquire(surface_queue, &surface2)
580 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
589 tbm_surface_queue_error_e tbm_surface_queue_acquire(
590 tbm_surface_queue_h surface_queue, tbm_surface_h *surface);
593 * @brief Release the tbm_surface to the tbm_surface_queue.
594 * the tbm_surface should be released when the tbm_surface can be dequeued and rendered.
595 * if the tbm_surface is released even though consumer is using it, it cause issue.
597 * @param[in] surface_queue The #tbm_surface_queue_h
598 * @param[in] surface The #tbm_surface_h
600 * @return #TBM_SURFACE_ERROR_NONE on success,
601 * otherwise an error status value
606 #include <tbm_surface_queue.h>
608 tbm_surface_queue_h surface_queue;
609 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
610 tbm_surface_h surface, surface2;
612 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
613 tsq_err = tbm_surface_queue_dequeue(surface_queue, &surface);
614 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
623 tsq_err = tbm_surface_queue_enqueue(surface_queue, surface);
624 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
630 if (tbm_surface_queue_can_acquire(surface_queue, 0)) {
631 tsq_err = tbm_surface_queue_acquire(surface_queue, &surface2)
632 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
640 tsq_err = tbm_surface_queue_release(surface_queue, surface2)
641 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
647 tbm_surface_queue_error_e tbm_surface_queue_release(
648 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
651 * @brief Cancel dequeue the tbm_surface to the tbm_surface_queue.
653 * @param[in] surface_queue The #tbm_surface_queue_h
654 * @param[in] surface The #tbm_surface_h
656 * @return #TBM_SURFACE_ERROR_NONE on success,
657 * otherwise an error status value
662 #include <tbm_surface_queue.h>
664 tbm_surface_queue_h surface_queue;
665 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
666 tbm_surface_h surface;
668 if (tbm_surface_queue_can_dequeue(surface_queue, 0)) {
669 tsq_err = tbm_surface_queue_dequeue(surface_queue, &surface);
670 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
677 tsq_err = tbm_surface_queue_cancel_dequeue(surface_queue, surface);
678 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
686 tbm_surface_queue_error_e tbm_surface_queue_cancel_dequeue(
687 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
690 * @brief Cancel acquire the tbm_surface to the tbm_surface_queue.
692 * @param[in] surface_queue The #tbm_surface_queue_h
693 * @param[in] surface The #tbm_surface_h
695 * @return #TBM_SURFACE_ERROR_NONE on success,
696 * otherwise an error status value
701 #include <tbm_surface_queue.h>
703 tbm_surface_queue_h surface_queue;
704 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
705 tbm_surface_h surface;
707 if (tbm_surface_queue_can_acquire(surface_queue, 0)) {
708 tsq_err = tbm_surface_queue_acquire(surface_queue, &surface);
709 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
716 tsq_err = tbm_surface_queue_cancel_acquire(surface_queue, surface);
717 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
725 tbm_surface_queue_error_e tbm_surface_queue_cancel_acquire(
726 tbm_surface_queue_h surface_queue, tbm_surface_h surface);
729 * @brief Reset the tbm_surface_queue.
731 * @param[in] surface_queue The #tbm_surface_queue_h
732 * @param[in] width The width of the tbm_surface_queue
733 * @param[in] height The height of the tbm_surface_queue
734 * @param[in] format The format of the tbm_surface_queue
736 * @return #TBM_SURFACE_ERROR_NONE on success,
737 * otherwise an error status value
742 #include <tbm_surface_queue.h>
744 tbm_surface_queue_h surface_queue;
745 tbm_surface_queue_error_e tsq_err = TBM_SURFACE_QUEUE_ERROR_NONE;
747 tsq_err = tbm_surface_queue_reset(surface_queue, 256,256, TBM_FORMAT_YUV420);
748 if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE) {
756 tbm_surface_queue_error_e tbm_surface_queue_reset(
757 tbm_surface_queue_h surface_queue, int width, int height, int format);
760 * @brief Flush the tbm_surface_queue.
762 * @param[in] surface_queue The #tbm_surface_queue_h
764 * @return #TBM_SURFACE_ERROR_NONE on success,
765 * otherwise an error status value
767 tbm_surface_queue_error_e tbm_surface_queue_flush(tbm_surface_queue_h surface_queue);
770 * @brief Free Flush the tbm_surface_queue.
771 * only the released tbm_surface is flushed.
773 * @param[in] surface_queue The #tbm_surface_queue_h
775 * @return #TBM_SURFACE_ERROR_NONE on success,
776 * otherwise an error status value
778 tbm_surface_queue_error_e tbm_surface_queue_free_flush(tbm_surface_queue_h surface_queue);
781 * @brief Notify reset of the tbm_surface_queue.
783 * @param[in] surface_queue The #tbm_surface_queue_h
785 * @return #TBM_SURFACE_ERROR_NONE on success,
786 * otherwise an error status value
788 tbm_surface_queue_error_e tbm_surface_queue_notify_reset(tbm_surface_queue_h surface_queue);
791 * @brief Notify dequeuable of the tbm_surface_queue.
793 * @param[in] surface_queue The #tbm_surface_queue_h
795 * @return #TBM_SURFACE_ERROR_NONE on success,
796 * otherwise an error status value
798 tbm_surface_queue_error_e tbm_surface_queue_notify_dequeuable(tbm_surface_queue_h surface_queue);
801 * @brief Add callback of destroy to the tbm_surface_queue.
803 * @param[in] surface_queue The #tbm_surface_queue_h
804 * @param[in] destroy_cb The callback of destroy
805 * @param[in] data The user data
807 * @return #TBM_SURFACE_ERROR_NONE on success,
808 * otherwise an error status value
810 tbm_surface_queue_error_e tbm_surface_queue_add_destroy_cb(
811 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
815 * @brief Remove callback of destroy from the tbm_surface_queue.
817 * @param[in] surface_queue The #tbm_surface_queue_h
818 * @param[in] destroy_cb The callback of destroy
819 * @param[in] data The user data
821 * @return #TBM_SURFACE_ERROR_NONE on success,
822 * otherwise an error status value
824 tbm_surface_queue_error_e tbm_surface_queue_remove_destroy_cb(
825 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb destroy_cb,
829 * @brief Add callback of reset to the tbm_surface_queue.
831 * @param[in] surface_queue The #tbm_surface_queue_h
832 * @param[in] reset_cb The callback of reset
833 * @param[in] data The user data
835 * @return #TBM_SURFACE_ERROR_NONE on success,
836 * otherwise an error status value
838 tbm_surface_queue_error_e tbm_surface_queue_add_reset_cb(
839 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
843 * @brief Remove callback of reset from the tbm_surface_queue.
845 * @param[in] surface_queue The #tbm_surface_queue_h
846 * @param[in] reset_cb The callback of reset
847 * @param[in] data The user data
849 * @return #TBM_SURFACE_ERROR_NONE on success,
850 * otherwise an error status value
852 tbm_surface_queue_error_e tbm_surface_queue_remove_reset_cb(
853 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb reset_cb,
857 * @brief Add callback of dequeuable to the tbm_surface_queue.
859 * @param[in] surface_queue The #tbm_surface_queue_h
860 * @param[in] dequeuable_cb The callback of dequeuable
861 * @param[in] data The user data
863 * @return #TBM_SURFACE_ERROR_NONE on success,
864 * otherwise an error status value
866 tbm_surface_queue_error_e tbm_surface_queue_add_dequeuable_cb(
867 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
871 * @brief Remove callback of dequeuable from the tbm_surface_queue.
873 * @param[in] surface_queue The #tbm_surface_queue_h
874 * @param[in] dequeuable_cb The callback of dequeuable
875 * @param[in] data The user data
877 * @return #TBM_SURFACE_ERROR_NONE on success,
878 * otherwise an error status value
880 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeuable_cb(
881 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeuable_cb,
885 * @brief Add callback of dequeue to the tbm_surface_queue.
887 * @param[in] surface_queue The #tbm_surface_queue_h
888 * @param[in] dequeue_cb The callback of dequeue
889 * @param[in] data The user data
891 * @return #TBM_SURFACE_ERROR_NONE on success,
892 * otherwise an error status value
894 tbm_surface_queue_error_e tbm_surface_queue_add_dequeue_cb(
895 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
899 * @brief Remove callback of dequeue from the tbm_surface_queue.
901 * @param[in] surface_queue The #tbm_surface_queue_h
902 * @param[in] dequeue_cb The callback of dequeue
903 * @param[in] data The user data
905 * @return #TBM_SURFACE_ERROR_NONE on success,
906 * otherwise an error status value
908 tbm_surface_queue_error_e tbm_surface_queue_remove_dequeue_cb(
909 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb dequeue_cb,
913 * @brief Add callback of can_dequeue to the tbm_surface_queue.
915 * @param[in] surface_queue The #tbm_surface_queue_h
916 * @param[in] can_dequeue_cb The callback of can_dequeue
917 * @param[in] data The user data
919 * @return #TBM_SURFACE_ERROR_NONE on success,
920 * otherwise an error status value
922 tbm_surface_queue_error_e tbm_surface_queue_add_can_dequeue_cb(
923 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
927 * @brief Remove callback of can_dequeue from the tbm_surface_queue.
929 * @param[in] surface_queue The #tbm_surface_queue_h
930 * @param[in] can_dequeue_cb The callback of can_dequeue
931 * @param[in] data The user data
933 * @return #TBM_SURFACE_ERROR_NONE on success,
934 * otherwise an error status value
936 tbm_surface_queue_error_e tbm_surface_queue_remove_can_dequeue_cb(
937 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb can_dequeue_cb,
941 * @brief Add callback of acquirable to the tbm_surface_queue.
943 * @param[in] surface_queue The #tbm_surface_queue_h
944 * @param[in] acquirable_cb The callback of acquirable
945 * @param[in] data The user data
947 * @return #TBM_SURFACE_ERROR_NONE on success,
948 * otherwise an error status value
950 tbm_surface_queue_error_e tbm_surface_queue_add_acquirable_cb(
951 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
955 * @brief Remove callback of acquirable form the tbm_surface_queue.
957 * @param[in] surface_queue The #tbm_surface_queue_h
958 * @param[in] acquirable_cb The callback of acquirable
959 * @param[in] data The user data
961 * @return #TBM_SURFACE_ERROR_NONE on success,
962 * otherwise an error status value
964 tbm_surface_queue_error_e tbm_surface_queue_remove_acquirable_cb(
965 tbm_surface_queue_h surface_queue, tbm_surface_queue_notify_cb acquirable_cb,
969 * @brief Add callback of trace to the tbm_surface_queue.
971 * @param[in] surface_queue The #tbm_surface_queue_h
972 * @param[in] trace_cb The callback of trace
973 * @param[in] data The user data
975 * @return #TBM_SURFACE_ERROR_NONE on success,
976 * otherwise an error status value
978 tbm_surface_queue_error_e tbm_surface_queue_add_trace_cb(
979 tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
983 * @brief Remove callback of trace from the tbm_surface_queue.
985 * @param[in] surface_queue The #tbm_surface_queue_h
986 * @param[in] trace_cb The callback of trace
987 * @param[in] data The user data
989 * @return #TBM_SURFACE_ERROR_NONE on success,
990 * otherwise an error status value
992 tbm_surface_queue_error_e tbm_surface_queue_remove_trace_cb(
993 tbm_surface_queue_h surface_queue, tbm_surface_queue_trace_cb trace_cb,
996 tbm_surface_queue_error_e
997 tbm_surface_queue_can_dequeue_wait_timeout(
998 tbm_surface_queue_h surface_queue, int ms_timeout);
1003 #endif /* _TBM_SURFACE_H_ */