MediaProcessors
fifo.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017, 2018 Rafael Antoniello
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived
15  * from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
36 #ifndef UTILS_SRC_FIFO_H_
37 #define UTILS_SRC_FIFO_H_
38 
39 #include <sys/types.h>
40 #include <inttypes.h>
41 
42 /* **** Definitions **** */
43 
50 #define FIFO_O_NONBLOCK 1
51 
56 #define FIFO_PROCESS_SHARED 2
57 
58 /* Forward definitions */
59 typedef struct fifo_ctx_s fifo_ctx_t;
60 
61 typedef void*(fifo_elem_ctx_dup_fxn_t)(const void*);
62 typedef void(fifo_elem_ctx_release_fxn_t)(void**);
63 
64 typedef struct fifo_elem_alloc_fxn_s {
65  fifo_elem_ctx_dup_fxn_t *elem_ctx_dup;
66  fifo_elem_ctx_release_fxn_t *elem_ctx_release;
68 
69 /* **** Prototypes **** */
70 
74 fifo_ctx_t* fifo_open(size_t slots_max, size_t chunk_size_max,
75  uint32_t flags, const fifo_elem_alloc_fxn_t *fifo_elem_alloc_fxn);
76 
84 fifo_ctx_t* fifo_shm_open(size_t slots_max, size_t chunk_size_max,
85  uint32_t flags, const char *fifo_file_name);
86 fifo_ctx_t* fifo_shm_exec_open(size_t slots_max, size_t chunk_size_max,
87  uint32_t flags, const char *fifo_file_name);
88 
89 
93 void fifo_close(fifo_ctx_t **ref_fifo_ctx);
94 
98 void fifo_set_blocking_mode(fifo_ctx_t *fifo_ctx, int do_block);
99 
103 int fifo_put_dup(fifo_ctx_t *fifo_ctx, const void *elem, size_t elem_size);
104 
108 int fifo_put(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t elem_size);
109 
113 int fifo_get(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size);
114 
118 int fifo_timedget(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size,
119  int64_t tout_usecs);
120 
124 int fifo_show(fifo_ctx_t *fifo_ctx, void **elem, size_t *elem_size);
125 
129 ssize_t fifo_get_buffer_level(fifo_ctx_t *fifo_ctx);
130 
134 int fifo_traverse(fifo_ctx_t *fifo_ctx, int elem_cnt,
135  void (*it_fxn)(void *elem, ssize_t elem_size, int idx, void *it_arg,
136  int *ref_flag_break),
137  void *it_arg);
138 
142 void fifo_empty(fifo_ctx_t *fifo_ctx);
143 
144 #endif /* UTILS_SRC_FIFO_H_ */
int fifo_put(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t elem_size)
Definition: fifo.c:361
int fifo_traverse(fifo_ctx_t *fifo_ctx, int elem_cnt, void(*it_fxn)(void *elem, ssize_t elem_size, int idx, void *it_arg, int *ref_flag_break), void *it_arg)
Definition: fifo.c:400
int fifo_timedget(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size, int64_t tout_usecs)
Definition: fifo.c:372
int fifo_get(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size)
Definition: fifo.c:366
fifo_ctx_t * fifo_shm_open(size_t slots_max, size_t chunk_size_max, uint32_t flags, const char *fifo_file_name)
Definition: fifo.c:229
fifo_ctx_t * fifo_open(size_t slots_max, size_t chunk_size_max, uint32_t flags, const fifo_elem_alloc_fxn_t *fifo_elem_alloc_fxn)
Definition: fifo.c:195
ssize_t fifo_get_buffer_level(fifo_ctx_t *fifo_ctx)
Definition: fifo.c:385
int fifo_put_dup(fifo_ctx_t *fifo_ctx, const void *elem, size_t elem_size)
Definition: fifo.c:355
void fifo_set_blocking_mode(fifo_ctx_t *fifo_ctx, int do_block)
Definition: fifo.c:332
int fifo_show(fifo_ctx_t *fifo_ctx, void **elem, size_t *elem_size)
Definition: fifo.c:379
void fifo_close(fifo_ctx_t **ref_fifo_ctx)
Definition: fifo.c:327
void fifo_empty(fifo_ctx_t *fifo_ctx)
Definition: fifo.c:456