FFmpeg
thread_queue.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef FFTOOLS_THREAD_QUEUE_H
20 #define FFTOOLS_THREAD_QUEUE_H
21 
22 #include <string.h>
23 
27 };
28 
29 typedef struct ThreadQueue ThreadQueue;
30 
31 /**
32  * Allocate a queue for sending data between threads.
33  *
34  * @param nb_streams number of streams for which a distinct EOF state is
35  * maintained
36  * @param queue_size number of items that can be stored in the queue without
37  * blocking
38  */
39 ThreadQueue *tq_alloc(unsigned int nb_streams, size_t queue_size,
40  enum ThreadQueueType type);
41 void tq_free(ThreadQueue **tq);
42 
43 /**
44  * Send an item for the given stream to the queue.
45  *
46  * @param data the item to send, its contents will be moved using the callback
47  * provided to tq_alloc(); on failure the item will be left
48  * untouched
49  * @return
50  * - 0 the item was successfully sent
51  * - AVERROR(ENOMEM) could not allocate an item for writing to the FIFO
52  * - AVERROR(EINVAL) the sending side has previously been marked as finished
53  * - AVERROR_EOF the receiving side has marked the given stream as finished
54  */
55 int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data);
56 /**
57  * Mark the given stream finished from the sending side.
58  */
59 void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx);
60 
61 /**
62  * Read the next item from the queue.
63  *
64  * @param stream_idx the index of the stream that was processed or -1 will be
65  * written here
66  * @param data the data item will be written here on success using the
67  * callback provided to tq_alloc()
68  * @return
69  * - 0 a data item was successfully read; *stream_idx contains a non-negative
70  * stream index
71  * - AVERROR_EOF When *stream_idx is non-negative, this signals that the sending
72  * side has marked the given stream as finished. This will happen at most once
73  * for each stream. When *stream_idx is -1, all streams are done.
74  */
75 int tq_receive(ThreadQueue *tq, int *stream_idx, void *data);
76 /**
77  * Mark the given stream finished from the receiving side.
78  */
79 void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx);
80 
81 #endif // FFTOOLS_THREAD_QUEUE_H
THREAD_QUEUE_PACKETS
@ THREAD_QUEUE_PACKETS
Definition: thread_queue.h:26
data
const char data[16]
Definition: mxf.c:149
tq_send
int tq_send(ThreadQueue *tq, unsigned int stream_idx, void *data)
Send an item for the given stream to the queue.
Definition: thread_queue.c:116
tq_send_finish
void tq_send_finish(ThreadQueue *tq, unsigned int stream_idx)
Mark the given stream finished from the sending side.
Definition: thread_queue.c:223
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
tq_receive_finish
void tq_receive_finish(ThreadQueue *tq, unsigned int stream_idx)
Mark the given stream finished from the receiving side.
Definition: thread_queue.c:238
nb_streams
static int nb_streams
Definition: ffprobe.c:385
ThreadQueueType
ThreadQueueType
Definition: thread_queue.h:24
tq_free
void tq_free(ThreadQueue **tq)
Definition: thread_queue.c:53
THREAD_QUEUE_FRAMES
@ THREAD_QUEUE_FRAMES
Definition: thread_queue.h:25
ThreadQueue
Definition: thread_queue.c:40
tq_receive
int tq_receive(ThreadQueue *tq, int *stream_idx, void *data)
Read the next item from the queue.
Definition: thread_queue.c:193
tq_alloc
ThreadQueue * tq_alloc(unsigned int nb_streams, size_t queue_size, enum ThreadQueueType type)
Allocate a queue for sending data between threads.
Definition: thread_queue.c:71