ffmpeg / libavutil / fifo.h @ 4b2be143
History | View | Annotate | Download (3.49 KB)
1 | f5a90186 | Diego Biurrun | /*
|
---|---|---|---|
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 | 1faf7dc8 | Dujardin Bernard | /**
|
20 | bad5537e | Diego Biurrun | * @file libavutil/fifo.h
|
21 | 89c9ff50 | Diego Biurrun | * a very simple circular buffer FIFO implementation
|
22 | 1faf7dc8 | Dujardin Bernard | */
|
23 | |||
24 | 98790382 | Stefano Sabatini | #ifndef AVUTIL_FIFO_H
|
25 | #define AVUTIL_FIFO_H
|
||
26 | f5a478f6 | Roman Shaposhnik | |
27 | 99545457 | Måns Rullgård | #include <stdint.h> |
28 | af5f434f | Aurelien Jacobs | #include "avutil.h" |
29 | 7c430093 | Måns Rullgård | #include "common.h" |
30 | 99545457 | Måns Rullgård | |
31 | f5a478f6 | Roman Shaposhnik | typedef struct AVFifoBuffer { |
32 | uint8_t *buffer; |
||
33 | uint8_t *rptr, *wptr, *end; |
||
34 | 0a71e78c | Michael Niedermayer | uint32_t rndx, wndx; |
35 | f5a478f6 | Roman Shaposhnik | } AVFifoBuffer; |
36 | |||
37 | 1faf7dc8 | Dujardin Bernard | /**
|
38 | 82ffe191 | Diego Biurrun | * Initializes an AVFifoBuffer.
|
39 | 1faf7dc8 | Dujardin Bernard | * @param size of FIFO
|
40 | 41dd680d | Michael Niedermayer | * @return AVFifoBuffer or NULL if mem allocation failure
|
41 | 1faf7dc8 | Dujardin Bernard | */
|
42 | 41dd680d | Michael Niedermayer | AVFifoBuffer *av_fifo_alloc(unsigned int size); |
43 | 1faf7dc8 | Dujardin Bernard | |
44 | /**
|
||
45 | 82ffe191 | Diego Biurrun | * Frees an AVFifoBuffer.
|
46 | * @param *f AVFifoBuffer to free
|
||
47 | 1faf7dc8 | Dujardin Bernard | */
|
48 | f5a478f6 | Roman Shaposhnik | void av_fifo_free(AVFifoBuffer *f);
|
49 | 1faf7dc8 | Dujardin Bernard | |
50 | /**
|
||
51 | 32b936d0 | Reimar Döffinger | * Resets the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
|
52 | * @param *f AVFifoBuffer to reset
|
||
53 | */
|
||
54 | void av_fifo_reset(AVFifoBuffer *f);
|
||
55 | |||
56 | /**
|
||
57 | 82ffe191 | Diego Biurrun | * Returns the amount of data in bytes in the AVFifoBuffer, that is the
|
58 | * amount of data you can read from it.
|
||
59 | * @param *f AVFifoBuffer to read from
|
||
60 | 1faf7dc8 | Dujardin Bernard | * @return size
|
61 | */
|
||
62 | f5a478f6 | Roman Shaposhnik | int av_fifo_size(AVFifoBuffer *f);
|
63 | 1faf7dc8 | Dujardin Bernard | |
64 | /**
|
||
65 | 7b09db35 | Olivier Guilyardi | * Returns the amount of space in bytes in the AVFifoBuffer, that is the
|
66 | * amount of data you can write into it.
|
||
67 | * @param *f AVFifoBuffer to write into
|
||
68 | * @return size
|
||
69 | */
|
||
70 | int av_fifo_space(AVFifoBuffer *f);
|
||
71 | |||
72 | /**
|
||
73 | 89c9ff50 | Diego Biurrun | * Feeds data from an AVFifoBuffer to a user-supplied callback.
|
74 | 82ffe191 | Diego Biurrun | * @param *f AVFifoBuffer to read from
|
75 | * @param buf_size number of bytes to read
|
||
76 | 1faf7dc8 | Dujardin Bernard | * @param *func generic read function
|
77 | * @param *dest data destination
|
||
78 | */
|
||
79 | 3898eed8 | Reimar Döffinger | int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); |
80 | 1faf7dc8 | Dujardin Bernard | |
81 | 49cec199 | Björn Axelsson | /**
|
82 | 89c9ff50 | Diego Biurrun | * Feeds data from a user-supplied callback to an AVFifoBuffer.
|
83 | 49cec199 | Björn Axelsson | * @param *f AVFifoBuffer to write to
|
84 | 95c76e11 | Benoit Fouet | * @param *src data source
|
85 | 49cec199 | Björn Axelsson | * @param size number of bytes to write
|
86 | 89c9ff50 | Diego Biurrun | * @param *func generic write function; the first parameter is src,
|
87 | * the second is dest_buf, the third is dest_buf_size.
|
||
88 | 49cec199 | Björn Axelsson | * func must return the number of bytes written to dest_buf, or <= 0 to
|
89 | * indicate no more data available to write.
|
||
90 | 95c76e11 | Benoit Fouet | * If func is NULL, src is interpreted as a simple byte array for source data.
|
91 | 89c9ff50 | Diego Biurrun | * @return the number of bytes written to the FIFO
|
92 | 49cec199 | Björn Axelsson | */
|
93 | 95c76e11 | Benoit Fouet | int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); |
94 | 1faf7dc8 | Dujardin Bernard | |
95 | /**
|
||
96 | 8257b835 | Stefano Sabatini | * Resizes an AVFifoBuffer.
|
97 | * @param *f AVFifoBuffer to resize
|
||
98 | * @param size new AVFifoBuffer size in bytes
|
||
99 | 89c9ff50 | Diego Biurrun | * @return <0 for failure, >=0 otherwise
|
100 | 8257b835 | Stefano Sabatini | */
|
101 | int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); |
||
102 | |||
103 | /**
|
||
104 | 82ffe191 | Diego Biurrun | * Reads and discards the specified amount of data from an AVFifoBuffer.
|
105 | * @param *f AVFifoBuffer to read from
|
||
106 | * @param size amount of data to read in bytes
|
||
107 | 1faf7dc8 | Dujardin Bernard | */
|
108 | f5a478f6 | Roman Shaposhnik | void av_fifo_drain(AVFifoBuffer *f, int size); |
109 | |||
110 | static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs) |
||
111 | { |
||
112 | uint8_t *ptr = f->rptr + offs; |
||
113 | if (ptr >= f->end)
|
||
114 | ptr -= f->end - f->buffer; |
||
115 | return *ptr;
|
||
116 | } |
||
117 | 98790382 | Stefano Sabatini | #endif /* AVUTIL_FIFO_H */ |