FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
fifo.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
/**
20
* @file
21
* a very simple circular buffer FIFO implementation
22
*/
23
24
#ifndef AVUTIL_FIFO_H
25
#define AVUTIL_FIFO_H
26
27
#include <stdint.h>
28
#include "
avutil.h
"
29
#include "
attributes.h
"
30
31
typedef
struct
AVFifoBuffer
{
32
uint8_t
*
buffer
;
33
uint8_t
*
rptr
, *
wptr
, *
end
;
34
uint32_t
rndx
,
wndx
;
35
}
AVFifoBuffer
;
36
37
/**
38
* Initialize an AVFifoBuffer.
39
* @param size of FIFO
40
* @return AVFifoBuffer or NULL in case of memory allocation failure
41
*/
42
AVFifoBuffer
*
av_fifo_alloc
(
unsigned
int
size
);
43
44
/**
45
* Initialize an AVFifoBuffer.
46
* @param nmemb number of elements
47
* @param size size of the single element
48
* @return AVFifoBuffer or NULL in case of memory allocation failure
49
*/
50
AVFifoBuffer
*
av_fifo_alloc_array
(
size_t
nmemb,
size_t
size
);
51
52
/**
53
* Free an AVFifoBuffer.
54
* @param f AVFifoBuffer to free
55
*/
56
void
av_fifo_free
(
AVFifoBuffer
*f);
57
58
/**
59
* Free an AVFifoBuffer and reset pointer to NULL.
60
* @param f AVFifoBuffer to free
61
*/
62
void
av_fifo_freep
(
AVFifoBuffer
**f);
63
64
/**
65
* Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
66
* @param f AVFifoBuffer to reset
67
*/
68
void
av_fifo_reset
(
AVFifoBuffer
*f);
69
70
/**
71
* Return the amount of data in bytes in the AVFifoBuffer, that is the
72
* amount of data you can read from it.
73
* @param f AVFifoBuffer to read from
74
* @return size
75
*/
76
int
av_fifo_size
(
FF_CONST_AVUTIL53
AVFifoBuffer
*f);
77
78
/**
79
* Return the amount of space in bytes in the AVFifoBuffer, that is the
80
* amount of data you can write into it.
81
* @param f AVFifoBuffer to write into
82
* @return size
83
*/
84
int
av_fifo_space
(
FF_CONST_AVUTIL53
AVFifoBuffer
*f);
85
86
/**
87
* Feed data from an AVFifoBuffer to a user-supplied callback.
88
* @param f AVFifoBuffer to read from
89
* @param buf_size number of bytes to read
90
* @param func generic read function
91
* @param dest data destination
92
*/
93
int
av_fifo_generic_read
(
AVFifoBuffer
*f,
void
*dest,
int
buf_size,
void
(*
func
)(
void
*,
void
*,
int
));
94
95
/**
96
* Feed data from a user-supplied callback to an AVFifoBuffer.
97
* @param f AVFifoBuffer to write to
98
* @param src data source; non-const since it may be used as a
99
* modifiable context by the function defined in func
100
* @param size number of bytes to write
101
* @param func generic write function; the first parameter is src,
102
* the second is dest_buf, the third is dest_buf_size.
103
* func must return the number of bytes written to dest_buf, or <= 0 to
104
* indicate no more data available to write.
105
* If func is NULL, src is interpreted as a simple byte array for source data.
106
* @return the number of bytes written to the FIFO
107
*/
108
int
av_fifo_generic_write
(
AVFifoBuffer
*f,
void
*
src
,
int
size
,
int
(*
func
)(
void
*,
void
*,
int
));
109
110
/**
111
* Resize an AVFifoBuffer.
112
* In case of reallocation failure, the old FIFO is kept unchanged.
113
*
114
* @param f AVFifoBuffer to resize
115
* @param size new AVFifoBuffer size in bytes
116
* @return <0 for failure, >=0 otherwise
117
*/
118
int
av_fifo_realloc2
(
AVFifoBuffer
*f,
unsigned
int
size);
119
120
/**
121
* Enlarge an AVFifoBuffer.
122
* In case of reallocation failure, the old FIFO is kept unchanged.
123
* The new fifo size may be larger than the requested size.
124
*
125
* @param f AVFifoBuffer to resize
126
* @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size()
127
* @return <0 for failure, >=0 otherwise
128
*/
129
int
av_fifo_grow
(
AVFifoBuffer
*f,
unsigned
int
additional_space);
130
131
/**
132
* Read and discard the specified amount of data from an AVFifoBuffer.
133
* @param f AVFifoBuffer to read from
134
* @param size amount of data to read in bytes
135
*/
136
void
av_fifo_drain
(
AVFifoBuffer
*f,
int
size);
137
138
/**
139
* Return a pointer to the data stored in a FIFO buffer at a certain offset.
140
* The FIFO buffer is not modified.
141
*
142
* @param f AVFifoBuffer to peek at, f must be non-NULL
143
* @param offs an offset in bytes, its absolute value must be less
144
* than the used buffer size or the returned pointer will
145
* point outside to the buffer data.
146
* The used buffer size can be checked with av_fifo_size().
147
*/
148
static
inline
uint8_t
*
av_fifo_peek2
(
const
AVFifoBuffer
*f,
int
offs)
149
{
150
uint8_t
*ptr = f->
rptr
+ offs;
151
if
(ptr >= f->
end
)
152
ptr = f->
buffer
+ (ptr - f->
end
);
153
else
if
(ptr < f->
buffer
)
154
ptr = f->
end
- (f->
buffer
- ptr);
155
return
ptr;
156
}
157
158
#endif
/* AVUTIL_FIFO_H */
Generated on Sun Sep 14 2014 18:56:16 for FFmpeg by
1.8.2