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
* Free an AVFifoBuffer.
46
* @param f AVFifoBuffer to free
47
*/
48
void
av_fifo_free
(
AVFifoBuffer
*f);
49
50
/**
51
* Reset 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
* Return 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
* @return size
61
*/
62
int
av_fifo_size
(
AVFifoBuffer
*f);
63
64
/**
65
* Return 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
* Feed data from an AVFifoBuffer to a user-supplied callback.
74
* @param f AVFifoBuffer to read from
75
* @param buf_size number of bytes to read
76
* @param func generic read function
77
* @param dest data destination
78
*/
79
int
av_fifo_generic_read
(
AVFifoBuffer
*f,
void
*dest,
int
buf_size,
void
(*
func
)(
void
*,
void
*,
int
));
80
81
/**
82
* Feed data from a user-supplied callback to an AVFifoBuffer.
83
* @param f AVFifoBuffer to write to
84
* @param src data source; non-const since it may be used as a
85
* modifiable context by the function defined in func
86
* @param size number of bytes to write
87
* @param func generic write function; the first parameter is src,
88
* the second is dest_buf, the third is dest_buf_size.
89
* func must return the number of bytes written to dest_buf, or <= 0 to
90
* indicate no more data available to write.
91
* If func is NULL, src is interpreted as a simple byte array for source data.
92
* @return the number of bytes written to the FIFO
93
*/
94
int
av_fifo_generic_write
(
AVFifoBuffer
*f,
void
*
src
,
int
size
,
int
(*
func
)(
void
*,
void
*,
int
));
95
96
/**
97
* Resize an AVFifoBuffer.
98
* In case of reallocation failure, the old FIFO is kept unchanged.
99
*
100
* @param f AVFifoBuffer to resize
101
* @param size new AVFifoBuffer size in bytes
102
* @return <0 for failure, >=0 otherwise
103
*/
104
int
av_fifo_realloc2
(
AVFifoBuffer
*f,
unsigned
int
size);
105
106
/**
107
* Enlarge an AVFifoBuffer.
108
* In case of reallocation failure, the old FIFO is kept unchanged.
109
* The new fifo size may be larger than the requested size.
110
*
111
* @param f AVFifoBuffer to resize
112
* @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size()
113
* @return <0 for failure, >=0 otherwise
114
*/
115
int
av_fifo_grow
(
AVFifoBuffer
*f,
unsigned
int
additional_space);
116
117
/**
118
* Read and discard the specified amount of data from an AVFifoBuffer.
119
* @param f AVFifoBuffer to read from
120
* @param size amount of data to read in bytes
121
*/
122
void
av_fifo_drain
(
AVFifoBuffer
*f,
int
size);
123
124
/**
125
* Return a pointer to the data stored in a FIFO buffer at a certain offset.
126
* The FIFO buffer is not modified.
127
*
128
* @param f AVFifoBuffer to peek at, f must be non-NULL
129
* @param offs an offset in bytes, its absolute value must be less
130
* than the used buffer size or the returned pointer will
131
* point outside to the buffer data.
132
* The used buffer size can be checked with av_fifo_size().
133
*/
134
static
inline
uint8_t
*
av_fifo_peek2
(
const
AVFifoBuffer
*f,
int
offs)
135
{
136
uint8_t
*ptr = f->
rptr
+ offs;
137
if
(ptr >= f->
end
)
138
ptr = f->
buffer
+ (ptr - f->
end
);
139
else
if
(ptr < f->
buffer
)
140
ptr = f->
end
- (f->
buffer
- ptr);
141
return
ptr;
142
}
143
144
#endif
/* AVUTIL_FIFO_H */
Generated on Sun Mar 23 2014 23:50:15 for FFmpeg by
1.8.2